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

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 "base/memory/scoped_ptr.h"
7 #include "chrome/common/render_messages.h" 8 #include "chrome/common/render_messages.h"
8 #include "chrome/renderer/extensions/request_sender.h" 9 #include "chrome/renderer/extensions/request_sender.h"
9 #include "third_party/skia/include/core/SkBitmap.h" 10 #include "third_party/skia/include/core/SkBitmap.h"
10 #include "third_party/skia/include/core/SkColor.h" 11 #include "third_party/skia/include/core/SkColor.h"
11 12
13 namespace {
14
15 const char* kImageSizeKeys[] = { "19", "38" };
16
17 } // namespace
18
12 namespace extensions { 19 namespace extensions {
13 20
14 SetIconNatives::SetIconNatives(Dispatcher* dispatcher, 21 SetIconNatives::SetIconNatives(Dispatcher* dispatcher,
15 RequestSender* request_sender) 22 RequestSender* request_sender)
16 : ChromeV8Extension(dispatcher), request_sender_(request_sender) { 23 : ChromeV8Extension(dispatcher), request_sender_(request_sender) {
17 RouteFunction("SetIconCommon", 24 RouteFunction("SetIconCommon",
18 base::Bind(&SetIconNatives::SetIconCommon, 25 base::Bind(&SetIconNatives::SetIconCommon,
19 base::Unretained(this))); 26 base::Unretained(this)));
20 } 27 }
21 28
22 bool SetIconNatives::ConvertImageDataToBitmapValue( 29 bool SetIconNatives::ConvertImageDataToBitmapValue(
23 const v8::Arguments& args, Value** bitmap_value) { 30 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 = 31 v8::Local<v8::Object> data =
30 image_data->Get(v8::String::New("data"))->ToObject(); 32 image_data->Get(v8::String::New("data"))->ToObject();
31 int width = image_data->Get(v8::String::New("width"))->Int32Value(); 33 int width = image_data->Get(v8::String::New("width"))->Int32Value();
32 int height = image_data->Get(v8::String::New("height"))->Int32Value(); 34 int height = image_data->Get(v8::String::New("height"))->Int32Value();
33 35
34 int data_length = data->Get(v8::String::New("length"))->Int32Value(); 36 int data_length = data->Get(v8::String::New("length"))->Int32Value();
35 if (data_length != 4 * width * height) { 37 if (data_length != 4 * width * height) {
36 NOTREACHED() << "Invalid argument to setIcon. Expecting ImageData."; 38 NOTREACHED() << "Invalid argument to setIcon. Expecting ImageData.";
37 return false; 39 return false;
38 } 40 }
(...skipping 15 matching lines...) Expand all
54 56
55 // Construct the Value object. 57 // Construct the Value object.
56 IPC::Message bitmap_pickle; 58 IPC::Message bitmap_pickle;
57 IPC::WriteParam(&bitmap_pickle, bitmap); 59 IPC::WriteParam(&bitmap_pickle, bitmap);
58 *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer( 60 *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer(
59 static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size()); 61 static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
60 62
61 return true; 63 return true;
62 } 64 }
63 65
66 bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
67 const v8::Arguments& args, DictionaryValue* bitmap_set_value) {
68 v8::Local<v8::Object> extension_args = args[1]->ToObject();
69 v8::Local<v8::Object> details =
70 extension_args->Get(v8::String::New("0"))->ToObject();
71 v8::Local<v8::Object> image_data_set =
72 details->Get(v8::String::New("imageData"))->ToObject();
73
74 DCHECK(bitmap_set_value);
75 for (size_t i = 0; i < arraysize(kImageSizeKeys); i++) {
76 if (!image_data_set->Has(v8::String::New(kImageSizeKeys[i])))
77 continue;
78 v8::Local<v8::Object> image_data =
79 image_data_set->Get(v8::String::New(kImageSizeKeys[i]))->ToObject();
80 Value* image_data_bitmap = NULL;
81 if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
82 return false;
83 bitmap_set_value->Set(kImageSizeKeys[i], image_data_bitmap);
84 }
85 return true;
86 }
87
64 v8::Handle<v8::Value> SetIconNatives::SetIconCommon( 88 v8::Handle<v8::Value> SetIconNatives::SetIconCommon(
65 const v8::Arguments& args) { 89 const v8::Arguments& args) {
66 Value* bitmap_value = NULL; 90 scoped_ptr<DictionaryValue> bitmap_set_value(new DictionaryValue());
67 if (!ConvertImageDataToBitmapValue(args, &bitmap_value)) 91 if (!ConvertImageDataSetToBitmapValueSet(args, bitmap_set_value.get()))
68 return v8::Undefined(); 92 return v8::Undefined();
69 93
70 v8::Local<v8::Object> extension_args = args[1]->ToObject(); 94 v8::Local<v8::Object> extension_args = args[1]->ToObject();
71 v8::Local<v8::Object> details = 95 v8::Local<v8::Object> details =
72 extension_args->Get(v8::String::New("0"))->ToObject(); 96 extension_args->Get(v8::String::New("0"))->ToObject();
73 97
74 DictionaryValue* dict = new DictionaryValue(); 98 DictionaryValue* dict = new DictionaryValue();
75 dict->Set("imageData", bitmap_value); 99 dict->Set("imageData", bitmap_set_value.release());
76 100
77 if (details->Has(v8::String::New("tabId"))) { 101 if (details->Has(v8::String::New("tabId"))) {
78 dict->SetInteger("tabId", 102 dict->SetInteger("tabId",
79 details->Get(v8::String::New("tabId"))->Int32Value()); 103 details->Get(v8::String::New("tabId"))->Int32Value());
80 } 104 }
81 105
82 ListValue list_value; 106 ListValue list_value;
83 list_value.Append(dict); 107 list_value.Append(dict);
84 108
85 std::string name = *v8::String::AsciiValue(args[0]); 109 std::string name = *v8::String::AsciiValue(args[0]);
86 int request_id = args[2]->Int32Value(); 110 int request_id = args[2]->Int32Value();
87 bool has_callback = args[3]->BooleanValue(); 111 bool has_callback = args[3]->BooleanValue();
88 bool for_io_thread = args[4]->BooleanValue(); 112 bool for_io_thread = args[4]->BooleanValue();
89 113
90 request_sender_->StartRequest(name, 114 request_sender_->StartRequest(name,
91 request_id, 115 request_id,
92 has_callback, 116 has_callback,
93 for_io_thread, 117 for_io_thread,
94 &list_value); 118 &list_value);
95 return v8::Undefined(); 119 return v8::Undefined();
96 } 120 }
97 121
98 } // namespace extensions 122 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698