Index: chrome/renderer/extensions/extension_process_bindings.cc |
diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc |
index 35fa0a4d384ee400c0532a81a75441a7cc06d0f1..1e4bafe17debc792130dea4e55ed405764270af1 100644 |
--- a/chrome/renderer/extensions/extension_process_bindings.cc |
+++ b/chrome/renderer/extensions/extension_process_bindings.cc |
@@ -68,6 +68,8 @@ class ExtensionImpl : public ExtensionBase { |
return v8::FunctionTemplate::New(GetViews); |
} else if (name->Equals(v8::String::New("GetNextRequestId"))) { |
return v8::FunctionTemplate::New(GetNextRequestId); |
+ } else if (name->Equals(v8::String::New("OpenChannelToTab"))) { |
+ return v8::FunctionTemplate::New(OpenChannelToTab); |
} else if (name->Equals(v8::String::New("GetCurrentPageActions"))) { |
return v8::FunctionTemplate::New(GetCurrentPageActions); |
} else if (name->Equals(v8::String::New("StartRequest"))) { |
@@ -110,6 +112,28 @@ class ExtensionImpl : public ExtensionBase { |
return v8::Integer::New(next_request_id++); |
} |
+ // Creates a new messaging channel to the tab with the given ID. |
+ static v8::Handle<v8::Value> OpenChannelToTab(const v8::Arguments& args) { |
+ // Get the current RenderView so that we can send a routed IPC message from |
+ // the correct source. |
+ RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); |
+ if (!renderview) |
+ return v8::Undefined(); |
+ |
+ if (args.Length() >= 3 && args[0]->IsInt32() && args[1]->IsString() && |
+ args[2]->IsString()) { |
+ int tab_id = args[0]->Int32Value(); |
+ std::string extension_id = *v8::String::Utf8Value(args[1]->ToString()); |
+ std::string channel_name = *v8::String::Utf8Value(args[2]->ToString()); |
+ int port_id = -1; |
+ renderview->Send(new ViewHostMsg_OpenChannelToTab( |
+ renderview->routing_id(), tab_id, extension_id, channel_name, |
+ &port_id)); |
+ return v8::Integer::New(port_id); |
+ } |
+ return v8::Undefined(); |
+ } |
+ |
static v8::Handle<v8::Value> GetCurrentPageActions( |
const v8::Arguments& args) { |
std::string extension_id = ExtensionIdFromCurrentContext(); |