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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp

Issue 2102413002: [Refactoring] Remove toV8Object functions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "bindings/core/v8/ScriptValueSerializer.h" 5 #include "bindings/core/v8/ScriptValueSerializer.h"
6 6
7 #include "bindings/core/v8/Transferables.h" 7 #include "bindings/core/v8/Transferables.h"
8 #include "bindings/core/v8/V8ArrayBuffer.h" 8 #include "bindings/core/v8/V8ArrayBuffer.h"
9 #include "bindings/core/v8/V8ArrayBufferView.h" 9 #include "bindings/core/v8/V8ArrayBufferView.h"
10 #include "bindings/core/v8/V8Blob.h" 10 #include "bindings/core/v8/V8Blob.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 bool shouldCheckForCycles(int depth) 72 bool shouldCheckForCycles(int depth)
73 { 73 {
74 ASSERT(depth >= 0); 74 ASSERT(depth >= 0);
75 // Since we are not required to spot the cycle as soon as it 75 // Since we are not required to spot the cycle as soon as it
76 // happens we can check for cycles only when the current depth 76 // happens we can check for cycles only when the current depth
77 // is a power of two. 77 // is a power of two.
78 return !(depth & (depth - 1)); 78 return !(depth & (depth - 1));
79 } 79 }
80 80
81 v8::Local<v8::Object> toV8Object(MessagePort* impl, v8::Local<v8::Object> creati onContext, v8::Isolate* isolate)
82 {
83 if (!impl)
84 return v8::Local<v8::Object>();
85 v8::Local<v8::Value> wrapper = toV8(impl, creationContext, isolate);
86 if (wrapper.IsEmpty())
87 return v8::Local<v8::Object>();
88 DCHECK(wrapper->IsObject());
89 return wrapper.As<v8::Object>();
90 }
91
92 v8::Local<v8::Object> toV8Object(ImageBitmap* impl, v8::Local<v8::Object> creati onContext, v8::Isolate* isolate)
93 {
94 if (!impl)
95 return v8::Local<v8::Object>();
96 v8::Local<v8::Value> wrapper = toV8(impl, creationContext, isolate);
97 if (wrapper.IsEmpty())
98 return v8::Local<v8::Object>();
99 return wrapper.As<v8::Object>();
100 }
101
102 v8::Local<v8::Object> toV8Object(OffscreenCanvas* impl, v8::Local<v8::Object> cr eationContext, v8::Isolate* isolate)
103 {
104 if (!impl)
105 return v8::Local<v8::Object>();
106 v8::Local<v8::Value> wrapper = toV8(impl, creationContext, isolate);
107 if (wrapper.IsEmpty())
108 return v8::Local<v8::Object>();
109 return wrapper.As<v8::Object>();
110 }
111
112 v8::Local<v8::Object> toV8Object(DOMArrayBufferBase* impl, v8::Local<v8::Object> creationContext, v8::Isolate* isolate)
113 {
114 if (!impl)
115 return v8::Local<v8::Object>();
116 v8::Local<v8::Value> wrapper = toV8(impl, creationContext, isolate);
117 if (wrapper.IsEmpty())
118 return v8::Local<v8::Object>();
119 return wrapper.As<v8::Object>();
120 }
121
122 // Returns true if the provided object is to be considered a 'host object', as u sed in the 81 // Returns true if the provided object is to be considered a 'host object', as u sed in the
123 // HTML5 structured clone algorithm. 82 // HTML5 structured clone algorithm.
124 bool isHostObject(v8::Local<v8::Object> object) 83 bool isHostObject(v8::Local<v8::Object> object)
125 { 84 {
126 // If the object has any internal fields, then we won't be able to serialize or deserialize 85 // If the object has any internal fields, then we won't be able to serialize or deserialize
127 // them; conveniently, this is also a quick way to detect DOM wrapper object s, because 86 // them; conveniently, this is also a quick way to detect DOM wrapper object s, because
128 // the mechanism for these relies on data stored in these fields. We should 87 // the mechanism for these relies on data stored in these fields. We should
129 // catch external array data as a special case. 88 // catch external array data as a special case.
130 return object->InternalFieldCount(); 89 return object->InternalFieldCount();
131 } 90 }
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 681
723 void ScriptValueSerializer::copyTransferables(const Transferables& transferables ) 682 void ScriptValueSerializer::copyTransferables(const Transferables& transferables )
724 { 683 {
725 v8::Local<v8::Object> creationContext = m_scriptState->context()->Global(); 684 v8::Local<v8::Object> creationContext = m_scriptState->context()->Global();
726 685
727 // Also kept in separate ObjectPools, iterate and copy the contents 686 // Also kept in separate ObjectPools, iterate and copy the contents
728 // of each kind of transferable vector. 687 // of each kind of transferable vector.
729 688
730 const auto& messagePorts = transferables.messagePorts; 689 const auto& messagePorts = transferables.messagePorts;
731 for (size_t i = 0; i < messagePorts.size(); ++i) { 690 for (size_t i = 0; i < messagePorts.size(); ++i) {
732 v8::Local<v8::Object> v8MessagePort = toV8Object(messagePorts[i].get(), creationContext, isolate()); 691 v8::Local<v8::Object> v8MessagePort = toV8(messagePorts[i].get(), creati onContext, isolate()).As<v8::Object>();
733 m_transferredMessagePorts.set(v8MessagePort, i); 692 m_transferredMessagePorts.set(v8MessagePort, i);
734 } 693 }
735 694
736 const auto& arrayBuffers = transferables.arrayBuffers; 695 const auto& arrayBuffers = transferables.arrayBuffers;
737 for (size_t i = 0; i < arrayBuffers.size(); ++i) { 696 for (size_t i = 0; i < arrayBuffers.size(); ++i) {
738 v8::Local<v8::Object> v8ArrayBuffer = toV8Object(arrayBuffers[i].get(), creationContext, isolate()); 697 v8::Local<v8::Object> v8ArrayBuffer = toV8(arrayBuffers[i].get(), creati onContext, isolate()).As<v8::Object>();
739 // Coalesce multiple occurences of the same buffer to the first index. 698 // Coalesce multiple occurences of the same buffer to the first index.
740 if (!m_transferredArrayBuffers.contains(v8ArrayBuffer)) 699 if (!m_transferredArrayBuffers.contains(v8ArrayBuffer))
741 m_transferredArrayBuffers.set(v8ArrayBuffer, i); 700 m_transferredArrayBuffers.set(v8ArrayBuffer, i);
742 } 701 }
743 702
744 const auto& imageBitmaps = transferables.imageBitmaps; 703 const auto& imageBitmaps = transferables.imageBitmaps;
745 for (size_t i = 0; i < imageBitmaps.size(); ++i) { 704 for (size_t i = 0; i < imageBitmaps.size(); ++i) {
746 v8::Local<v8::Object> v8ImageBitmap = toV8Object(imageBitmaps[i].get(), creationContext, isolate()); 705 v8::Local<v8::Object> v8ImageBitmap = toV8(imageBitmaps[i].get(), creati onContext, isolate()).As<v8::Object>();
747 if (!m_transferredImageBitmaps.contains(v8ImageBitmap)) 706 if (!m_transferredImageBitmaps.contains(v8ImageBitmap))
748 m_transferredImageBitmaps.set(v8ImageBitmap, i); 707 m_transferredImageBitmaps.set(v8ImageBitmap, i);
749 } 708 }
750 709
751 const auto& offscreenCanvases = transferables.offscreenCanvases; 710 const auto& offscreenCanvases = transferables.offscreenCanvases;
752 for (size_t i = 0; i < offscreenCanvases.size(); ++i) { 711 for (size_t i = 0; i < offscreenCanvases.size(); ++i) {
753 v8::Local<v8::Object> v8OffscreenCanvas = toV8Object(offscreenCanvases[i ].get(), creationContext, isolate()); 712 v8::Local<v8::Object> v8OffscreenCanvas = toV8(offscreenCanvases[i].get( ), creationContext, isolate()).As<v8::Object>();
754 if (!m_transferredOffscreenCanvas.contains(v8OffscreenCanvas)) 713 if (!m_transferredOffscreenCanvas.contains(v8OffscreenCanvas))
755 m_transferredOffscreenCanvas.set(v8OffscreenCanvas, i); 714 m_transferredOffscreenCanvas.set(v8OffscreenCanvas, i);
756 } 715 }
757 } 716 }
758 717
759 PassRefPtr<SerializedScriptValue> ScriptValueSerializer::serialize(v8::Local<v8: :Value> value, Transferables* transferables, ExceptionState& exceptionState) 718 PassRefPtr<SerializedScriptValue> ScriptValueSerializer::serialize(v8::Local<v8: :Value> value, Transferables* transferables, ExceptionState& exceptionState)
760 { 719 {
761 DCHECK(!m_blobDataHandles); 720 DCHECK(!m_blobDataHandles);
762 721
763 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat e(); 722 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat e();
(...skipping 1682 matching lines...) Expand 10 before | Expand all | Expand 10 after
2446 return false; 2405 return false;
2447 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe renceStack.size() - 1]; 2406 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe renceStack.size() - 1];
2448 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - 1); 2407 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - 1);
2449 if (objectReference >= m_objectPool.size()) 2408 if (objectReference >= m_objectPool.size())
2450 return false; 2409 return false;
2451 *object = m_objectPool[objectReference]; 2410 *object = m_objectPool[objectReference];
2452 return true; 2411 return true;
2453 } 2412 }
2454 2413
2455 } // namespace blink 2414 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698