Index: Source/bindings/v8/SerializedScriptValue.cpp |
diff --git a/Source/bindings/v8/SerializedScriptValue.cpp b/Source/bindings/v8/SerializedScriptValue.cpp |
index 2eb81e3f3fa3f21f650dcea336bd79775bdb3aac..1a14881f71fcfea0e32f0045f23a23679038f60b 100644 |
--- a/Source/bindings/v8/SerializedScriptValue.cpp |
+++ b/Source/bindings/v8/SerializedScriptValue.cpp |
@@ -42,6 +42,7 @@ |
#include "bindings/v8/ScriptState.h" |
#include "bindings/v8/V8Binding.h" |
#include "bindings/v8/V8Utilities.h" |
+#include "bindings/v8/WorkerScriptController.h" |
#include "bindings/v8/custom/V8ArrayBufferCustom.h" |
#include "bindings/v8/custom/V8ArrayBufferViewCustom.h" |
#include "bindings/v8/custom/V8DataViewCustom.h" |
@@ -2322,12 +2323,21 @@ SerializedScriptValue::SerializedScriptValue() |
{ |
} |
-inline void neuterBinding(ArrayBuffer* object) |
+static void neuterArrayBufferInAllWorlds(ArrayBuffer* object) |
{ |
v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
- Vector<DOMDataStore*>& allStores = V8PerIsolateData::from(isolate)->allStores(); |
- for (size_t i = 0; i < allStores.size(); i++) { |
- v8::Handle<v8::Object> wrapper = allStores[i]->get<V8ArrayBuffer>(object, isolate); |
+ if (isMainThread()) { |
+ Vector<RefPtr<DOMWrapperWorld> > worlds; |
+ DOMWrapperWorld::allWorldsInMainThread(worlds); |
+ for (size_t i = 0; i < worlds.size(); i++) { |
+ v8::Handle<v8::Object> wrapper = worlds[i]->domDataStore().get<V8ArrayBuffer>(object, isolate); |
+ if (!wrapper.IsEmpty()) { |
+ ASSERT(wrapper->IsArrayBuffer()); |
+ v8::Handle<v8::ArrayBuffer>::Cast(wrapper)->Neuter(); |
+ } |
+ } |
+ } else { |
+ v8::Handle<v8::Object> wrapper = WorkerScriptController::controllerForContext(isolate)->world()->domDataStore().get<V8ArrayBuffer>(object, isolate); |
if (!wrapper.IsEmpty()) { |
ASSERT(wrapper->IsArrayBuffer()); |
v8::Handle<v8::ArrayBuffer>::Cast(wrapper)->Neuter(); |
@@ -2360,7 +2370,7 @@ PassOwnPtr<SerializedScriptValue::ArrayBufferContentsArray> SerializedScriptValu |
return nullptr; |
} |
- neuterBinding(arrayBuffers[i].get()); |
+ neuterArrayBufferInAllWorlds(arrayBuffers[i].get()); |
} |
return contents.release(); |
} |