summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/extensions/dispatcher.cc6
-rw-r--r--chrome/renderer/extensions/runtime_custom_bindings.cc14
-rw-r--r--chrome/renderer/resources/extensions/miscellaneous_bindings.js4
-rw-r--r--chrome/renderer/resources/extensions/runtime_custom_bindings.js19
4 files changed, 21 insertions, 22 deletions
diff --git a/chrome/renderer/extensions/dispatcher.cc b/chrome/renderer/extensions/dispatcher.cc
index a55632f..39a7c26 100644
--- a/chrome/renderer/extensions/dispatcher.cc
+++ b/chrome/renderer/extensions/dispatcher.cc
@@ -995,9 +995,9 @@ void Dispatcher::DidCreateScriptContext(
switch (context_type) {
case Feature::UNSPECIFIED_CONTEXT:
case Feature::WEB_PAGE_CONTEXT:
- // TODO(kalman): see comment below about ExtensionAPI.
- InstallBindings(module_system, v8_context, "app");
- InstallBindings(module_system, v8_context, "webstore");
+ RegisterBinding("app", context);
+ RegisterBinding("runtime", context); // for connect() and sendMessage()
+ RegisterBinding("webstore", context);
break;
case Feature::BLESSED_EXTENSION_CONTEXT:
case Feature::UNBLESSED_EXTENSION_CONTEXT:
diff --git a/chrome/renderer/extensions/runtime_custom_bindings.cc b/chrome/renderer/extensions/runtime_custom_bindings.cc
index 0f4801f..587fcb7 100644
--- a/chrome/renderer/extensions/runtime_custom_bindings.cc
+++ b/chrome/renderer/extensions/runtime_custom_bindings.cc
@@ -47,16 +47,14 @@ v8::Handle<v8::Value> RuntimeCustomBindings::OpenChannelToExtension(
return v8::Undefined();
// The Javascript code should validate/fill the arguments.
- CHECK(args.Length() >= 3 &&
- args[0]->IsString() &&
- args[1]->IsString() &&
- args[2]->IsString());
+ CHECK_EQ(2, args.Length());
+ CHECK(args[0]->IsString() && args[1]->IsString());
ExtensionMsg_ExternalConnectionInfo info;
- info.source_id = *v8::String::Utf8Value(args[0]->ToString());
- info.target_id = *v8::String::Utf8Value(args[1]->ToString());
+ info.source_id = context()->extension() ? context()->extension()->id() : "";
+ info.target_id = *v8::String::Utf8Value(args[0]->ToString());
info.source_url = renderview->GetWebView()->mainFrame()->document().url();
- std::string channel_name = *v8::String::Utf8Value(args[2]->ToString());
+ std::string channel_name = *v8::String::Utf8Value(args[1]->ToString());
int port_id = -1;
renderview->Send(new ExtensionHostMsg_OpenChannelToExtension(
renderview->GetRoutingID(), info, channel_name, &port_id));
@@ -103,4 +101,4 @@ v8::Handle<v8::Value> RuntimeCustomBindings::GetManifest(
context()->v8_context());
}
-} // extensions
+} // namespace extensions
diff --git a/chrome/renderer/resources/extensions/miscellaneous_bindings.js b/chrome/renderer/resources/extensions/miscellaneous_bindings.js
index 108835c..3fc7010 100644
--- a/chrome/renderer/resources/extensions/miscellaneous_bindings.js
+++ b/chrome/renderer/resources/extensions/miscellaneous_bindings.js
@@ -205,7 +205,9 @@
// the right event.
var isExternal = sourceExtensionId != extensionId;
- var sender = {id: sourceExtensionId};
+ var sender = {};
+ if (sourceExtensionId != '')
+ sender.id = sourceExtensionId;
if (sourceUrl)
sender.url = sourceUrl;
if (sourceTab)
diff --git a/chrome/renderer/resources/extensions/runtime_custom_bindings.js b/chrome/renderer/resources/extensions/runtime_custom_bindings.js
index 85f0476..66245c9 100644
--- a/chrome/renderer/resources/extensions/runtime_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/runtime_custom_bindings.js
@@ -82,22 +82,21 @@ binding.registerCustomHook(function(binding, id, contextType) {
});
apiFunctions.setHandleRequest('connect', function(targetId, connectInfo) {
+ // Don't let orphaned content scripts communicate with their extension.
+ // http://crbug.com/168263
+ if (unloadEvent.wasDispatched)
+ throw new Error('Error connecting to extension ' + targetId);
+
if (!targetId)
targetId = runtime.id;
+
var name = '';
if (connectInfo && connectInfo.name)
name = connectInfo.name;
- // Don't let orphaned content scripts communicate with their extension.
- // http://crbug.com/168263
- if (!unloadEvent.wasDispatched) {
- var portId = runtimeNatives.OpenChannelToExtension(runtime.id,
- targetId,
- name);
- if (portId >= 0)
- return miscBindings.createPort(portId, name);
- }
- throw new Error('Error connecting to extension ' + targetId);
+ var portId = runtimeNatives.OpenChannelToExtension(targetId, name);
+ if (portId >= 0)
+ return miscBindings.createPort(portId, name);
});
//