OLD | NEW |
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/V8ArrayBuffer.h" | 7 #include "bindings/core/v8/V8ArrayBuffer.h" |
8 #include "bindings/core/v8/V8ArrayBufferView.h" | 8 #include "bindings/core/v8/V8ArrayBufferView.h" |
9 #include "bindings/core/v8/V8Blob.h" | 9 #include "bindings/core/v8/V8Blob.h" |
10 #include "bindings/core/v8/V8CompositorProxy.h" | 10 #include "bindings/core/v8/V8CompositorProxy.h" |
(...skipping 1774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1785 } | 1785 } |
1786 | 1786 |
1787 bool SerializedScriptValueReader::readRegExp(v8::Local<v8::Value>* value) | 1787 bool SerializedScriptValueReader::readRegExp(v8::Local<v8::Value>* value) |
1788 { | 1788 { |
1789 v8::Local<v8::Value> pattern; | 1789 v8::Local<v8::Value> pattern; |
1790 if (!readString(&pattern)) | 1790 if (!readString(&pattern)) |
1791 return false; | 1791 return false; |
1792 uint32_t flags; | 1792 uint32_t flags; |
1793 if (!doReadUint32(&flags)) | 1793 if (!doReadUint32(&flags)) |
1794 return false; | 1794 return false; |
1795 if (!v8::RegExp::New(scriptState()->context(), pattern.As<v8::String>(), sta
tic_cast<v8::RegExp::Flags>(flags)).ToLocal(value)) | 1795 if (!v8::RegExp::New(getScriptState()->context(), pattern.As<v8::String>(),
static_cast<v8::RegExp::Flags>(flags)).ToLocal(value)) |
1796 return false; | 1796 return false; |
1797 return true; | 1797 return true; |
1798 } | 1798 } |
1799 | 1799 |
1800 bool SerializedScriptValueReader::readBlob(v8::Local<v8::Value>* value, bool isI
ndexed) | 1800 bool SerializedScriptValueReader::readBlob(v8::Local<v8::Value>* value, bool isI
ndexed) |
1801 { | 1801 { |
1802 if (m_version < 3) | 1802 if (m_version < 3) |
1803 return false; | 1803 return false; |
1804 Blob* blob = nullptr; | 1804 Blob* blob = nullptr; |
1805 if (isIndexed) { | 1805 if (isIndexed) { |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1959 BlobDataHandleMap::const_iterator it = m_blobDataHandles.find(uuid); | 1959 BlobDataHandleMap::const_iterator it = m_blobDataHandles.find(uuid); |
1960 if (it != m_blobDataHandles.end()) { | 1960 if (it != m_blobDataHandles.end()) { |
1961 // make assertions about type and size? | 1961 // make assertions about type and size? |
1962 return it->value; | 1962 return it->value; |
1963 } | 1963 } |
1964 return BlobDataHandle::create(uuid, type, size); | 1964 return BlobDataHandle::create(uuid, type, size); |
1965 } | 1965 } |
1966 | 1966 |
1967 v8::Local<v8::Value> ScriptValueDeserializer::deserialize() | 1967 v8::Local<v8::Value> ScriptValueDeserializer::deserialize() |
1968 { | 1968 { |
1969 v8::Isolate* isolate = m_reader.scriptState()->isolate(); | 1969 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
1970 if (!m_reader.readVersion(m_version) || m_version > SerializedScriptValue::w
ireFormatVersion) | 1970 if (!m_reader.readVersion(m_version) || m_version > SerializedScriptValue::w
ireFormatVersion) |
1971 return v8::Null(isolate); | 1971 return v8::Null(isolate); |
1972 m_reader.setVersion(m_version); | 1972 m_reader.setVersion(m_version); |
1973 v8::EscapableHandleScope scope(isolate); | 1973 v8::EscapableHandleScope scope(isolate); |
1974 while (!m_reader.isEof()) { | 1974 while (!m_reader.isEof()) { |
1975 if (!doDeserialize()) | 1975 if (!doDeserialize()) |
1976 return v8::Null(isolate); | 1976 return v8::Null(isolate); |
1977 } | 1977 } |
1978 if (stackDepth() != 1 || m_openCompositeReferenceStack.size()) | 1978 if (stackDepth() != 1 || m_openCompositeReferenceStack.size()) |
1979 return v8::Null(isolate); | 1979 return v8::Null(isolate); |
1980 v8::Local<v8::Value> result = scope.Escape(element(0)); | 1980 v8::Local<v8::Value> result = scope.Escape(element(0)); |
1981 return result; | 1981 return result; |
1982 } | 1982 } |
1983 | 1983 |
1984 bool ScriptValueDeserializer::newSparseArray(uint32_t) | 1984 bool ScriptValueDeserializer::newSparseArray(uint32_t) |
1985 { | 1985 { |
1986 v8::Local<v8::Array> array = v8::Array::New(m_reader.scriptState()->isolate(
), 0); | 1986 v8::Local<v8::Array> array = v8::Array::New(m_reader.getScriptState()->isola
te(), 0); |
1987 openComposite(array); | 1987 openComposite(array); |
1988 return true; | 1988 return true; |
1989 } | 1989 } |
1990 | 1990 |
1991 bool ScriptValueDeserializer::newDenseArray(uint32_t length) | 1991 bool ScriptValueDeserializer::newDenseArray(uint32_t length) |
1992 { | 1992 { |
1993 v8::Local<v8::Array> array = v8::Array::New(m_reader.scriptState()->isolate(
), length); | 1993 v8::Local<v8::Array> array = v8::Array::New(m_reader.getScriptState()->isola
te(), length); |
1994 openComposite(array); | 1994 openComposite(array); |
1995 return true; | 1995 return true; |
1996 } | 1996 } |
1997 | 1997 |
1998 bool ScriptValueDeserializer::newMap() | 1998 bool ScriptValueDeserializer::newMap() |
1999 { | 1999 { |
2000 v8::Local<v8::Map> map = v8::Map::New(m_reader.scriptState()->isolate()); | 2000 v8::Local<v8::Map> map = v8::Map::New(m_reader.getScriptState()->isolate()); |
2001 openComposite(map); | 2001 openComposite(map); |
2002 return true; | 2002 return true; |
2003 } | 2003 } |
2004 | 2004 |
2005 bool ScriptValueDeserializer::newSet() | 2005 bool ScriptValueDeserializer::newSet() |
2006 { | 2006 { |
2007 v8::Local<v8::Set> set = v8::Set::New(m_reader.scriptState()->isolate()); | 2007 v8::Local<v8::Set> set = v8::Set::New(m_reader.getScriptState()->isolate()); |
2008 openComposite(set); | 2008 openComposite(set); |
2009 return true; | 2009 return true; |
2010 } | 2010 } |
2011 | 2011 |
2012 bool ScriptValueDeserializer::consumeTopOfStack(v8::Local<v8::Value>* object) | 2012 bool ScriptValueDeserializer::consumeTopOfStack(v8::Local<v8::Value>* object) |
2013 { | 2013 { |
2014 if (stackDepth() < 1) | 2014 if (stackDepth() < 1) |
2015 return false; | 2015 return false; |
2016 *object = element(stackDepth() - 1); | 2016 *object = element(stackDepth() - 1); |
2017 pop(1); | 2017 pop(1); |
2018 return true; | 2018 return true; |
2019 } | 2019 } |
2020 | 2020 |
2021 bool ScriptValueDeserializer::newObject() | 2021 bool ScriptValueDeserializer::newObject() |
2022 { | 2022 { |
2023 v8::Local<v8::Object> object = v8::Object::New(m_reader.scriptState()->isola
te()); | 2023 v8::Local<v8::Object> object = v8::Object::New(m_reader.getScriptState()->is
olate()); |
2024 if (object.IsEmpty()) | 2024 if (object.IsEmpty()) |
2025 return false; | 2025 return false; |
2026 openComposite(object); | 2026 openComposite(object); |
2027 return true; | 2027 return true; |
2028 } | 2028 } |
2029 | 2029 |
2030 bool ScriptValueDeserializer::completeObject(uint32_t numProperties, v8::Local<v
8::Value>* value) | 2030 bool ScriptValueDeserializer::completeObject(uint32_t numProperties, v8::Local<v
8::Value>* value) |
2031 { | 2031 { |
2032 v8::Local<v8::Object> object; | 2032 v8::Local<v8::Object> object; |
2033 if (m_version > 0) { | 2033 if (m_version > 0) { |
2034 v8::Local<v8::Value> composite; | 2034 v8::Local<v8::Value> composite; |
2035 if (!closeComposite(&composite)) | 2035 if (!closeComposite(&composite)) |
2036 return false; | 2036 return false; |
2037 object = composite.As<v8::Object>(); | 2037 object = composite.As<v8::Object>(); |
2038 } else { | 2038 } else { |
2039 object = v8::Object::New(m_reader.scriptState()->isolate()); | 2039 object = v8::Object::New(m_reader.getScriptState()->isolate()); |
2040 } | 2040 } |
2041 if (object.IsEmpty()) | 2041 if (object.IsEmpty()) |
2042 return false; | 2042 return false; |
2043 return initializeObject(object, numProperties, value); | 2043 return initializeObject(object, numProperties, value); |
2044 } | 2044 } |
2045 | 2045 |
2046 bool ScriptValueDeserializer::completeSparseArray(uint32_t numProperties, uint32
_t length, v8::Local<v8::Value>* value) | 2046 bool ScriptValueDeserializer::completeSparseArray(uint32_t numProperties, uint32
_t length, v8::Local<v8::Value>* value) |
2047 { | 2047 { |
2048 v8::Local<v8::Array> array; | 2048 v8::Local<v8::Array> array; |
2049 if (m_version > 0) { | 2049 if (m_version > 0) { |
2050 v8::Local<v8::Value> composite; | 2050 v8::Local<v8::Value> composite; |
2051 if (!closeComposite(&composite)) | 2051 if (!closeComposite(&composite)) |
2052 return false; | 2052 return false; |
2053 array = composite.As<v8::Array>(); | 2053 array = composite.As<v8::Array>(); |
2054 } else { | 2054 } else { |
2055 array = v8::Array::New(m_reader.scriptState()->isolate()); | 2055 array = v8::Array::New(m_reader.getScriptState()->isolate()); |
2056 } | 2056 } |
2057 if (array.IsEmpty()) | 2057 if (array.IsEmpty()) |
2058 return false; | 2058 return false; |
2059 return initializeObject(array, numProperties, value); | 2059 return initializeObject(array, numProperties, value); |
2060 } | 2060 } |
2061 | 2061 |
2062 bool ScriptValueDeserializer::completeDenseArray(uint32_t numProperties, uint32_
t length, v8::Local<v8::Value>* value) | 2062 bool ScriptValueDeserializer::completeDenseArray(uint32_t numProperties, uint32_
t length, v8::Local<v8::Value>* value) |
2063 { | 2063 { |
2064 v8::Local<v8::Array> array; | 2064 v8::Local<v8::Array> array; |
2065 if (m_version > 0) { | 2065 if (m_version > 0) { |
2066 v8::Local<v8::Value> composite; | 2066 v8::Local<v8::Value> composite; |
2067 if (!closeComposite(&composite)) | 2067 if (!closeComposite(&composite)) |
2068 return false; | 2068 return false; |
2069 array = composite.As<v8::Array>(); | 2069 array = composite.As<v8::Array>(); |
2070 } | 2070 } |
2071 if (array.IsEmpty()) | 2071 if (array.IsEmpty()) |
2072 return false; | 2072 return false; |
2073 if (!initializeObject(array, numProperties, value)) | 2073 if (!initializeObject(array, numProperties, value)) |
2074 return false; | 2074 return false; |
2075 if (length > stackDepth()) | 2075 if (length > stackDepth()) |
2076 return false; | 2076 return false; |
2077 v8::Local<v8::Context> context = m_reader.scriptState()->context(); | 2077 v8::Local<v8::Context> context = m_reader.getScriptState()->context(); |
2078 for (unsigned i = 0, stackPos = stackDepth() - length; i < length; i++, stac
kPos++) { | 2078 for (unsigned i = 0, stackPos = stackDepth() - length; i < length; i++, stac
kPos++) { |
2079 v8::Local<v8::Value> elem = element(stackPos); | 2079 v8::Local<v8::Value> elem = element(stackPos); |
2080 if (!elem->IsUndefined()) { | 2080 if (!elem->IsUndefined()) { |
2081 if (!v8CallBoolean(array->CreateDataProperty(context, i, elem))) | 2081 if (!v8CallBoolean(array->CreateDataProperty(context, i, elem))) |
2082 return false; | 2082 return false; |
2083 } | 2083 } |
2084 } | 2084 } |
2085 pop(length); | 2085 pop(length); |
2086 return true; | 2086 return true; |
2087 } | 2087 } |
2088 | 2088 |
2089 bool ScriptValueDeserializer::completeMap(uint32_t length, v8::Local<v8::Value>*
value) | 2089 bool ScriptValueDeserializer::completeMap(uint32_t length, v8::Local<v8::Value>*
value) |
2090 { | 2090 { |
2091 ASSERT(m_version > 0); | 2091 ASSERT(m_version > 0); |
2092 v8::Local<v8::Value> composite; | 2092 v8::Local<v8::Value> composite; |
2093 if (!closeComposite(&composite)) | 2093 if (!closeComposite(&composite)) |
2094 return false; | 2094 return false; |
2095 v8::Local<v8::Map> map = composite.As<v8::Map>(); | 2095 v8::Local<v8::Map> map = composite.As<v8::Map>(); |
2096 if (map.IsEmpty()) | 2096 if (map.IsEmpty()) |
2097 return false; | 2097 return false; |
2098 v8::Local<v8::Context> context = m_reader.scriptState()->context(); | 2098 v8::Local<v8::Context> context = m_reader.getScriptState()->context(); |
2099 ASSERT(length % 2 == 0); | 2099 ASSERT(length % 2 == 0); |
2100 for (unsigned i = stackDepth() - length; i + 1 < stackDepth(); i += 2) { | 2100 for (unsigned i = stackDepth() - length; i + 1 < stackDepth(); i += 2) { |
2101 v8::Local<v8::Value> key = element(i); | 2101 v8::Local<v8::Value> key = element(i); |
2102 v8::Local<v8::Value> val = element(i + 1); | 2102 v8::Local<v8::Value> val = element(i + 1); |
2103 if (map->Set(context, key, val).IsEmpty()) | 2103 if (map->Set(context, key, val).IsEmpty()) |
2104 return false; | 2104 return false; |
2105 } | 2105 } |
2106 pop(length); | 2106 pop(length); |
2107 *value = map; | 2107 *value = map; |
2108 return true; | 2108 return true; |
2109 } | 2109 } |
2110 | 2110 |
2111 bool ScriptValueDeserializer::completeSet(uint32_t length, v8::Local<v8::Value>*
value) | 2111 bool ScriptValueDeserializer::completeSet(uint32_t length, v8::Local<v8::Value>*
value) |
2112 { | 2112 { |
2113 ASSERT(m_version > 0); | 2113 ASSERT(m_version > 0); |
2114 v8::Local<v8::Value> composite; | 2114 v8::Local<v8::Value> composite; |
2115 if (!closeComposite(&composite)) | 2115 if (!closeComposite(&composite)) |
2116 return false; | 2116 return false; |
2117 v8::Local<v8::Set> set = composite.As<v8::Set>(); | 2117 v8::Local<v8::Set> set = composite.As<v8::Set>(); |
2118 if (set.IsEmpty()) | 2118 if (set.IsEmpty()) |
2119 return false; | 2119 return false; |
2120 v8::Local<v8::Context> context = m_reader.scriptState()->context(); | 2120 v8::Local<v8::Context> context = m_reader.getScriptState()->context(); |
2121 for (unsigned i = stackDepth() - length; i < stackDepth(); i++) { | 2121 for (unsigned i = stackDepth() - length; i < stackDepth(); i++) { |
2122 v8::Local<v8::Value> key = element(i); | 2122 v8::Local<v8::Value> key = element(i); |
2123 if (set->Add(context, key).IsEmpty()) | 2123 if (set->Add(context, key).IsEmpty()) |
2124 return false; | 2124 return false; |
2125 } | 2125 } |
2126 pop(length); | 2126 pop(length); |
2127 *value = set; | 2127 *value = set; |
2128 return true; | 2128 return true; |
2129 } | 2129 } |
2130 | 2130 |
2131 void ScriptValueDeserializer::pushObjectReference(const v8::Local<v8::Value>& ob
ject) | 2131 void ScriptValueDeserializer::pushObjectReference(const v8::Local<v8::Value>& ob
ject) |
2132 { | 2132 { |
2133 m_objectPool.append(object); | 2133 m_objectPool.append(object); |
2134 } | 2134 } |
2135 | 2135 |
2136 bool ScriptValueDeserializer::tryGetTransferredMessagePort(uint32_t index, v8::L
ocal<v8::Value>* object) | 2136 bool ScriptValueDeserializer::tryGetTransferredMessagePort(uint32_t index, v8::L
ocal<v8::Value>* object) |
2137 { | 2137 { |
2138 if (!m_transferredMessagePorts) | 2138 if (!m_transferredMessagePorts) |
2139 return false; | 2139 return false; |
2140 if (index >= m_transferredMessagePorts->size()) | 2140 if (index >= m_transferredMessagePorts->size()) |
2141 return false; | 2141 return false; |
2142 v8::Local<v8::Object> creationContext = m_reader.scriptState()->context()->G
lobal(); | 2142 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->context()
->Global(); |
2143 *object = toV8(m_transferredMessagePorts->at(index).get(), creationContext,
m_reader.scriptState()->isolate()); | 2143 *object = toV8(m_transferredMessagePorts->at(index).get(), creationContext,
m_reader.getScriptState()->isolate()); |
2144 return !object->IsEmpty(); | 2144 return !object->IsEmpty(); |
2145 } | 2145 } |
2146 | 2146 |
2147 bool ScriptValueDeserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::L
ocal<v8::Value>* object) | 2147 bool ScriptValueDeserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::L
ocal<v8::Value>* object) |
2148 { | 2148 { |
2149 if (!m_arrayBufferContents) | 2149 if (!m_arrayBufferContents) |
2150 return false; | 2150 return false; |
2151 if (index >= m_arrayBuffers.size()) | 2151 if (index >= m_arrayBuffers.size()) |
2152 return false; | 2152 return false; |
2153 v8::Local<v8::Value> result = m_arrayBuffers.at(index); | 2153 v8::Local<v8::Value> result = m_arrayBuffers.at(index); |
2154 if (result.IsEmpty()) { | 2154 if (result.IsEmpty()) { |
2155 RefPtr<DOMArrayBuffer> buffer = DOMArrayBuffer::create(m_arrayBufferCont
ents->at(index)); | 2155 RefPtr<DOMArrayBuffer> buffer = DOMArrayBuffer::create(m_arrayBufferCont
ents->at(index)); |
2156 v8::Isolate* isolate = m_reader.scriptState()->isolate(); | 2156 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
2157 v8::Local<v8::Object> creationContext = m_reader.scriptState()->context(
)->Global(); | 2157 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); |
2158 result = toV8(buffer.get(), creationContext, isolate); | 2158 result = toV8(buffer.get(), creationContext, isolate); |
2159 if (result.IsEmpty()) | 2159 if (result.IsEmpty()) |
2160 return false; | 2160 return false; |
2161 m_arrayBuffers[index] = result; | 2161 m_arrayBuffers[index] = result; |
2162 } | 2162 } |
2163 *object = result; | 2163 *object = result; |
2164 return true; | 2164 return true; |
2165 } | 2165 } |
2166 | 2166 |
2167 bool ScriptValueDeserializer::tryGetTransferredImageBitmap(uint32_t index, v8::L
ocal<v8::Value>* object) | 2167 bool ScriptValueDeserializer::tryGetTransferredImageBitmap(uint32_t index, v8::L
ocal<v8::Value>* object) |
2168 { | 2168 { |
2169 if (!m_imageBitmapContents) | 2169 if (!m_imageBitmapContents) |
2170 return false; | 2170 return false; |
2171 if (index >= m_imageBitmaps.size()) | 2171 if (index >= m_imageBitmaps.size()) |
2172 return false; | 2172 return false; |
2173 v8::Local<v8::Value> result = m_imageBitmaps.at(index); | 2173 v8::Local<v8::Value> result = m_imageBitmaps.at(index); |
2174 if (result.IsEmpty()) { | 2174 if (result.IsEmpty()) { |
2175 RefPtrWillBeRawPtr<ImageBitmap> bitmap = ImageBitmap::create(m_imageBitm
apContents->at(index)); | 2175 RefPtrWillBeRawPtr<ImageBitmap> bitmap = ImageBitmap::create(m_imageBitm
apContents->at(index)); |
2176 v8::Isolate* isolate = m_reader.scriptState()->isolate(); | 2176 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
2177 v8::Local<v8::Object> creationContext = m_reader.scriptState()->context(
)->Global(); | 2177 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); |
2178 result = toV8(bitmap.get(), creationContext, isolate); | 2178 result = toV8(bitmap.get(), creationContext, isolate); |
2179 if (result.IsEmpty()) | 2179 if (result.IsEmpty()) |
2180 return false; | 2180 return false; |
2181 m_imageBitmaps[index] = result; | 2181 m_imageBitmaps[index] = result; |
2182 } | 2182 } |
2183 *object = result; | 2183 *object = result; |
2184 return true; | 2184 return true; |
2185 } | 2185 } |
2186 | 2186 |
2187 bool ScriptValueDeserializer::tryGetTransferredSharedArrayBuffer(uint32_t index,
v8::Local<v8::Value>* object) | 2187 bool ScriptValueDeserializer::tryGetTransferredSharedArrayBuffer(uint32_t index,
v8::Local<v8::Value>* object) |
2188 { | 2188 { |
2189 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); | 2189 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); |
2190 if (!m_arrayBufferContents) | 2190 if (!m_arrayBufferContents) |
2191 return false; | 2191 return false; |
2192 if (index >= m_arrayBuffers.size()) | 2192 if (index >= m_arrayBuffers.size()) |
2193 return false; | 2193 return false; |
2194 v8::Local<v8::Value> result = m_arrayBuffers.at(index); | 2194 v8::Local<v8::Value> result = m_arrayBuffers.at(index); |
2195 if (result.IsEmpty()) { | 2195 if (result.IsEmpty()) { |
2196 RefPtr<DOMSharedArrayBuffer> buffer = DOMSharedArrayBuffer::create(m_arr
ayBufferContents->at(index)); | 2196 RefPtr<DOMSharedArrayBuffer> buffer = DOMSharedArrayBuffer::create(m_arr
ayBufferContents->at(index)); |
2197 v8::Isolate* isolate = m_reader.scriptState()->isolate(); | 2197 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
2198 v8::Local<v8::Object> creationContext = m_reader.scriptState()->context(
)->Global(); | 2198 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); |
2199 result = toV8(buffer.get(), creationContext, isolate); | 2199 result = toV8(buffer.get(), creationContext, isolate); |
2200 if (result.IsEmpty()) | 2200 if (result.IsEmpty()) |
2201 return false; | 2201 return false; |
2202 m_arrayBuffers[index] = result; | 2202 m_arrayBuffers[index] = result; |
2203 } | 2203 } |
2204 *object = result; | 2204 *object = result; |
2205 return true; | 2205 return true; |
2206 } | 2206 } |
2207 | 2207 |
2208 bool ScriptValueDeserializer::tryGetObjectFromObjectReference(uint32_t reference
, v8::Local<v8::Value>* object) | 2208 bool ScriptValueDeserializer::tryGetObjectFromObjectReference(uint32_t reference
, v8::Local<v8::Value>* object) |
2209 { | 2209 { |
2210 if (reference >= m_objectPool.size()) | 2210 if (reference >= m_objectPool.size()) |
2211 return false; | 2211 return false; |
2212 *object = m_objectPool[reference]; | 2212 *object = m_objectPool[reference]; |
2213 return object; | 2213 return object; |
2214 } | 2214 } |
2215 | 2215 |
2216 uint32_t ScriptValueDeserializer::objectReferenceCount() | 2216 uint32_t ScriptValueDeserializer::objectReferenceCount() |
2217 { | 2217 { |
2218 return m_objectPool.size(); | 2218 return m_objectPool.size(); |
2219 } | 2219 } |
2220 | 2220 |
2221 bool ScriptValueDeserializer::initializeObject(v8::Local<v8::Object> object, uin
t32_t numProperties, v8::Local<v8::Value>* value) | 2221 bool ScriptValueDeserializer::initializeObject(v8::Local<v8::Object> object, uin
t32_t numProperties, v8::Local<v8::Value>* value) |
2222 { | 2222 { |
2223 unsigned length = 2 * numProperties; | 2223 unsigned length = 2 * numProperties; |
2224 if (length > stackDepth()) | 2224 if (length > stackDepth()) |
2225 return false; | 2225 return false; |
2226 v8::Local<v8::Context> context = m_reader.scriptState()->context(); | 2226 v8::Local<v8::Context> context = m_reader.getScriptState()->context(); |
2227 for (unsigned i = stackDepth() - length; i < stackDepth(); i += 2) { | 2227 for (unsigned i = stackDepth() - length; i < stackDepth(); i += 2) { |
2228 v8::Local<v8::Value> propertyName = element(i); | 2228 v8::Local<v8::Value> propertyName = element(i); |
2229 v8::Local<v8::Value> propertyValue = element(i + 1); | 2229 v8::Local<v8::Value> propertyValue = element(i + 1); |
2230 bool result = false; | 2230 bool result = false; |
2231 if (propertyName->IsString()) | 2231 if (propertyName->IsString()) |
2232 result = v8CallBoolean(object->CreateDataProperty(context, propertyN
ame.As<v8::String>(), propertyValue)); | 2232 result = v8CallBoolean(object->CreateDataProperty(context, propertyN
ame.As<v8::String>(), propertyValue)); |
2233 else if (propertyName->IsUint32()) | 2233 else if (propertyName->IsUint32()) |
2234 result = v8CallBoolean(object->CreateDataProperty(context, propertyN
ame.As<v8::Uint32>()->Value(), propertyValue)); | 2234 result = v8CallBoolean(object->CreateDataProperty(context, propertyN
ame.As<v8::Uint32>()->Value(), propertyValue)); |
2235 else | 2235 else |
2236 ASSERT_NOT_REACHED(); | 2236 ASSERT_NOT_REACHED(); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2276 return false; | 2276 return false; |
2277 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe
renceStack.size() - 1]; | 2277 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe
renceStack.size() - 1]; |
2278 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
1); | 2278 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
1); |
2279 if (objectReference >= m_objectPool.size()) | 2279 if (objectReference >= m_objectPool.size()) |
2280 return false; | 2280 return false; |
2281 *object = m_objectPool[objectReference]; | 2281 *object = m_objectPool[objectReference]; |
2282 return true; | 2282 return true; |
2283 } | 2283 } |
2284 | 2284 |
2285 } // namespace blink | 2285 } // namespace blink |
OLD | NEW |