diff options
Diffstat (limited to 'Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp')
-rw-r--r-- | Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp index 1d81b8c72..9e11a7628 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp @@ -30,6 +30,8 @@ #include <WebCore/ScriptController.h> #include <wtf/HashMap.h> #include <wtf/NeverDestroyed.h> +#include <wtf/text/StringConcatenate.h> +#include <wtf/text/WTFString.h> using namespace WebCore; @@ -43,9 +45,20 @@ static WorldMap& allWorlds() return map; } -PassRefPtr<InjectedBundleScriptWorld> InjectedBundleScriptWorld::create() +static String uniqueWorldName() { - return adoptRef(new InjectedBundleScriptWorld(ScriptController::createWorld())); + static uint64_t uniqueWorldNameNumber = 0; + return makeString(ASCIILiteral("UniqueWorld_"), String::number(uniqueWorldNameNumber++)); +} + +Ref<InjectedBundleScriptWorld> InjectedBundleScriptWorld::create() +{ + return adoptRef(*new InjectedBundleScriptWorld(ScriptController::createWorld(), uniqueWorldName())); +} + +Ref<InjectedBundleScriptWorld> InjectedBundleScriptWorld::create(const String& name) +{ + return adoptRef(*new InjectedBundleScriptWorld(ScriptController::createWorld(), name)); } PassRefPtr<InjectedBundleScriptWorld> InjectedBundleScriptWorld::getOrCreate(DOMWrapperWorld& world) @@ -56,31 +69,37 @@ PassRefPtr<InjectedBundleScriptWorld> InjectedBundleScriptWorld::getOrCreate(DOM if (InjectedBundleScriptWorld* existingWorld = allWorlds().get(&world)) return existingWorld; - return adoptRef(new InjectedBundleScriptWorld(&world)); + return adoptRef(new InjectedBundleScriptWorld(world, uniqueWorldName())); } InjectedBundleScriptWorld* InjectedBundleScriptWorld::normalWorld() { - static InjectedBundleScriptWorld* world = adoptRef(new InjectedBundleScriptWorld(&mainThreadNormalWorld())).leakRef(); + static InjectedBundleScriptWorld* world = adoptRef(new InjectedBundleScriptWorld(mainThreadNormalWorld(), String())).leakRef(); return world; } -InjectedBundleScriptWorld::InjectedBundleScriptWorld(PassRefPtr<DOMWrapperWorld> world) +InjectedBundleScriptWorld::InjectedBundleScriptWorld(DOMWrapperWorld& world, const String& name) : m_world(world) + , m_name(name) { - ASSERT(!allWorlds().contains(m_world.get())); - allWorlds().add(m_world.get(), this); + ASSERT(!allWorlds().contains(m_world.ptr())); + allWorlds().add(m_world.ptr(), this); } InjectedBundleScriptWorld::~InjectedBundleScriptWorld() { - ASSERT(allWorlds().contains(m_world.get())); - allWorlds().remove(m_world.get()); + ASSERT(allWorlds().contains(m_world.ptr())); + allWorlds().remove(m_world.ptr()); } -DOMWrapperWorld& InjectedBundleScriptWorld::coreWorld() const +const DOMWrapperWorld& InjectedBundleScriptWorld::coreWorld() const { - return *m_world.get(); + return m_world; +} + +DOMWrapperWorld& InjectedBundleScriptWorld::coreWorld() +{ + return m_world; } void InjectedBundleScriptWorld::clearWrappers() @@ -88,4 +107,9 @@ void InjectedBundleScriptWorld::clearWrappers() m_world->clearWrappers(); } +void InjectedBundleScriptWorld::makeAllShadowRootsOpen() +{ + m_world->setShadowRootIsAlwaysOpen(); +} + } // namespace WebKit |