blob: 3772b451f144e3f7d63b2ed9cef577bce5575c0d [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../resources/inspector-test.js"></script>
<script src="../resources/stable-id-map.js"></script>
<script>
function test()
{
let suite = InspectorTest.createAsyncSuite("Target.PSON");
suite.addTestCase({
name: "ProvisionalPagePaused",
description: "Check that new provisional page can be paused before navigation.",
test(resolve, reject) {
let targetIdMap = new StableIdMap;
InspectorTest.log(`Current target is ${targetIdMap.get(WI.mainTarget.identifier)}.`);
const url = "http://localhost:8000/inspector/target/provisional-load-cancels-previous-load.html";
let navigatedTwice = false;
let originalResumeIfPaused = WI.Target.prototype._resumeIfPaused;
// Keep first provisional navigation paused.
WI.Target.prototype._resumeIfPaused = () => {};
WI.targetManager.addEventListener(WI.TargetManager.Event.TargetAdded, (event) => {
let target = event.data.target;
let targetId = targetIdMap.get(target.identifier);
InspectorTest.pass(`Should receive TargetAdded event for target ${targetId}.`);
InspectorTest.expectTrue(target.isProvisional, `Target ${targetId} should be provisional.`);
InspectorTest.expectTrue(target.isPaused, `Target ${targetId} should be paused on start.`);
if (!navigatedTwice) {
navigatedTwice = true;
WI.Target.prototype._resumeIfPaused = originalResumeIfPaused;
InspectorTest.deferOutputUntilTestPageIsReloaded();
// Send two consequtive navigation requests. The latter will cancel provisional
// load of the former.
WI.mainTarget.PageAgent.navigate(url);
}
});
WI.targetManager.addEventListener(WI.TargetManager.Event.DidCommitProvisionalTarget, (event) => {
let {previousTargetId, target} = event.data;
InspectorTest.pass(`Should receive DidCommitProvisionalTarget event ${targetIdMap.get(previousTargetId)} => ${targetIdMap.get(target.identifier)}.`);
});
WI.targetManager.addEventListener(WI.TargetManager.Event.TargetRemoved, (event) =>{
let targetId = targetIdMap.get(event.data.target.identifier);
InspectorTest.pass(`Should receive TargetRemoved event for target ${targetId}`);
});
// Wait for page reload event to avoid race between test results flushing and the test completion.
InspectorTest.awaitEvent(FrontendTestHarness.Event.TestPageDidLoad)
.then(() => {
InspectorTest.expectEqual(targetIdMap.size, 3, `Should have seen 3 different targets.`);
})
.then(resolve);
WI.mainTarget.PageAgent.navigate(url);
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test that two consequtive cross domain navigation requests will result in two
provisional targets being created, first of which is later destroyed and the second
is committed.</p>
</body>
</html>