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 d12b26bdf07eb2383b0f5d92bcc0217d713f7f1b..2c222bd772a9e5e965ae4e8b38e3c32b385334db 100644 |
--- a/content/renderer/v8_value_converter_impl.cc |
+++ b/content/renderer/v8_value_converter_impl.cc |
@@ -153,7 +153,8 @@ v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Value( |
const base::Value* value, v8::Handle<v8::Context> context) const { |
v8::Context::Scope context_scope(context); |
v8::EscapableHandleScope handle_scope(context->GetIsolate()); |
- return handle_scope.Escape(ToV8ValueImpl(context->GetIsolate(), value)); |
+ return handle_scope.Escape( |
+ ToV8ValueImpl(context->GetIsolate(), context->Global(), value)); |
} |
base::Value* V8ValueConverterImpl::FromV8Value( |
@@ -167,6 +168,7 @@ base::Value* V8ValueConverterImpl::FromV8Value( |
v8::Local<v8::Value> V8ValueConverterImpl::ToV8ValueImpl( |
v8::Isolate* isolate, |
+ v8::Handle<v8::Object> creation_context, |
const base::Value* value) const { |
CHECK(value); |
switch (value->GetType()) { |
@@ -199,14 +201,19 @@ v8::Local<v8::Value> V8ValueConverterImpl::ToV8ValueImpl( |
} |
case base::Value::TYPE_LIST: |
- return ToV8Array(isolate, static_cast<const base::ListValue*>(value)); |
+ return ToV8Array(isolate, |
+ creation_context, |
+ static_cast<const base::ListValue*>(value)); |
case base::Value::TYPE_DICTIONARY: |
return ToV8Object(isolate, |
+ creation_context, |
static_cast<const base::DictionaryValue*>(value)); |
case base::Value::TYPE_BINARY: |
- return ToArrayBuffer(static_cast<const base::BinaryValue*>(value)); |
+ return ToArrayBuffer(isolate, |
+ creation_context, |
+ static_cast<const base::BinaryValue*>(value)); |
default: |
LOG(ERROR) << "Unexpected value type: " << value->GetType(); |
@@ -216,6 +223,7 @@ v8::Local<v8::Value> V8ValueConverterImpl::ToV8ValueImpl( |
v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Array( |
v8::Isolate* isolate, |
+ v8::Handle<v8::Object> creation_context, |
const base::ListValue* val) const { |
v8::Handle<v8::Array> result(v8::Array::New(isolate, val->GetSize())); |
@@ -223,7 +231,8 @@ v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Array( |
const base::Value* child = NULL; |
CHECK(val->Get(i, &child)); |
- v8::Handle<v8::Value> child_v8 = ToV8ValueImpl(isolate, child); |
+ v8::Handle<v8::Value> child_v8 = |
+ ToV8ValueImpl(isolate, creation_context, child); |
CHECK(!child_v8.IsEmpty()); |
v8::TryCatch try_catch; |
@@ -237,13 +246,15 @@ v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Array( |
v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Object( |
v8::Isolate* isolate, |
+ v8::Handle<v8::Object> creation_context, |
const base::DictionaryValue* val) const { |
v8::Handle<v8::Object> result(v8::Object::New(isolate)); |
for (base::DictionaryValue::Iterator iter(*val); |
!iter.IsAtEnd(); iter.Advance()) { |
const std::string& key = iter.key(); |
- v8::Handle<v8::Value> child_v8 = ToV8ValueImpl(isolate, &iter.value()); |
+ v8::Handle<v8::Value> child_v8 = |
+ ToV8ValueImpl(isolate, creation_context, &iter.value()); |
CHECK(!child_v8.IsEmpty()); |
v8::TryCatch try_catch; |
@@ -261,11 +272,14 @@ v8::Handle<v8::Value> V8ValueConverterImpl::ToV8Object( |
} |
v8::Handle<v8::Value> V8ValueConverterImpl::ToArrayBuffer( |
+ v8::Isolate* isolate, |
+ v8::Handle<v8::Object> creation_context, |
const base::BinaryValue* value) const { |
blink::WebArrayBuffer buffer = |
blink::WebArrayBuffer::create(value->GetSize(), 1); |
memcpy(buffer.data(), value->GetBuffer(), value->GetSize()); |
- return blink::WebArrayBufferConverter::toV8Value(&buffer); |
+ return blink::WebArrayBufferConverter::toV8Value( |
+ &buffer, creation_context, isolate); |
} |
base::Value* V8ValueConverterImpl::FromV8ValueImpl( |
@@ -418,7 +432,7 @@ base::Value* V8ValueConverterImpl::FromV8ArrayBuffer( |
size_t length = 0; |
scoped_ptr<blink::WebArrayBuffer> array_buffer( |
- blink::WebArrayBufferConverter::createFromV8Value(val)); |
+ blink::WebArrayBufferConverter::createFromV8Value(val, isolate)); |
scoped_ptr<blink::WebArrayBufferView> view; |
if (array_buffer) { |
data = reinterpret_cast<char*>(array_buffer->data()); |