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

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

Issue 269079: Implement new page action API. (Closed)
Patch Set: compile fixes Created 11 years, 2 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <map> 5 #include <map>
6 #include <set> 6 #include <set>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "chrome/renderer/extensions/extension_process_bindings.h" 10 #include "chrome/renderer/extensions/extension_process_bindings.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } else if (name->Equals(v8::String::New("OpenChannelToTab"))) { 204 } else if (name->Equals(v8::String::New("OpenChannelToTab"))) {
205 return v8::FunctionTemplate::New(OpenChannelToTab); 205 return v8::FunctionTemplate::New(OpenChannelToTab);
206 } else if (name->Equals(v8::String::New("GetCurrentPageActions"))) { 206 } else if (name->Equals(v8::String::New("GetCurrentPageActions"))) {
207 return v8::FunctionTemplate::New(GetCurrentPageActions); 207 return v8::FunctionTemplate::New(GetCurrentPageActions);
208 } else if (name->Equals(v8::String::New("StartRequest"))) { 208 } else if (name->Equals(v8::String::New("StartRequest"))) {
209 return v8::FunctionTemplate::New(StartRequest); 209 return v8::FunctionTemplate::New(StartRequest);
210 } else if (name->Equals(v8::String::New("GetRenderViewId"))) { 210 } else if (name->Equals(v8::String::New("GetRenderViewId"))) {
211 return v8::FunctionTemplate::New(GetRenderViewId); 211 return v8::FunctionTemplate::New(GetRenderViewId);
212 } else if (name->Equals(v8::String::New("GetL10nMessage"))) { 212 } else if (name->Equals(v8::String::New("GetL10nMessage"))) {
213 return v8::FunctionTemplate::New(GetL10nMessage); 213 return v8::FunctionTemplate::New(GetL10nMessage);
214 } else if (name->Equals(v8::String::New("SetBrowserActionIcon"))) { 214 } else if (name->Equals(v8::String::New("SetExtensionActionIcon"))) {
215 return v8::FunctionTemplate::New(SetBrowserActionIcon); 215 return v8::FunctionTemplate::New(SetExtensionActionIcon);
216 } 216 }
217 217
218 return ExtensionBase::GetNativeFunction(name); 218 return ExtensionBase::GetNativeFunction(name);
219 } 219 }
220 220
221 private: 221 private:
222 static v8::Handle<v8::Value> GetExtensionAPIDefinition( 222 static v8::Handle<v8::Value> GetExtensionAPIDefinition(
223 const v8::Arguments& args) { 223 const v8::Arguments& args) {
224 return v8::String::New(GetStringResource<IDR_EXTENSION_API_JSON>()); 224 return v8::String::New(GetStringResource<IDR_EXTENSION_API_JSON>());
225 } 225 }
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 // Since we do the serialization in the v8 extension, we should always get 400 // Since we do the serialization in the v8 extension, we should always get
401 // valid JSON. 401 // valid JSON.
402 if (!value_args) { 402 if (!value_args) {
403 NOTREACHED() << "Invalid JSON passed to StartRequest."; 403 NOTREACHED() << "Invalid JSON passed to StartRequest.";
404 return v8::Undefined(); 404 return v8::Undefined();
405 } 405 }
406 406
407 return StartRequestCommon(args, value_args); 407 return StartRequestCommon(args, value_args);
408 } 408 }
409 409
410 // A special request for setting the browser action icon. This function 410 // A special request for setting the extension action icon. This function
411 // accepts a canvas ImageData object, so it needs to do extra processing 411 // accepts a canvas ImageData object, so it needs to do extra processing
412 // before sending the request to the browser. 412 // before sending the request to the browser.
413 static v8::Handle<v8::Value> SetBrowserActionIcon(const v8::Arguments& args) { 413 static v8::Handle<v8::Value> SetExtensionActionIcon(const v8::Arguments& args) {
414 v8::Local<v8::Object> details = args[1]->ToObject(); 414 v8::Local<v8::Object> details = args[1]->ToObject();
415 int tab_id = details->Get(v8::String::New("tabId"))->Int32Value();
415 v8::Local<v8::Object> image_data = 416 v8::Local<v8::Object> image_data =
416 details->Get(v8::String::New("imageData"))->ToObject(); 417 details->Get(v8::String::New("imageData"))->ToObject();
417 v8::Local<v8::Object> data = 418 v8::Local<v8::Object> data =
418 image_data->Get(v8::String::New("data"))->ToObject(); 419 image_data->Get(v8::String::New("data"))->ToObject();
419 int width = image_data->Get(v8::String::New("width"))->Int32Value(); 420 int width = image_data->Get(v8::String::New("width"))->Int32Value();
420 int height = image_data->Get(v8::String::New("height"))->Int32Value(); 421 int height = image_data->Get(v8::String::New("height"))->Int32Value();
421 422
422 int data_length = data->Get(v8::String::New("length"))->Int32Value(); 423 int data_length = data->Get(v8::String::New("length"))->Int32Value();
423 if (data_length != 4 * width * height) { 424 if (data_length != 4 * width * height) {
424 NOTREACHED() << 425 NOTREACHED() << "Invalid argument to setIcon. Expecting ImageData.";
425 "Invalid argument to browserAction.setIcon. Expecting ImageData.";
426 return v8::Undefined(); 426 return v8::Undefined();
427 } 427 }
428 428
429 SkBitmap bitmap; 429 SkBitmap bitmap;
430 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); 430 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
431 bitmap.allocPixels(); 431 bitmap.allocPixels();
432 bitmap.eraseARGB(0, 0, 0, 0); 432 bitmap.eraseARGB(0, 0, 0, 0);
433 433
434 uint32_t* pixels = bitmap.getAddr32(0, 0); 434 uint32_t* pixels = bitmap.getAddr32(0, 0);
435 for (int t = 0; t < width*height; t++) { 435 for (int t = 0; t < width*height; t++) {
436 // |data| is RGBA, pixels is ARGB. 436 // |data| is RGBA, pixels is ARGB.
437 pixels[t] = 437 pixels[t] =
438 ((data->Get(v8::Integer::New(4*t + 3))->Int32Value() & 0xFF) << 24) | 438 ((data->Get(v8::Integer::New(4*t + 3))->Int32Value() & 0xFF) << 24) |
439 ((data->Get(v8::Integer::New(4*t + 0))->Int32Value() & 0xFF) << 16) | 439 ((data->Get(v8::Integer::New(4*t + 0))->Int32Value() & 0xFF) << 16) |
440 ((data->Get(v8::Integer::New(4*t + 1))->Int32Value() & 0xFF) << 8) | 440 ((data->Get(v8::Integer::New(4*t + 1))->Int32Value() & 0xFF) << 8) |
441 ((data->Get(v8::Integer::New(4*t + 2))->Int32Value() & 0xFF) << 0); 441 ((data->Get(v8::Integer::New(4*t + 2))->Int32Value() & 0xFF) << 0);
442 } 442 }
443 443
444 // Construct the Value object. 444 // Construct the Value object.
445 IPC::Message bitmap_pickle; 445 IPC::Message bitmap_pickle;
446 IPC::WriteParam(&bitmap_pickle, bitmap); 446 IPC::WriteParam(&bitmap_pickle, bitmap);
447 Value* bitmap_value = BinaryValue::CreateWithCopiedBuffer( 447 Value* bitmap_value = BinaryValue::CreateWithCopiedBuffer(
448 static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size()); 448 static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
449 449
450 return StartRequestCommon(args, bitmap_value); 450 DictionaryValue* dict = new DictionaryValue();
451 dict->Set(L"imageData", bitmap_value);
452 dict->SetInteger(L"tabId", tab_id);
453
454 return StartRequestCommon(args, dict);
451 } 455 }
452 456
453 static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) { 457 static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) {
454 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); 458 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext();
455 if (!renderview) 459 if (!renderview)
456 return v8::Undefined(); 460 return v8::Undefined();
457 return v8::Integer::New(renderview->routing_id()); 461 return v8::Integer::New(renderview->routing_id());
458 } 462 }
459 }; 463 };
460 464
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 return; 603 return;
600 604
601 v8::HandleScope handle_scope; 605 v8::HandleScope handle_scope;
602 WebFrame* frame = view->mainFrame(); 606 WebFrame* frame = view->mainFrame();
603 v8::Local<v8::Context> context = frame->mainWorldScriptContext(); 607 v8::Local<v8::Context> context = frame->mainWorldScriptContext();
604 v8::Handle<v8::Value> argv[1]; 608 v8::Handle<v8::Value> argv[1];
605 argv[0] = v8::String::New(type_str); 609 argv[0] = v8::String::New(type_str);
606 bindings_utils::CallFunctionInContext(context, "setViewType", 610 bindings_utils::CallFunctionInContext(context, "setViewType",
607 arraysize(argv), argv); 611 arraysize(argv), argv);
608 } 612 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_action.h ('k') | chrome/renderer/resources/extension_process_bindings.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698