| Index: third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
|
| index 39f9f840c4003881ae164de525dd6435c88cdf4f..c275d460bcd2ebb800dcd3c08d518d82d5d1f48f 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
|
| @@ -83,17 +83,22 @@ class DOMObjectHolder : public DOMObjectHolderBase {
|
|
|
| unsigned DOMWrapperWorld::s_numberOfNonMainWorldsInMainThread = 0;
|
|
|
| -using WorldMap = HashMap<int, DOMWrapperWorld*>;
|
| +using WorldMap = HashMap<int,
|
| + DOMWrapperWorld*,
|
| + WTF::IntHash<int>,
|
| + WTF::UnsignedWithZeroKeyHashTraits<int>>;
|
| static WorldMap& worldMap() {
|
| DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<WorldMap>, map,
|
| new ThreadSpecific<WorldMap>);
|
| return *map;
|
| }
|
|
|
| +#if DCHECK_IS_ON()
|
| static bool isIsolatedWorldId(int worldId) {
|
| return DOMWrapperWorld::MainWorldId < worldId &&
|
| worldId < DOMWrapperWorld::IsolatedWorldIdLimit;
|
| }
|
| +#endif
|
|
|
| PassRefPtr<DOMWrapperWorld> DOMWrapperWorld::create(v8::Isolate* isolate,
|
| WorldType worldType) {
|
| @@ -109,23 +114,11 @@ DOMWrapperWorld::DOMWrapperWorld(v8::Isolate* isolate,
|
| m_worldId(worldId),
|
| m_domDataStore(
|
| WTF::wrapUnique(new DOMDataStore(isolate, isMainWorld()))) {
|
| - switch (m_worldType) {
|
| - case WorldType::Main:
|
| - // MainWorld is managed separately from worldMap(). See mainWorld().
|
| - break;
|
| - case WorldType::Isolated:
|
| - case WorldType::GarbageCollector:
|
| - case WorldType::RegExp:
|
| - case WorldType::Testing:
|
| - case WorldType::Worker: {
|
| - WorldMap& map = worldMap();
|
| - DCHECK(!map.contains(m_worldId));
|
| - map.insert(m_worldId, this);
|
| - if (isMainThread())
|
| - s_numberOfNonMainWorldsInMainThread++;
|
| - break;
|
| - }
|
| - }
|
| + WorldMap& map = worldMap();
|
| + DCHECK(!map.contains(m_worldId));
|
| + map.insert(m_worldId, this);
|
| + if (isMainThread() && m_worldType != WorldType::Main)
|
| + s_numberOfNonMainWorldsInMainThread++;
|
| }
|
|
|
| DOMWrapperWorld& DOMWrapperWorld::mainWorld() {
|
| @@ -136,27 +129,8 @@ DOMWrapperWorld& DOMWrapperWorld::mainWorld() {
|
| return *cachedMainWorld;
|
| }
|
|
|
| -PassRefPtr<DOMWrapperWorld> DOMWrapperWorld::fromWorldId(v8::Isolate* isolate,
|
| - int worldId) {
|
| - // TODO(nhiroki): The current impl creates a new main/isolated world for
|
| - // |worldId| if it doesn't exist. We should stop it and instead return nullptr
|
| - // in the case.
|
| - if (worldId == WorldId::MainWorldId)
|
| - return &mainWorld();
|
| - if (isIsolatedWorldId(worldId))
|
| - return ensureIsolatedWorld(isolate, worldId);
|
| -
|
| - WorldMap& map = worldMap();
|
| - auto it = map.find(worldId);
|
| - if (it != map.end())
|
| - return it->value;
|
| - return nullptr;
|
| -}
|
| -
|
| void DOMWrapperWorld::allWorldsInCurrentThread(
|
| Vector<RefPtr<DOMWrapperWorld>>& worlds) {
|
| - if (isMainThread())
|
| - worlds.push_back(&mainWorld());
|
| for (DOMWrapperWorld* world : worldMap().values())
|
| worlds.push_back(world);
|
| }
|
| @@ -167,6 +141,8 @@ void DOMWrapperWorld::markWrappersInAllWorlds(
|
| // Marking for worlds other than the main world.
|
| DCHECK(ThreadState::current()->isolate());
|
| for (DOMWrapperWorld* world : worldMap().values()) {
|
| + if (world->isMainWorld())
|
| + continue;
|
| DOMDataStore& dataStore = world->domDataStore();
|
| if (dataStore.containsWrapper(scriptWrappable))
|
| dataStore.markWrapper(scriptWrappable);
|
|
|