summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp')
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp46
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