Chromium Code Reviews| 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..353aa2e1ea1ff336c8da55d7b4fe651ccb03de59 100644 |
| --- a/extensions/renderer/set_icon_natives.cc |
| +++ b/extensions/renderer/set_icon_natives.cc |
| @@ -6,8 +6,10 @@ |
| #include <limits> |
| +#include "base/base64.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "content/public/common/common_param_traits.h" |
| +#include "content/public/renderer/v8_value_converter.h" |
| #include "extensions/renderer/request_sender.h" |
| #include "extensions/renderer/script_context.h" |
| #include "ipc/ipc_message_utils.h" |
| @@ -92,8 +94,11 @@ 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()); |
| + std::string bitmap_data = std::string(reinterpret_cast<const char*>( |
| + bitmap_pickle.data()), bitmap_pickle.size()); |
| + std::string data64; |
| + base::Base64Encode(bitmap_data, &data64); |
|
not at google - send to devlin
2014/08/19 17:32:29
Ideally you'd only need to convert to a binary val
gpdavis
2014/08/19 22:05:07
Well, that took a while, but I finally figured out
not at google - send to devlin
2014/08/20 14:42:18
Nice!
|
| + *bitmap_value = new base::StringValue(data64); |
| return true; |
| } |
| @@ -101,13 +106,10 @@ bool SetIconNatives::ConvertImageDataToBitmapValue( |
| 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 = args[0]->ToObject(); |
| v8::Local<v8::Object> image_data_set = |
| - details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "imageData")) |
| - ->ToObject(); |
| + details->Get(v8::String::NewFromUtf8( |
| + args.GetIsolate(), "imageData"))->ToObject(); |
| DCHECK(bitmap_set_value); |
| for (size_t i = 0; i < arraysize(kImageSizeKeys); i++) { |
| @@ -133,14 +135,10 @@ void SetIconNatives::SetIconCommon( |
| if (!ConvertImageDataSetToBitmapValueSet(args, bitmap_set_value.get())) |
| 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(); |
| + v8::Local<v8::Object> details = args[0]->ToObject(); |
| base::DictionaryValue* dict = new base::DictionaryValue(); |
|
not at google - send to devlin
2014/08/19 17:32:29
This now leaks |dict| since it's not having its ow
gpdavis
2014/08/19 22:05:07
Ah, gotcha. Nice catch!
|
| dict->Set("imageData", bitmap_set_value.release()); |
| - |
| if (details->Has(v8::String::NewFromUtf8(args.GetIsolate(), "tabId"))) { |
| dict->SetInteger( |
| "tabId", |
| @@ -148,16 +146,12 @@ void SetIconNatives::SetIconCommon( |
| ->Int32Value()); |
| } |
| - 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); |
| + v8::Isolate* isolate = context()->v8_context()->GetIsolate(); |
| + v8::Handle<v8::Value> result = v8::Object::New(isolate); |
| + scoped_ptr<content::V8ValueConverter> converter( |
| + content::V8ValueConverter::create()); |
| + result = converter->ToV8Value(dict, context()->v8_context()); |
| + args.GetReturnValue().Set(result); |
| } |
| } // namespace extensions |