Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Unified Diff: Source/bindings/v8/DOMWrapperWorld.cpp

Issue 13954010: Eliminate "temporary" and "uninitialized" isolated worlds (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/bindings/v8/DOMWrapperWorld.cpp
diff --git a/Source/bindings/v8/DOMWrapperWorld.cpp b/Source/bindings/v8/DOMWrapperWorld.cpp
index 27dab1a7f3e8c3002d01092653cb87e5404132ad..b469b2f149a2ca40c27b6e16f353a539f076d47b 100644
--- a/Source/bindings/v8/DOMWrapperWorld.cpp
+++ b/Source/bindings/v8/DOMWrapperWorld.cpp
@@ -46,11 +46,6 @@ namespace WebCore {
int DOMWrapperWorld::isolatedWorldCount = 0;
static bool initializingWindow = false;
-PassRefPtr<DOMWrapperWorld> DOMWrapperWorld::createUninitializedWorld()
-{
- return adoptRef(new DOMWrapperWorld(uninitializedWorldId, uninitializedExtensionGroup));
-}
-
void DOMWrapperWorld::setInitializingWindow(bool initializing)
{
initializingWindow = initializing;
@@ -76,6 +71,13 @@ DOMWrapperWorld* mainThreadNormalWorld()
return cachedNormalWorld.get();
}
+// FIXME: Remove this function. There is currently an issue with the inspector related to the call to dispatchDidClearWindowObjectInWorld in ScriptController::windowShell.
+DOMWrapperWorld* existingWindowShellWorkaroundWorld()
+{
+ DEFINE_STATIC_LOCAL(RefPtr<DOMWrapperWorld>, world, (adoptRef(new DOMWrapperWorld(DOMWrapperWorld::mainWorldId - 1, DOMWrapperWorld::mainWorldExtensionGroup - 1))));
+ return world.get();
+}
+
bool DOMWrapperWorld::contextHasCorrectPrototype(v8::Handle<v8::Context> context)
{
ASSERT(isMainThread());
@@ -144,27 +146,21 @@ DOMWrapperWorld::~DOMWrapperWorld()
ASSERT(map.size() == isolatedWorldCount);
}
-static int temporaryWorldId = DOMWrapperWorld::uninitializedWorldId-1;
-
PassRefPtr<DOMWrapperWorld> DOMWrapperWorld::ensureIsolatedWorld(int worldId, int extensionGroup)
{
- ASSERT(worldId != mainWorldId);
- ASSERT(worldId >= uninitializedWorldId);
+ ASSERT(worldId > mainWorldId);
WorldMap& map = isolatedWorldMap();
- if (worldId == uninitializedWorldId)
- worldId = temporaryWorldId--;
- else {
- WorldMap::iterator i = map.find(worldId);
- if (i != map.end()) {
- ASSERT(i->value->worldId() == worldId);
- ASSERT(i->value->extensionGroup() == extensionGroup);
- return i->value;
- }
+ WorldMap::AddResult result = map.add(worldId, 0);
haraken 2013/04/12 02:14:19 Shouldn't this be map.find()? And then you need to
adamk 2013/04/12 15:44:04 Odd though this code looks, this is the idiomatic
+ RefPtr<DOMWrapperWorld> world = result.iterator->value;
+ if (world) {
+ ASSERT(world->worldId() == worldId);
+ ASSERT(world->extensionGroup() == extensionGroup);
+ return world.release();
}
- RefPtr<DOMWrapperWorld> world = adoptRef(new DOMWrapperWorld(worldId, extensionGroup));
- map.add(worldId, world.get());
+ world = adoptRef(new DOMWrapperWorld(worldId, extensionGroup));
+ result.iterator->value = world.get();
isolatedWorldCount++;
ASSERT(map.size() == isolatedWorldCount);

Powered by Google App Engine
This is Rietveld 408576698