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

Unified Diff: chrome/browser/ui/views/browser_action_view.cc

Issue 10701005: Extension Commands changed by the user now take effect immediately. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 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
Index: chrome/browser/ui/views/browser_action_view.cc
===================================================================
--- chrome/browser/ui/views/browser_action_view.cc (revision 144430)
+++ chrome/browser/ui/views/browser_action_view.cc (working copy)
@@ -13,6 +13,7 @@
#include "chrome/browser/ui/views/toolbar_view.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "grit/theme_resources_standard.h"
@@ -45,11 +46,16 @@
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED,
content::Source<ExtensionAction>(browser_action_));
+ registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED,
+ content::Source<Profile>(
+ panel_->profile()->GetOriginalProfile()));
+ registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED,
+ content::Source<Profile>(
+ panel_->profile()->GetOriginalProfile()));
}
void BrowserActionButton::Destroy() {
- if (keybinding_.get() && panel_->GetFocusManager())
- panel_->GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this);
+ MaybeUnregisterExtensionCommand(false);
if (context_menu_) {
context_menu_->Cancel();
@@ -81,20 +87,7 @@
UpdateState();
}
- extensions::CommandService* command_service =
- extensions::CommandServiceFactory::GetForProfile(
- panel_->browser()->profile());
- extensions::Command browser_action_command;
- if (command_service->GetBrowserActionCommand(
- extension_->id(),
- extensions::CommandService::ACTIVE_ONLY,
- &browser_action_command,
- NULL)) {
- keybinding_.reset(new ui::Accelerator(
- browser_action_command.accelerator()));
- panel_->GetFocusManager()->RegisterAccelerator(
- *keybinding_.get(), ui::AcceleratorManager::kHighPriority, this);
- }
+ MaybeRegisterExtensionCommand();
}
MenuButton::ViewHierarchyChanged(is_add, parent, child);
@@ -185,11 +178,32 @@
void BrowserActionButton::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
- DCHECK(type == chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED);
- UpdateState();
- // The browser action may have become visible/hidden so we need to make
- // sure the state gets updated.
- panel_->OnBrowserActionVisibilityChanged();
+ switch (type) {
+ case chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED:
+ UpdateState();
+ // The browser action may have become visible/hidden so we need to make
+ // sure the state gets updated.
+ panel_->OnBrowserActionVisibilityChanged();
+ break;
+ case chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED:
+ case chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED: {
+ std::pair<const std::string, const std::string>* payload =
+ content::Details<std::pair<const std::string, const std::string> >(
+ details).ptr();
+ if (extension_->id() == payload->first &&
+ payload->second ==
+ extension_manifest_values::kBrowserActionKeybindingEvent) {
+ if (type == chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED)
+ MaybeRegisterExtensionCommand();
+ else
+ MaybeUnregisterExtensionCommand(true);
+ }
+ break;
+ }
+ default:
+ NOTREACHED();
+ break;
+ }
}
bool BrowserActionButton::Activate() {
@@ -287,6 +301,42 @@
BrowserActionButton::~BrowserActionButton() {
}
+void BrowserActionButton::MaybeRegisterExtensionCommand() {
+ extensions::CommandService* command_service =
+ extensions::CommandServiceFactory::GetForProfile(
+ panel_->browser()->profile());
+ extensions::Command browser_action_command;
+ if (command_service->GetBrowserActionCommand(
+ extension_->id(),
+ extensions::CommandService::ACTIVE_ONLY,
+ &browser_action_command,
+ NULL)) {
+ keybinding_.reset(new ui::Accelerator(
+ browser_action_command.accelerator()));
+ panel_->GetFocusManager()->RegisterAccelerator(
+ *keybinding_.get(), ui::AcceleratorManager::kHighPriority, this);
+ }
+}
+
+void BrowserActionButton::MaybeUnregisterExtensionCommand(bool only_if_active) {
+ if (!keybinding_.get() || !panel_->GetFocusManager())
+ return;
+
+ extensions::CommandService* command_service =
+ extensions::CommandServiceFactory::GetForProfile(
+ panel_->browser()->profile());
+
+ extensions::Command browser_action_command;
+ if (!only_if_active || !command_service->GetBrowserActionCommand(
+ extension_->id(),
+ extensions::CommandService::ACTIVE_ONLY,
+ &browser_action_command,
+ NULL)) {
+ panel_->GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this);
+ }
+}
+
+
////////////////////////////////////////////////////////////////////////////////
// BrowserActionView

Powered by Google App Engine
This is Rietveld 408576698