Commit e086cfc6 authored by tasak@google.com's avatar tasak@google.com

Should provide creation context and isolate for WebArrayConverter::toV8Value...

Should provide creation context and isolate for WebArrayConverter::toV8Value and WebArrayConverter::createFromV8Value.

BUG=369451

Review URL: https://codereview.chromium.org/301883002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276361 0039d316-1c4b-4281-b951-d872f2087c98
parent 75f6dea0
......@@ -141,7 +141,7 @@ bool GetOrCreateV8Value(v8::Handle<v8::Context> context,
HostArrayBufferVar* host_buffer =
static_cast<HostArrayBufferVar*>(buffer);
*result = blink::WebArrayBufferConverter::toV8Value(
&host_buffer->webkit_buffer());
&host_buffer->webkit_buffer(), context->Global(), isolate);
break;
}
case PP_VARTYPE_ARRAY:
......@@ -214,7 +214,8 @@ bool GetOrCreateVar(v8::Handle<v8::Value> val,
*result = (new ArrayVar())->GetPPVar();
} else if (val->IsObject()) {
scoped_ptr<blink::WebArrayBuffer> web_array_buffer(
blink::WebArrayBufferConverter::createFromV8Value(val));
blink::WebArrayBufferConverter::createFromV8Value(
val, context->GetIsolate()));
if (web_array_buffer.get()) {
scoped_refptr<HostArrayBufferVar> buffer_var(
new HostArrayBufferVar(*web_array_buffer));
......
......@@ -131,13 +131,14 @@ void SkiaBenchmarking::Rasterize(gin::Arguments* args) {
int stop_index = -1;
bool overdraw = false;
v8::Handle<v8::Context> context = isolate->GetCurrentContext();
if (!args->PeekNext().IsEmpty()) {
v8::Handle<v8::Value> params;
args->GetNext(&params);
scoped_ptr<content::V8ValueConverter> converter(
content::V8ValueConverter::create());
scoped_ptr<base::Value> params_value(
converter->FromV8Value(params, isolate->GetCurrentContext()));
converter->FromV8Value(params, context));
const base::DictionaryValue* params_dict = NULL;
if (params_value.get() && params_value->GetAsDictionary(&params_dict)) {
......@@ -203,7 +204,8 @@ void SkiaBenchmarking::Rasterize(gin::Arguments* args) {
result->Set(v8::String::NewFromUtf8(isolate, "height"),
v8::Number::New(isolate, snapped_clip.height()));
result->Set(v8::String::NewFromUtf8(isolate, "data"),
blink::WebArrayBufferConverter::toV8Value(&buffer));
blink::WebArrayBufferConverter::toV8Value(
&buffer, context->Global(), isolate));
args->Return(result);
}
......
......@@ -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());
......
......@@ -44,13 +44,18 @@ class CONTENT_EXPORT V8ValueConverterImpl : public V8ValueConverter {
class FromV8ValueState;
v8::Local<v8::Value> ToV8ValueImpl(v8::Isolate* isolate,
const base::Value* value) const;
v8::Handle<v8::Object> creation_context,
const base::Value* value) const;
v8::Handle<v8::Value> ToV8Array(v8::Isolate* isolate,
v8::Handle<v8::Object> creation_context,
const base::ListValue* list) const;
v8::Handle<v8::Value> ToV8Object(
v8::Isolate* isolate,
v8::Handle<v8::Object> creation_context,
const base::DictionaryValue* dictionary) const;
v8::Handle<v8::Value> ToArrayBuffer(const base::BinaryValue* value) const;
v8::Handle<v8::Value> ToArrayBuffer(v8::Isolate* isolate,
v8::Handle<v8::Object> creation_context,
const base::BinaryValue* value) const;
base::Value* FromV8ValueImpl(FromV8ValueState* state,
v8::Handle<v8::Value> value,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment