| Index: third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
|
| index d06085684d15a634b1b040957fcdd8f16efa905e..6ad7cfd6acdafc7ade78f3653f5b4cac284e4159 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
|
| @@ -272,19 +272,6 @@ void SerializedScriptValue::ToWireBytes(Vector<char>& result) const {
|
| }
|
| }
|
|
|
| -static void AccumulateArrayBuffersForAllWorlds(
|
| - v8::Isolate* isolate,
|
| - DOMArrayBuffer* object,
|
| - Vector<v8::Local<v8::ArrayBuffer>, 4>& buffers) {
|
| - Vector<RefPtr<DOMWrapperWorld>> worlds;
|
| - DOMWrapperWorld::AllWorldsInCurrentThread(worlds);
|
| - for (const auto& world : worlds) {
|
| - v8::Local<v8::Object> wrapper = world->DomDataStore().Get(object, isolate);
|
| - if (!wrapper.IsEmpty())
|
| - buffers.push_back(v8::Local<v8::ArrayBuffer>::Cast(wrapper));
|
| - }
|
| -}
|
| -
|
| std::unique_ptr<SerializedScriptValue::ImageBitmapContentsArray>
|
| SerializedScriptValue::TransferImageBitmapContents(
|
| v8::Isolate* isolate,
|
| @@ -480,14 +467,16 @@ SerializedScriptValue::TransferArrayBufferContents(
|
|
|
| HeapHashSet<Member<DOMArrayBufferBase>> visited;
|
| for (auto it = array_buffers.begin(); it != array_buffers.end(); ++it) {
|
| - DOMArrayBufferBase* array_buffer = *it;
|
| - if (visited.Contains(array_buffer))
|
| + DOMArrayBufferBase* array_buffer_base = *it;
|
| + if (visited.Contains(array_buffer_base))
|
| continue;
|
| - visited.insert(array_buffer);
|
| + visited.insert(array_buffer_base);
|
|
|
| size_t index = std::distance(array_buffers.begin(), it);
|
| - if (array_buffer->IsShared()) {
|
| - if (!array_buffer->ShareContentsWith(contents->at(index))) {
|
| + if (array_buffer_base->IsShared()) {
|
| + DOMSharedArrayBuffer* shared_array_buffer =
|
| + static_cast<DOMSharedArrayBuffer*>(array_buffer_base);
|
| + if (!shared_array_buffer->ShareContentsWith(contents->at(index))) {
|
| exception_state.ThrowDOMException(kDataCloneError,
|
| "SharedArrayBuffer at index " +
|
| String::Number(index) +
|
| @@ -495,31 +484,15 @@ SerializedScriptValue::TransferArrayBufferContents(
|
| return nullptr;
|
| }
|
| } else {
|
| - Vector<v8::Local<v8::ArrayBuffer>, 4> buffer_handles;
|
| - v8::HandleScope handle_scope(isolate);
|
| - AccumulateArrayBuffersForAllWorlds(
|
| - isolate, static_cast<DOMArrayBuffer*>(it->Get()), buffer_handles);
|
| - bool is_neuterable = true;
|
| - for (const auto& buffer_handle : buffer_handles)
|
| - is_neuterable &= buffer_handle->IsNeuterable();
|
| -
|
| - DOMArrayBufferBase* to_transfer = array_buffer;
|
| - if (!is_neuterable) {
|
| - to_transfer =
|
| - DOMArrayBuffer::Create(array_buffer->Buffer()->Data(),
|
| - array_buffer->Buffer()->ByteLength());
|
| - }
|
| - if (!to_transfer->Transfer(contents->at(index))) {
|
| + DOMArrayBuffer* array_buffer =
|
| + static_cast<DOMArrayBuffer*>(array_buffer_base);
|
| +
|
| + if (!array_buffer->Transfer(isolate, contents->at(index))) {
|
| exception_state.ThrowDOMException(
|
| kDataCloneError, "ArrayBuffer at index " + String::Number(index) +
|
| " could not be transferred.");
|
| return nullptr;
|
| }
|
| -
|
| - if (is_neuterable) {
|
| - for (const auto& buffer_handle : buffer_handles)
|
| - buffer_handle->Neuter();
|
| - }
|
| }
|
| }
|
| return contents;
|
|
|