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

Unified Diff: third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp

Issue 2845623002: Revert of SharedArrayBuffer throws serializing to indexeddb (Closed)
Patch Set: Created 3 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: third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
index dee9be55b981dc544ed993e2d6af79250b6d3903..bc0cf537a4dc95ecaf9d688e8606827c6bc92aa8 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
@@ -51,8 +51,7 @@
serializer_(script_state_->GetIsolate(), this),
transferables_(options.transferables),
blob_info_array_(options.blob_info),
- inline_wasm_(options.write_wasm_to_stream),
- for_storage_(options.for_storage) {}
+ inline_wasm_(options.write_wasm_to_stream) {}
RefPtr<SerializedScriptValue> V8ScriptValueSerializer::Serialize(
v8::Local<v8::Value> value,
@@ -118,37 +117,32 @@
void V8ScriptValueSerializer::FinalizeTransfer(
ExceptionState& exception_state) {
+ if (!transferables_ && shared_array_buffers_.IsEmpty())
+ return;
+
// TODO(jbroman): Strictly speaking, this is not correct; transfer should
// occur in the order of the transfer list.
// https://html.spec.whatwg.org/multipage/infrastructure.html#structuredclonewithtransfer
+ ArrayBufferArray array_buffers;
+ array_buffers.AppendVector(transferables_->array_buffers);
+ array_buffers.AppendVector(shared_array_buffers_);
+
v8::Isolate* isolate = script_state_->GetIsolate();
-
- // The order of ArrayBuffers and SharedArrayBuffers matters; we use the index
- // into this array for deserialization.
- ArrayBufferArray array_buffers;
- if (transferables_)
- array_buffers.AppendVector(transferables_->array_buffers);
- array_buffers.AppendVector(shared_array_buffers_);
-
- if (!array_buffers.IsEmpty()) {
- serialized_script_value_->TransferArrayBuffers(isolate, array_buffers,
- exception_state);
- if (exception_state.HadException())
- return;
- }
-
- if (transferables_) {
- serialized_script_value_->TransferImageBitmaps(
- isolate, transferables_->image_bitmaps, exception_state);
- if (exception_state.HadException())
- return;
-
- serialized_script_value_->TransferOffscreenCanvas(
- isolate, transferables_->offscreen_canvases, exception_state);
- if (exception_state.HadException())
- return;
- }
+ serialized_script_value_->TransferArrayBuffers(isolate, array_buffers,
+ exception_state);
+ if (exception_state.HadException())
+ return;
+
+ serialized_script_value_->TransferImageBitmaps(
+ isolate, transferables_->image_bitmaps, exception_state);
+ if (exception_state.HadException())
+ return;
+
+ serialized_script_value_->TransferOffscreenCanvas(
+ isolate, transferables_->offscreen_canvases, exception_state);
+ if (exception_state.HadException())
+ return;
}
void V8ScriptValueSerializer::WriteUTF8String(const String& string) {
@@ -405,18 +399,6 @@
v8::Maybe<uint32_t> V8ScriptValueSerializer::GetSharedArrayBufferId(
v8::Isolate* isolate,
v8::Local<v8::SharedArrayBuffer> v8_shared_array_buffer) {
- if (for_storage_) {
- DCHECK(exception_state_);
- DCHECK_EQ(isolate, script_state_->GetIsolate());
- ExceptionState exception_state(isolate, exception_state_->Context(),
- exception_state_->InterfaceName(),
- exception_state_->PropertyName());
- exception_state.ThrowDOMException(
- kDataCloneError,
- "A SharedArrayBuffer can not be serialized for storage.");
- return v8::Nothing<uint32_t>();
- }
-
DOMSharedArrayBuffer* shared_array_buffer =
V8SharedArrayBuffer::toImpl(v8_shared_array_buffer);

Powered by Google App Engine
This is Rietveld 408576698