summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-19 23:55:07 +0000
committeryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-19 23:55:07 +0000
commitd9709150daa65206e117a3ca8c409c266cb7bcd4 (patch)
tree695f0d2f0b0dbcab9e2e0b33ac74d09b980fdea4
parent813d646b7778d251fd9f418a8e61cb0ee214b8ec (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/api/extension_action/browser_action_apitest.cc9
-rw-r--r--chrome/browser/extensions/extension_browser_event_router.cc24
-rw-r--r--chrome/browser/extensions/extension_browser_event_router.h12
-rw-r--r--chrome/browser/extensions/extension_service.cc2
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.cc9
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.h9
-rw-r--r--chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm6
-rw-r--r--chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc11
-rw-r--r--chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h2
-rw-r--r--chrome/browser/ui/views/browser_actions_container.cc4
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;
}