| 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
|
| index 6c83ee0cc820adf175a2b91b7a8c3e8dbc6fe7c1..92e09512bc92beef47a2a617e25b91791ef1098f 100644
|
| --- a/chrome/browser/extensions/extension_browser_actions_api.cc
|
| +++ b/chrome/browser/extensions/extension_browser_actions_api.cc
|
| @@ -17,97 +17,59 @@ const char kIconIndexOutOfBounds[] =
|
| "Browser action icon index out of bounds.";
|
| }
|
|
|
| -bool BrowserActionSetIconFunction::RunImpl() {
|
| +bool BrowserActionFunction::RunImpl() {
|
| EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_DICTIONARY));
|
| - const DictionaryValue* args = static_cast<const DictionaryValue*>(args_);
|
| + details_ = static_cast<DictionaryValue*>(args_);
|
| +
|
| + if (details_->HasKey(L"tabId"))
|
| + EXTENSION_FUNCTION_VALIDATE(details_->GetInteger(L"tabId", &tab_id_));
|
|
|
| Extension* extension = dispatcher()->GetExtension();
|
| - if (!extension->browser_action()) {
|
| + browser_action_ = extension->browser_action();
|
| + if (!browser_action_) {
|
| error_ = kNoBrowserActionError;
|
| return false;
|
| }
|
|
|
| - // setIcon can take a variant argument: either a canvas ImageData, or an
|
| - // icon index.
|
| - BinaryValue* binary;
|
| - int icon_index;
|
| - if (args->GetBinary(L"imageData", &binary)) {
|
| - 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 if (args->GetInteger(L"iconIndex", &icon_index)) {
|
| - if (icon_index < 0 || static_cast<size_t>(icon_index) >=
|
| -
|
| - extension->browser_action()->icon_paths().size()) {
|
| - error_ = kIconIndexOutOfBounds;
|
| - return false;
|
| - }
|
| - extension->browser_action_state()->set_icon_index(icon_index);
|
| - extension->browser_action_state()->set_icon(NULL);
|
| - } else {
|
| - EXTENSION_FUNCTION_VALIDATE(false);
|
| - }
|
| + if (!RunBrowserAction())
|
| + return false;
|
|
|
| NotificationService::current()->Notify(
|
| NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
|
| - Source<ExtensionAction>(extension->browser_action()),
|
| - Details<ExtensionActionState>(extension->browser_action_state()));
|
| + Source<ExtensionAction2>(browser_action_),
|
| + NotificationService::NoDetails());
|
| return true;
|
| }
|
|
|
| -bool BrowserActionSetTitleFunction::RunImpl() {
|
| - EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_DICTIONARY));
|
| - DictionaryValue* details = static_cast<DictionaryValue*>(args_);
|
| +bool BrowserActionSetIconFunction::RunBrowserAction() {
|
| + BinaryValue* binary = NULL;
|
| + EXTENSION_FUNCTION_VALIDATE(details_->GetBinary(L"imageData", &binary));
|
| + IPC::Message bitmap_pickle(binary->GetBuffer(), binary->GetSize());
|
| + void* iter = NULL;
|
| + SkBitmap bitmap;
|
| + EXTENSION_FUNCTION_VALIDATE(
|
| + IPC::ReadParam(&bitmap_pickle, &iter, &bitmap));
|
| + browser_action_->SetIcon(tab_id_, bitmap);
|
| + return true;
|
| +}
|
|
|
| +bool BrowserActionSetTitleFunction::RunBrowserAction() {
|
| std::string title;
|
| - EXTENSION_FUNCTION_VALIDATE(details->GetString(L"title", &title));
|
| -
|
| - Extension* extension = dispatcher()->GetExtension();
|
| - if (!extension->browser_action()) {
|
| - error_ = kNoBrowserActionError;
|
| - return false;
|
| - }
|
| -
|
| - extension->browser_action_state()->set_title(title);
|
| -
|
| - NotificationService::current()->Notify(
|
| - NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
|
| - Source<ExtensionAction>(extension->browser_action()),
|
| - Details<ExtensionActionState>(extension->browser_action_state()));
|
| + EXTENSION_FUNCTION_VALIDATE(details_->GetString(L"title", &title));
|
| + browser_action_->SetTitle(tab_id_, title);
|
| return true;
|
| }
|
|
|
| -bool BrowserActionSetBadgeTextFunction::RunImpl() {
|
| - EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_DICTIONARY));
|
| - DictionaryValue* details = static_cast<DictionaryValue*>(args_);
|
| -
|
| +bool BrowserActionSetBadgeTextFunction::RunBrowserAction() {
|
| std::string badge_text;
|
| - EXTENSION_FUNCTION_VALIDATE(details->GetString(L"text", &badge_text));
|
| -
|
| - Extension* extension = dispatcher()->GetExtension();
|
| - if (!extension->browser_action()) {
|
| - error_ = kNoBrowserActionError;
|
| - return false;
|
| - }
|
| -
|
| - extension->browser_action_state()->set_badge_text(badge_text);
|
| -
|
| - NotificationService::current()->Notify(
|
| - NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
|
| - Source<ExtensionAction>(extension->browser_action()),
|
| - Details<ExtensionActionState>(extension->browser_action_state()));
|
| + EXTENSION_FUNCTION_VALIDATE(details_->GetString(L"text", &badge_text));
|
| + browser_action_->SetBadgeText(tab_id_, badge_text);
|
| return true;
|
| }
|
|
|
| -bool BrowserActionSetBadgeBackgroundColorFunction::RunImpl() {
|
| - EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_DICTIONARY));
|
| - DictionaryValue* details = static_cast<DictionaryValue*>(args_);
|
| -
|
| +bool BrowserActionSetBadgeBackgroundColorFunction::RunBrowserAction() {
|
| ListValue* list = NULL;
|
| - EXTENSION_FUNCTION_VALIDATE(details->GetList(L"color", &list));
|
| + EXTENSION_FUNCTION_VALIDATE(details_->GetList(L"color", &list));
|
| EXTENSION_FUNCTION_VALIDATE(list->GetSize() == 4);
|
|
|
| int color_array[4] = {0};
|
| @@ -117,18 +79,7 @@ bool BrowserActionSetBadgeBackgroundColorFunction::RunImpl() {
|
|
|
| SkColor color = SkColorSetARGB(color_array[3], color_array[0], color_array[1],
|
| color_array[2]);
|
| + browser_action_->SetBadgeBackgroundColor(tab_id_, color);
|
|
|
| - Extension* extension = dispatcher()->GetExtension();
|
| - if (!extension->browser_action()) {
|
| - error_ = kNoBrowserActionError;
|
| - return false;
|
| - }
|
| -
|
| - extension->browser_action_state()->set_badge_background_color(color);
|
| -
|
| - NotificationService::current()->Notify(
|
| - NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
|
| - Source<ExtensionAction>(extension->browser_action()),
|
| - Details<ExtensionActionState>(extension->browser_action_state()));
|
| return true;
|
| }
|
|
|