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

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

Issue 2386173002: reflow comments in Source/bindings/core/v8 (Closed)
Patch Set: Created 4 years, 2 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
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 #ifndef ScriptValueSerializer_h 5 #ifndef ScriptValueSerializer_h
6 #define ScriptValueSerializer_h 6 #define ScriptValueSerializer_h
7 7
8 #include "base/gtest_prod_util.h" 8 #include "base/gtest_prod_util.h"
9 #include "bindings/core/v8/SerializationTag.h" 9 #include "bindings/core/v8/SerializationTag.h"
10 #include "bindings/core/v8/SerializedScriptValue.h" 10 #include "bindings/core/v8/SerializedScriptValue.h"
(...skipping 14 matching lines...) Expand all
25 class DOMSharedArrayBuffer; 25 class DOMSharedArrayBuffer;
26 class File; 26 class File;
27 class FileList; 27 class FileList;
28 class ImageData; 28 class ImageData;
29 class StaticBitmapImage; 29 class StaticBitmapImage;
30 30
31 typedef Vector<WTF::ArrayBufferContents, 1> ArrayBufferContentsArray; 31 typedef Vector<WTF::ArrayBufferContents, 1> ArrayBufferContentsArray;
32 typedef Vector<RefPtr<StaticBitmapImage>, 1> ImageBitmapContentsArray; 32 typedef Vector<RefPtr<StaticBitmapImage>, 1> ImageBitmapContentsArray;
33 33
34 // V8ObjectMap is a map from V8 objects to arbitrary values of type T. 34 // V8ObjectMap is a map from V8 objects to arbitrary values of type T.
35 // V8 objects (or handles to V8 objects) cannot be used as keys in ordinary wtf: :HashMaps; 35 // V8 objects (or handles to V8 objects) cannot be used as keys in ordinary
36 // this class should be used instead. GCObject must be a subtype of v8::Object. 36 // wtf::HashMaps; this class should be used instead. GCObject must be a subtype
37 // of v8::Object.
37 // Suggested usage: 38 // Suggested usage:
38 // V8ObjectMap<v8::Object, int> map; 39 // V8ObjectMap<v8::Object, int> map;
39 // v8::Local<v8::Object> obj = ...; 40 // v8::Local<v8::Object> obj = ...;
40 // map.set(obj, 42); 41 // map.set(obj, 42);
41 template <typename GCObject, typename T> 42 template <typename GCObject, typename T>
42 class V8ObjectMap { 43 class V8ObjectMap {
43 STACK_ALLOCATED(); 44 STACK_ALLOCATED();
44 45
45 public: 46 public:
46 bool contains(const v8::Local<GCObject>& handle) { 47 bool contains(const v8::Local<GCObject>& handle) {
47 return m_map.contains(*handle); 48 return m_map.contains(*handle);
48 } 49 }
49 50
50 bool tryGet(const v8::Local<GCObject>& handle, T* valueOut) { 51 bool tryGet(const v8::Local<GCObject>& handle, T* valueOut) {
51 typename HandleToT::iterator result = m_map.find(*handle); 52 typename HandleToT::iterator result = m_map.find(*handle);
52 if (result != m_map.end()) { 53 if (result != m_map.end()) {
53 *valueOut = result->value; 54 *valueOut = result->value;
54 return true; 55 return true;
55 } 56 }
56 return false; 57 return false;
57 } 58 }
58 59
59 void set(const v8::Local<GCObject>& handle, const T& value) { 60 void set(const v8::Local<GCObject>& handle, const T& value) {
60 m_map.set(*handle, value); 61 m_map.set(*handle, value);
61 } 62 }
62 63
63 private: 64 private:
64 // This implementation uses GetIdentityHash(), which sets a hidden property on the object containing 65 // This implementation uses GetIdentityHash(), which sets a hidden property on
65 // a random integer (or returns the one that had been previously set). This en sures that the table 66 // the object containing a random integer (or returns the one that had been
66 // never needs to be rebuilt across garbage collections at the expense of doin g additional allocation 67 // previously set). This ensures that the table never needs to be rebuilt
67 // and making more round trips into V8. Note that since GetIdentityHash() is d efined only on 68 // across garbage collections at the expense of doing additional allocation
68 // v8::Objects, this V8ObjectMap cannot be used to map v8::Strings to T (becau se the public V8 API 69 // and making more round trips into V8. Note that since GetIdentityHash() is
69 // considers a v8::String to be a v8::Primitive). 70 // defined only on v8::Objects, this V8ObjectMap cannot be used to map
71 // v8::Strings to T (because the public V8 API considers a v8::String to be a
72 // v8::Primitive).
70 73
71 // If V8 exposes a way to get at the address of the object held by a handle, t hen we can produce 74 // If V8 exposes a way to get at the address of the object held by a handle,
72 // an alternate implementation that does not need to do any V8-side allocation ; however, it will 75 // then we can produce an alternate implementation that does not need to do
73 // need to rehash after every garbage collection because a key object may have been moved. 76 // any V8-side allocation; however, it will need to rehash after every garbage
77 // collection because a key object may have been moved.
74 template <typename G> 78 template <typename G>
75 struct V8HandlePtrHash { 79 struct V8HandlePtrHash {
76 STATIC_ONLY(V8HandlePtrHash); 80 STATIC_ONLY(V8HandlePtrHash);
77 static v8::Local<G> unsafeHandleFromRawValue(const G* value) { 81 static v8::Local<G> unsafeHandleFromRawValue(const G* value) {
78 const v8::Local<G>* handle = 82 const v8::Local<G>* handle =
79 reinterpret_cast<const v8::Local<G>*>(&value); 83 reinterpret_cast<const v8::Local<G>*>(&value);
80 return *handle; 84 return *handle;
81 } 85 }
82 86
83 static unsigned hash(const G* key) { 87 static unsigned hash(const G* key) {
84 return static_cast<unsigned>( 88 return static_cast<unsigned>(
85 unsafeHandleFromRawValue(key)->GetIdentityHash()); 89 unsafeHandleFromRawValue(key)->GetIdentityHash());
86 } 90 }
87 static bool equal(const G* a, const G* b) { 91 static bool equal(const G* a, const G* b) {
88 return unsafeHandleFromRawValue(a) == unsafeHandleFromRawValue(b); 92 return unsafeHandleFromRawValue(a) == unsafeHandleFromRawValue(b);
89 } 93 }
90 // For HashArg. 94 // For HashArg.
91 static const bool safeToCompareToEmptyOrDeleted = false; 95 static const bool safeToCompareToEmptyOrDeleted = false;
92 }; 96 };
93 97
94 typedef WTF::HashMap<GCObject*, T, V8HandlePtrHash<GCObject>> HandleToT; 98 typedef WTF::HashMap<GCObject*, T, V8HandlePtrHash<GCObject>> HandleToT;
95 HandleToT m_map; 99 HandleToT m_map;
96 }; 100 };
97 101
98 // SerializedScriptValueWriter is responsible for serializing primitive types an d storing 102 // SerializedScriptValueWriter is responsible for serializing primitive types
99 // information used to reconstruct composite types. 103 // and storing information used to reconstruct composite types.
100 class CORE_EXPORT SerializedScriptValueWriter { 104 class CORE_EXPORT SerializedScriptValueWriter {
101 STACK_ALLOCATED(); 105 STACK_ALLOCATED();
102 WTF_MAKE_NONCOPYABLE(SerializedScriptValueWriter); 106 WTF_MAKE_NONCOPYABLE(SerializedScriptValueWriter);
103 107
104 public: 108 public:
105 typedef UChar BufferValueType; 109 typedef UChar BufferValueType;
106 110
107 SerializedScriptValueWriter() : m_position(0) {} 111 SerializedScriptValueWriter() : m_position(0) {}
108 112
109 protected: 113 protected:
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 v8::Local<v8::Array> m_entries; 374 v8::Local<v8::Array> m_entries;
371 uint32_t m_index; 375 uint32_t m_index;
372 uint32_t m_length; 376 uint32_t m_length;
373 }; 377 };
374 378
375 typedef CollectionState<v8::Map> MapState; 379 typedef CollectionState<v8::Map> MapState;
376 typedef CollectionState<v8::Set> SetState; 380 typedef CollectionState<v8::Set> SetState;
377 381
378 virtual StateBase* doSerializeObject(v8::Local<v8::Object>, StateBase* next); 382 virtual StateBase* doSerializeObject(v8::Local<v8::Object>, StateBase* next);
379 383
380 // Marks object as having been visited by the serializer and assigns it a uniq ue object reference ID. 384 // Marks object as having been visited by the serializer and assigns it a
381 // An object may only be greyed once. 385 // unique object reference ID. An object may only be greyed once.
382 void greyObject(const v8::Local<v8::Object>&); 386 void greyObject(const v8::Local<v8::Object>&);
383 387
384 StateBase* handleError(Status errorStatus, const String& message, StateBase*); 388 StateBase* handleError(Status errorStatus, const String& message, StateBase*);
385 389
386 SerializedScriptValueWriter& writer() { return m_writer; } 390 SerializedScriptValueWriter& writer() { return m_writer; }
387 391
388 private: 392 private:
389 StateBase* doSerialize(v8::Local<v8::Value>, StateBase* next); 393 StateBase* doSerialize(v8::Local<v8::Value>, StateBase* next);
390 StateBase* doSerializeArrayBuffer(v8::Local<v8::Value> arrayBuffer, 394 StateBase* doSerializeArrayBuffer(v8::Local<v8::Value> arrayBuffer,
391 StateBase* next); 395 StateBase* next);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 BlobDataHandleMap* m_blobDataHandles; 478 BlobDataHandleMap* m_blobDataHandles;
475 479
476 // Counts of object types encountered while serializing the object graph. 480 // Counts of object types encountered while serializing the object graph.
477 int m_primitiveCount = 0; 481 int m_primitiveCount = 0;
478 int m_jsObjectCount = 0; 482 int m_jsObjectCount = 0;
479 int m_domWrapperCount = 0; 483 int m_domWrapperCount = 0;
480 }; 484 };
481 485
482 class ScriptValueDeserializer; 486 class ScriptValueDeserializer;
483 487
484 // SerializedScriptValueReader is responsible for deserializing primitive types and 488 // SerializedScriptValueReader is responsible for deserializing primitive types
485 // restoring information about saved objects of composite types. 489 // and restoring information about saved objects of composite types.
486 class CORE_EXPORT SerializedScriptValueReader { 490 class CORE_EXPORT SerializedScriptValueReader {
487 STACK_ALLOCATED(); 491 STACK_ALLOCATED();
488 WTF_MAKE_NONCOPYABLE(SerializedScriptValueReader); 492 WTF_MAKE_NONCOPYABLE(SerializedScriptValueReader);
489 493
490 public: 494 public:
491 SerializedScriptValueReader(const uint8_t* buffer, 495 SerializedScriptValueReader(const uint8_t* buffer,
492 int length, 496 int length,
493 const WebBlobInfoArray* blobInfo, 497 const WebBlobInfoArray* blobInfo,
494 BlobDataHandleMap& blobDataHandles, 498 BlobDataHandleMap& blobDataHandles,
495 ScriptState* scriptState) 499 ScriptState* scriptState)
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 ArrayBufferContentsArray* m_arrayBufferContents; 676 ArrayBufferContentsArray* m_arrayBufferContents;
673 ImageBitmapContentsArray* m_imageBitmapContents; 677 ImageBitmapContentsArray* m_imageBitmapContents;
674 Vector<v8::Local<v8::Value>> m_arrayBuffers; 678 Vector<v8::Local<v8::Value>> m_arrayBuffers;
675 Vector<v8::Local<v8::Value>> m_imageBitmaps; 679 Vector<v8::Local<v8::Value>> m_imageBitmaps;
676 uint32_t m_version; 680 uint32_t m_version;
677 }; 681 };
678 682
679 } // namespace blink 683 } // namespace blink
680 684
681 #endif // ScriptValueSerializer_h 685 #endif // ScriptValueSerializer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698