Index: chrome/test/data/extensions/api_test/tabs/on_updated/test.html |
diff --git a/chrome/test/data/extensions/api_test/tabs/on_updated/test.html b/chrome/test/data/extensions/api_test/tabs/on_updated/test.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..284c6f74f5c5a7df2f595e39405d683c1172973a |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/tabs/on_updated/test.html |
@@ -0,0 +1,112 @@ |
+<script> |
+// Description |
+ |
+var expectedEventData; |
+var capturedEventData; |
+var shouldIgnore; |
+ |
+function expect(data, ignoreFunc) { |
+ expectedEventData = data; |
+ capturedEventData = []; |
+ shouldIgnore = ignoreFunc; |
+} |
+ |
+function checkExpectations() { |
+ if (capturedEventData.length < expectedEventData.length) { |
+ return; |
+ } |
+ chrome.test.assertEq(JSON.stringify(expectedEventData), |
+ JSON.stringify(capturedEventData)); |
+ chrome.test.succeed(); |
+} |
+ |
+var getURL = chrome.extension.getURL; |
+ |
+chrome.tabs.onUpdated.addListener(function(tabId, info, tab) { |
+ console.log('---onUpdated: ' + info.status + ', ' + info.url); |
+ if (shouldIgnore && shouldIgnore(info)) { |
+ return; |
+ } |
+ capturedEventData.push(info); |
+ checkExpectations(); |
+}); |
+ |
+chrome.test.runTests([ |
+ function browserThenRendererInitiated() { |
+ // Note that a.html will set it's location.href to b.html, creating a |
+ // renderer-initiated navigation. |
+ expect([ |
+ { status: 'loading', url: getURL('browserThenRendererInitiated/a.html') }, |
+ { status: 'complete' }, |
+ { status: 'loading', url: getURL('browserThenRendererInitiated/b.html') }, |
+ { status: 'complete' }, |
+ ]); |
+ |
+ chrome.tabs.create({ url: getURL('browserThenRendererInitiated/a.html') }); |
+ }, |
+ |
+ function newTab() { |
+ // Test for crbug.com/27208. |
+ expect([ |
+ { status: 'loading', url: 'chrome://newtab/' }, |
+ { status: 'complete' } |
+ ]); |
+ |
+ chrome.tabs.create({ url: 'chrome://newtab/' }); |
+ }, |
+ |
+ /* |
+ // TODO(rafaelw) -- This is disabled because this test is flakey. |
+ function updateDuringCreateCallback() { |
+ // Test for crbug.com/27204. |
+ // We have to ignore anything that comes before the about:blank loading |
+ // status. |
+ var ignore = true; |
+ expect([ |
+ { status: 'loading', url: 'about:blank' }, |
+ { status: 'complete' } |
+ ], function(info) { |
+ if (info.status === 'loading' && info.url === 'about:blank') { |
+ ignore = false; |
+ } |
+ return ignore; |
+ }); |
+ |
+ chrome.tabs.create({ url: 'chrome://newtab/' }, function(tab) { |
+ chrome.tabs.update(tab.id, { url: 'about:blank' }); |
+ }); |
+ }, */ |
+ |
+ function iframeNavigated() { |
+ // The sequence of events goes like this: |
+ // -a.html starts loading |
+ // -while a.html is loading, iframe1.html (in it's onload) navigates to |
+ // iframe2.html. This causes the page to continue to be in the loading state |
+ // so the 'complete' status doesn't fire. |
+ // -iframe2.html does a setTimeout to navigate itself to iframe3.html. This |
+ // allows the page to stop loading and the 'complete' status to fire, but |
+ // when the timeout fires, the pages goes back into the loading state |
+ // which causes the new status: 'loading' event to fire without having |
+ // changed the url. |
+ expect([ |
+ { status: 'loading', url: getURL('iframeNavigated/a.html') }, |
+ { status: 'complete' }, |
+ { status: 'loading' }, |
+ { status: 'complete' }, |
+ ]); |
+ |
+ chrome.tabs.create({ url: getURL('iframeNavigated/a.html') }); |
+ }, |
+ |
+ function internalAnchorNavigated() { |
+ expect([ |
+ { status: 'loading', url: getURL('internalAnchorNavigated/a.html') }, |
+ { status: 'complete' }, |
+ { status: 'loading', url: getURL('internalAnchorNavigated/a.html#b') }, |
+ { status: 'complete' }, |
+ ]); |
+ |
+ chrome.tabs.create({ url: getURL('internalAnchorNavigated/a.html') }); |
+ } |
+]); |
+</script> |