diff options
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/extensions/event_bindings.h | 4 | ||||
-rw-r--r-- | chrome/renderer/extensions/renderer_extension_bindings.cc | 13 | ||||
-rw-r--r-- | chrome/renderer/resources/renderer_extension_bindings.js | 3 |
3 files changed, 17 insertions, 3 deletions
diff --git a/chrome/renderer/extensions/event_bindings.h b/chrome/renderer/extensions/event_bindings.h index f2c5f88..285a379 100644 --- a/chrome/renderer/extensions/event_bindings.h +++ b/chrome/renderer/extensions/event_bindings.h @@ -27,8 +27,8 @@ class EventBindings { static void HandleContextDestroyed(WebFrame* frame); // Calls the given function in each registered context which is listening - // for events. The function can be an object property, ie: - // "chromium.Event.dispatch_". + // for events. See comments on bindings_utils::CallFunctionInContext for + // more details. static void CallFunction(const std::string& function_name, int argc, v8::Handle<v8::Value>* argv); diff --git a/chrome/renderer/extensions/renderer_extension_bindings.cc b/chrome/renderer/extensions/renderer_extension_bindings.cc index f719797..4cff1dd 100644 --- a/chrome/renderer/extensions/renderer_extension_bindings.cc +++ b/chrome/renderer/extensions/renderer_extension_bindings.cc @@ -46,6 +46,8 @@ class ExtensionImpl : public ExtensionBase { return v8::FunctionTemplate::New(OpenChannelToExtension); } else if (name->Equals(v8::String::New("PostMessage"))) { return v8::FunctionTemplate::New(PostMessage); + } else if (name->Equals(v8::String::New("CloseChannel"))) { + return v8::FunctionTemplate::New(CloseChannel); } return ExtensionBase::GetNativeFunction(name); } @@ -83,6 +85,17 @@ class ExtensionImpl : public ExtensionBase { } return v8::Undefined(); } + + // Sends a message along the given channel. + static v8::Handle<v8::Value> CloseChannel(const v8::Arguments& args) { + if (args.Length() >= 1 && args[0]->IsInt32()) { + int port_id = args[0]->Int32Value(); + // Send via the RenderThread because the RenderView might be closing. + EventBindings::GetRenderThread()->Send( + new ViewHostMsg_ExtensionCloseChannel(port_id)); + } + return v8::Undefined(); + } }; // Convert a ListValue to a vector of V8 values. diff --git a/chrome/renderer/resources/renderer_extension_bindings.js b/chrome/renderer/resources/renderer_extension_bindings.js index bf59671..f9d354e 100644 --- a/chrome/renderer/resources/renderer_extension_bindings.js +++ b/chrome/renderer/resources/renderer_extension_bindings.js @@ -10,6 +10,7 @@ var chrome = chrome || {}; (function () { native function OpenChannelToExtension(id); + native function CloseChannel(portId); native function PostMessage(portId, msg); native function GetChromeHidden(); @@ -78,7 +79,7 @@ var chrome = chrome || {}; // Disconnects the port from the other end. chrome.Port.prototype.disconnect = function() { delete ports[this.portId_]; - //CloseChannel(this.portId_); // TODO(mpcomplete) + CloseChannel(this.portId_); } // Extension object. |