| Index: extensions/renderer/set_icon_natives.cc
|
| diff --git a/extensions/renderer/set_icon_natives.cc b/extensions/renderer/set_icon_natives.cc
|
| index 192112f1d812215e823bbf4929e716d412b3ebed..4fcec19f36589de6d80e18b05473fc4dfc6694a3 100644
|
| --- a/extensions/renderer/set_icon_natives.cc
|
| +++ b/extensions/renderer/set_icon_natives.cc
|
| @@ -11,6 +11,7 @@
|
| #include "extensions/renderer/request_sender.h"
|
| #include "extensions/renderer/script_context.h"
|
| #include "ipc/ipc_message_utils.h"
|
| +#include "third_party/WebKit/public/web/WebArrayBufferConverter.h"
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
| #include "ui/gfx/ipc/gfx_param_traits.h"
|
|
|
| @@ -35,7 +36,7 @@ SetIconNatives::SetIconNatives(RequestSender* request_sender,
|
|
|
| bool SetIconNatives::ConvertImageDataToBitmapValue(
|
| const v8::Local<v8::Object> image_data,
|
| - base::Value** bitmap_value) {
|
| + v8::Local<v8::Value>* image_data_bitmap) {
|
| v8::Isolate* isolate = context()->v8_context()->GetIsolate();
|
| v8::Local<v8::Object> data =
|
| image_data->Get(v8::String::NewFromUtf8(isolate, "data"))->ToObject();
|
| @@ -92,72 +93,57 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
|
| // Construct the Value object.
|
| IPC::Message bitmap_pickle;
|
| IPC::WriteParam(&bitmap_pickle, bitmap);
|
| - *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer(
|
| - static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
|
| + blink::WebArrayBuffer buffer =
|
| + blink::WebArrayBuffer::create(bitmap_pickle.size(), 1);
|
| + memcpy(buffer.data(), bitmap_pickle.data(), bitmap_pickle.size());
|
| + *image_data_bitmap = blink::WebArrayBufferConverter::toV8Value(
|
| + &buffer, context()->v8_context()->Global(), isolate);
|
|
|
| return true;
|
| }
|
|
|
| bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
|
| - const v8::FunctionCallbackInfo<v8::Value>& args,
|
| - base::DictionaryValue* bitmap_set_value) {
|
| - v8::Local<v8::Object> extension_args = args[1]->ToObject();
|
| - v8::Local<v8::Object> details =
|
| - extension_args->Get(v8::String::NewFromUtf8(args.GetIsolate(), "0"))
|
| - ->ToObject();
|
| + v8::Local<v8::Object>& details,
|
| + v8::Local<v8::Object>* bitmap_set_value) {
|
| + v8::Isolate* isolate = context()->v8_context()->GetIsolate();
|
| v8::Local<v8::Object> image_data_set =
|
| - details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "imageData"))
|
| - ->ToObject();
|
| + details->Get(v8::String::NewFromUtf8(isolate, "imageData"))->ToObject();
|
|
|
| DCHECK(bitmap_set_value);
|
| for (size_t i = 0; i < arraysize(kImageSizeKeys); i++) {
|
| if (!image_data_set->Has(
|
| - v8::String::NewFromUtf8(args.GetIsolate(), kImageSizeKeys[i])))
|
| + v8::String::NewFromUtf8(isolate, kImageSizeKeys[i])))
|
| continue;
|
| v8::Local<v8::Object> image_data =
|
| - image_data_set->Get(v8::String::NewFromUtf8(args.GetIsolate(),
|
| - kImageSizeKeys[i]))
|
| + image_data_set->Get(v8::String::NewFromUtf8(isolate, kImageSizeKeys[i]))
|
| ->ToObject();
|
| - base::Value* image_data_bitmap = NULL;
|
| + v8::Local<v8::Value> image_data_bitmap;
|
| if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
|
| return false;
|
| - bitmap_set_value->Set(kImageSizeKeys[i], image_data_bitmap);
|
| + (*bitmap_set_value)->Set(
|
| + v8::String::NewFromUtf8(isolate, kImageSizeKeys[i]), image_data_bitmap);
|
| }
|
| return true;
|
| }
|
|
|
| void SetIconNatives::SetIconCommon(
|
| const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| - scoped_ptr<base::DictionaryValue> bitmap_set_value(
|
| - new base::DictionaryValue());
|
| - if (!ConvertImageDataSetToBitmapValueSet(args, bitmap_set_value.get()))
|
| + CHECK_EQ(1, args.Length());
|
| + CHECK(args[0]->IsObject());
|
| + v8::Local<v8::Object> details = args[0]->ToObject();
|
| + v8::Local<v8::Object> bitmap_set_value(v8::Object::New(args.GetIsolate()));
|
| + if (!ConvertImageDataSetToBitmapValueSet(details, &bitmap_set_value))
|
| return;
|
|
|
| - v8::Local<v8::Object> extension_args = args[1]->ToObject();
|
| - v8::Local<v8::Object> details =
|
| - extension_args->Get(v8::String::NewFromUtf8(args.GetIsolate(), "0"))
|
| - ->ToObject();
|
| -
|
| - base::DictionaryValue* dict = new base::DictionaryValue();
|
| - dict->Set("imageData", bitmap_set_value.release());
|
| -
|
| + v8::Local<v8::Object> dict(v8::Object::New(args.GetIsolate()));
|
| + dict->Set(v8::String::NewFromUtf8(args.GetIsolate(), "imageData"),
|
| + bitmap_set_value);
|
| if (details->Has(v8::String::NewFromUtf8(args.GetIsolate(), "tabId"))) {
|
| - dict->SetInteger(
|
| - "tabId",
|
| - details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "tabId"))
|
| - ->Int32Value());
|
| + dict->Set(
|
| + v8::String::NewFromUtf8(args.GetIsolate(), "tabId"),
|
| + details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "tabId")));
|
| }
|
| -
|
| - base::ListValue list_value;
|
| - list_value.Append(dict);
|
| -
|
| - std::string name = *v8::String::Utf8Value(args[0]);
|
| - int request_id = args[2]->Int32Value();
|
| - bool has_callback = args[3]->BooleanValue();
|
| - bool for_io_thread = args[4]->BooleanValue();
|
| -
|
| - request_sender_->StartRequest(
|
| - context(), name, request_id, has_callback, for_io_thread, &list_value);
|
| + args.GetReturnValue().Set(dict);
|
| }
|
|
|
| } // namespace extensions
|
|
|