summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authorrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-22 22:28:45 +0000
committerrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-22 22:28:45 +0000
commit03b1575eb9349ad2c7563ea0caef88da0906537e (patch)
tree5bb1bb45fb5cc1cfa185d397d539b637e682d84b /chrome/browser/extensions
parent9be096ebf44c2d685335bf78ddde018ea4a50cb0 (diff)
downloadchromium_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.cc96
-rw-r--r--chrome/browser/extensions/extension_browser_event_router.h5
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);
};