Chromium Code Reviews| Index: chrome/renderer/resources/extensions/messaging.js |
| =================================================================== |
| --- chrome/renderer/resources/extensions/messaging.js (revision 246436) |
| +++ chrome/renderer/resources/extensions/messaging.js (working copy) |
| @@ -30,6 +30,9 @@ |
| // unloadEvent listeners when ports are closed. |
| var portReleasers = {}; |
| + // A stack of tabs ids for the tabs that are dispatching requests. |
| + var dispatchingTabIds = []; |
| + |
| // Change even to odd and vice versa, to get the other side of a given |
| // channel. |
| function getOppositePortId(portId) { return portId ^ 1; } |
| @@ -142,7 +145,7 @@ |
| // Helper function for dispatchOnConnect |
| function dispatchOnRequest(portId, channelName, sender, |
| sourceExtensionId, targetExtensionId, sourceUrl, |
| - isExternal) { |
| + isExternal, senderTabId) { |
| var isSendMessage = channelName == kMessageChannel; |
| var requestEvent = null; |
| if (isSendMessage) { |
| @@ -186,7 +189,12 @@ |
| port = null; |
| } |
| }); |
| + if (senderTabId) |
| + dispatchingTabIds.push(senderTabId); |
| var rv = requestEvent.dispatch(request, sender, responseCallback); |
| + if (senderTabId) |
| + dispatchingTabIds.pop(); |
| + |
| if (isSendMessage) { |
| responseCallbackPreserved = |
| rv && rv.results && $Array.indexOf(rv.results, true) > -1; |
| @@ -241,16 +249,19 @@ |
| sender.id = sourceExtensionId; |
| if (sourceUrl) |
| sender.url = sourceUrl; |
| - if (sourceTab) |
| + if (sourceTab && !('isPlatformApp' in sourceTab)) |
| sender.tab = sourceTab; |
| if (tlsChannelId !== undefined) |
| sender.tlsChannelId = tlsChannelId; |
| // Special case for sendRequest/onRequest and sendMessage/onMessage. |
| if (channelName == kRequestChannel || channelName == kMessageChannel) { |
| + var senderTabId = |
| + (sourceTab && ('id' in sourceTab) && ('isPlatformApp' in sourceTab)) ? |
| + sourceTab['id'] : null; |
| return dispatchOnRequest(portId, channelName, sender, |
| sourceExtensionId, targetExtensionId, sourceUrl, |
| - isExternal); |
| + isExternal, senderTabId); |
|
not at google - send to devlin
2014/01/23 16:41:59
The above comment said... maybe it would be easier
|
| } |
| var connectEvent = null; |
| @@ -360,6 +371,10 @@ |
| return alignedArgs; |
| } |
| + function currentTabId() { |
| + return dispatchingTabIds[dispatchingTabIds.length - 1]; |
| + } |
| + |
| exports.kRequestChannel = kRequestChannel; |
| exports.kMessageChannel = kMessageChannel; |
| exports.kNativeMessageChannel = kNativeMessageChannel; |
| @@ -367,6 +382,7 @@ |
| exports.createPort = createPort; |
| exports.sendMessageImpl = sendMessageImpl; |
| exports.sendMessageUpdateArguments = sendMessageUpdateArguments; |
| +exports.currentTabId = currentTabId; |
| // For C++ code to call. |
| exports.hasPort = hasPort; |