| Index: chrome/test/data/extensions/api_test/webnavigation/crossProcessIframe/test_crossProcessIframe.js
|
| diff --git a/chrome/test/data/extensions/api_test/webnavigation/crossProcessIframe/test_crossProcessIframe.js b/chrome/test/data/extensions/api_test/webnavigation/crossProcessIframe/test_crossProcessIframe.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8912831f29da0b2a76d248d0619c4d5554a4b82b
|
| --- /dev/null
|
| +++ b/chrome/test/data/extensions/api_test/webnavigation/crossProcessIframe/test_crossProcessIframe.js
|
| @@ -0,0 +1,216 @@
|
| +// Copyright 2015 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.
|
| +
|
| +onload = function() {
|
| + debug = true;
|
| + var getURL = chrome.extension.getURL;
|
| + var URL_MAIN = getURL('main.html');
|
| + var URL_FRAME1 = 'http://a.com:PORT/extensions/api_test/webnavigation/' +
|
| + 'crossProcessIframe/frame.html';
|
| + var URL_FRAME2 = 'http://b.com:PORT/extensions/api_test/webnavigation/' +
|
| + 'crossProcessIframe/frame.html';
|
| + var URL_FRAME3 = 'http://c.com:PORT/extensions/api_test/webnavigation/' +
|
| + 'crossProcessIframe/frame.html';
|
| + 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_FRAME1 = fixPort(URL_FRAME1);
|
| + URL_FRAME2 = fixPort(URL_FRAME2);
|
| + URL_FRAME3 = fixPort(URL_FRAME3);
|
| +
|
| + chrome.test.runTests([
|
| + // Navigates from an extension page to a HTTP page which causes a
|
| + // process switch. The extension page embeds a same-process iframe which
|
| + // embeds another frame that navigates three times (cross-process):
|
| + // c. Loaded by the parent frame.
|
| + // d. Navigated by the parent frame.
|
| + // e. Navigated by the child frame.
|
| + // Tests whether the frameId stays constant across navigations.
|
| + function crossProcessIframe() {
|
| + expect([
|
| + { label: 'main-onBeforeNavigate',
|
| + event: 'onBeforeNavigate',
|
| + details: { frameId: 0,
|
| + parentFrameId: -1,
|
| + processId: 0,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_MAIN }},
|
| + { label: 'main-onCommitted',
|
| + event: 'onCommitted',
|
| + details: { frameId: 0,
|
| + processId: 0,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + transitionQualifiers: [],
|
| + transitionType: 'link',
|
| + url: URL_MAIN }},
|
| + { label: 'main-onDOMContentLoaded',
|
| + event: 'onDOMContentLoaded',
|
| + details: { frameId: 0,
|
| + processId: 0,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_MAIN }},
|
| + { label: 'main-onCompleted',
|
| + event: 'onCompleted',
|
| + details: { frameId: 0,
|
| + processId: 0,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_MAIN }},
|
| + // pre-a.com is the navigation before the process swap.
|
| + { label: 'pre-a.com-onBeforeNavigate',
|
| + event: 'onBeforeNavigate',
|
| + details: { frameId: 1,
|
| + parentFrameId: 0,
|
| + processId: 0,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME1 }},
|
| + { label: 'pre-a.com-onErrorOccurred',
|
| + event: 'onErrorOccurred',
|
| + details: { error: 'net::ERR_ABORTED',
|
| + frameId: 1,
|
| + processId: 0,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME1 }},
|
| + { label: 'a.com-onBeforeNavigate',
|
| + event: 'onBeforeNavigate',
|
| + details: { frameId: 1,
|
| + parentFrameId: 0,
|
| + processId: 1,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME1 }},
|
| + { label: 'a.com-onCommitted',
|
| + event: 'onCommitted',
|
| + details: { frameId: 1,
|
| + processId: 1,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + transitionQualifiers: [],
|
| + transitionType: 'auto_subframe',
|
| + url: URL_FRAME1 }},
|
| + { label: 'a.com-onDOMContentLoaded',
|
| + event: 'onDOMContentLoaded',
|
| + details: { frameId: 1,
|
| + processId: 1,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME1 }},
|
| + { label: 'a.com-onCompleted',
|
| + event: 'onCompleted',
|
| + details: { frameId: 1,
|
| + processId: 1,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME1 }},
|
| + // There is no onBeforeNavigate and onErrorOccurred (like the other
|
| + // navigations in this test) because this navigation is triggered by
|
| + // a frame in a different process, so the navigation directly goes
|
| + // through the browser. This difference will be resolved once
|
| + // PlzNavigate goes live.
|
| + { label: 'b.com-onBeforeNavigate',
|
| + event: 'onBeforeNavigate',
|
| + details: { frameId: 1,
|
| + parentFrameId: 0,
|
| + processId: 2,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME2 }},
|
| + { label: 'b.com-onCommitted',
|
| + event: 'onCommitted',
|
| + details: { frameId: 1,
|
| + processId: 2,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + transitionQualifiers: [],
|
| + transitionType: 'manual_subframe',
|
| + url: URL_FRAME2 }},
|
| + { label: 'b.com-onDOMContentLoaded',
|
| + event: 'onDOMContentLoaded',
|
| + details: { frameId: 1,
|
| + processId: 2,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME2 }},
|
| + { label: 'b.com-onCompleted',
|
| + event: 'onCompleted',
|
| + details: { frameId: 1,
|
| + processId: 2,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME2 }},
|
| + // pre-c.com is the navigation before the process swap.
|
| + { label: 'pre-c.com-onBeforeNavigate',
|
| + event: 'onBeforeNavigate',
|
| + details: { frameId: 1,
|
| + parentFrameId: 0,
|
| + processId: 2,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME3 }},
|
| + { label: 'pre-c.com-onErrorOccurred',
|
| + event: 'onErrorOccurred',
|
| + details: { error: 'net::ERR_ABORTED',
|
| + frameId: 1,
|
| + processId: 2,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME3 }},
|
| + { label: 'c.com-onBeforeNavigate',
|
| + event: 'onBeforeNavigate',
|
| + details: { frameId: 1,
|
| + parentFrameId: 0,
|
| + processId: 3,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME3 }},
|
| + { label: 'c.com-onCommitted',
|
| + event: 'onCommitted',
|
| + details: { frameId: 1,
|
| + processId: 3,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + transitionQualifiers: [],
|
| + transitionType: 'manual_subframe',
|
| + url: URL_FRAME3 }},
|
| + { label: 'c.com-onDOMContentLoaded',
|
| + event: 'onDOMContentLoaded',
|
| + details: { frameId: 1,
|
| + processId: 3,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME3 }},
|
| + { label: 'c.com-onCompleted',
|
| + event: 'onCompleted',
|
| + details: { frameId: 1,
|
| + processId: 3,
|
| + tabId: 0,
|
| + timeStamp: 0,
|
| + url: URL_FRAME3 }}],
|
| + [
|
| + navigationOrder('main-'),
|
| + navigationOrder('a.com-'),
|
| + navigationOrder('b.com-'),
|
| + navigationOrder('c.com-'),
|
| + ['pre-a.com-onBeforeNavigate', 'a.com-onBeforeNavigate',
|
| + 'pre-a.com-onErrorOccurred'],
|
| + ['pre-c.com-onBeforeNavigate', 'c.com-onBeforeNavigate',
|
| + 'pre-c.com-onErrorOccurred']]);
|
| +
|
| + chrome.tabs.update(tabId, {
|
| + url: URL_MAIN + '?' + config.testServer.port
|
| + });
|
| + },
|
| +
|
| + ]);
|
| + });
|
| + });
|
| +};
|
|
|