| Index: content/renderer/v8_value_converter_impl.cc
|
| diff --git a/content/renderer/v8_value_converter_impl.cc b/content/renderer/v8_value_converter_impl.cc
|
| index cb4b9af00f1c667ded643d7c3735833225e43272..efd3d447769b94a06d4862573d28b9942cb67ca4 100644
|
| --- a/content/renderer/v8_value_converter_impl.cc
|
| +++ b/content/renderer/v8_value_converter_impl.cc
|
| @@ -86,7 +86,8 @@ V8ValueConverterImpl::V8ValueConverterImpl()
|
| reg_exp_allowed_(false),
|
| function_allowed_(false),
|
| strip_null_from_objects_(false),
|
| - avoid_identity_hash_for_testing_(false) {}
|
| + avoid_identity_hash_for_testing_(false),
|
| + strategy_(NULL) {}
|
|
|
| void V8ValueConverterImpl::SetDateAllowed(bool val) {
|
| date_allowed_ = val;
|
| @@ -104,6 +105,10 @@ void V8ValueConverterImpl::SetStripNullFromObjects(bool val) {
|
| strip_null_from_objects_ = val;
|
| }
|
|
|
| +void V8ValueConverterImpl::SetStrategy(Strategy* strategy) {
|
| + strategy_ = strategy;
|
| +}
|
| +
|
| v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Value(
|
| const base::Value* value, v8::Handle<v8::Context> context) const {
|
| v8::Context::Scope context_scope(context);
|
| @@ -302,6 +307,12 @@ base::Value* V8ValueConverterImpl::FromV8Array(
|
| val->CreationContext() != v8::Context::GetCurrent())
|
| scope.reset(new v8::Context::Scope(val->CreationContext()));
|
|
|
| + if (strategy_) {
|
| + Value* out = NULL;
|
| + if (strategy_->FromV8Array(val, &out))
|
| + return out;
|
| + }
|
| +
|
| base::ListValue* result = new base::ListValue();
|
|
|
| // Only fields with integer keys are carried over to the ListValue.
|
| @@ -357,6 +368,7 @@ base::Value* V8ValueConverterImpl::FromV8Object(
|
| FromV8ValueState* state) const {
|
| if (!state->UpdateAndCheckUniqueness(val))
|
| return base::Value::CreateNullValue();
|
| +
|
| scoped_ptr<v8::Context::Scope> scope;
|
| // If val was created in a different context than our current one, change to
|
| // that context, but change back after val is converted.
|
| @@ -364,6 +376,12 @@ base::Value* V8ValueConverterImpl::FromV8Object(
|
| val->CreationContext() != v8::Context::GetCurrent())
|
| scope.reset(new v8::Context::Scope(val->CreationContext()));
|
|
|
| + if (strategy_) {
|
| + Value* out = NULL;
|
| + if (strategy_->FromV8Object(val, &out))
|
| + return out;
|
| + }
|
| +
|
| scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue());
|
| v8::Handle<v8::Array> property_names(val->GetOwnPropertyNames());
|
|
|
|
|