Index: chrome/test/data/extensions/api_test/messaging/connect/test.js |
diff --git a/chrome/test/data/extensions/api_test/messaging/connect/test.js b/chrome/test/data/extensions/api_test/messaging/connect/test.js |
index d76997fd34bccc78feb735d7c6a85a1ca5f24eed..446bbdd25fee9d56f51c5cc3b064686500238c91 100644 |
--- a/chrome/test/data/extensions/api_test/messaging/connect/test.js |
+++ b/chrome/test/data/extensions/api_test/messaging/connect/test.js |
@@ -70,6 +70,7 @@ chrome.test.getConfig(function(config) { |
listenOnce(chrome.runtime.onConnect, function(port) { |
chrome.test.assertEq({ |
tab: testTab, |
+ frameId: 0, // Main frame |
url: testTab.url, |
id: chrome.runtime.id |
}, port.sender); |
@@ -95,6 +96,7 @@ chrome.test.getConfig(function(config) { |
function(request, sender, sendResponse) { |
chrome.test.assertEq({ |
tab: testTab, |
+ frameId: 0, // Main frame |
url: testTab.url, |
id: chrome.runtime.id |
}, sender); |
@@ -116,6 +118,52 @@ chrome.test.getConfig(function(config) { |
chrome.test.log("sendMessageFromTab: sent first message to tab"); |
}, |
+ // Tests that a message from a child frame has a correct frameId. |
+ function sendMessageFromFrameInTab() { |
+ var senders = []; |
+ var doneListening = listenForever( |
+ chrome.runtime.onMessage, |
+ function(request, sender, sendResponse) { |
+ // The tab's load status could either be "loading" or "complete", |
+ // depending on whether all frames have finished loading. Since we |
+ // want this test to be deterministic, set status to "complete". |
+ sender.tab.status = 'complete'; |
+ // Child frames have a positive frameId. |
+ senders.push(sender); |
+ |
+ // testSendMessageFromFrame() in page.js adds 2 frames. Wait for |
+ // messages from each. |
+ if (senders.length == 2) { |
+ chrome.webNavigation.getAllFrames({ |
+ tabId: testTab.id |
+ }, function(details) { |
+ function sortByFrameId(a, b) { |
+ return a.frameId < b.frameId ? 1 : -1; |
+ } |
+ var expectedSenders = details.filter(function(frame) { |
+ return frame.frameId > 0; // Exclude main frame. |
+ }).map(function(frame) { |
+ return { |
+ tab: testTab, |
+ frameId: frame.frameId, |
+ url: frame.url, |
+ id: chrome.runtime.id |
+ }; |
+ }).sort(sortByFrameId); |
+ senders.sort(sortByFrameId); |
+ chrome.test.assertEq(expectedSenders, senders); |
+ doneListening(); |
+ }); |
+ } |
+ } |
+ ); |
+ |
+ var port = chrome.tabs.connect(testTab.id); |
+ port.postMessage({testSendMessageFromFrame: true}); |
+ port.disconnect(); |
+ chrome.test.log("sendMessageFromFrameInTab: send 1st message to tab"); |
+ }, |
+ |
// Tests error handling when sending a request from a content script to an |
// invalid extension. |
function sendMessageFromTabError() { |