summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/browser_event_router.cc
diff options
context:
space:
mode:
authorgdk@chromium.org <gdk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-07 23:58:15 +0000
committergdk@chromium.org <gdk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-07 23:58:15 +0000
commitc9bd90f81516f5d051800d0988da73e6274eb574 (patch)
tree4037363b29435134d0a9f4dd27e6078f7b1e41ad /chrome/browser/extensions/browser_event_router.cc
parente1a7cefe77402ad5d05be9e907d177f231afae7f (diff)
downloadchromium_src-c9bd90f81516f5d051800d0988da73e6274eb574.zip
chromium_src-c9bd90f81516f5d051800d0988da73e6274eb574.tar.gz
chromium_src-c9bd90f81516f5d051800d0988da73e6274eb574.tar.bz2
Refactor extension event distribution to use Values instead of JSON strings.
Also renames Event.dispatchJSON to Event.dispatch and removes all JSON serialization surrounding invocations of DispatchEvent variants. BUG=136045 TEST=none Review URL: https://chromiumcodereview.appspot.com/10694085 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150460 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/browser_event_router.cc')
-rw-r--r--chrome/browser/extensions/browser_event_router.cc151
1 files changed, 61 insertions, 90 deletions
diff --git a/chrome/browser/extensions/browser_event_router.cc b/chrome/browser/extensions/browser_event_router.cc
index c407d6c..83347cb 100644
--- a/chrome/browser/extensions/browser_event_router.cc
+++ b/chrome/browser/extensions/browser_event_router.cc
@@ -184,20 +184,17 @@ void BrowserEventRouter::TabInsertedAt(TabContents* contents,
return;
}
- ListValue args;
- args.Append(Value::CreateIntegerValue(tab_id));
+ scoped_ptr<ListValue> args(new ListValue());
+ 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);
+ args->Append(object_args);
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(contents->profile(), events::kOnTabAttached, json_args,
+ DispatchEvent(contents->profile(), events::kOnTabAttached, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
}
@@ -207,8 +204,8 @@ void BrowserEventRouter::TabDetachedAt(TabContents* contents, int index) {
return;
}
- ListValue args;
- args.Append(Value::CreateIntegerValue(
+ scoped_ptr<ListValue> args(new ListValue());
+ args->Append(Value::CreateIntegerValue(
ExtensionTabUtil::GetTabId(contents->web_contents())));
DictionaryValue* object_args = new DictionaryValue();
@@ -216,12 +213,9 @@ void BrowserEventRouter::TabDetachedAt(TabContents* contents, int index) {
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);
+ args->Append(object_args);
- DispatchEvent(contents->profile(), events::kOnTabDetached, json_args,
+ DispatchEvent(contents->profile(), events::kOnTabDetached, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
}
@@ -230,18 +224,15 @@ void BrowserEventRouter::TabClosingAt(TabStripModel* tab_strip_model,
int index) {
int tab_id = ExtensionTabUtil::GetTabId(contents->web_contents());
- ListValue args;
- args.Append(Value::CreateIntegerValue(tab_id));
+ scoped_ptr<ListValue> args(new ListValue());
+ 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);
+ args->Append(object_args);
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(contents->profile(), events::kOnTabRemoved, json_args,
+ DispatchEvent(contents->profile(), events::kOnTabRemoved, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
int removed_count = tab_entries_.erase(tab_id);
@@ -254,33 +245,29 @@ void BrowserEventRouter::ActiveTabChanged(TabContents* old_contents,
TabContents* new_contents,
int index,
bool user_gesture) {
- ListValue args;
+ scoped_ptr<ListValue> args(new ListValue());
int tab_id = ExtensionTabUtil::GetTabId(new_contents->web_contents());
- args.Append(Value::CreateIntegerValue(tab_id));
+ 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);
+ 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();
EventRouter::UserGestureState gesture = user_gesture ?
EventRouter::USER_GESTURE_ENABLED : EventRouter::USER_GESTURE_NOT_ENABLED;
- DispatchEvent(profile, events::kOnTabSelectionChanged, old_json_args,
- gesture);
- DispatchEvent(profile, events::kOnTabActiveChanged, old_json_args, gesture);
- DispatchEvent(profile, events::kOnTabActivated, new_json_args, gesture);
+ DispatchEvent(profile, events::kOnTabSelectionChanged,
+ scoped_ptr<ListValue>(args->DeepCopy()), gesture);
+ DispatchEvent(profile, events::kOnTabActiveChanged,
+ scoped_ptr<ListValue>(args->DeepCopy()), gesture);
+
+ // The onActivated event takes one argument: {windowId, tabId}.
+ args->Remove(0, NULL);
+ object_args->Set(tab_keys::kTabIdKey, Value::CreateIntegerValue(tab_id));
+ DispatchEvent(profile, events::kOnTabActivated, args.Pass(), gesture);
}
void BrowserEventRouter::TabSelectionChanged(
@@ -299,31 +286,29 @@ void BrowserEventRouter::TabSelectionChanged(
all->Append(Value::CreateIntegerValue(tab_id));
}
- ListValue args;
+ scoped_ptr<ListValue> args(new ListValue());
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);
+ args->Append(select_info);
// The onHighlighted event replaced onHighlightChanged.
Profile* profile = tab_strip_model->profile();
- DispatchEvent(profile, events::kOnTabHighlightChanged, json_args,
+ DispatchEvent(profile, events::kOnTabHighlightChanged,
+ scoped_ptr<ListValue>(args->DeepCopy()),
EventRouter::USER_GESTURE_UNKNOWN);
- DispatchEvent(profile, events::kOnTabHighlighted, json_args,
+ DispatchEvent(profile, events::kOnTabHighlighted, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
}
void BrowserEventRouter::TabMoved(TabContents* contents,
int from_index,
int to_index) {
- ListValue args;
- args.Append(Value::CreateIntegerValue(
+ scoped_ptr<ListValue> args(new ListValue());
+ args->Append(Value::CreateIntegerValue(
ExtensionTabUtil::GetTabId(contents->web_contents())));
DictionaryValue* object_args = new DictionaryValue();
@@ -333,12 +318,9 @@ void BrowserEventRouter::TabMoved(TabContents* contents,
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);
+ args->Append(object_args);
- DispatchEvent(contents->profile(), events::kOnTabMoved, json_args,
+ DispatchEvent(contents->profile(), events::kOnTabMoved, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
}
@@ -360,38 +342,40 @@ void BrowserEventRouter::TabUpdated(WebContents* contents, bool did_navigate) {
void BrowserEventRouter::DispatchEvent(
Profile* profile,
const char* event_name,
- const std::string& json_args,
+ scoped_ptr<ListValue> args,
EventRouter::UserGestureState user_gesture) {
if (!profile_->IsSameProfile(profile) || !profile->GetExtensionEventRouter())
return;
profile->GetExtensionEventRouter()->DispatchEventToRenderers(
- event_name, json_args, profile, GURL(), user_gesture);
+ event_name, args.Pass(), profile, GURL(), user_gesture);
}
void BrowserEventRouter::DispatchEventToExtension(
Profile* profile,
const std::string& extension_id,
const char* event_name,
- const std::string& json_args,
+ scoped_ptr<ListValue> event_args,
EventRouter::UserGestureState user_gesture) {
if (!profile_->IsSameProfile(profile) || !profile->GetExtensionEventRouter())
return;
profile->GetExtensionEventRouter()->DispatchEventToExtension(
- extension_id, event_name, json_args, profile, GURL(), user_gesture);
+ extension_id, event_name, event_args.Pass(), profile, GURL(),
+ user_gesture);
}
void BrowserEventRouter::DispatchEventsAcrossIncognito(
Profile* profile,
const char* event_name,
- const std::string& json_args,
- const std::string& cross_incognito_args) {
+ scoped_ptr<ListValue> event_args,
+ scoped_ptr<ListValue> cross_incognito_args) {
if (!profile_->IsSameProfile(profile) || !profile->GetExtensionEventRouter())
return;
profile->GetExtensionEventRouter()->DispatchEventsToRenderersAcrossIncognito(
- event_name, json_args, profile, cross_incognito_args, GURL());
+ event_name, event_args.Pass(), profile, cross_incognito_args.Pass(),
+ GURL());
}
void BrowserEventRouter::DispatchEventWithTab(
@@ -404,16 +388,14 @@ void BrowserEventRouter::DispatchEventWithTab(
if (!profile_->IsSameProfile(profile))
return;
- ListValue args;
- args.Append(ExtensionTabUtil::CreateTabValueActive(
+ scoped_ptr<ListValue> args(new ListValue());
+ 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,
+ DispatchEventToExtension(profile, extension_id, event_name, args.Pass(),
user_gesture);
} else {
- DispatchEvent(profile, event_name, json_args, user_gesture);
+ DispatchEvent(profile, event_name, args.Pass(), user_gesture);
}
}
@@ -422,13 +404,10 @@ void BrowserEventRouter::DispatchSimpleBrowserEvent(
if (!profile_->IsSameProfile(profile))
return;
- ListValue args;
- args.Append(Value::CreateIntegerValue(window_id));
+ scoped_ptr<ListValue> args(new ListValue());
+ args->Append(Value::CreateIntegerValue(window_id));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- DispatchEvent(profile, event_name, json_args,
+ DispatchEvent(profile, event_name, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
}
@@ -439,22 +418,19 @@ void BrowserEventRouter::DispatchTabUpdatedEvent(
// The state of the tab (as seen from the extension point of view) has
// changed. Send a notification to the extension.
- ListValue args;
+ scoped_ptr<ListValue> args(new ListValue());
// First arg: The id of the tab that changed.
- args.Append(Value::CreateIntegerValue(ExtensionTabUtil::GetTabId(contents)));
+ args->Append(Value::CreateIntegerValue(ExtensionTabUtil::GetTabId(contents)));
// Second arg: An object containing the changes to the tab state.
- args.Append(changed_properties);
+ 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);
+ args->Append(ExtensionTabUtil::CreateTabValue(contents));
Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
- DispatchEvent(profile, events::kOnTabUpdated, json_args,
+ DispatchEvent(profile, events::kOnTabUpdated, args.Pass(),
EventRouter::USER_GESTURE_UNKNOWN);
}
@@ -523,19 +499,16 @@ void BrowserEventRouter::DispatchOldPageActionEvent(
int tab_id,
const std::string& url,
int button) {
- ListValue args;
- args.Append(Value::CreateStringValue(page_action_id));
+ scoped_ptr<ListValue> args(new ListValue());
+ 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);
+ args->Append(data);
- DispatchEventToExtension(profile, extension_id, "pageActions", json_args,
+ DispatchEventToExtension(profile, extension_id, "pageActions", args.Pass(),
EventRouter::USER_GESTURE_ENABLED);
}
@@ -580,15 +553,13 @@ void BrowserEventRouter::ScriptBadgeExecuted(
void BrowserEventRouter::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);
+ scoped_ptr<ListValue> args(new ListValue());
+ args->Append(Value::CreateStringValue(command));
DispatchEventToExtension(profile,
extension_id,
"experimental.commands.onCommand",
- json_args,
+ args.Pass(),
EventRouter::USER_GESTURE_ENABLED);
}