| 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();
|
|
|