| 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 37e1211c039b9b2d2c7eeca533d76af2b85fe257..d453c936478eef89c010e0845aaa5131c54aadfc 100644
|
| --- a/content/renderer/v8_value_converter_impl.cc
|
| +++ b/content/renderer/v8_value_converter_impl.cc
|
| @@ -250,6 +250,12 @@ base::Value* V8ValueConverterImpl::FromV8ValueImpl(
|
| if (val->IsBoolean())
|
| return new base::FundamentalValue(val->ToBoolean()->Value());
|
|
|
| + if (val->IsNumber() && strategy_) {
|
| + base::Value* out = NULL;
|
| + if (strategy_->FromV8Number(val->ToNumber(), &out))
|
| + return out;
|
| + }
|
| +
|
| if (val->IsInt32())
|
| return new base::FundamentalValue(val->ToInt32()->Value());
|
|
|
| @@ -265,9 +271,15 @@ base::Value* V8ValueConverterImpl::FromV8ValueImpl(
|
| return new base::StringValue(std::string(*utf8, utf8.length()));
|
| }
|
|
|
| - if (val->IsUndefined())
|
| + if (val->IsUndefined()) {
|
| + if (strategy_) {
|
| + base::Value* out = NULL;
|
| + if (strategy_->FromV8Undefined(&out))
|
| + return out;
|
| + }
|
| // JSON.stringify ignores undefined.
|
| return NULL;
|
| + }
|
|
|
| if (val->IsDate()) {
|
| if (!date_allowed_)
|
| @@ -296,14 +308,11 @@ base::Value* V8ValueConverterImpl::FromV8ValueImpl(
|
| return FromV8Object(val->ToObject(), state, isolate);
|
| }
|
|
|
| - if (val->IsObject()) {
|
| - base::BinaryValue* binary_value = FromV8Buffer(val);
|
| - if (binary_value) {
|
| - return binary_value;
|
| - } else {
|
| - return FromV8Object(val->ToObject(), state, isolate);
|
| - }
|
| - }
|
| + if (val->IsArrayBuffer() || val->IsArrayBufferView())
|
| + return FromV8ArrayBuffer(val->ToObject());
|
| +
|
| + if (val->IsObject())
|
| + return FromV8Object(val->ToObject(), state, isolate);
|
|
|
| LOG(ERROR) << "Unexpected v8 value type encountered.";
|
| return NULL;
|
| @@ -360,8 +369,14 @@ base::Value* V8ValueConverterImpl::FromV8Array(
|
| return result;
|
| }
|
|
|
| -base::BinaryValue* V8ValueConverterImpl::FromV8Buffer(
|
| - v8::Handle<v8::Value> val) const {
|
| +base::Value* V8ValueConverterImpl::FromV8ArrayBuffer(
|
| + v8::Handle<v8::Object> val) const {
|
| + if (strategy_) {
|
| + base::Value* out = NULL;
|
| + if (strategy_->FromV8ArrayBuffer(val, &out))
|
| + return out;
|
| + }
|
| +
|
| char* data = NULL;
|
| size_t length = 0;
|
|
|
|
|