Index: chrome/test/data/extensions/api_test/webnavigation/navigation/test.html |
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation/test.html b/chrome/test/data/extensions/api_test/webnavigation/navigation/test.html |
index 431b4e776cb16a15e011edcb012d1b2e1015446d..404294788988972d20d005854ca34fe3509ee6af 100644 |
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation/test.html |
+++ b/chrome/test/data/extensions/api_test/webnavigation/navigation/test.html |
@@ -1,10 +1,14 @@ |
<script> |
var expectedEventData; |
var capturedEventData; |
+var nextFrameId; |
+var frameIds; |
function expect(data) { |
expectedEventData = data; |
capturedEventData = []; |
+ nextFrameId = 1; |
+ frameIds = {}; |
} |
function checkExpectations() { |
@@ -16,39 +20,31 @@ function checkExpectations() { |
chrome.test.succeed(); |
} |
-chrome.experimental.webNavigation.onBeforeNavigate.addListener( |
- function(details) { |
- console.log('---onBeforeNavigate: ' + details.url); |
- // normalize details. |
- details.timeStamp = 0; |
- if (details.frameId != 0) { |
- details.frameId = 1; |
- } |
- capturedEventData.push(["onBeforeNavigate", details]); |
- checkExpectations(); |
-}); |
- |
-chrome.experimental.webNavigation.onCommitted.addListener(function(details) { |
- console.log('---onCommitted: ' + details.url); |
+function captureEvent(name, details) { |
// normalize details. |
details.timeStamp = 0; |
if (details.frameId != 0) { |
- details.frameId = 1; |
+ if (frameIds[details.frameId] === undefined) { |
+ frameIds[details.frameId] = nextFrameId++; |
+ } |
+ details.frameId = frameIds[details.frameId]; |
} |
- capturedEventData.push(["onCommitted", details]); |
+ capturedEventData.push([name, details]); |
checkExpectations(); |
+} |
+ |
+chrome.experimental.webNavigation.onBeforeNavigate.addListener( |
+ function(details) { |
+ captureEvent("onBeforeNavigate", details); |
+}); |
+ |
+chrome.experimental.webNavigation.onCommitted.addListener(function(details) { |
+ captureEvent("onCommitted", details); |
}); |
chrome.experimental.webNavigation.onErrorOccurred.addListener( |
function(details) { |
- console.log('---onErrorOccurred: ' + details.url); |
- // normalize details. |
- details.timeStamp = 0; |
- if (details.frameId != 0) { |
- details.frameId = 1; |
- } |
- capturedEventData.push(["onErrorOccurred", details]); |
- checkExpectations(); |
+ captureEvent("onErrorOccurred", details); |
}); |
var getURL = chrome.extension.getURL; |
@@ -173,26 +169,26 @@ chrome.tabs.getSelected(null, function(tab) { |
transitionType: "link", |
url: getURL('iframe/a.html') }], |
[ "onBeforeNavigate", |
- { frameId: 0, |
+ { frameId: 1, |
requestId: 0, |
tabId: tabId, |
timeStamp: 0, |
url: getURL('iframe/b.html') }], |
[ "onCommitted", |
- { frameId: 0, |
+ { frameId: 1, |
tabId: tabId, |
timeStamp: 0, |
transitionQualifiers: "", |
transitionType: "auto_subframe", |
url: getURL('iframe/b.html') }], |
[ "onBeforeNavigate", |
- { frameId: 0, |
+ { frameId: 1, |
requestId: 0, |
tabId: tabId, |
timeStamp: 0, |
url: getURL('iframe/c.html') }], |
[ "onCommitted", |
- { frameId: 0, |
+ { frameId: 1, |
tabId: tabId, |
timeStamp: 0, |
transitionQualifiers: "", |
@@ -201,6 +197,66 @@ chrome.tabs.getSelected(null, function(tab) { |
chrome.tabs.update(tabId, { url: getURL('iframe/a.html') }); |
}, |
+ /* Navigates to d.html which includes e.html and f.html as iframes. To be |
+ able to predict which iframe has which id, the iframe for f.html is |
+ created by javascript. f.html then navigates to g.html. */ |
+ function iframe2() { |
+ expect([ |
+ [ "onBeforeNavigate", |
+ { frameId: 0, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframe/d.html') }], |
+ [ "onCommitted", |
+ { frameId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "link", |
+ url: getURL('iframe/d.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 1, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframe/e.html') }], |
+ [ "onCommitted", |
+ { frameId: 1, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "auto_subframe", |
+ url: getURL('iframe/e.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 2, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframe/f.html') }], |
+ [ "onCommitted", |
+ { frameId: 2, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "auto_subframe", |
+ url: getURL('iframe/f.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 2, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframe/g.html') }], |
+ [ "onCommitted", |
+ { frameId: 2, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "manual_subframe", |
+ url: getURL('iframe/g.html') }]]); |
+ chrome.tabs.update(tabId, { url: getURL('iframe/d.html') }); |
+ }, |
+ |
/* Navigates to a non-existant page. */ |
function nonExistant() { |
expect([ |
@@ -231,6 +287,107 @@ chrome.tabs.getSelected(null, function(tab) { |
url: getURL('nonexistant.html') }]]); |
chrome.tabs.update(tabId, { url: getURL('nonexistant.html') }); |
}, |
+ |
+ /* An page that tries to load an non-existant iframe. */ |
+ function nonExistantIframe() { |
+ expect([ |
+ [ "onBeforeNavigate", |
+ { frameId: 0, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/d.html') }], |
+ [ "onCommitted", |
+ { frameId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "link", |
+ url: getURL('iframeFail/d.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 1, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/c.html') }], |
+ [ "onErrorOccurred", |
+ { error: "net::ERR_FILE_NOT_FOUND", |
+ frameId: 1, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/c.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 1, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: "chrome://chromewebdata/"}], |
+ [ "onCommitted", |
+ { frameId: 1, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "auto_subframe", |
+ url: getURL('iframeFail/c.html') }]]); |
+ chrome.tabs.update(tabId, { url: getURL('iframeFail/d.html') }); |
+ }, |
+ |
+ /* An iframe navigates to a non-existant page. */ |
+ function nonExistantIframeNavigation() { |
+ expect([ |
+ [ "onBeforeNavigate", |
+ { frameId: 0, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/a.html') }], |
+ [ "onCommitted", |
+ { frameId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "link", |
+ url: getURL('iframeFail/a.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 1, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/b.html') }], |
+ [ "onCommitted", |
+ { frameId: 1, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "auto_subframe", |
+ url: getURL('iframeFail/b.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 1, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/c.html') }], |
+ [ "onErrorOccurred", |
+ { error: "net::ERR_FILE_NOT_FOUND", |
+ frameId: 1, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: getURL('iframeFail/c.html') }], |
+ [ "onBeforeNavigate", |
+ { frameId: 1, |
+ requestId: 0, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ url: "chrome://chromewebdata/"}], |
+ [ "onCommitted", |
+ { frameId: 1, |
+ tabId: tabId, |
+ timeStamp: 0, |
+ transitionQualifiers: "", |
+ transitionType: "manual_subframe", |
+ url: getURL('iframeFail/c.html') }]]); |
+ chrome.tabs.update(tabId, { url: getURL('iframeFail/a.html') }); |
+ }, |
]); |
}); |
</script> |