Chromium Code Reviews| Index: chrome/renderer/extensions/renderer_extension_bindings.cc |
| diff --git a/chrome/renderer/extensions/renderer_extension_bindings.cc b/chrome/renderer/extensions/renderer_extension_bindings.cc |
| index ec8619c1d8ed064771197eac54bb93d2a7014c6f..773a2e35894c00ee0c997017de77d3e8ecb44fd4 100644 |
| --- a/chrome/renderer/extensions/renderer_extension_bindings.cc |
| +++ b/chrome/renderer/extensions/renderer_extension_bindings.cc |
| @@ -253,3 +253,41 @@ v8::Extension* RendererExtensionBindings::Get(ExtensionDispatcher* dispatcher) { |
| 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 != NULL && |
|
Matt Perry
2011/09/15 01:42:37
nit: chrome style is to use boolean-style checks f
|
| + (*it)->GetRenderView() != restrict_to_render_view) { |
| + 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]); |
| + } |
| +} |