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

Unified Diff: chrome/renderer/extensions/renderer_extension_bindings.cc

Issue 8073023: Merge 101221 - Reland 101111 - Only deliver extension messages to contexts that care. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/874/src/
Patch Set: Created 9 years, 3 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/renderer/extensions/renderer_extension_bindings.cc
===================================================================
--- chrome/renderer/extensions/renderer_extension_bindings.cc (revision 103262)
+++ chrome/renderer/extensions/renderer_extension_bindings.cc (working copy)
@@ -253,3 +253,41 @@
static v8::Extension* extension = new ExtensionImpl(dispatcher);
return extension;
}
+
+void RendererExtensionBindings::DeliverMessage(
+ int target_port_id,
+ const std::string& message,
+ RenderView* restrict_to_render_view) {
+ v8::HandleScope handle_scope;
+
+ bindings_utils::ContextList contexts = bindings_utils::GetContexts();
+ for (bindings_utils::ContextList::iterator it = contexts.begin();
+ it != contexts.end(); ++it) {
+
+ v8::Handle<v8::Context> context = (*it)->context;
+ if (context.IsEmpty())
+ continue;
+
+ if (restrict_to_render_view &&
+ restrict_to_render_view != (*it)->GetRenderView()) {
+ continue;
+ }
+
+ // Check to see whether the context has this port before bothering to create
+ // the message.
+ v8::Handle<v8::Value> port_id_handle = v8::Integer::New(target_port_id);
+ v8::Handle<v8::Value> has_port =
+ bindings_utils::CallFunctionInContext(
+ context, "Port.hasPort", 1, &port_id_handle);
+ CHECK(!has_port.IsEmpty());
+ if (!has_port->BooleanValue())
+ continue;
+
+ std::vector<v8::Handle<v8::Value> > arguments;
+ arguments.push_back(v8::String::New(message.c_str(), message.size()));
+ arguments.push_back(port_id_handle);
+ bindings_utils::CallFunctionInContext(
+ context, "Port.dispatchOnMessage",
+ arguments.size(), &arguments[0]);
+ }
+}
« no previous file with comments | « chrome/renderer/extensions/renderer_extension_bindings.h ('k') | chrome/renderer/resources/renderer_extension_bindings.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698