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

Unified Diff: chrome/browser/extensions/extension_browser_actions_api.cc

Issue 242150: Implement browserAction.setIcon(ImageData) for extensions. (Closed)
Patch Set: common function 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/views/browser_actions_container.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_browser_actions_api.cc
diff --git a/chrome/browser/extensions/extension_browser_actions_api.cc b/chrome/browser/extensions/extension_browser_actions_api.cc
old mode 100755
new mode 100644
index d80637d918023f798b927fe8358fca8acdd598df..2a3aa2e26e36b4e1590572a8e3605399ac861b16
--- a/chrome/browser/extensions/extension_browser_actions_api.cc
+++ b/chrome/browser/extensions/extension_browser_actions_api.cc
@@ -7,6 +7,7 @@
#include "chrome/browser/browser.h"
#include "chrome/browser/browser_list.h"
#include "chrome/common/notification_service.h"
+#include "chrome/common/render_messages.h"
namespace extension_browser_actions_api_constants {
@@ -44,8 +45,10 @@ bool BrowserActionSetNameFunction::RunImpl() {
}
bool BrowserActionSetIconFunction::RunImpl() {
- int icon_index = -1;
- EXTENSION_FUNCTION_VALIDATE(args_->GetAsInteger(&icon_index));
+ // setIcon can take a variant argument: either a canvas ImageData, or an
+ // icon index.
+ EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_BINARY) ||
+ args_->IsType(Value::TYPE_INTEGER));
Extension* extension = dispatcher()->GetExtension();
if (!extension->browser_action()) {
@@ -53,7 +56,19 @@ bool BrowserActionSetIconFunction::RunImpl() {
return false;
}
- extension->browser_action_state()->set_icon_index(icon_index);
+ if (args_->IsType(Value::TYPE_BINARY)) {
+ BinaryValue* binary = static_cast<BinaryValue*>(args_);
+ IPC::Message bitmap_pickle(binary->GetBuffer(), binary->GetSize());
+ void* iter = NULL;
+ scoped_ptr<SkBitmap> bitmap(new SkBitmap);
+ EXTENSION_FUNCTION_VALIDATE(
+ IPC::ReadParam(&bitmap_pickle, &iter, bitmap.get()));
+ extension->browser_action_state()->set_icon(bitmap.release());
+ } else {
+ int icon_index = -1;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetAsInteger(&icon_index));
+ extension->browser_action_state()->set_icon_index(icon_index);
+ }
NotificationService::current()->Notify(
NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
« no previous file with comments | « no previous file | chrome/browser/views/browser_actions_container.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698