Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4946)

Unified Diff: chrome/test/data/extensions/api_test/webnavigation/test_crossProcess.js

Issue 10823169: Another attempt at fixing dead frames being tracked by webNavigation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch for landing Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/webnavigation/test_crossProcess.js
diff --git a/chrome/test/data/extensions/api_test/webnavigation/test_crossProcess.js b/chrome/test/data/extensions/api_test/webnavigation/test_crossProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed773107e49600800048641c9cfbcd2be4df3b90
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/test_crossProcess.js
@@ -0,0 +1,638 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ var URL_REGULAR =
+ "http://127.0.0.1:PORT/files/extensions/api_test/webnavigation/crossProcess/empty.html";
+ var URL_REDIRECT = "http://www.a.com:PORT/server-redirect";
+ var URL_TEST = "http://127.0.0.1:PORT/test";
+ chrome.tabs.create({"url": "about:blank"}, function(tab) {
+ var tabId = tab.id;
+ chrome.test.getConfig(function(config) {
+ var fixPort = function(url) {
+ return url.replace(/PORT/g, config.testServer.port);
+ };
+ URL_REGULAR = fixPort(URL_REGULAR);
+ URL_REDIRECT = fixPort(URL_REDIRECT);
+ URL_TEST = fixPort(URL_TEST);
+
+ chrome.test.runTests([
+ // Navigates from an extension page to a HTTP page which causes a
+ // process switch.
+ function crossProcess() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/a.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/a.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/a.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/a.html') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REGULAR }},
+ { label: "b-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: URL_REGULAR }},
+ { label: "b-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REGULAR }},
+ { label: "b-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REGULAR }}],
+ [ navigationOrder("a-"), navigationOrder("b-") ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/a.html?' + config.testServer.port) });
+ },
+
+ // Redirects through an app extent, should cause two process switches.
+ function crossProcessRedirect() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/c.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/c.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/c.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/c.html') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REDIRECT }},
+ { label: "b-onErrorOccurred",
+ event: "onErrorOccurred",
+ details: { error: "net::ERR_ABORTED",
+ frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REDIRECT }},
+ { label: "c-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REGULAR }},
+ { label: "c-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: URL_REGULAR }},
+ { label: "c-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REGULAR }},
+ { label: "c-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 2,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_REGULAR }}],
+ [ navigationOrder("a-"),
+ navigationOrder("c-"),
+ [ "a-onCompleted", "b-onBeforeNavigate", "b-onErrorOccurred",
+ "c-onBeforeNavigate"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/c.html?' + config.testServer.port) });
+ },
+
+ // Navigates to a different site, but then aborts the navigation by
+ // starting a new one.
+ function crossProcessAbort() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/d.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/d.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/d.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/d.html') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "1" }},
+ { label: "b-onErrorOccurred",
+ event: "onErrorOccurred",
+ details: { error: "net::ERR_ABORTED",
+ frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "1" }},
+ { label: "c-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/empty.html') }},
+ { label: "c-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: ["client_redirect"],
+ transitionType: "link",
+ url: getURL('crossProcess/empty.html') }},
+ { label: "c-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/empty.html') }},
+ { label: "c-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/empty.html') }}],
+ [ navigationOrder("a-"),
+ navigationOrder("c-"),
+ [ "a-onCompleted", "b-onBeforeNavigate", "b-onErrorOccurred",
+ "c-onCommitted"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/d.html?' + config.testServer.port) });
+ },
+
+ // Navigates to a different site, but then modifies the history using
+ // history.pushState().
+ function crossProcessHistory() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/e.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/e.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/e.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/e.html') }},
+ { label: "a-onHistoryStateUpdated",
+ event: "onHistoryStateUpdated",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/empty.html') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "2" }},
+ { label: "b-onErrorOccurred",
+ event: "onErrorOccurred",
+ details: { error: "net::ERR_ABORTED",
+ frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "2" }}],
+ [ navigationOrder("a-"),
+ [ "a-onCompleted", "b-onBeforeNavigate",
+ "a-onHistoryStateUpdated"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/e.html?' + config.testServer.port) });
+ },
+
+ // Navigates to a different site, but then modifies the reference
+ // framgent.
+ function crossProcessFragment() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/f.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/f.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/f.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/f.html') }},
+ { label: "a-onReferenceFragmentUpdated",
+ event: "onReferenceFragmentUpdated",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/f.html#foo') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "3" }},
+ { label: "b-onErrorOccurred",
+ event: "onErrorOccurred",
+ details: { error: "net::ERR_ABORTED",
+ frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "3" }}],
+ [ navigationOrder("a-"),
+ [ "a-onCompleted", "b-onBeforeNavigate",
+ "a-onReferenceFragmentUpdated"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/f.html?' + config.testServer.port) });
+ },
+
+ // A page with an iframe that changes its reference fragment before
+ // the iframe committed.
+ function crossProcessFragmentIFrame() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/g.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/g.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/g.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/g.html') }},
+ { label: "a-onReferenceFragmentUpdated",
+ event: "onReferenceFragmentUpdated",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/g.html#foo') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "4" }},
+ { label: "b-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "auto_subframe",
+ url: URL_TEST + "4" }},
+ { label: "b-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "4" }},
+ { label: "b-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "4" }}],
+ [ navigationOrder("a-"), navigationOrder("b-"),
+ [ "a-onCompleted", "b-onBeforeNavigate",
+ "a-onReferenceFragmentUpdated"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/g.html?' + config.testServer.port) });
+ },
+
+ // A page with an iframe that changes its history state using
+ // history.pushState before the iframe is committed.
+ function crossProcessHistoryIFrame() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/h.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/h.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/h.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/h.html') }},
+ { label: "a-onHistoryStateUpdated",
+ event: "onHistoryStateUpdated",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/empty.html') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "5" }},
+ { label: "b-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "auto_subframe",
+ url: URL_TEST + "5" }},
+ { label: "b-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "5" }},
+ { label: "b-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 1,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "5" }}],
+ [ navigationOrder("a-"), navigationOrder("b-"),
+ [ "a-onCompleted", "b-onBeforeNavigate",
+ "a-onHistoryStateUpdated"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/h.html?' + config.testServer.port) });
+ },
+
+ // Navigates to a different site, but then modifies the history using
+ // history.replaceState().
+ function crossProcessHistoryReplace() {
+ expect([
+ { label: "a-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/i.html') }},
+ { label: "a-onCommitted",
+ event: "onCommitted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/i.html') }},
+ { label: "a-onDOMContentLoaded",
+ event: "onDOMContentLoaded",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/i.html') }},
+ { label: "a-onCompleted",
+ event: "onCompleted",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: getURL('crossProcess/i.html') }},
+ { label: "a-onHistoryStateUpdated",
+ event: "onHistoryStateUpdated",
+ details: { frameId: 0,
+ processId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: getURL('crossProcess/empty.html') }},
+ { label: "b-onBeforeNavigate",
+ event: "onBeforeNavigate",
+ details: { frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "6" }},
+ { label: "b-onErrorOccurred",
+ event: "onErrorOccurred",
+ details: { error: "net::ERR_ABORTED",
+ frameId: 0,
+ processId: 1,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_TEST + "6" }}],
+ [ navigationOrder("a-"),
+ [ "a-onCompleted", "b-onBeforeNavigate",
+ "a-onHistoryStateUpdated"] ]);
+
+ chrome.tabs.update(
+ tabId,
+ { url: getURL('crossProcess/i.html?' + config.testServer.port) });
+ },
+
+ ]);
+ });
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698