// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SERIALIZATION_SERIALIZATION_TAG_H_ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SERIALIZATION_SERIALIZATION_TAG_H_ #include <cstdint> namespace blink { // Serialization format is a sequence of tags followed by zero or more data // arguments. Tags always take exactly one byte. A serialized stream first // begins with a complete VersionTag. If the stream does not begin with a // VersionTag, we assume that the stream is in format 0. // Tags which are not interpreted by Blink (but instead by V8) are omitted here. // This format is private to the implementation of SerializedScriptValue. Do not // rely on it externally. It is safe to persist a SerializedScriptValue as a // binary blob, but this code should always be used to interpret it. // WebCoreStrings are read as (length:uint32_t, string:UTF8[length]). // RawStrings are read as (length:uint32_t, string:UTF8[length]). // RawUCharStrings are read as // (length:uint32_t, string:UChar[length/sizeof(UChar)]). // RawFiles are read as // (path:WebCoreString, url:WebCoreStrng, type:WebCoreString). // There is a reference table that maps object references (uint32_t) to // v8::Values. // Tokens marked with (ref) are inserted into the reference table and given the // next object reference ID after decoding. // All tags except InvalidTag, PaddingTag, ReferenceCountTag, VersionTag, // GenerateFreshObjectTag and GenerateFreshArrayTag push their results to the // deserialization stack. // There is also an 'open' stack that is used to resolve circular references. // Objects or arrays may contain self-references. Before we begin to deserialize // the contents of these values, they are first given object reference IDs (by // GenerateFreshObjectTag/GenerateFreshArrayTag); these reference IDs are then // used with ObjectReferenceTag to tie the recursive knot. enum SerializationTag : uint8_t { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SERIALIZATION_SERIALIZATION_TAG_H_