Index: chrome/renderer/resources/extensions/miscellaneous_bindings.js |
diff --git a/chrome/renderer/resources/extensions/miscellaneous_bindings.js b/chrome/renderer/resources/extensions/miscellaneous_bindings.js |
index 33eb9d96f8620a987823bdbb2f49dbcff08af62c..9a4937d1860c7bb0d79961549097117a031c11fa 100644 |
--- a/chrome/renderer/resources/extensions/miscellaneous_bindings.js |
+++ b/chrome/renderer/resources/extensions/miscellaneous_bindings.js |
@@ -105,29 +105,33 @@ |
}; |
// Helper function for dispatchOnRequest. |
- function handleSendRequestError(isSendMessage, responseCallbackPreserved, |
- sourceExtensionId, targetExtensionId) { |
- var errorMsg; |
+ function handleSendRequestError(isSendMessage, |
+ responseCallbackPreserved, |
+ sourceExtensionId, |
+ targetExtensionId, |
+ sourceUrl) { |
+ var errorMsg = []; |
var eventName = isSendMessage ? "runtime.onMessage" : "extension.onRequest"; |
if (isSendMessage && !responseCallbackPreserved) { |
- errorMsg = |
+ errorMsg.push( |
"The chrome." + eventName + " listener must return true if you " + |
- "want to send a response after the listener returns "; |
+ "want to send a response after the listener returns"); |
} else { |
- errorMsg = |
+ errorMsg.push( |
"Cannot send a response more than once per chrome." + eventName + |
- " listener per document"; |
+ " listener per document"); |
} |
- errorMsg += "(message was sent by extension " + sourceExtensionId; |
- if (sourceExtensionId != targetExtensionId) |
- errorMsg += " for extension " + targetExtensionId; |
- errorMsg += ")."; |
- lastError.set(eventName, errorMsg, null, chrome); |
+ errorMsg.push("(message was sent by extension" + sourceExtensionId); |
+ if (sourceExtensionId != "" && sourceExtensionId != targetExtensionId) |
+ errorMsg.push("for extension " + targetExtensionId); |
+ if (sourceUrl != "") |
+ errorMsg.push("for URL " + sourceUrl); |
+ lastError.set(eventName, errorMsg.join(" ") + ").", null, chrome); |
} |
// Helper function for dispatchOnConnect |
function dispatchOnRequest(portId, channelName, sender, |
- sourceExtensionId, targetExtensionId, |
+ sourceExtensionId, targetExtensionId, sourceUrl, |
isExternal) { |
var isSendMessage = channelName == chromeHidden.kMessageChannel; |
var requestEvent = (isSendMessage ? |
@@ -182,16 +186,19 @@ |
"extension.onRequestExternal" : "extension.onRequest")); |
logActivity.LogEvent(targetExtensionId, |
eventName, |
- [sourceExtensionId]); |
+ [sourceExtensionId, sourceUrl]); |
return true; |
} |
return false; |
} |
// Called by native code when a channel has been opened to this context. |
- chromeHidden.Port.dispatchOnConnect = function(portId, channelName, tab, |
+ chromeHidden.Port.dispatchOnConnect = function(portId, |
+ channelName, |
+ sourceTab, |
sourceExtensionId, |
- targetExtensionId) { |
+ targetExtensionId, |
+ sourceUrl) { |
// Only create a new Port if someone is actually listening for a connection. |
// In addition to being an optimization, this also fixes a bug where if 2 |
// channels were opened to and from the same process, closing one would |
@@ -205,15 +212,17 @@ |
// the right event. |
var isExternal = sourceExtensionId != extensionId; |
- if (tab) |
- tab = json.parse(tab); |
- var sender = {tab: tab, id: sourceExtensionId}; |
+ var sender = {id: sourceExtensionId}; |
+ if (sourceUrl) |
+ sender.url = sourceUrl; |
+ if (sourceTab) |
+ sender.tab = sourceTab; |
// Special case for sendRequest/onRequest and sendMessage/onMessage. |
if (channelName == chromeHidden.kRequestChannel || |
channelName == chromeHidden.kMessageChannel) { |
return dispatchOnRequest(portId, channelName, sender, |
- sourceExtensionId, targetExtensionId, |
+ sourceExtensionId, targetExtensionId, sourceUrl, |
isExternal); |
} |