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

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

Issue 2037583002: [Binding] Get non indexed property names for dense array serialization (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
index 2f61561838833701bb4b939b2d8219fef1929795..0f51f116d4a29032c6fa466314be807c1bffe72c 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
@@ -552,7 +552,7 @@ int SerializedScriptValueWriter::v8StringWriteOptions()
return v8::String::NO_NULL_TERMINATION;
}
-ScriptValueSerializer::StateBase* ScriptValueSerializer::AbstractObjectState::serializeProperties(bool ignoreIndexed, ScriptValueSerializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::AbstractObjectState::serializeProperties(ScriptValueSerializer& serializer)
{
while (m_index < m_propertyNames->Length()) {
v8::Local<v8::Value> propertyName;
@@ -563,7 +563,7 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::AbstractObjectState::se
if (propertyName->IsString()) {
hasProperty = v8CallBoolean(composite()->HasRealNamedProperty(serializer.context(), propertyName.As<v8::String>()));
} else if (propertyName->IsUint32()) {
- hasProperty = v8CallBoolean(composite()->HasRealIndexedProperty(serializer.context(), propertyName.As<v8::Uint32>()->Value())) && !ignoreIndexed;
+ hasProperty = v8CallBoolean(composite()->HasRealIndexedProperty(serializer.context(), propertyName.As<v8::Uint32>()->Value()));
}
if (StateBase* newState = serializer.checkException(this))
return newState;
@@ -595,7 +595,7 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::ObjectState::advance(Sc
if (!composite()->GetOwnPropertyNames(serializer.context()).ToLocal(&m_propertyNames))
return serializer.checkException(this);
}
- return serializeProperties(false, serializer);
+ return serializeProperties(serializer);
}
ScriptValueSerializer::StateBase* ScriptValueSerializer::ObjectState::objectDone(unsigned numProperties, ScriptValueSerializer& serializer)
@@ -615,7 +615,7 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::DenseArrayState::advanc
if (StateBase* newState = serializer.doSerialize(value, this))
return newState;
}
- return serializeProperties(true, serializer);
+ return serializeProperties(serializer);
}
ScriptValueSerializer::StateBase* ScriptValueSerializer::DenseArrayState::objectDone(unsigned numProperties, ScriptValueSerializer& serializer)
@@ -625,7 +625,7 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::DenseArrayState::object
ScriptValueSerializer::StateBase* ScriptValueSerializer::SparseArrayState::advance(ScriptValueSerializer& serializer)
{
- return serializeProperties(false, serializer);
+ return serializeProperties(serializer);
}
ScriptValueSerializer::StateBase* ScriptValueSerializer::SparseArrayState::objectDone(unsigned numProperties, ScriptValueSerializer& serializer)
@@ -1206,6 +1206,10 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::startArrayState(v8::Loc
if (shouldSerializeDensely(length, propertyNames->Length())) {
m_writer.writeGenerateFreshDenseArray(length);
+ // In serializing a dense array, indexed properties are ignored, so we get
+ // non indexed own property names here.
+ if (!array->GetPropertyNames(context(), v8::KeyCollectionMode::kIncludePrototypes, static_cast<v8::PropertyFilter>(v8::ONLY_ENUMERABLE | v8::SKIP_SYMBOLS), v8::IndexFilter::kSkipIndices).ToLocal(&propertyNames))
+ return checkException(next);
return push(new DenseArrayState(array, propertyNames, next, isolate()));
}
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698