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 = |