diff options
author | yoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-19 23:55:07 +0000 |
---|---|---|
committer | yoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-19 23:55:07 +0000 |
commit | d9709150daa65206e117a3ca8c409c266cb7bcd4 (patch) | |
tree | 695f0d2f0b0dbcab9e2e0b33ac74d09b980fdea4 | |
parent | 813d646b7778d251fd9f418a8e61cb0ee214b8ec (diff) | |
download | chromium_src-d9709150daa65206e117a3ca8c409c266cb7bcd4.zip chromium_src-d9709150daa65206e117a3ca8c409c266cb7bcd4.tar.gz chromium_src-d9709150daa65206e117a3ca8c409c266cb7bcd4.tar.bz2 |
Have UIs call BrowserActionExecuted through ExtensionToolbarModel.
BUG=93903
TEST=no
TBR=erg@chromium.org,rsesek@chromium.org,sky@chromium.org
Review URL: http://codereview.chromium.org/10086024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133090 0039d316-1c4b-4281-b951-d872f2087c98
10 files changed, 49 insertions, 39 deletions
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc index 8236863f..0043c26 100644 --- a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc +++ b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc @@ -76,8 +76,8 @@ IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, Basic) { test_server()->GetURL("files/extensions/test_file.txt")); ExtensionService* service = browser()->profile()->GetExtensionService(); - service->browser_event_router()->BrowserActionExecuted( - browser()->profile(), action->extension_id(), browser()); + service->toolbar_model()->ExecuteBrowserAction( + action->extension_id(), browser()); // Verify the command worked. WebContents* tab = browser()->GetSelectedWebContents(); @@ -400,9 +400,8 @@ IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, DISABLED_CloseBackgroundPage) { content::NotificationService::AllSources()); // Click the browser action. - browser()->profile()->GetExtensionService()->browser_event_router()-> - BrowserActionExecuted( - browser()->profile(), action->extension_id(), browser()); + browser()->profile()->GetExtensionService()->toolbar_model()-> + ExecuteBrowserAction(action->extension_id(), browser()); // It can take a moment for the background page to actually get destroyed // so we wait for the notification before checking that it's really gone diff --git a/chrome/browser/extensions/extension_browser_event_router.cc b/chrome/browser/extensions/extension_browser_event_router.cc index 3346a9e..6f726d5 100644 --- a/chrome/browser/extensions/extension_browser_event_router.cc +++ b/chrome/browser/extensions/extension_browser_event_router.cc @@ -71,9 +71,10 @@ DictionaryValue* ExtensionBrowserEventRouter::TabEntry::DidNavigate( return changed_properties; } -void ExtensionBrowserEventRouter::Init() { +void ExtensionBrowserEventRouter::Init(ExtensionToolbarModel* model) { if (initialized_) return; + model->AddObserver(this); BrowserList::AddObserver(this); #if defined(TOOLKIT_VIEWS) views::WidgetFocusManager::GetInstance()->AddFocusChangeListener(this); @@ -628,6 +629,17 @@ void ExtensionBrowserEventRouter::DispatchOldPageActionEvent( DispatchEventToExtension(profile, extension_id, "pageActions", json_args); } +void ExtensionBrowserEventRouter::BrowserActionExecuted( + const std::string& extension_id, Browser* browser) { + Profile* profile = browser->profile(); + TabContentsWrapper* tab_contents = NULL; + int tab_id = 0; + if (!ExtensionTabUtil::GetDefaultTab(browser, &tab_contents, &tab_id)) + return; + DispatchEventWithTab(profile, extension_id, "browserAction.onClicked", + tab_contents->web_contents(), true); +} + void ExtensionBrowserEventRouter::PageActionExecuted( Profile* profile, const std::string& extension_id, @@ -646,16 +658,6 @@ void ExtensionBrowserEventRouter::PageActionExecuted( tab_contents->web_contents(), true); } -void ExtensionBrowserEventRouter::BrowserActionExecuted( - Profile* profile, const std::string& extension_id, Browser* browser) { - TabContentsWrapper* tab_contents = NULL; - int tab_id = 0; - if (!ExtensionTabUtil::GetDefaultTab(browser, &tab_contents, &tab_id)) - return; - DispatchEventWithTab(profile, extension_id, "browserAction.onClicked", - tab_contents->web_contents(), true); -} - void ExtensionBrowserEventRouter::CommandExecuted( Profile* profile, const std::string& extension_id, diff --git a/chrome/browser/extensions/extension_browser_event_router.h b/chrome/browser/extensions/extension_browser_event_router.h index f68592e..b79a6e4 100644 --- a/chrome/browser/extensions/extension_browser_event_router.h +++ b/chrome/browser/extensions/extension_browser_event_router.h @@ -12,6 +12,7 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" #include "chrome/browser/extensions/extension_tabs_module.h" +#include "chrome/browser/extensions/extension_toolbar_model.h" #include "chrome/browser/tabs/tab_strip_model_observer.h" #include "chrome/browser/ui/browser_list.h" #include "content/public/browser/notification_registrar.h" @@ -37,13 +38,14 @@ class ExtensionBrowserEventRouter : public TabStripModelObserver, public ui::ActiveWindowWatcherXObserver, #endif public BrowserList::Observer, + public ExtensionToolbarModel::Observer, public content::NotificationObserver { public: explicit ExtensionBrowserEventRouter(Profile* profile); virtual ~ExtensionBrowserEventRouter(); // Must be called once. Subsequent calls have no effect. - void Init(); + void Init(ExtensionToolbarModel* model); // BrowserList::Observer virtual void OnBrowserAdded(const Browser* browser) OVERRIDE; @@ -94,10 +96,6 @@ class ExtensionBrowserEventRouter : public TabStripModelObserver, int tab_id, const std::string& url, int button); - // Browser Actions execute event. - void BrowserActionExecuted(Profile* profile, - const std::string& extension_id, - Browser* browser); // A keyboard shortcut resulted in an extension command. void CommandExecuted(Profile* profile, @@ -116,6 +114,10 @@ class ExtensionBrowserEventRouter : public TabStripModelObserver, // and Observe/NAV_ENTRY_COMMITTED. void TabUpdated(content::WebContents* contents, bool did_navigate); + // ExtensionToolbarModel::Observer. Browser Actions execute event. + virtual void BrowserActionExecuted(const std::string& extension_id, + Browser* browser) OVERRIDE; + // The DispatchEvent methods forward events to the |profile|'s event router. // The ExtensionBrowserEventRouter listens to events for all profiles, // so we avoid duplication by dropping events destined for other profiles. diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index be176fd..0b78711 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -540,7 +540,7 @@ void ExtensionService::InitEventRouters() { history_event_router_.reset(new HistoryExtensionEventRouter()); history_event_router_->ObserveProfile(profile_); browser_event_router_.reset(new ExtensionBrowserEventRouter(profile_)); - browser_event_router_->Init(); + browser_event_router_->Init(&toolbar_model_); preference_event_router_.reset(new ExtensionPreferenceEventRouter(profile_)); bookmark_event_router_.reset(new BookmarkExtensionEventRouter( profile_->GetBookmarkModel())); diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc index 7073be4..6d4614d 100644 --- a/chrome/browser/extensions/extension_toolbar_model.cc +++ b/chrome/browser/extensions/extension_toolbar_model.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,6 +8,7 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/extensions/extension.h" #include "chrome/common/pref_names.h" @@ -75,6 +76,12 @@ void ExtensionToolbarModel::MoveBrowserAction(const Extension* extension, UpdatePrefs(); } +void ExtensionToolbarModel::ExecuteBrowserAction( + const std::string& extension_id, Browser* browser) { + FOR_EACH_OBSERVER(Observer, observers_, + BrowserActionExecuted(extension_id, browser)); +} + void ExtensionToolbarModel::SetVisibleIconCount(int count) { visible_icon_count_ = count == static_cast<int>(size()) ? -1 : count; prefs_->SetInteger(prefs::kExtensionToolbarSize, visible_icon_count_); diff --git a/chrome/browser/extensions/extension_toolbar_model.h b/chrome/browser/extensions/extension_toolbar_model.h index 52be1bf..8dca018 100644 --- a/chrome/browser/extensions/extension_toolbar_model.h +++ b/chrome/browser/extensions/extension_toolbar_model.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -12,6 +12,7 @@ #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +class Browser; class ExtensionService; class PrefService; @@ -35,6 +36,11 @@ class ExtensionToolbarModel : public content::NotificationObserver { // The browser action button for |extension| has been moved to |index|. virtual void BrowserActionMoved(const Extension* extension, int index) {} + // The browser action button for |extension_id| (which was not a popup) was + // clicked, executing it. + virtual void BrowserActionExecuted(const std::string& extension_id, + Browser* browser) {} + // Called when the model has finished loading. virtual void ModelLoaded() {} @@ -46,6 +52,7 @@ class ExtensionToolbarModel : public content::NotificationObserver { void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); void MoveBrowserAction(const Extension* extension, int index); + void ExecuteBrowserAction(const std::string& extension_id, Browser* browser); // If count == size(), this will set the visible icon count to -1, meaning // "show all actions". void SetVisibleIconCount(int count); diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm index d41b459..046f2e5 100644 --- a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm +++ b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -736,9 +736,7 @@ class ExtensionServiceObserverBridge : public content::NotificationObserver, arrowLocation:info_bubble::kTopRight devMode:NO]; } else { - ExtensionService* service = profile_->GetExtensionService(); - service->browser_event_router()->BrowserActionExecuted( - profile_, action->extension_id(), browser_); + toolbarModel_->ExecuteBrowserAction(action->extension_id(), browser_); } } diff --git a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc index 320863a..018000e 100644 --- a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc +++ b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc @@ -313,11 +313,8 @@ class BrowserActionButton : public content::NotificationObserver, if (action->ShowPopup()) return; - ExtensionService* service = - action->toolbar_->browser()->profile()->GetExtensionService(); - service->browser_event_router()->BrowserActionExecuted( - action->toolbar_->browser()->profile(), action->extension_->id(), - action->toolbar_->browser()); + action->toolbar_->model()->ExecuteBrowserAction( + action->extension_->id(), action->toolbar_->browser()); } static gboolean OnExposeEvent(GtkWidget* widget, @@ -791,9 +788,7 @@ void BrowserActionsToolbarGtk::ExecuteCommand(int command_id) { ExtensionPopupGtk::Show( browser_action->GetPopupUrl(tab_id), browser(), chevron()); } else { - ExtensionService* service = browser()->profile()->GetExtensionService(); - service->browser_event_router()->BrowserActionExecuted( - browser()->profile(), extension->id(), browser()); + model_->ExecuteBrowserAction(extension->id(), browser()); } } diff --git a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h index 60e62f9..bc2329b 100644 --- a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h +++ b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h @@ -55,6 +55,8 @@ class BrowserActionsToolbarGtk : public ExtensionToolbarModel::Observer, Browser* browser() { return browser_; } + ExtensionToolbarModel* model() { return model_; } + // Returns the currently selected tab ID, or -1 if there is none. int GetCurrentTabId(); diff --git a/chrome/browser/ui/views/browser_actions_container.cc b/chrome/browser/ui/views/browser_actions_container.cc index 3d7350b..02c0565 100644 --- a/chrome/browser/ui/views/browser_actions_container.cc +++ b/chrome/browser/ui/views/browser_actions_container.cc @@ -509,9 +509,7 @@ void BrowserActionsContainer::OnBrowserActionExecuted( // Popups just display. No notification to the extension. // TODO(erikkay): should there be? if (!button->IsPopup()) { - ExtensionService* service = profile_->GetExtensionService(); - service->browser_event_router()->BrowserActionExecuted( - profile_, browser_action->extension_id(), browser_); + model_->ExecuteBrowserAction(browser_action->extension_id(), browser_); return; } |