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

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

Issue 10694085: Refactor extension event distribution to use Values instead of JSON strings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Build fix. 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_event_router.cc
diff --git a/chrome/browser/extensions/extension_event_router.cc b/chrome/browser/extensions/extension_event_router.cc
index 166d378cd4616b818b467d1d3ded193afe272029..c6783b12dbe7b44d1eb83e12bfefee46350584c5 100644
--- a/chrome/browser/extensions/extension_event_router.cc
+++ b/chrome/browser/extensions/extension_event_router.cc
@@ -36,7 +36,7 @@ using extensions::ExtensionAPI;
namespace {
-const char kDispatchEvent[] = "Event.dispatchJSON";
+const char kDispatchEvent[] = "Event.dispatch";
void NotifyEventListenerRemovedOnIOThread(
void* profile,
@@ -67,50 +67,23 @@ struct ExtensionEventRouter::ListenerProcess {
struct ExtensionEventRouter::ExtensionEvent {
std::string event_name;
- scoped_ptr<Value> event_args;
+ ListValue* event_args;
GURL event_url;
Profile* restrict_to_profile;
- scoped_ptr<Value> cross_incognito_args;
+ ListValue* cross_incognito_args;
UserGestureState user_gesture;
ExtensionEvent(const std::string& event_name,
- const Value& event_args,
+ ListValue* event_args,
const GURL& event_url,
Profile* restrict_to_profile,
- const Value& cross_incognito_args,
+ ListValue* cross_incognito_args,
UserGestureState user_gesture)
: event_name(event_name),
- event_args(event_args.DeepCopy()),
+ event_args(event_args),
event_url(event_url),
restrict_to_profile(restrict_to_profile),
- cross_incognito_args(cross_incognito_args.DeepCopy()),
- user_gesture(user_gesture) {}
-
- ExtensionEvent(const std::string& event_name,
- const Value& event_args,
- const GURL& event_url,
- Profile* restrict_to_profile,
- UserGestureState user_gesture)
- : event_name(event_name),
- event_args(event_args.DeepCopy()),
- event_url(event_url),
- restrict_to_profile(restrict_to_profile),
- cross_incognito_args(NULL),
- user_gesture(user_gesture) {}
-
- // TODO(gdk): This variant should be retired once the callers are switched to
- // providing Values instead of just strings.
- ExtensionEvent(const std::string& event_name,
- const std::string& event_args,
- const GURL& event_url,
- Profile* restrict_to_profile,
- const std::string& cross_incognito_args,
- UserGestureState user_gesture)
- : event_name(event_name),
- event_args(Value::CreateStringValue(event_args)),
- event_url(event_url),
- restrict_to_profile(restrict_to_profile),
- cross_incognito_args(Value::CreateStringValue(cross_incognito_args)),
+ cross_incognito_args(cross_incognito_args),
user_gesture(user_gesture) {}
};
@@ -118,31 +91,19 @@ struct ExtensionEventRouter::ExtensionEvent {
void ExtensionEventRouter::DispatchEvent(IPC::Sender* ipc_sender,
const std::string& extension_id,
const std::string& event_name,
- const Value& event_args,
+ ListValue* event_args,
const GURL& event_url,
UserGestureState user_gesture) {
// TODO(gdk): Reduce number of DeepCopy() calls throughout the event dispatch
bryeung 2012/07/09 15:12:08 should this get removed now?
Garret Kelly 2012/07/09 15:32:29 Done.
// chain, starting by replacing the event_args with a Value*.
ListValue args;
args.Set(0, Value::CreateStringValue(event_name));
- args.Set(1, event_args.DeepCopy());
+ args.Set(1, event_args);
ipc_sender->Send(new ExtensionMsg_MessageInvoke(MSG_ROUTING_CONTROL,
extension_id, kDispatchEvent, args, event_url,
user_gesture == USER_GESTURE_ENABLED));
}
-// static
-void ExtensionEventRouter::DispatchEvent(IPC::Sender* ipc_sender,
- const std::string& extension_id,
- const std::string& event_name,
- const std::string& event_args,
- const GURL& event_url,
- UserGestureState user_gesture) {
- scoped_ptr<Value> event_args_value(Value::CreateStringValue(event_args));
- DispatchEvent(ipc_sender, extension_id, event_name, *event_args_value.get(),
- event_url, user_gesture);
-}
-
ExtensionEventRouter::ExtensionEventRouter(Profile* profile)
: profile_(profile),
extension_devtools_manager_(
@@ -273,58 +234,47 @@ bool ExtensionEventRouter::HasEventListenerImpl(
void ExtensionEventRouter::DispatchEventToRenderers(
const std::string& event_name,
- const std::string& event_args,
+ ListValue* event_args,
Profile* restrict_to_profile,
const GURL& event_url) {
linked_ptr<ExtensionEvent> event(
- new ExtensionEvent(event_name, event_args, event_url,
- restrict_to_profile, "", USER_GESTURE_UNKNOWN));
+ new ExtensionEvent(event_name, event_args, event_url, restrict_to_profile,
+ NULL, USER_GESTURE_UNKNOWN));
DispatchEventImpl("", event);
}
void ExtensionEventRouter::DispatchEventToExtension(
const std::string& extension_id,
const std::string& event_name,
- const Value& event_args,
+ ListValue* event_args,
Profile* restrict_to_profile,
const GURL& event_url) {
DCHECK(!extension_id.empty());
linked_ptr<ExtensionEvent> event(
- new ExtensionEvent(event_name, event_args, event_url,
- restrict_to_profile, USER_GESTURE_UNKNOWN));
+ new ExtensionEvent(event_name, event_args, event_url, restrict_to_profile,
+ NULL, USER_GESTURE_UNKNOWN));
DispatchEventImpl(extension_id, event);
}
void ExtensionEventRouter::DispatchEventToExtension(
const std::string& extension_id,
const std::string& event_name,
- const std::string& event_args,
- Profile* restrict_to_profile,
- const GURL& event_url) {
- scoped_ptr<Value> event_args_value(Value::CreateStringValue(event_args));
- DispatchEventToExtension(extension_id, event_name, *event_args_value.get(),
- restrict_to_profile, event_url);
-}
-
-void ExtensionEventRouter::DispatchEventToExtension(
- const std::string& extension_id,
- const std::string& event_name,
- const std::string& event_args,
+ ListValue* event_args,
Profile* restrict_to_profile,
const GURL& event_url,
UserGestureState user_gesture) {
DCHECK(!extension_id.empty());
linked_ptr<ExtensionEvent> event(
- new ExtensionEvent(event_name, event_args, event_url,
- restrict_to_profile, "", user_gesture));
+ new ExtensionEvent(event_name, event_args, event_url, restrict_to_profile,
+ NULL, user_gesture));
DispatchEventImpl(extension_id, event);
}
void ExtensionEventRouter::DispatchEventsToRenderersAcrossIncognito(
const std::string& event_name,
- const std::string& event_args,
+ ListValue* event_args,
Profile* restrict_to_profile,
- const std::string& cross_incognito_args,
+ ListValue* cross_incognito_args,
const GURL& event_url) {
linked_ptr<ExtensionEvent> event(
new ExtensionEvent(event_name, event_args, event_url,
@@ -379,14 +329,14 @@ void ExtensionEventRouter::DispatchEventToListener(
return;
}
- const Value* event_args = NULL;
+ ListValue* event_args = NULL;
if (!CanDispatchEventToProfile(listener_profile, extension,
event, &event_args)) {
return;
}
DispatchEvent(listener.process, listener.extension_id,
- event->event_name, *event_args,
+ event->event_name, event_args,
event->event_url, event->user_gesture);
IncrementInFlightEvents(listener_profile, extension);
}
@@ -395,8 +345,10 @@ bool ExtensionEventRouter::CanDispatchEventToProfile(
Profile* profile,
const Extension* extension,
const linked_ptr<ExtensionEvent>& event,
- const Value** event_args) {
- *event_args = event->event_args.get();
+ ListValue** event_args) {
+ if (event_args) {
bryeung 2012/07/09 15:12:08 nit: no braces
Garret Kelly 2012/07/09 15:32:29 Done.
+ *event_args = event->event_args;
+ }
// Is this event from a different profile than the renderer (ie, an
// incognito tab event sent to a normal process, or vice versa).
@@ -404,11 +356,14 @@ bool ExtensionEventRouter::CanDispatchEventToProfile(
profile != event->restrict_to_profile;
if (cross_incognito &&
!profile->GetExtensionService()->CanCrossIncognito(extension)) {
- if (!event->cross_incognito_args.get())
+ if (!event->cross_incognito_args)
return false;
// Send the event with different arguments to extensions that can't
// cross incognito.
- *event_args = event->cross_incognito_args.get();
+ if (event_args) {
+ delete *event_args;
+ *event_args = event->cross_incognito_args;
+ }
}
return true;
@@ -449,8 +404,7 @@ void ExtensionEventRouter::MaybeLoadLazyBackgroundPage(
Profile* profile,
const Extension* extension,
const linked_ptr<ExtensionEvent>& event) {
- const Value* event_args = NULL;
- if (!CanDispatchEventToProfile(profile, extension, event, &event_args))
+ if (!CanDispatchEventToProfile(profile, extension, event, NULL))
return;
extensions::LazyBackgroundTaskQueue* queue =

Powered by Google App Engine
This is Rietveld 408576698