Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: chrome/renderer/extensions/set_icon_natives.cc

Issue 10855154: Update browserAction.setIcon and pageAction.setIcon for hidpi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/extensions/set_icon_natives.h" 5 #include "chrome/renderer/extensions/set_icon_natives.h"
6 6
7 #include "chrome/common/render_messages.h" 7 #include "chrome/common/render_messages.h"
8 #include "chrome/renderer/extensions/request_sender.h" 8 #include "chrome/renderer/extensions/request_sender.h"
9 #include "third_party/skia/include/core/SkBitmap.h" 9 #include "third_party/skia/include/core/SkBitmap.h"
10 #include "third_party/skia/include/core/SkColor.h" 10 #include "third_party/skia/include/core/SkColor.h"
11 11
12 namespace {
13
14 const char* kImageSizeKeys[] = { "19", "38" };
15
16 } // namespace
17
12 namespace extensions { 18 namespace extensions {
13 19
14 SetIconNatives::SetIconNatives(Dispatcher* dispatcher, 20 SetIconNatives::SetIconNatives(Dispatcher* dispatcher,
15 RequestSender* request_sender) 21 RequestSender* request_sender)
16 : ChromeV8Extension(dispatcher), request_sender_(request_sender) { 22 : ChromeV8Extension(dispatcher), request_sender_(request_sender) {
17 RouteFunction("SetIconCommon", 23 RouteFunction("SetIconCommon",
18 base::Bind(&SetIconNatives::SetIconCommon, 24 base::Bind(&SetIconNatives::SetIconCommon,
19 base::Unretained(this))); 25 base::Unretained(this)));
20 } 26 }
21 27
22 bool SetIconNatives::ConvertImageDataToBitmapValue( 28 bool SetIconNatives::ConvertImageDataToBitmapValue(
23 const v8::Arguments& args, Value** bitmap_value) { 29 const v8::Local<v8::Object> image_data, Value** bitmap_value) {
24 v8::Local<v8::Object> extension_args = args[1]->ToObject();
25 v8::Local<v8::Object> details =
26 extension_args->Get(v8::String::New("0"))->ToObject();
27 v8::Local<v8::Object> image_data =
28 details->Get(v8::String::New("imageData"))->ToObject();
29 v8::Local<v8::Object> data = 30 v8::Local<v8::Object> data =
30 image_data->Get(v8::String::New("data"))->ToObject(); 31 image_data->Get(v8::String::New("data"))->ToObject();
31 int width = image_data->Get(v8::String::New("width"))->Int32Value(); 32 int width = image_data->Get(v8::String::New("width"))->Int32Value();
32 int height = image_data->Get(v8::String::New("height"))->Int32Value(); 33 int height = image_data->Get(v8::String::New("height"))->Int32Value();
33 34
34 int data_length = data->Get(v8::String::New("length"))->Int32Value(); 35 int data_length = data->Get(v8::String::New("length"))->Int32Value();
35 if (data_length != 4 * width * height) { 36 if (data_length != 4 * width * height) {
36 NOTREACHED() << "Invalid argument to setIcon. Expecting ImageData."; 37 NOTREACHED() << "Invalid argument to setIcon. Expecting ImageData.";
37 return false; 38 return false;
38 } 39 }
(...skipping 15 matching lines...) Expand all
54 55
55 // Construct the Value object. 56 // Construct the Value object.
56 IPC::Message bitmap_pickle; 57 IPC::Message bitmap_pickle;
57 IPC::WriteParam(&bitmap_pickle, bitmap); 58 IPC::WriteParam(&bitmap_pickle, bitmap);
58 *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer( 59 *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer(
59 static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size()); 60 static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
60 61
61 return true; 62 return true;
62 } 63 }
63 64
65 bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
66 const v8::Arguments& args, DictionaryValue** bitmap_set_value) {
67 v8::Local<v8::Object> extension_args = args[1]->ToObject();
68 v8::Local<v8::Object> details =
69 extension_args->Get(v8::String::New("0"))->ToObject();
70 v8::Local<v8::Object> image_data_set =
71 details->Get(v8::String::New("imageDataSet"))->ToObject();
72
73 *bitmap_set_value = new DictionaryValue();
Jeffrey Yasskin 2012/08/17 23:20:28 This will be a memory leak if the function returns
tbarzic 2012/08/21 00:22:07 Done.
74 for (size_t i = 0; i < arraysize(kImageSizeKeys); i++) {
75 if (!image_data_set->Has(v8::String::New(kImageSizeKeys[i])))
76 continue;
77 v8::Local<v8::Object> image_data =
78 image_data_set->Get(v8::String::New(kImageSizeKeys[i]))->ToObject();
79 Value* image_data_bitmap = NULL;
80 if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
81 return false;
82 (*bitmap_set_value)->Set(kImageSizeKeys[i], image_data_bitmap);
83 }
84 return true;
85 }
86
64 v8::Handle<v8::Value> SetIconNatives::SetIconCommon( 87 v8::Handle<v8::Value> SetIconNatives::SetIconCommon(
65 const v8::Arguments& args) { 88 const v8::Arguments& args) {
66 Value* bitmap_value = NULL; 89 DictionaryValue* bitmap_set_value = NULL;
67 if (!ConvertImageDataToBitmapValue(args, &bitmap_value)) 90 if (!ConvertImageDataSetToBitmapValueSet(args, &bitmap_set_value))
68 return v8::Undefined(); 91 return v8::Undefined();
69 92
70 v8::Local<v8::Object> extension_args = args[1]->ToObject(); 93 v8::Local<v8::Object> extension_args = args[1]->ToObject();
71 v8::Local<v8::Object> details = 94 v8::Local<v8::Object> details =
72 extension_args->Get(v8::String::New("0"))->ToObject(); 95 extension_args->Get(v8::String::New("0"))->ToObject();
73 96
74 DictionaryValue* dict = new DictionaryValue(); 97 DictionaryValue* dict = new DictionaryValue();
75 dict->Set("imageData", bitmap_value); 98 dict->Set("imageDataSet", bitmap_set_value);
76 99
77 if (details->Has(v8::String::New("tabId"))) { 100 if (details->Has(v8::String::New("tabId"))) {
78 dict->SetInteger("tabId", 101 dict->SetInteger("tabId",
79 details->Get(v8::String::New("tabId"))->Int32Value()); 102 details->Get(v8::String::New("tabId"))->Int32Value());
80 } 103 }
81 104
82 ListValue list_value; 105 ListValue list_value;
83 list_value.Append(dict); 106 list_value.Append(dict);
84 107
85 std::string name = *v8::String::AsciiValue(args[0]); 108 std::string name = *v8::String::AsciiValue(args[0]);
86 int request_id = args[2]->Int32Value(); 109 int request_id = args[2]->Int32Value();
87 bool has_callback = args[3]->BooleanValue(); 110 bool has_callback = args[3]->BooleanValue();
88 bool for_io_thread = args[4]->BooleanValue(); 111 bool for_io_thread = args[4]->BooleanValue();
89 112
90 request_sender_->StartRequest(name, 113 request_sender_->StartRequest(name,
91 request_id, 114 request_id,
92 has_callback, 115 has_callback,
93 for_io_thread, 116 for_io_thread,
94 &list_value); 117 &list_value);
95 return v8::Undefined(); 118 return v8::Undefined();
96 } 119 }
97 120
98 } // namespace extensions 121 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698