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

Unified Diff: chrome/browser/extensions/extension_browser_event_router.cc

Issue 10696208: Move ExtensionEventRouter and related into extensions namespace (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed bug + latest master Created 8 years, 5 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/extensions/extension_browser_event_router.cc
diff --git a/chrome/browser/extensions/extension_browser_event_router.cc b/chrome/browser/extensions/extension_browser_event_router.cc
deleted file mode 100644
index aa125732bf61318b04704406be0af1fd502a7f50..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_browser_event_router.cc
+++ /dev/null
@@ -1,712 +0,0 @@
-// 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.
-
-#include "chrome/browser/extensions/extension_browser_event_router.h"
-
-#include "base/json/json_writer.h"
-#include "base/values.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/extension_event_names.h"
-#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tab_util.h"
-#include "chrome/browser/extensions/window_controller.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/browser_tabstrip.h"
-#include "chrome/browser/ui/tab_contents/tab_contents.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/web_contents.h"
-
-#if defined(TOOLKIT_GTK)
-#include "ui/base/x/active_window_watcher_x.h"
-#endif
-
-namespace events = extension_event_names;
-namespace tab_keys = extensions::tabs_constants;
-namespace page_action_keys = extension_page_actions_api_constants;
-
-using content::NavigationController;
-using content::WebContents;
-
-ExtensionBrowserEventRouter::TabEntry::TabEntry()
- : complete_waiting_on_load_(false),
- url_() {
-}
-
-DictionaryValue* ExtensionBrowserEventRouter::TabEntry::UpdateLoadState(
- const WebContents* contents) {
- // The tab may go in & out of loading (for instance if iframes navigate).
- // We only want to respond to the first change from loading to !loading after
- // the NAV_ENTRY_COMMITTED was fired.
- if (!complete_waiting_on_load_ || contents->IsLoading())
- return NULL;
-
- // Send "complete" state change.
- complete_waiting_on_load_ = false;
- DictionaryValue* changed_properties = new DictionaryValue();
- changed_properties->SetString(tab_keys::kStatusKey,
- tab_keys::kStatusValueComplete);
- return changed_properties;
-}
-
-DictionaryValue* ExtensionBrowserEventRouter::TabEntry::DidNavigate(
- const WebContents* contents) {
- // Send "loading" state change.
- complete_waiting_on_load_ = true;
- DictionaryValue* changed_properties = new DictionaryValue();
- changed_properties->SetString(tab_keys::kStatusKey,
- tab_keys::kStatusValueLoading);
-
- if (contents->GetURL() != url_) {
- url_ = contents->GetURL();
- changed_properties->SetString(tab_keys::kUrlKey, url_.spec());
- }
-
- return changed_properties;
-}
-
-void ExtensionBrowserEventRouter::Init() {
- if (initialized_)
- return;
- BrowserList::AddObserver(this);
-#if defined(TOOLKIT_VIEWS)
- views::WidgetFocusManager::GetInstance()->AddFocusChangeListener(this);
-#elif defined(TOOLKIT_GTK)
- ui::ActiveWindowWatcherX::AddObserver(this);
-#elif defined(OS_MACOSX)
- // Needed for when no suitable window can be passed to an extension as the
- // currently focused window.
- registrar_.Add(this, chrome::NOTIFICATION_NO_KEY_WINDOW,
- content::NotificationService::AllSources());
-#endif
-
- // Init() can happen after the browser is running, so catch up with any
- // windows that already exist.
- for (BrowserList::const_iterator iter = BrowserList::begin();
- iter != BrowserList::end(); ++iter) {
- RegisterForBrowserNotifications(*iter);
-
- // Also catch up our internal bookkeeping of tab entries.
- Browser* browser = *iter;
- if (browser->tab_strip_model()) {
- for (int i = 0; i < browser->tab_strip_model()->count(); ++i) {
- WebContents* contents =
- chrome::GetTabContentsAt(browser, i)->web_contents();
- int tab_id = ExtensionTabUtil::GetTabId(contents);
- tab_entries_[tab_id] = TabEntry();
- }
- }
- }
-
- initialized_ = true;
-}
-
-ExtensionBrowserEventRouter::ExtensionBrowserEventRouter(Profile* profile)
- : initialized_(false),
- profile_(profile),
- focused_profile_(NULL),
- focused_window_id_(extension_misc::kUnknownWindowId) {
- DCHECK(!profile->IsOffTheRecord());
-}
-
-ExtensionBrowserEventRouter::~ExtensionBrowserEventRouter() {
- BrowserList::RemoveObserver(this);
-#if defined(TOOLKIT_VIEWS)
- views::WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(this);
-#elif defined(TOOLKIT_GTK)
- ui::ActiveWindowWatcherX::RemoveObserver(this);
-#endif
-}
-
-void ExtensionBrowserEventRouter::OnBrowserAdded(Browser* browser) {
- RegisterForBrowserNotifications(browser);
-}
-
-void ExtensionBrowserEventRouter::RegisterForBrowserNotifications(
- Browser* browser) {
- if (!profile_->IsSameProfile(browser->profile()))
- return;
- // Start listening to TabStripModel events for this browser.
- browser->tab_strip_model()->AddObserver(this);
-
- // If this is a new window, it isn't ready at this point, so we register to be
- // notified when it is. If this is an existing window, this is a no-op that we
- // just do to reduce code complexity.
- registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY,
- content::Source<Browser>(browser));
-
- for (int i = 0; i < browser->tab_strip_model()->count(); ++i) {
- RegisterForTabNotifications(
- chrome::GetTabContentsAt(browser, i)->web_contents());
- }
-}
-
-void ExtensionBrowserEventRouter::RegisterForTabNotifications(
- WebContents* contents) {
- registrar_.Add(
- this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
- content::Source<NavigationController>(&contents->GetController()));
-
- // Observing NOTIFICATION_WEB_CONTENTS_DESTROYED is necessary because it's
- // possible for tabs to be created, detached and then destroyed without
- // ever having been re-attached and closed. This happens in the case of
- // a devtools WebContents that is opened in window, docked, then closed.
- registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
- content::Source<WebContents>(contents));
-}
-
-void ExtensionBrowserEventRouter::UnregisterForTabNotifications(
- WebContents* contents) {
- registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
- content::Source<NavigationController>(&contents->GetController()));
- registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
- content::Source<WebContents>(contents));
-}
-
-void ExtensionBrowserEventRouter::OnBrowserWindowReady(Browser* browser) {
- ListValue args;
-
- DCHECK(browser->extension_window_controller());
- DictionaryValue* window_dictionary =
- browser->extension_window_controller()->CreateWindowValue();
- args.Append(window_dictionary);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(browser->profile(), events::kOnWindowCreated, json_args);
-}
-
-void ExtensionBrowserEventRouter::OnBrowserRemoved(Browser* browser) {
- if (!profile_->IsSameProfile(browser->profile()))
- return;
-
- // Stop listening to TabStripModel events for this browser.
- browser->tab_strip_model()->RemoveObserver(this);
-
- registrar_.Remove(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY,
- content::Source<Browser>(browser));
-
- DispatchSimpleBrowserEvent(browser->profile(),
- ExtensionTabUtil::GetWindowId(browser),
- events::kOnWindowRemoved);
-}
-
-#if defined(TOOLKIT_VIEWS)
-void ExtensionBrowserEventRouter::OnNativeFocusChange(
- gfx::NativeView focused_before,
- gfx::NativeView focused_now) {
- if (!focused_now)
- OnBrowserSetLastActive(NULL);
-}
-#elif defined(TOOLKIT_GTK)
-void ExtensionBrowserEventRouter::ActiveWindowChanged(
- GdkWindow* active_window) {
- if (!active_window)
- OnBrowserSetLastActive(NULL);
-}
-#endif
-
-void ExtensionBrowserEventRouter::OnBrowserSetLastActive(
- Browser* browser) {
- Profile* window_profile = NULL;
- int window_id = extension_misc::kUnknownWindowId;
- if (browser && profile_->IsSameProfile(browser->profile())) {
- window_profile = browser->profile();
- window_id = ExtensionTabUtil::GetWindowId(browser);
- }
-
- if (focused_window_id_ == window_id)
- return;
-
- // window_profile is either this profile's default profile, its
- // incognito profile, or NULL iff this profile is losing focus.
- Profile* previous_focused_profile = focused_profile_;
- focused_profile_ = window_profile;
- focused_window_id_ = window_id;
-
- ListValue real_args;
- real_args.Append(Value::CreateIntegerValue(window_id));
- std::string real_json_args;
- base::JSONWriter::Write(&real_args, &real_json_args);
-
- // When switching between windows in the default and incognitoi profiles,
- // dispatch WINDOW_ID_NONE to extensions whose profile lost focus that
- // can't see the new focused window across the incognito boundary.
- // See crbug.com/46610.
- std::string none_json_args;
- if (focused_profile_ != NULL && previous_focused_profile != NULL &&
- focused_profile_ != previous_focused_profile) {
- ListValue none_args;
- none_args.Append(
- Value::CreateIntegerValue(extension_misc::kUnknownWindowId));
- base::JSONWriter::Write(&none_args, &none_json_args);
- }
-
- DispatchEventsAcrossIncognito((focused_profile_ ? focused_profile_ :
- previous_focused_profile),
- events::kOnWindowFocusedChanged,
- real_json_args,
- none_json_args);
-}
-
-void ExtensionBrowserEventRouter::TabCreatedAt(WebContents* contents,
- int index,
- bool active) {
- Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
- DispatchEventWithTab(profile, "", events::kOnTabCreated, contents, active);
-
- RegisterForTabNotifications(contents);
-}
-
-void ExtensionBrowserEventRouter::TabInsertedAt(TabContents* contents,
- int index,
- bool active) {
- // If tab is new, send created event.
- int tab_id = ExtensionTabUtil::GetTabId(contents->web_contents());
- if (!GetTabEntry(contents->web_contents())) {
- tab_entries_[tab_id] = TabEntry();
-
- TabCreatedAt(contents->web_contents(), index, active);
- return;
- }
-
- ListValue args;
- args.Append(Value::CreateIntegerValue(tab_id));
-
- DictionaryValue* object_args = new DictionaryValue();
- object_args->Set(tab_keys::kNewWindowIdKey, Value::CreateIntegerValue(
- ExtensionTabUtil::GetWindowIdOfTab(contents->web_contents())));
- object_args->Set(tab_keys::kNewPositionKey, Value::CreateIntegerValue(
- index));
- args.Append(object_args);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(contents->profile(), events::kOnTabAttached, json_args);
-}
-
-void ExtensionBrowserEventRouter::TabDetachedAt(TabContents* contents,
- int index) {
- if (!GetTabEntry(contents->web_contents())) {
- // The tab was removed. Don't send detach event.
- return;
- }
-
- ListValue args;
- args.Append(Value::CreateIntegerValue(
- ExtensionTabUtil::GetTabId(contents->web_contents())));
-
- DictionaryValue* object_args = new DictionaryValue();
- object_args->Set(tab_keys::kOldWindowIdKey, Value::CreateIntegerValue(
- ExtensionTabUtil::GetWindowIdOfTab(contents->web_contents())));
- object_args->Set(tab_keys::kOldPositionKey, Value::CreateIntegerValue(
- index));
- args.Append(object_args);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(contents->profile(), events::kOnTabDetached, json_args);
-}
-
-void ExtensionBrowserEventRouter::TabClosingAt(TabStripModel* tab_strip_model,
- TabContents* contents,
- int index) {
- int tab_id = ExtensionTabUtil::GetTabId(contents->web_contents());
-
- ListValue args;
- args.Append(Value::CreateIntegerValue(tab_id));
-
- DictionaryValue* object_args = new DictionaryValue();
- object_args->SetBoolean(tab_keys::kWindowClosing,
- tab_strip_model->closing_all());
- args.Append(object_args);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(contents->profile(), events::kOnTabRemoved, json_args);
-
- int removed_count = tab_entries_.erase(tab_id);
- DCHECK_GT(removed_count, 0);
-
- UnregisterForTabNotifications(contents->web_contents());
-}
-
-void ExtensionBrowserEventRouter::ActiveTabChanged(
- TabContents* old_contents,
- TabContents* new_contents,
- int index,
- bool user_gesture) {
- ListValue args;
- int tab_id = ExtensionTabUtil::GetTabId(new_contents->web_contents());
- args.Append(Value::CreateIntegerValue(tab_id));
-
- DictionaryValue* object_args = new DictionaryValue();
- object_args->Set(tab_keys::kWindowIdKey, Value::CreateIntegerValue(
- ExtensionTabUtil::GetWindowIdOfTab(new_contents->web_contents())));
- args.Append(object_args);
-
- // The onActivated event replaced onActiveChanged and onSelectionChanged. The
- // deprecated events take two arguments: tabId, {windowId}.
- std::string old_json_args;
- base::JSONWriter::Write(&args, &old_json_args);
-
- // The onActivated event takes one argument: {windowId, tabId}.
- std::string new_json_args;
- args.Remove(0, NULL);
- object_args->Set(tab_keys::kTabIdKey, Value::CreateIntegerValue(tab_id));
- base::JSONWriter::Write(&args, &new_json_args);
-
- Profile* profile = new_contents->profile();
- DispatchEvent(profile, events::kOnTabSelectionChanged, old_json_args);
- DispatchEvent(profile, events::kOnTabActiveChanged, old_json_args);
- DispatchEvent(profile, events::kOnTabActivated, new_json_args);
-}
-
-void ExtensionBrowserEventRouter::TabSelectionChanged(
- TabStripModel* tab_strip_model,
- const TabStripSelectionModel& old_model) {
- TabStripSelectionModel::SelectedIndices new_selection =
- tab_strip_model->selection_model().selected_indices();
- ListValue* all = new ListValue();
-
- for (size_t i = 0; i < new_selection.size(); ++i) {
- int index = new_selection[i];
- TabContents* contents = tab_strip_model->GetTabContentsAt(index);
- if (!contents)
- break;
- int tab_id = ExtensionTabUtil::GetTabId(contents->web_contents());
- all->Append(Value::CreateIntegerValue(tab_id));
- }
-
- ListValue args;
- DictionaryValue* select_info = new DictionaryValue();
-
- select_info->Set(tab_keys::kWindowIdKey, Value::CreateIntegerValue(
- ExtensionTabUtil::GetWindowIdOfTabStripModel(tab_strip_model)));
-
- select_info->Set(tab_keys::kTabIdsKey, all);
- args.Append(select_info);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- // The onHighlighted event replaced onHighlightChanged.
- Profile* profile = tab_strip_model->profile();
- DispatchEvent(profile, events::kOnTabHighlightChanged, json_args);
- DispatchEvent(profile, events::kOnTabHighlighted, json_args);
-}
-
-void ExtensionBrowserEventRouter::TabMoved(TabContents* contents,
- int from_index,
- int to_index) {
- ListValue args;
- args.Append(Value::CreateIntegerValue(
- ExtensionTabUtil::GetTabId(contents->web_contents())));
-
- DictionaryValue* object_args = new DictionaryValue();
- object_args->Set(tab_keys::kWindowIdKey, Value::CreateIntegerValue(
- ExtensionTabUtil::GetWindowIdOfTab(contents->web_contents())));
- object_args->Set(tab_keys::kFromIndexKey, Value::CreateIntegerValue(
- from_index));
- object_args->Set(tab_keys::kToIndexKey, Value::CreateIntegerValue(
- to_index));
- args.Append(object_args);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(contents->profile(), events::kOnTabMoved, json_args);
-}
-
-void ExtensionBrowserEventRouter::TabUpdated(WebContents* contents,
- bool did_navigate) {
- TabEntry* entry = GetTabEntry(contents);
- DictionaryValue* changed_properties = NULL;
-
- DCHECK(entry);
-
- if (did_navigate)
- changed_properties = entry->DidNavigate(contents);
- else
- changed_properties = entry->UpdateLoadState(contents);
-
- if (changed_properties)
- DispatchTabUpdatedEvent(contents, changed_properties);
-}
-
-void ExtensionBrowserEventRouter::DispatchEvent(Profile* profile,
- const char* event_name,
- const std::string& json_args) {
- if (!profile_->IsSameProfile(profile) || !profile->GetExtensionEventRouter())
- return;
-
- profile->GetExtensionEventRouter()->DispatchEventToRenderers(
- event_name, json_args, profile, GURL(), extensions::EventFilteringInfo());
-}
-
-void ExtensionBrowserEventRouter::DispatchEventToExtension(
- Profile* profile,
- const std::string& extension_id,
- const char* event_name,
- const std::string& json_args) {
- if (!profile_->IsSameProfile(profile) || !profile->GetExtensionEventRouter())
- return;
-
- profile->GetExtensionEventRouter()->DispatchEventToExtension(
- extension_id, event_name, json_args, profile, GURL());
-}
-
-void ExtensionBrowserEventRouter::DispatchEventsAcrossIncognito(
- Profile* profile,
- const char* event_name,
- const std::string& json_args,
- const std::string& cross_incognito_args) {
- if (!profile_->IsSameProfile(profile) || !profile->GetExtensionEventRouter())
- return;
-
- profile->GetExtensionEventRouter()->DispatchEventsToRenderersAcrossIncognito(
- event_name, json_args, profile, cross_incognito_args, GURL());
-}
-
-void ExtensionBrowserEventRouter::DispatchEventWithTab(
- Profile* profile,
- const std::string& extension_id,
- const char* event_name,
- const WebContents* web_contents,
- bool active) {
- if (!profile_->IsSameProfile(profile))
- return;
-
- ListValue args;
- args.Append(ExtensionTabUtil::CreateTabValueActive(
- web_contents, active));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
- if (!extension_id.empty()) {
- DispatchEventToExtension(profile, extension_id, event_name, json_args);
- } else {
- DispatchEvent(profile, event_name, json_args);
- }
-}
-
-void ExtensionBrowserEventRouter::DispatchSimpleBrowserEvent(
- Profile* profile, const int window_id, const char* event_name) {
- if (!profile_->IsSameProfile(profile))
- return;
-
- ListValue args;
- args.Append(Value::CreateIntegerValue(window_id));
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(profile, event_name, json_args);
-}
-
-void ExtensionBrowserEventRouter::DispatchTabUpdatedEvent(
- WebContents* contents, DictionaryValue* changed_properties) {
- DCHECK(changed_properties);
- DCHECK(contents);
-
- // The state of the tab (as seen from the extension point of view) has
- // changed. Send a notification to the extension.
- ListValue args;
-
- // First arg: The id of the tab that changed.
- args.Append(Value::CreateIntegerValue(ExtensionTabUtil::GetTabId(contents)));
-
- // Second arg: An object containing the changes to the tab state.
- args.Append(changed_properties);
-
- // Third arg: An object containing the state of the tab.
- args.Append(ExtensionTabUtil::CreateTabValue(contents));
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
- DispatchEvent(profile, events::kOnTabUpdated, json_args);
-}
-
-ExtensionBrowserEventRouter::TabEntry* ExtensionBrowserEventRouter::GetTabEntry(
- const WebContents* contents) {
- int tab_id = ExtensionTabUtil::GetTabId(contents);
- std::map<int, TabEntry>::iterator i = tab_entries_.find(tab_id);
- if (tab_entries_.end() == i)
- return NULL;
- return &i->second;
-}
-
-void ExtensionBrowserEventRouter::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- if (type == content::NOTIFICATION_NAV_ENTRY_COMMITTED) {
- NavigationController* source_controller =
- content::Source<NavigationController>(source).ptr();
- TabUpdated(source_controller->GetWebContents(), true);
- } else if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED) {
- // Tab was destroyed after being detached (without being re-attached).
- WebContents* contents = content::Source<WebContents>(source).ptr();
- registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
- content::Source<NavigationController>(&contents->GetController()));
- registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
- content::Source<WebContents>(contents));
- } else if (type == chrome::NOTIFICATION_BROWSER_WINDOW_READY) {
- Browser* browser = content::Source<Browser>(source).ptr();
- OnBrowserWindowReady(browser);
-#if defined(OS_MACOSX)
- } else if (type == chrome::NOTIFICATION_NO_KEY_WINDOW) {
- OnBrowserSetLastActive(NULL);
-#endif
- } else {
- NOTREACHED();
- }
-}
-
-void ExtensionBrowserEventRouter::TabChangedAt(TabContents* contents,
- int index,
- TabChangeType change_type) {
- TabUpdated(contents->web_contents(), false);
-}
-
-void ExtensionBrowserEventRouter::TabReplacedAt(
- TabStripModel* tab_strip_model,
- TabContents* old_contents,
- TabContents* new_contents,
- int index) {
- TabClosingAt(tab_strip_model, old_contents, index);
- TabInsertedAt(new_contents, index, tab_strip_model->active_index() == index);
-}
-
-void ExtensionBrowserEventRouter::TabPinnedStateChanged(
- TabContents* contents,
- int index) {
- TabStripModel* tab_strip = NULL;
- int tab_index;
-
- if (ExtensionTabUtil::GetTabStripModel(
- contents->web_contents(), &tab_strip, &tab_index)) {
- DictionaryValue* changed_properties = new DictionaryValue();
- changed_properties->SetBoolean(tab_keys::kPinnedKey,
- tab_strip->IsTabPinned(tab_index));
- DispatchTabUpdatedEvent(contents->web_contents(), changed_properties);
- }
-}
-
-void ExtensionBrowserEventRouter::TabStripEmpty() {}
-
-void ExtensionBrowserEventRouter::DispatchOldPageActionEvent(
- Profile* profile,
- const std::string& extension_id,
- const std::string& page_action_id,
- int tab_id,
- const std::string& url,
- int button) {
- ListValue args;
- args.Append(Value::CreateStringValue(page_action_id));
-
- DictionaryValue* data = new DictionaryValue();
- data->Set(tab_keys::kTabIdKey, Value::CreateIntegerValue(tab_id));
- data->Set(tab_keys::kTabUrlKey, Value::CreateStringValue(url));
- data->Set(page_action_keys::kButtonKey, Value::CreateIntegerValue(button));
- args.Append(data);
-
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEventToExtension(profile, extension_id, "pageActions", json_args);
-}
-
-void ExtensionBrowserEventRouter::BrowserActionExecuted(
- const ExtensionAction& browser_action,
- Browser* browser) {
- Profile* profile = browser->profile();
- TabContents* tab_contents = NULL;
- int tab_id = 0;
- if (!ExtensionTabUtil::GetDefaultTab(browser, &tab_contents, &tab_id))
- return;
- ExtensionActionExecuted(profile, browser_action, tab_contents);
-}
-
-void ExtensionBrowserEventRouter::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);
- TabContents* tab_contents = NULL;
- if (!ExtensionTabUtil::GetTabById(tab_id, profile, profile->IsOffTheRecord(),
- NULL, NULL, &tab_contents, NULL)) {
- return;
- }
- ExtensionActionExecuted(profile, page_action, tab_contents);
-}
-
-void ExtensionBrowserEventRouter::ScriptBadgeExecuted(
- Profile* profile,
- const ExtensionAction& script_badge,
- int tab_id) {
- TabContents* tab_contents = NULL;
- if (!ExtensionTabUtil::GetTabById(tab_id, profile, profile->IsOffTheRecord(),
- NULL, NULL, &tab_contents, NULL)) {
- return;
- }
- ExtensionActionExecuted(profile, script_badge, tab_contents);
-}
-
-void ExtensionBrowserEventRouter::CommandExecuted(
- Profile* profile,
- const std::string& extension_id,
- const std::string& command) {
- ListValue args;
- args.Append(Value::CreateStringValue(command));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEventToExtension(profile,
- extension_id,
- "experimental.keybinding.onCommand",
- json_args);
-}
-
-void ExtensionBrowserEventRouter::ExtensionActionExecuted(
- Profile* profile,
- const ExtensionAction& extension_action,
- TabContents* tab_contents) {
- const char* event_name = NULL;
- switch (extension_action.action_type()) {
- case ExtensionAction::TYPE_BROWSER:
- event_name = "browserAction.onClicked";
- break;
- case ExtensionAction::TYPE_PAGE:
- event_name = "pageAction.onClicked";
- break;
- case ExtensionAction::TYPE_SCRIPT_BADGE:
- event_name = "scriptBadge.onClicked";
- break;
- }
-
- if (event_name) {
- DispatchEventWithTab(profile,
- extension_action.extension_id(),
- event_name,
- tab_contents->web_contents(),
- true);
- }
-}
« no previous file with comments | « chrome/browser/extensions/extension_browser_event_router.h ('k') | chrome/browser/extensions/extension_devtools_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698