summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 11:59:54 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 11:59:54 +0000
commitaf3f286560a8fadb4eb6cb51c7ba2cb0f8e17a66 (patch)
tree1ed4bfb613ac7930cf33af6ba644851d771d12a5 /chrome/test
parent4bc45071c2aed54d5499f5f882368b438d4842bf (diff)
downloadchromium_src-af3f286560a8fadb4eb6cb51c7ba2cb0f8e17a66.zip
chromium_src-af3f286560a8fadb4eb6cb51c7ba2cb0f8e17a66.tar.gz
chromium_src-af3f286560a8fadb4eb6cb51c7ba2cb0f8e17a66.tar.bz2
Fire web navigation events on reference fragment navigations.
Also, split up the API tests in single tests, so it's more unlikely that they time out. BUG=73668,72165 TEST=web navigation api tests Review URL: http://codereview.chromium.org/6591036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76371 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/clientRedirect/a.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/clientRedirect/a.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/clientRedirect/b.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/clientRedirect/b.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/clientRedirect/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/clientRedirect/manifest.json (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/manifest.json)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/clientRedirect/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/clientRedirect/tests.js61
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/a.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/a.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/b.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/b.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/d.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/d.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/manifest.json (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation2/manifest.json)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/failures/tests.js131
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/forwardBack/a.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/forwardBack/a.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/forwardBack/b.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/forwardBack/b.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/forwardBack/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/forwardBack/manifest.json7
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/forwardBack/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/forwardBack/tests.js84
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/a.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/a.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/b.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/b.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/c.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/c.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/d.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/d.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/e.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/e.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/f.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/f.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/g.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/g.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/manifest.json7
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/iframe/tests.js184
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/navigation1/test.html561
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/navigation2/test.html212
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/a.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/a.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/b.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/b.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/c.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/c.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/manifest.json7
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/openTab/tests.js145
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/referenceFragment/a.html3
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/referenceFragment/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/referenceFragment/manifest.json7
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/referenceFragment/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/referenceFragment/tests.js60
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/simpleLoad/a.html (renamed from chrome/test/data/extensions/api_test/webnavigation/navigation1/simpleLoad/a.html)0
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/simpleLoad/framework.js80
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/simpleLoad/manifest.json7
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/simpleLoad/test.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/simpleLoad/tests.js37
49 files changed, 1335 insertions, 773 deletions
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/clientRedirect/a.html b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/a.html
index 3e3e11a..3e3e11a 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/clientRedirect/a.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/a.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/clientRedirect/b.html b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/b.html
index 18ecdcb..18ecdcb 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/clientRedirect/b.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/b.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/framework.js b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/manifest.json
index c04d232..c04d232 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/manifest.json
+++ b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/manifest.json
diff --git a/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/test.html b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/tests.js b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/tests.js
new file mode 100644
index 0000000..9349bce
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/tests.js
@@ -0,0 +1,61 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+ chrome.test.runTests([
+ // Navigates to a.html that redirects to b.html (using javascript)
+ // after a delay of 500ms, so the initial navigation is completed and
+ // the redirection is marked as client_redirect.
+ function clientRedirect() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "client_redirect",
+ transitionType: "link",
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('a.html') });
+ },
+ ]);
+ });
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/a.html b/chrome/test/data/extensions/api_test/webnavigation/failures/a.html
index c5c157d..c5c157d 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/a.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/a.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/b.html b/chrome/test/data/extensions/api_test/webnavigation/failures/b.html
index d6e86d8..d6e86d8 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/b.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/b.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/d.html b/chrome/test/data/extensions/api_test/webnavigation/failures/d.html
index 466484f..466484f 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/d.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/d.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/failures/framework.js b/chrome/test/data/extensions/api_test/webnavigation/failures/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation2/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/failures/manifest.json
index f1c777b..f1c777b 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation2/manifest.json
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/manifest.json
diff --git a/chrome/test/data/extensions/api_test/webnavigation/failures/test.html b/chrome/test/data/extensions/api_test/webnavigation/failures/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/failures/tests.js b/chrome/test/data/extensions/api_test/webnavigation/failures/tests.js
new file mode 100644
index 0000000..60a2012
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/failures/tests.js
@@ -0,0 +1,131 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+
+ chrome.test.runTests([
+ // Navigates to a non-existant page.
+ function nonExistant() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('nonexistant.html') }],
+ [ "onErrorOccurred",
+ { error: "net::ERR_FILE_NOT_FOUND",
+ frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ 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: 0,
+ timeStamp: 0,
+ url: getURL('d.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('d.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('d.html') }],
+ [ "onErrorOccurred",
+ { error: "net::ERR_FILE_NOT_FOUND",
+ frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('d.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('d.html') });
+ },
+
+ // An iframe navigates to a non-existant page.
+ function nonExistantIframeNavigation() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "auto_subframe",
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onErrorOccurred",
+ { error: "net::ERR_FILE_NOT_FOUND",
+ frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('a.html') });
+ },
+ ]);
+ });
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/forwardBack/a.html b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/a.html
index 7b3462c..7b3462c 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/forwardBack/a.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/a.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/forwardBack/b.html b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/b.html
index a4270ed..a4270ed 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/forwardBack/b.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/b.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/forwardBack/framework.js b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/forwardBack/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/manifest.json
new file mode 100644
index 0000000..c04d232
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/manifest.json
@@ -0,0 +1,7 @@
+{
+ "name": "navigation1",
+ "version": "1.0",
+ "description": "Tests the webNavigation API events (part 1).",
+ "permissions": ["experimental", "tabs"],
+ "background_page": "test.html"
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/forwardBack/test.html b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/forwardBack/tests.js b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/tests.js
new file mode 100644
index 0000000..6111d57
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/forwardBack/tests.js
@@ -0,0 +1,84 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+
+ chrome.test.runTests([
+ // First navigates to a.html which redirects to to b.html which uses
+ // history.back() to navigate back to a.html
+ function forwardBack() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "client_redirect",
+ transitionType: "link",
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "forward_back",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('a.html') });
+ },
+ ]);
+ });
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/a.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/a.html
index c5c157d..c5c157d 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/a.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/a.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/b.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/b.html
index d6e86d8..d6e86d8 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation2/iframeFail/b.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/b.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/c.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/c.html
index 18ecdcb..18ecdcb 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/c.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/c.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/d.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/d.html
index d34a39b..d34a39b 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/d.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/d.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/e.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/e.html
index 18ecdcb..18ecdcb 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/e.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/e.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/f.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/f.html
index b623f77..b623f77 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/f.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/f.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/iframe/framework.js b/chrome/test/data/extensions/api_test/webnavigation/iframe/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/g.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/g.html
index 18ecdcb..18ecdcb 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/iframe/g.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/g.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/iframe/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/iframe/manifest.json
new file mode 100644
index 0000000..c04d232
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/manifest.json
@@ -0,0 +1,7 @@
+{
+ "name": "navigation1",
+ "version": "1.0",
+ "description": "Tests the webNavigation API events (part 1).",
+ "permissions": ["experimental", "tabs"],
+ "background_page": "test.html"
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/iframe/test.html b/chrome/test/data/extensions/api_test/webnavigation/iframe/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/iframe/tests.js b/chrome/test/data/extensions/api_test/webnavigation/iframe/tests.js
new file mode 100644
index 0000000..9bfc085
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/iframe/tests.js
@@ -0,0 +1,184 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+
+ chrome.test.runTests([
+ // Navigates to a.html which includes b.html as an iframe. b.html
+ // redirects to c.html.
+ function iframe() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "auto_subframe",
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onCommitted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "manual_subframe",
+ url: getURL('c.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onCompleted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('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 iframeMultiple() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('d.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('d.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('e.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('d.html') }],
+ [ "onCommitted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "auto_subframe",
+ url: getURL('e.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('e.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 2,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('f.html') }],
+ [ "onCompleted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('e.html') }],
+ [ "onCommitted",
+ { frameId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "auto_subframe",
+ url: getURL('f.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('f.html') }],
+ [ "onCompleted",
+ { frameId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('f.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('d.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 2,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('g.html') }],
+ [ "onCommitted",
+ { frameId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "manual_subframe",
+ url: getURL('g.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('g.html') }],
+ [ "onCompleted",
+ { frameId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('g.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('d.html') });
+ },
+ ]);
+ });
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/test.html b/chrome/test/data/extensions/api_test/webnavigation/navigation1/test.html
deleted file mode 100644
index 54080a7..0000000
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/test.html
+++ /dev/null
@@ -1,561 +0,0 @@
-<script>
-var expectedEventData;
-var capturedEventData;
-var nextFrameId;
-var frameIds;
-var nextTabId;
-var tabIds;
-
-function expect(data) {
- expectedEventData = data;
- capturedEventData = [];
- nextFrameId = 1;
- frameIds = {};
- nextTabId = 0;
- tabIds = {};
-}
-
-function checkExpectations() {
- if (capturedEventData.length < expectedEventData.length) {
- return;
- }
- chrome.test.assertEq(JSON.stringify(expectedEventData),
- JSON.stringify(capturedEventData));
- chrome.test.succeed();
-}
-
-function captureEvent(name, details) {
- // normalize details.
- if ('timeStamp' in details) {
- details.timeStamp = 0;
- }
- if (('frameId' in details) && (details.frameId != 0)) {
- if (frameIds[details.frameId] === undefined) {
- frameIds[details.frameId] = nextFrameId++;
- }
- details.frameId = frameIds[details.frameId];
- }
- if ('tabId' in details) {
- if (tabIds[details.tabId] === undefined) {
- tabIds[details.tabId] = nextTabId++;
- }
- details.tabId = tabIds[details.tabId];
- }
- if ('sourceTabId' in details) {
- if (tabIds[details.sourceTabId] === undefined) {
- tabIds[details.sourceTabId] = nextTabId++;
- }
- details.sourceTabId = tabIds[details.sourceTabId];
- }
- 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.onDOMContentLoaded.addListener(
- function(details) {
- captureEvent("onDOMContentLoaded", details);
-});
-
-chrome.experimental.webNavigation.onCompleted.addListener(
- function(details) {
- captureEvent("onCompleted", details);
-});
-
-chrome.experimental.webNavigation.onBeforeRetarget.addListener(
- function(details) {
- captureEvent("onBeforeRetarget", details);
-});
-
-chrome.experimental.webNavigation.onErrorOccurred.addListener(
- function(details) {
- captureEvent("onErrorOccurred", details);
-});
-
-var getURL = chrome.extension.getURL;
-chrome.tabs.getSelected(null, function(tab) {
- var tabId = tab.id;
-
- chrome.test.runTests([
- /* Navigates to an URL */
- function simpleLoad() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('simpleLoad/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('simpleLoad/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('simpleLoad/a.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('simpleLoad/a.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('simpleLoad/a.html') });
- },
-
- /* Navigates to a.html that redirects to b.html (using javascript)
- after a delay of 500ms, so the initial navigation is completed and
- the redirection is marked as client_redirect */
- function clientRedirect() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('clientRedirect/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('clientRedirect/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('clientRedirect/a.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('clientRedirect/a.html') }],
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('clientRedirect/b.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "client_redirect",
- transitionType: "link",
- url: getURL('clientRedirect/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('clientRedirect/b.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('clientRedirect/b.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('clientRedirect/a.html') });
- },
-
- /* First navigates to a.html which redirects to to b.html which uses
- history.back() to navigate back to a.html */
- function forwardBack() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('forwardBack/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/a.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/a.html') }],
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/b.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "client_redirect",
- transitionType: "link",
- url: getURL('forwardBack/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/b.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/b.html') }],
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "forward_back",
- transitionType: "link",
- url: getURL('forwardBack/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/a.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('forwardBack/a.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('forwardBack/a.html') });
- },
-
- /* Navigates to a.html which includes b.html as an iframe. b.html
- redirects to c.html. */
- function iframe() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('iframe/a.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/a.html') }],
- [ "onCommitted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "auto_subframe",
- url: getURL('iframe/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/b.html') }],
- [ "onCompleted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/b.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/a.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/c.html') }],
- [ "onCommitted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "manual_subframe",
- url: getURL('iframe/c.html') }],
- [ "onDOMContentLoaded",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/c.html') }],
- [ "onCompleted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/c.html') }]]);
- 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: 0,
- timeStamp: 0,
- url: getURL('iframe/d.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('iframe/d.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/e.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/d.html') }],
- [ "onCommitted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "auto_subframe",
- url: getURL('iframe/e.html') }],
- [ "onDOMContentLoaded",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/e.html') }],
- [ "onBeforeNavigate",
- { frameId: 2,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/f.html') }],
- [ "onCompleted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/e.html') }],
- [ "onCommitted",
- { frameId: 2,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "auto_subframe",
- url: getURL('iframe/f.html') }],
- [ "onDOMContentLoaded",
- { frameId: 2,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/f.html') }],
- [ "onCompleted",
- { frameId: 2,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/f.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/d.html') }],
- [ "onBeforeNavigate",
- { frameId: 2,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/g.html') }],
- [ "onCommitted",
- { frameId: 2,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "manual_subframe",
- url: getURL('iframe/g.html') }],
- [ "onDOMContentLoaded",
- { frameId: 2,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/g.html') }],
- [ "onCompleted",
- { frameId: 2,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframe/g.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('iframe/d.html') });
- },
-
- /* Opens a new tab from javascript. */
- function openTab() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('openTab/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/a.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/a.html') }],
- [ "onBeforeRetarget",
- { sourceTabId: 0,
- sourceUrl: getURL('openTab/a.html'),
- targetUrl: getURL('openTab/b.html'),
- timeStamp: 0 }],
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 1,
- timeStamp: 0,
- url: getURL('openTab/b.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 1,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('openTab/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 1,
- timeStamp: 0,
- url: getURL('openTab/b.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 1,
- timeStamp: 0,
- url: getURL('openTab/b.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('openTab/a.html') });
- },
-
- /* Opens a new tab from javascript within an iframe. */
- function openTabFrame() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/c.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('openTab/c.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/c.html') }],
- [ "onCommitted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "auto_subframe",
- url: getURL('openTab/a.html') }],
- [ "onDOMContentLoaded",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/a.html') }],
- [ "onCompleted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/a.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('openTab/c.html') }],
- [ "onBeforeRetarget",
- { sourceTabId: 0,
- sourceUrl: getURL('openTab/a.html'),
- targetUrl: getURL('openTab/b.html'),
- timeStamp: 0 }],
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 1,
- timeStamp: 0,
- url: getURL('openTab/b.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 1,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('openTab/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 1,
- timeStamp: 0,
- url: getURL('openTab/b.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 1,
- timeStamp: 0,
- url: getURL('openTab/b.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('openTab/c.html') });
- },
- ]);
-});
-</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation2/test.html b/chrome/test/data/extensions/api_test/webnavigation/navigation2/test.html
deleted file mode 100644
index c3239bc..0000000
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation2/test.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<script>
-var expectedEventData;
-var capturedEventData;
-var nextFrameId;
-var frameIds;
-var nextTabId;
-var tabIds;
-
-function expect(data) {
- expectedEventData = data;
- capturedEventData = [];
- nextFrameId = 1;
- frameIds = {};
- nextTabId = 0;
- tabIds = {};
-}
-
-function checkExpectations() {
- if (capturedEventData.length < expectedEventData.length) {
- return;
- }
- chrome.test.assertEq(JSON.stringify(expectedEventData),
- JSON.stringify(capturedEventData));
- chrome.test.succeed();
-}
-
-function captureEvent(name, details) {
- // normalize details.
- if ('timeStamp' in details) {
- details.timeStamp = 0;
- }
- if (('frameId' in details) && (details.frameId != 0)) {
- if (frameIds[details.frameId] === undefined) {
- frameIds[details.frameId] = nextFrameId++;
- }
- details.frameId = frameIds[details.frameId];
- }
- if ('tabId' in details) {
- if (tabIds[details.tabId] === undefined) {
- tabIds[details.tabId] = nextTabId++;
- }
- details.tabId = tabIds[details.tabId];
- }
- if ('sourceTabId' in details) {
- if (tabIds[details.sourceTabId] === undefined) {
- tabIds[details.sourceTabId] = nextTabId++;
- }
- details.sourceTabId = tabIds[details.sourceTabId];
- }
- 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.onDOMContentLoaded.addListener(
- function(details) {
- captureEvent("onDOMContentLoaded", details);
-});
-
-chrome.experimental.webNavigation.onCompleted.addListener(
- function(details) {
- captureEvent("onCompleted", details);
-});
-
-chrome.experimental.webNavigation.onBeforeRetarget.addListener(
- function(details) {
- captureEvent("onBeforeRetarget", details);
-});
-
-chrome.experimental.webNavigation.onErrorOccurred.addListener(
- function(details) {
- captureEvent("onErrorOccurred", details);
-});
-
-var getURL = chrome.extension.getURL;
-chrome.tabs.getSelected(null, function(tab) {
- var tabId = tab.id;
-
- chrome.test.runTests([
- /* Navigates to a non-existant page. */
- function nonExistant() {
- expect([
- [ "onBeforeNavigate",
- { frameId: 0,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('nonexistant.html') }],
- [ "onErrorOccurred",
- { error: "net::ERR_FILE_NOT_FOUND",
- frameId: 0,
- tabId: 0,
- timeStamp: 0,
- 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: 0,
- timeStamp: 0,
- url: getURL('iframeFail/d.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('iframeFail/d.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/c.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/d.html') }],
- [ "onErrorOccurred",
- { error: "net::ERR_FILE_NOT_FOUND",
- frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/c.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/d.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: 0,
- timeStamp: 0,
- url: getURL('iframeFail/a.html') }],
- [ "onCommitted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "link",
- url: getURL('iframeFail/a.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/a.html') }],
- [ "onCommitted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- transitionQualifiers: "",
- transitionType: "auto_subframe",
- url: getURL('iframeFail/b.html') }],
- [ "onDOMContentLoaded",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/b.html') }],
- [ "onCompleted",
- { frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/b.html') }],
- [ "onCompleted",
- { frameId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/a.html') }],
- [ "onBeforeNavigate",
- { frameId: 1,
- requestId: 0,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/c.html') }],
- [ "onErrorOccurred",
- { error: "net::ERR_FILE_NOT_FOUND",
- frameId: 1,
- tabId: 0,
- timeStamp: 0,
- url: getURL('iframeFail/c.html') }]]);
- chrome.tabs.update(tabId, { url: getURL('iframeFail/a.html') });
- },
- ]);
-});
-</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/a.html b/chrome/test/data/extensions/api_test/webnavigation/openTab/a.html
index fedfc5f..fedfc5f 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/a.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/a.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/b.html b/chrome/test/data/extensions/api_test/webnavigation/openTab/b.html
index 18ecdcb..18ecdcb 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/b.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/b.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/c.html b/chrome/test/data/extensions/api_test/webnavigation/openTab/c.html
index 369838e..369838e 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/openTab/c.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/c.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/openTab/framework.js b/chrome/test/data/extensions/api_test/webnavigation/openTab/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/openTab/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/openTab/manifest.json
new file mode 100644
index 0000000..c04d232
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/manifest.json
@@ -0,0 +1,7 @@
+{
+ "name": "navigation1",
+ "version": "1.0",
+ "description": "Tests the webNavigation API events (part 1).",
+ "permissions": ["experimental", "tabs"],
+ "background_page": "test.html"
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/openTab/test.html b/chrome/test/data/extensions/api_test/webnavigation/openTab/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/openTab/tests.js b/chrome/test/data/extensions/api_test/webnavigation/openTab/tests.js
new file mode 100644
index 0000000..9e3848c
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/openTab/tests.js
@@ -0,0 +1,145 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+
+ chrome.test.runTests([
+ // Opens a new tab from javascript.
+ function openTab() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onBeforeRetarget",
+ { sourceTabId: 0,
+ sourceUrl: getURL('a.html'),
+ targetUrl: getURL('b.html'),
+ timeStamp: 0 }],
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ url: getURL('b.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('a.html') });
+ },
+
+ // Opens a new tab from javascript within an iframe.
+ function openTabFrame() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('c.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 1,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onCommitted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "auto_subframe",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('c.html') }],
+ [ "onBeforeRetarget",
+ { sourceTabId: 0,
+ sourceUrl: getURL('a.html'),
+ targetUrl: getURL('b.html'),
+ timeStamp: 0 }],
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('b.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ url: getURL('b.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 1,
+ timeStamp: 0,
+ url: getURL('b.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('c.html') });
+ },
+ ]);
+ });
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/a.html b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/a.html
new file mode 100644
index 0000000..17edd07
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/a.html
@@ -0,0 +1,3 @@
+<script>
+ window.setTimeout('document.location = "a.html#anchor";', 500);
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/framework.js b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/manifest.json
new file mode 100644
index 0000000..c04d232
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/manifest.json
@@ -0,0 +1,7 @@
+{
+ "name": "navigation1",
+ "version": "1.0",
+ "description": "Tests the webNavigation API events (part 1).",
+ "permissions": ["experimental", "tabs"],
+ "background_page": "test.html"
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/test.html b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/tests.js b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/tests.js
new file mode 100644
index 0000000..c2571d35
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/tests.js
@@ -0,0 +1,60 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+
+ chrome.test.runTests([
+ // Reference fragment navigation.
+ function referenceFragment() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html#anchor') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "client_redirect",
+ transitionType: "link",
+ url: getURL('a.html#anchor') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html#anchor') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html#anchor') }]]);
+ chrome.tabs.update(tabId, { url: getURL('a.html') });
+ },
+ ]);
+ });
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/navigation1/simpleLoad/a.html b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/a.html
index 18ecdcb..18ecdcb 100644
--- a/chrome/test/data/extensions/api_test/webnavigation/navigation1/simpleLoad/a.html
+++ b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/a.html
diff --git a/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/framework.js b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/framework.js
new file mode 100644
index 0000000..60f574a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/framework.js
@@ -0,0 +1,80 @@
+var expectedEventData;
+var capturedEventData;
+var nextFrameId;
+var frameIds;
+var nextTabId;
+var tabIds;
+
+function expect(data) {
+ expectedEventData = data;
+ capturedEventData = [];
+ nextFrameId = 1;
+ frameIds = {};
+ nextTabId = 0;
+ tabIds = {};
+}
+
+function checkExpectations() {
+ if (capturedEventData.length < expectedEventData.length) {
+ return;
+ }
+ chrome.test.assertEq(JSON.stringify(expectedEventData),
+ JSON.stringify(capturedEventData));
+ chrome.test.succeed();
+}
+
+function captureEvent(name, details) {
+ // normalize details.
+ if ('timeStamp' in details) {
+ details.timeStamp = 0;
+ }
+ if (('frameId' in details) && (details.frameId != 0)) {
+ if (frameIds[details.frameId] === undefined) {
+ frameIds[details.frameId] = nextFrameId++;
+ }
+ details.frameId = frameIds[details.frameId];
+ }
+ if ('tabId' in details) {
+ if (tabIds[details.tabId] === undefined) {
+ tabIds[details.tabId] = nextTabId++;
+ }
+ details.tabId = tabIds[details.tabId];
+ }
+ if ('sourceTabId' in details) {
+ if (tabIds[details.sourceTabId] === undefined) {
+ tabIds[details.sourceTabId] = nextTabId++;
+ }
+ details.sourceTabId = tabIds[details.sourceTabId];
+ }
+ 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.onDOMContentLoaded.addListener(
+ function(details) {
+ captureEvent("onDOMContentLoaded", details);
+});
+
+chrome.experimental.webNavigation.onCompleted.addListener(
+ function(details) {
+ captureEvent("onCompleted", details);
+});
+
+chrome.experimental.webNavigation.onBeforeRetarget.addListener(
+ function(details) {
+ captureEvent("onBeforeRetarget", details);
+});
+
+chrome.experimental.webNavigation.onErrorOccurred.addListener(
+ function(details) {
+ captureEvent("onErrorOccurred", details);
+});
diff --git a/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/manifest.json b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/manifest.json
new file mode 100644
index 0000000..c04d232
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/manifest.json
@@ -0,0 +1,7 @@
+{
+ "name": "navigation1",
+ "version": "1.0",
+ "description": "Tests the webNavigation API events (part 1).",
+ "permissions": ["experimental", "tabs"],
+ "background_page": "test.html"
+}
diff --git a/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/test.html b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/test.html
new file mode 100644
index 0000000..a03fe7d
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/test.html
@@ -0,0 +1,5 @@
+<script src="tests.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/tests.js b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/tests.js
new file mode 100644
index 0000000..88c6cdb
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/tests.js
@@ -0,0 +1,37 @@
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ chrome.tabs.getSelected(null, function(tab) {
+ var tabId = tab.id;
+
+ chrome.test.runTests([
+ // Navigates to an URL.
+ function simpleLoad() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ requestId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: "",
+ transitionType: "link",
+ url: getURL('a.html') }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('a.html') }]]);
+ chrome.tabs.update(tabId, { url: getURL('a.html') });
+ },
+ ]);
+ });
+}