summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-23 06:16:09 +0000
committeryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-23 06:16:09 +0000
commit0f6e52dbe1666cf8ec30cfd59c5983b1930d7d56 (patch)
treef79caee71dd7bda1892bec0f8e1c8f6cc835f97a
parent560ba8af8353b0958f8defd6a4cd786ffad638af (diff)
downloadchromium_src-0f6e52dbe1666cf8ec30cfd59c5983b1930d7d56.zip
chromium_src-0f6e52dbe1666cf8ec30cfd59c5983b1930d7d56.tar.gz
chromium_src-0f6e52dbe1666cf8ec30cfd59c5983b1930d7d56.tar.bz2
Move browser/page action/script badge event dispatch to ExtensionActionAPI.
BUG=165209 Review URL: https://chromiumcodereview.appspot.com/22831016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219238 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/extension_action/extension_action_api.cc133
-rw-r--r--chrome/browser/extensions/api/extension_action/extension_action_api.h42
-rw-r--r--chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.cc1
-rw-r--r--chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h1
-rw-r--r--chrome/browser/extensions/api/extension_action/page_action_apitest.cc18
-rw-r--r--chrome/browser/extensions/api/extension_action/script_badge_apitest.cc6
-rw-r--r--chrome/browser/extensions/api/tabs/tabs_constants.cc1
-rw-r--r--chrome/browser/extensions/api/tabs/tabs_constants.h1
-rw-r--r--chrome/browser/extensions/browser_event_router.cc114
-rw-r--r--chrome/browser/extensions/browser_event_router.h39
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.cc15
-rw-r--r--chrome/browser/extensions/page_action_controller.cc4
-rw-r--r--chrome/browser/extensions/script_badge_controller.cc4
-rw-r--r--chrome/chrome_browser_extensions.gypi1
14 files changed, 187 insertions, 193 deletions
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.cc b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
index 4fda0e8b..3d4c46d 100644
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
@@ -13,6 +13,7 @@
#include "base/values.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h"
+#include "chrome/browser/extensions/event_router.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_function_registry.h"
@@ -31,6 +32,10 @@
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia.h"
+using content::WebContents;
+
+namespace page_actions_keys = extension_page_actions_api_constants;
+
namespace extensions {
namespace {
@@ -231,6 +236,11 @@ ExtensionActionAPI::GetFactoryInstance() {
}
// static
+ExtensionActionAPI* ExtensionActionAPI::Get(Profile* profile) {
+ return ProfileKeyedAPIFactory<ExtensionActionAPI>::GetForProfile(profile);
+}
+
+// static
bool ExtensionActionAPI::GetBrowserActionVisibility(
const ExtensionPrefs* prefs,
const std::string& extension_id) {
@@ -260,6 +270,114 @@ void ExtensionActionAPI::SetBrowserActionVisibility(
content::Details<const std::string>(&extension_id));
}
+// static
+void ExtensionActionAPI::BrowserActionExecuted(
+ Profile* profile,
+ const ExtensionAction& browser_action,
+ WebContents* web_contents) {
+ ExtensionActionExecuted(profile, browser_action, web_contents);
+}
+
+// static
+void ExtensionActionAPI::PageActionExecuted(Profile* profile,
+ const ExtensionAction& page_action,
+ int tab_id,
+ const std::string& url,
+ int button) {
+ DispatchOldPageActionEvent(profile, page_action.extension_id(),
+ page_action.id(), tab_id, url, button);
+ WebContents* web_contents = NULL;
+ if (!ExtensionTabUtil::GetTabById(tab_id, profile, profile->IsOffTheRecord(),
+ NULL, NULL, &web_contents, NULL)) {
+ return;
+ }
+ ExtensionActionExecuted(profile, page_action, web_contents);
+}
+
+// static
+void ExtensionActionAPI::ScriptBadgeExecuted(
+ Profile* profile,
+ const ExtensionAction& script_badge,
+ int tab_id) {
+ WebContents* web_contents = NULL;
+ if (!ExtensionTabUtil::GetTabById(tab_id, profile, profile->IsOffTheRecord(),
+ NULL, NULL, &web_contents, NULL)) {
+ return;
+ }
+ ExtensionActionExecuted(profile, script_badge, web_contents);
+}
+
+// static
+void ExtensionActionAPI::DispatchEventToExtension(
+ Profile* profile,
+ const std::string& extension_id,
+ const char* event_name,
+ scoped_ptr<base::ListValue> event_args) {
+ if (!extensions::ExtensionSystem::Get(profile)->event_router())
+ return;
+
+ scoped_ptr<Event> event(new Event(event_name, event_args.Pass()));
+ event->restrict_to_profile = profile;
+ event->user_gesture = EventRouter::USER_GESTURE_ENABLED;
+ ExtensionSystem::Get(profile)->event_router()->
+ DispatchEventToExtension(extension_id, event.Pass());
+}
+
+// static
+void ExtensionActionAPI::DispatchOldPageActionEvent(
+ Profile* profile,
+ const std::string& extension_id,
+ const std::string& page_action_id,
+ int tab_id,
+ const std::string& url,
+ int button) {
+ scoped_ptr<base::ListValue> args(new base::ListValue());
+ args->Append(new base::StringValue(page_action_id));
+
+ DictionaryValue* data = new DictionaryValue();
+ data->Set(page_actions_keys::kTabIdKey, new base::FundamentalValue(tab_id));
+ data->Set(page_actions_keys::kTabUrlKey, new base::StringValue(url));
+ data->Set(page_actions_keys::kButtonKey,
+ new base::FundamentalValue(button));
+ args->Append(data);
+
+ DispatchEventToExtension(profile, extension_id, "pageActions", args.Pass());
+}
+
+// static
+void ExtensionActionAPI::ExtensionActionExecuted(
+ Profile* profile,
+ const ExtensionAction& extension_action,
+ WebContents* web_contents) {
+ const char* event_name = NULL;
+ switch (extension_action.action_type()) {
+ case ActionInfo::TYPE_BROWSER:
+ event_name = "browserAction.onClicked";
+ break;
+ case ActionInfo::TYPE_PAGE:
+ event_name = "pageAction.onClicked";
+ break;
+ case ActionInfo::TYPE_SCRIPT_BADGE:
+ event_name = "scriptBadge.onClicked";
+ break;
+ case ActionInfo::TYPE_SYSTEM_INDICATOR:
+ // The System Indicator handles its own clicks.
+ break;
+ }
+
+ if (event_name) {
+ scoped_ptr<base::ListValue> args(new base::ListValue());
+ DictionaryValue* tab_value = ExtensionTabUtil::CreateTabValue(
+ web_contents);
+ args->Append(tab_value);
+
+ DispatchEventToExtension(profile,
+ extension_action.extension_id(),
+ event_name,
+ args.Pass());
+ }
+}
+
//
// ExtensionActionStorageManager
//
@@ -702,8 +820,6 @@ bool ScriptBadgeGetAttentionFunction::RunExtensionAction() {
// PageActionsFunction (deprecated)
//
-namespace keys = extension_page_actions_api_constants;
-
PageActionsFunction::PageActionsFunction() {
}
@@ -717,14 +833,17 @@ bool PageActionsFunction::SetPageActionEnabled(bool enable) {
EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &action));
int tab_id;
- EXTENSION_FUNCTION_VALIDATE(action->GetInteger(keys::kTabIdKey, &tab_id));
+ EXTENSION_FUNCTION_VALIDATE(action->GetInteger(
+ page_actions_keys::kTabIdKey, &tab_id));
std::string url;
- EXTENSION_FUNCTION_VALIDATE(action->GetString(keys::kUrlKey, &url));
+ EXTENSION_FUNCTION_VALIDATE(action->GetString(
+ page_actions_keys::kUrlKey, &url));
std::string title;
if (enable) {
- if (action->HasKey(keys::kTitleKey))
- EXTENSION_FUNCTION_VALIDATE(action->GetString(keys::kTitleKey, &title));
+ if (action->HasKey(page_actions_keys::kTitleKey))
+ EXTENSION_FUNCTION_VALIDATE(action->GetString(
+ page_actions_keys::kTitleKey, &title));
}
ExtensionAction* page_action =
@@ -736,7 +855,7 @@ bool PageActionsFunction::SetPageActionEnabled(bool enable) {
}
// Find the WebContents that contains this tab id.
- content::WebContents* contents = NULL;
+ WebContents* contents = NULL;
bool result = ExtensionTabUtil::GetTabById(
tab_id, profile(), include_incognito(), NULL, NULL, &contents, NULL);
if (!result || !contents) {
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.h b/chrome/browser/extensions/api/extension_action/extension_action_api.h
index 2074a377..aa82104 100644
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.h
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.h
@@ -29,18 +29,60 @@ class ExtensionActionAPI : public ProfileKeyedAPI {
explicit ExtensionActionAPI(Profile* profile);
virtual ~ExtensionActionAPI();
+ // Convenience method to get the instance for a profile.
+ static ExtensionActionAPI* Get(Profile* profile);
+
static bool GetBrowserActionVisibility(const ExtensionPrefs* prefs,
const std::string& extension_id);
static void SetBrowserActionVisibility(ExtensionPrefs* prefs,
const std::string& extension_id,
bool visible);
+ // Fires the onClicked event for page_action.
+ static void PageActionExecuted(Profile* profile,
+ const ExtensionAction& page_action,
+ int tab_id,
+ const std::string& url,
+ int button);
+
+ // Fires the onClicked event for script_badge.
+ static void ScriptBadgeExecuted(Profile* profile,
+ const ExtensionAction& script_badge,
+ int tab_id);
+
+ // Fires the onClicked event for browser_action.
+ static void BrowserActionExecuted(Profile* profile,
+ const ExtensionAction& browser_action,
+ content::WebContents* web_contents);
+
// ProfileKeyedAPI implementation.
static ProfileKeyedAPIFactory<ExtensionActionAPI>* GetFactoryInstance();
private:
friend class ProfileKeyedAPIFactory<ExtensionActionAPI>;
+ // The DispatchEvent methods forward events to the |profile|'s event router.
+ static void DispatchEventToExtension(Profile* profile,
+ const std::string& extension_id,
+ const char* event_name,
+ scoped_ptr<base::ListValue> event_args);
+
+ // Called to dispatch a deprecated style page action click event that was
+ // registered like:
+ // chrome.pageActions["name"].addListener(function(actionId, info){})
+ static void DispatchOldPageActionEvent(Profile* profile,
+ const std::string& extension_id,
+ const std::string& page_action_id,
+ int tab_id,
+ const std::string& url,
+ int button);
+
+ // Called when either a browser or page action is executed. Figures out which
+ // event to send based on what the extension wants.
+ static void ExtensionActionExecuted(Profile* profile,
+ const ExtensionAction& extension_action,
+ content::WebContents* web_contents);
+
// ProfileKeyedAPI implementation.
static const char* service_name() { return "ExtensionActionAPI"; }
diff --git a/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.cc b/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.cc
index 029dfcf..8ad3dac 100644
--- a/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.cc
+++ b/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.cc
@@ -7,6 +7,7 @@
namespace extension_page_actions_api_constants {
const char kTabIdKey[] = "tabId";
+const char kTabUrlKey[] = "tabUrl";
const char kUrlKey[] = "url";
const char kTitleKey[] = "title";
const char kButtonKey[] = "button";
diff --git a/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h b/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h
index 5f3ad9f..c8cfcc6 100644
--- a/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h
+++ b/chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h
@@ -11,6 +11,7 @@ namespace extension_page_actions_api_constants {
// Keys.
extern const char kTabIdKey[];
+extern const char kTabUrlKey[];
extern const char kUrlKey[];
extern const char kTitleKey[];
extern const char kButtonKey[];
diff --git a/chrome/browser/extensions/api/extension_action/page_action_apitest.cc b/chrome/browser/extensions/api/extension_action/page_action_apitest.cc
index cad5250..f2d0078 100644
--- a/chrome/browser/extensions/api/extension_action/page_action_apitest.cc
+++ b/chrome/browser/extensions/api/extension_action/page_action_apitest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/extensions/browser_event_router.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_icon_factory.h"
#include "chrome/browser/extensions/extension_action_manager.h"
@@ -60,9 +60,7 @@ IN_PROC_BROWSER_TEST_F(PageActionApiTest, Basic) {
ResultCatcher catcher;
int tab_id = ExtensionTabUtil::GetTabId(
browser()->tab_strip_model()->GetActiveWebContents());
- ExtensionService* service = extensions::ExtensionSystem::Get(
- browser()->profile())->extension_service();
- service->browser_event_router()->PageActionExecuted(
+ ExtensionActionAPI::PageActionExecuted(
browser()->profile(), *action, tab_id, std::string(), 0);
EXPECT_TRUE(catcher.GetNextResult());
}
@@ -105,9 +103,7 @@ IN_PROC_BROWSER_TEST_F(PageActionApiTest, AddPopup) {
// install a page action popup.
{
ResultCatcher catcher;
- ExtensionService* service = extensions::ExtensionSystem::Get(
- browser()->profile())->extension_service();
- service->browser_event_router()->PageActionExecuted(
+ ExtensionActionAPI::PageActionExecuted(
browser()->profile(), *page_action, tab_id, std::string(), 1);
ASSERT_TRUE(catcher.GetNextResult());
}
@@ -184,10 +180,8 @@ IN_PROC_BROWSER_TEST_F(PageActionApiTest, OldPageActions) {
ResultCatcher catcher;
int tab_id = ExtensionTabUtil::GetTabId(
browser()->tab_strip_model()->GetActiveWebContents());
- ExtensionService* service = extensions::ExtensionSystem::Get(
- browser()->profile())->extension_service();
ExtensionAction* page_action = GetPageAction(*extension);
- service->browser_event_router()->PageActionExecuted(
+ ExtensionActionAPI::PageActionExecuted(
browser()->profile(), *page_action, tab_id, std::string(), 1);
EXPECT_TRUE(catcher.GetNextResult());
}
@@ -257,9 +251,7 @@ IN_PROC_BROWSER_TEST_F(PageActionApiTest, TestTriggerPageAction) {
ResultCatcher catcher;
int tab_id = ExtensionTabUtil::GetTabId(
browser()->tab_strip_model()->GetActiveWebContents());
- ExtensionService* service = extensions::ExtensionSystem::Get(
- browser()->profile())->extension_service();
- service->browser_event_router()->PageActionExecuted(
+ ExtensionActionAPI::PageActionExecuted(
browser()->profile(), *page_action, tab_id, std::string(), 0);
EXPECT_TRUE(catcher.GetNextResult());
}
diff --git a/chrome/browser/extensions/api/extension_action/script_badge_apitest.cc b/chrome/browser/extensions/api/extension_action/script_badge_apitest.cc
index fd7264a..5cd0c53 100644
--- a/chrome/browser/extensions/api/extension_action/script_badge_apitest.cc
+++ b/chrome/browser/extensions/api/extension_action/script_badge_apitest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/extensions/browser_event_router.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_apitest.h"
@@ -77,9 +77,7 @@ IN_PROC_BROWSER_TEST_F(ScriptBadgeApiTest, Basics) {
{
// Simulate the script badge being clicked.
ResultCatcher catcher;
- ExtensionService* service = extensions::ExtensionSystem::Get(
- browser()->profile())->extension_service();
- service->browser_event_router()->ScriptBadgeExecuted(
+ ExtensionActionAPI::ScriptBadgeExecuted(
browser()->profile(), *script_badge, tab_id);
EXPECT_TRUE(catcher.GetNextResult());
}
diff --git a/chrome/browser/extensions/api/tabs/tabs_constants.cc b/chrome/browser/extensions/api/tabs/tabs_constants.cc
index 27c2aab..457361e 100644
--- a/chrome/browser/extensions/api/tabs/tabs_constants.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_constants.cc
@@ -40,7 +40,6 @@ const char kStatusKey[] = "status";
const char kTabIdKey[] = "tabId";
const char kTabIdsKey[] = "tabIds";
const char kTabsKey[] = "tabs";
-const char kTabUrlKey[] = "tabUrl";
const char kTitleKey[] = "title";
const char kToIndexKey[] = "toIndex";
const char kTopKey[] = "top";
diff --git a/chrome/browser/extensions/api/tabs/tabs_constants.h b/chrome/browser/extensions/api/tabs/tabs_constants.h
index 6ac0b93..67e862a 100644
--- a/chrome/browser/extensions/api/tabs/tabs_constants.h
+++ b/chrome/browser/extensions/api/tabs/tabs_constants.h
@@ -43,7 +43,6 @@ extern const char kStatusKey[];
extern const char kTabIdKey[];
extern const char kTabIdsKey[];
extern const char kTabsKey[];
-extern const char kTabUrlKey[];
extern const char kTitleKey[];
extern const char kToIndexKey[];
extern const char kTopKey[];
diff --git a/chrome/browser/extensions/browser_event_router.cc b/chrome/browser/extensions/browser_event_router.cc
index baa4171..c9a9b07 100644
--- a/chrome/browser/extensions/browser_event_router.cc
+++ b/chrome/browser/extensions/browser_event_router.cc
@@ -7,11 +7,9 @@
#include "base/json/json_writer.h"
#include "base/values.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h"
#include "chrome/browser/extensions/api/tabs/windows_event_router.h"
-#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/extension_tab_util.h"
@@ -21,7 +19,6 @@
#include "chrome/browser/ui/browser_iterator.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_controller.h"
@@ -31,7 +28,6 @@
#include "content/public/browser/web_contents.h"
namespace tab_keys = extensions::tabs_constants;
-namespace page_actions_keys = extension_page_actions_api_constants;
using content::NavigationController;
using content::WebContents;
@@ -394,23 +390,6 @@ void BrowserEventRouter::DispatchEvent(
ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
}
-void BrowserEventRouter::DispatchEventToExtension(
- Profile* profile,
- const std::string& extension_id,
- const char* event_name,
- scoped_ptr<base::ListValue> event_args,
- EventRouter::UserGestureState user_gesture) {
- if (!profile_->IsSameProfile(profile) ||
- !extensions::ExtensionSystem::Get(profile)->event_router())
- return;
-
- scoped_ptr<Event> event(new Event(event_name, event_args.Pass()));
- event->restrict_to_profile = profile;
- event->user_gesture = user_gesture;
- ExtensionSystem::Get(profile)->event_router()->
- DispatchEventToExtension(extension_id, event.Pass());
-}
-
void BrowserEventRouter::DispatchSimpleBrowserEvent(
Profile* profile, const int window_id, const char* event_name) {
if (!profile_->IsSameProfile(profile))
@@ -555,97 +534,4 @@ void BrowserEventRouter::TabPinnedStateChanged(WebContents* contents,
void BrowserEventRouter::TabStripEmpty() {}
-void BrowserEventRouter::DispatchOldPageActionEvent(
- Profile* profile,
- const std::string& extension_id,
- const std::string& page_action_id,
- int tab_id,
- const std::string& url,
- int button) {
- scoped_ptr<base::ListValue> args(new base::ListValue());
- args->Append(new base::StringValue(page_action_id));
-
- DictionaryValue* data = new DictionaryValue();
- data->Set(tab_keys::kTabIdKey, new base::FundamentalValue(tab_id));
- data->Set(tab_keys::kTabUrlKey, new base::StringValue(url));
- data->Set(page_actions_keys::kButtonKey,
- new base::FundamentalValue(button));
- args->Append(data);
-
- DispatchEventToExtension(profile, extension_id, "pageActions", args.Pass(),
- EventRouter::USER_GESTURE_ENABLED);
-}
-
-void BrowserEventRouter::BrowserActionExecuted(
- const ExtensionAction& browser_action,
- Browser* browser) {
- Profile* profile = browser->profile();
- WebContents* web_contents = NULL;
- int tab_id = 0;
- if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
- return;
- ExtensionActionExecuted(profile, browser_action, web_contents);
-}
-
-void BrowserEventRouter::PageActionExecuted(Profile* profile,
- const ExtensionAction& page_action,
- int tab_id,
- const std::string& url,
- int button) {
- DispatchOldPageActionEvent(profile, page_action.extension_id(),
- page_action.id(), tab_id, url, button);
- WebContents* web_contents = NULL;
- if (!ExtensionTabUtil::GetTabById(tab_id, profile, profile->IsOffTheRecord(),
- NULL, NULL, &web_contents, NULL)) {
- return;
- }
- ExtensionActionExecuted(profile, page_action, web_contents);
-}
-
-void BrowserEventRouter::ScriptBadgeExecuted(
- Profile* profile,
- const ExtensionAction& script_badge,
- int tab_id) {
- WebContents* web_contents = NULL;
- if (!ExtensionTabUtil::GetTabById(tab_id, profile, profile->IsOffTheRecord(),
- NULL, NULL, &web_contents, NULL)) {
- return;
- }
- ExtensionActionExecuted(profile, script_badge, web_contents);
-}
-
-void BrowserEventRouter::ExtensionActionExecuted(
- Profile* profile,
- const ExtensionAction& extension_action,
- WebContents* web_contents) {
- const char* event_name = NULL;
- switch (extension_action.action_type()) {
- case ActionInfo::TYPE_BROWSER:
- event_name = "browserAction.onClicked";
- break;
- case ActionInfo::TYPE_PAGE:
- event_name = "pageAction.onClicked";
- break;
- case ActionInfo::TYPE_SCRIPT_BADGE:
- event_name = "scriptBadge.onClicked";
- break;
- case ActionInfo::TYPE_SYSTEM_INDICATOR:
- // The System Indicator handles its own clicks.
- break;
- }
-
- if (event_name) {
- scoped_ptr<base::ListValue> args(new base::ListValue());
- DictionaryValue* tab_value = ExtensionTabUtil::CreateTabValue(
- web_contents);
- args->Append(tab_value);
-
- DispatchEventToExtension(profile,
- extension_action.extension_id(),
- event_name,
- args.Pass(),
- EventRouter::USER_GESTURE_ENABLED);
- }
-}
-
} // namespace extensions
diff --git a/chrome/browser/extensions/browser_event_router.h b/chrome/browser/extensions/browser_event_router.h
index f424f57..7450ccb 100644
--- a/chrome/browser/extensions/browser_event_router.h
+++ b/chrome/browser/extensions/browser_event_router.h
@@ -12,7 +12,6 @@
#include "base/compiler_specific.h"
#include "chrome/browser/extensions/api/tabs/tabs_api.h"
#include "chrome/browser/extensions/event_router.h"
-#include "chrome/browser/extensions/extension_toolbar_model.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#include "content/public/browser/notification_registrar.h"
@@ -69,22 +68,6 @@ class BrowserEventRouter : public TabStripModelObserver,
int index) OVERRIDE;
virtual void TabStripEmpty() OVERRIDE;
- // Fires the onClicked event for page_action.
- void PageActionExecuted(Profile* profile,
- const ExtensionAction& page_action,
- int tab_id,
- const std::string& url,
- int button);
-
- // Fires the onClicked event for script_badge.
- void ScriptBadgeExecuted(Profile* profile,
- const ExtensionAction& script_badge,
- int tab_id);
-
- // Fires the onClicked event for browser_action.
- void BrowserActionExecuted(const ExtensionAction& browser_action,
- Browser* browser);
-
// content::NotificationObserver.
virtual void Observe(int type,
const content::NotificationSource& source,
@@ -109,12 +92,6 @@ class BrowserEventRouter : public TabStripModelObserver,
scoped_ptr<base::ListValue> args,
EventRouter::UserGestureState user_gesture);
- void DispatchEventToExtension(Profile* profile,
- const std::string& extension_id,
- const char* event_name,
- scoped_ptr<base::ListValue> event_args,
- EventRouter::UserGestureState user_gesture);
-
void DispatchEventsAcrossIncognito(
Profile* profile,
const char* event_name,
@@ -130,16 +107,6 @@ class BrowserEventRouter : public TabStripModelObserver,
void DispatchTabUpdatedEvent(content::WebContents* contents,
scoped_ptr<DictionaryValue> changed_properties);
- // Called to dispatch a deprecated style page action click event that was
- // registered like:
- // chrome.pageActions["name"].addListener(function(actionId, info){})
- void DispatchOldPageActionEvent(Profile* profile,
- const std::string& extension_id,
- const std::string& page_action_id,
- int tab_id,
- const std::string& url,
- int button);
-
// Register ourselves to receive the various notifications we are interested
// in for a browser.
void RegisterForBrowserNotifications(Browser* browser);
@@ -192,12 +159,6 @@ class BrowserEventRouter : public TabStripModelObserver,
// found, NULL if not.
TabEntry* GetTabEntry(const content::WebContents* contents);
- // Called when either a browser or page action is executed. Figures out which
- // event to send based on what the extension wants.
- void ExtensionActionExecuted(Profile* profile,
- const ExtensionAction& extension_action,
- content::WebContents* web_contents);
-
std::map<int, TabEntry> tab_entries_;
// The main profile that owns this event router.
diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc
index 8d23097..c869fd9 100644
--- a/chrome/browser/extensions/extension_toolbar_model.cc
+++ b/chrome/browser/extensions/extension_toolbar_model.cc
@@ -7,7 +7,6 @@
#include "base/prefs/pref_service.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
-#include "chrome/browser/extensions/browser_event_router.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_prefs.h"
@@ -130,13 +129,9 @@ ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction(
const Extension* extension,
Browser* browser,
GURL* popup_url_out) {
- content::WebContents* web_contents =
- browser->tab_strip_model()->GetActiveWebContents();
- if (!web_contents)
- return ACTION_NONE;
-
- int tab_id = ExtensionTabUtil::GetTabId(web_contents);
- if (tab_id < 0)
+ content::WebContents* web_contents = NULL;
+ int tab_id = 0;
+ if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
return ACTION_NONE;
ExtensionAction* browser_action =
@@ -156,8 +151,8 @@ ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction(
return ACTION_SHOW_POPUP;
}
- service_->browser_event_router()->BrowserActionExecuted(
- *browser_action, browser);
+ extensions::ExtensionActionAPI::BrowserActionExecuted(
+ service_->profile(), *browser_action, web_contents);
return ACTION_NONE;
}
diff --git a/chrome/browser/extensions/page_action_controller.cc b/chrome/browser/extensions/page_action_controller.cc
index 62dab8f..4c0cb07 100644
--- a/chrome/browser/extensions/page_action_controller.cc
+++ b/chrome/browser/extensions/page_action_controller.cc
@@ -5,7 +5,7 @@
#include "chrome/browser/extensions/page_action_controller.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/browser_event_router.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
@@ -72,7 +72,7 @@ LocationBarController::Action PageActionController::OnClicked(
if (page_action->HasPopup(tab_id))
return ACTION_SHOW_POPUP;
- GetExtensionService()->browser_event_router()->PageActionExecuted(
+ ExtensionActionAPI::PageActionExecuted(
profile(), *page_action, tab_id,
web_contents()->GetURL().spec(), mouse_button);
return ACTION_NONE;
diff --git a/chrome/browser/extensions/script_badge_controller.cc b/chrome/browser/extensions/script_badge_controller.cc
index 17cfd13..a2f6e6b 100644
--- a/chrome/browser/extensions/script_badge_controller.cc
+++ b/chrome/browser/extensions/script_badge_controller.cc
@@ -8,7 +8,7 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/browser_event_router.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_service.h"
@@ -106,7 +106,7 @@ LocationBarController::Action ScriptBadgeController::OnClicked(
NotifyChange();
// Fire the scriptBadge.onClicked event.
- GetExtensionService()->browser_event_router()->ScriptBadgeExecuted(
+ ExtensionActionAPI::ScriptBadgeExecuted(
profile(), *script_badge, SessionID::IdForTab(web_contents()));
// TODO(jyasskin): The fallback order should be user-defined popup ->
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index 86ac059..c9a4060 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -856,6 +856,7 @@
# less intertwined in the main codebase.
['exclude', '^browser/extensions/api/'],
['exclude', '^browser/extensions/.*_api\.cc$'],
+ ['exclude', '^browser/extensions/browser_event_router.cc'],
['include', '^browser/extensions/api/activity_log_private/activity_log_private_api.cc'],
['include', '^browser/extensions/api/activity_log_private/activity_log_private_api.h'],
['include', '^browser/extensions/api/alarms/alarm_manager.cc'],