summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/extensions/event_bindings.h4
-rw-r--r--chrome/renderer/extensions/renderer_extension_bindings.cc13
-rw-r--r--chrome/renderer/resources/renderer_extension_bindings.js3
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.