diff options
author | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 22:28:45 +0000 |
---|---|---|
committer | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 22:28:45 +0000 |
commit | 03b1575eb9349ad2c7563ea0caef88da0906537e (patch) | |
tree | 5bb1bb45fb5cc1cfa185d397d539b637e682d84b /chrome/browser/extensions | |
parent | 9be096ebf44c2d685335bf78ddde018ea4a50cb0 (diff) | |
download | chromium_src-03b1575eb9349ad2c7563ea0caef88da0906537e.zip chromium_src-03b1575eb9349ad2c7563ea0caef88da0906537e.tar.gz chromium_src-03b1575eb9349ad2c7563ea0caef88da0906537e.tar.bz2 |
implement remaining tab events (except for onTabUpdated).
Review URL: http://codereview.chromium.org/88053
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14255 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r-- | chrome/browser/extensions/extension_browser_event_router.cc | 96 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_browser_event_router.h | 5 |
2 files changed, 90 insertions, 11 deletions
diff --git a/chrome/browser/extensions/extension_browser_event_router.cc b/chrome/browser/extensions/extension_browser_event_router.cc index b278258..cefef15 100644 --- a/chrome/browser/extensions/extension_browser_event_router.cc +++ b/chrome/browser/extensions/extension_browser_event_router.cc @@ -13,12 +13,24 @@ #include "chrome/browser/extensions/extension_tabs_module.h" #include "chrome/common/notification_service.h" +const char* kOnTabCreated = "tab-created"; const char* kOnTabMoved = "tab-moved"; +const char* kOnTabSelectionChanged = "tab-selection-changed"; +const char* kOnTabAttached = "tab-attached"; +const char* kOnTabDetached = "tab-detached"; +const char* kOnTabRemoved = "tab-removed"; ExtensionBrowserEventRouter* ExtensionBrowserEventRouter::GetInstance() { return Singleton<ExtensionBrowserEventRouter>::get(); } +static void DispatchEvent(Profile *profile, + const char* event_name, + const std::string json_args) { + ExtensionMessageService::GetInstance(profile->GetRequestContext())-> + DispatchEventToRenderers(event_name, json_args); +} + void ExtensionBrowserEventRouter::Init() { if (initialized_) return; @@ -56,41 +68,103 @@ void ExtensionBrowserEventRouter::Observe(NotificationType type, void ExtensionBrowserEventRouter::TabInsertedAt(TabContents* contents, int index, - bool foreground) { } + bool foreground) { + const char* event_name = kOnTabAttached; + // If tab is new, send tab-created event. + int tab_id = ExtensionTabUtil::GetTabId(contents); + if (tab_ids_.find(tab_id) == tab_ids_.end()) { + tab_ids_.insert(tab_id); + event_name = kOnTabCreated; + } -void ExtensionBrowserEventRouter::TabClosingAt(TabContents* contents, - int index) { } + ListValue args; + DictionaryValue *object_args = new DictionaryValue(); + object_args->Set(L"tabId", Value::CreateIntegerValue(tab_id)); + object_args->Set(L"windowId", Value::CreateIntegerValue( + ExtensionTabUtil::GetWindowIdOfTab(contents))); + object_args->Set(L"index", Value::CreateIntegerValue(index)); + args.Append(object_args); + + std::string json_args; + JSONWriter::Write(&args, false, &json_args); + + DispatchEvent(contents->profile(), event_name, json_args); +} void ExtensionBrowserEventRouter::TabDetachedAt(TabContents* contents, - int index) { } + int index) { + int tab_id = ExtensionTabUtil::GetTabId(contents); + if (tab_ids_.find(tab_id) == tab_ids_.end()) { + // The tab was removed. Don't send detach event. + return; + } + + ListValue args; + DictionaryValue *object_args = new DictionaryValue(); + object_args->Set(L"tabId", Value::CreateIntegerValue(tab_id)); + object_args->Set(L"windowId", Value::CreateIntegerValue( + ExtensionTabUtil::GetWindowIdOfTab(contents))); + object_args->Set(L"index", Value::CreateIntegerValue(index)); + args.Append(object_args); + + std::string json_args; + JSONWriter::Write(&args, false, &json_args); + + DispatchEvent(contents->profile(), kOnTabDetached, json_args); +} + +void ExtensionBrowserEventRouter::TabClosingAt(TabContents* contents, + int index) { + int tab_id = ExtensionTabUtil::GetTabId(contents); + + ListValue args; + args.Append(Value::CreateIntegerValue(tab_id)); + + std::string json_args; + JSONWriter::Write(&args, false, &json_args); + + DispatchEvent(contents->profile(), kOnTabRemoved, json_args); + + int removed_count = tab_ids_.erase(tab_id); + DCHECK(removed_count > 0); +} void ExtensionBrowserEventRouter::TabSelectedAt(TabContents* old_contents, TabContents* new_contents, int index, - bool user_gesture) { } + bool user_gesture) { + ListValue args; + DictionaryValue *object_args = new DictionaryValue(); + object_args->Set(L"tabId", Value::CreateIntegerValue( + ExtensionTabUtil::GetTabId(new_contents))); + object_args->Set(L"windowId", Value::CreateIntegerValue( + ExtensionTabUtil::GetWindowIdOfTab(new_contents))); + object_args->Set(L"index", Value::CreateIntegerValue(index)); + args.Append(object_args); + + std::string json_args; + JSONWriter::Write(&args, false, &json_args); + + DispatchEvent(new_contents->profile(), kOnTabSelectionChanged, json_args); +} void ExtensionBrowserEventRouter::TabMoved(TabContents* contents, int from_index, int to_index) { - Profile *profile = contents->profile(); - ListValue args; DictionaryValue *object_args = new DictionaryValue(); - object_args->Set(L"tabId", Value::CreateIntegerValue( ExtensionTabUtil::GetTabId(contents))); object_args->Set(L"windowId", Value::CreateIntegerValue( ExtensionTabUtil::GetWindowIdOfTab(contents))); object_args->Set(L"fromIndex", Value::CreateIntegerValue(from_index)); object_args->Set(L"toIndex", Value::CreateIntegerValue(to_index)); - args.Append(object_args); std::string json_args; JSONWriter::Write(&args, false, &json_args); - ExtensionMessageService::GetInstance(profile->GetRequestContext())-> - DispatchEventToRenderers(kOnTabMoved, json_args); + DispatchEvent(contents->profile(), kOnTabMoved, json_args); } void ExtensionBrowserEventRouter::TabChangedAt(TabContents* contents, diff --git a/chrome/browser/extensions/extension_browser_event_router.h b/chrome/browser/extensions/extension_browser_event_router.h index a438e66..3a2f5ec 100644 --- a/chrome/browser/extensions/extension_browser_event_router.h +++ b/chrome/browser/extensions/extension_browser_event_router.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_EXTENSION_BROWSER_EVENT_ROUTER_H_ #include <vector> +#include <set> #include <string> #include "base/basictypes.h" @@ -49,6 +50,10 @@ class ExtensionBrowserEventRouter : public TabStripModelObserver, bool initialized_; + // Maintain set of known tab ids, so we can distinguish between tab creation + // and tab insertion. Also used to not send tab-detached after tab-removed. + std::set<int> tab_ids_; + DISALLOW_COPY_AND_ASSIGN(ExtensionBrowserEventRouter); }; |