blob: 01c7de0adabad56af2ec827513f0ce0fc275ee61 [file] [log] [blame]
// Copyright 2017 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.
(async function() {
TestRunner.addResult(`Tests top frame navigation events.\n`);
await TestRunner.loadModule('application_test_runner');
await TestRunner.showPanel('resources');
// Reset resourceTreeModel.
TestRunner.resourceTreeModel.mainFrame._remove();
for (var eventName in SDK.ResourceTreeModel.Events)
TestRunner.resourceTreeModel.addEventListener(
SDK.ResourceTreeModel.Events[eventName], eventHandler.bind(this, eventName));
for (var eventName in SDK.SecurityOriginManager.Events)
TestRunner.securityOriginManager.addEventListener(
SDK.SecurityOriginManager.Events[eventName], eventHandler.bind(this, eventName));
function eventHandler(eventName, event) {
switch (eventName) {
case 'FrameAdded':
case 'FrameDetached':
var frame = event.data;
TestRunner.addResult(` ${eventName} : ${frame.id}`);
break;
case 'FrameNavigated':
case 'MainFrameNavigated':
var frame = event.data;
TestRunner.addResult(` ${eventName} : ${frame.id} : ${frame.loaderId}`);
break;
case 'SecurityOriginAdded':
case 'SecurityOriginRemoved':
var securityOrigin = event.data;
TestRunner.addResult(` ${eventName} : ${securityOrigin}`);
break;
case 'MainSecurityOriginChanged':
var mainSecurityOrigin = event.data['mainSecurityOrigin'];
var unreachableMainSecurityOrigin = event.data['unreachableMainSecurityOrigin'];
TestRunner.addResult(` ${eventName} : ${mainSecurityOrigin} ${unreachableMainSecurityOrigin}`);
break;
default:
}
}
// Simulate navigation to new render view: do not attach root frame.
TestRunner.addResult('Navigating root frame');
TestRunner.resourceTreeModel._frameNavigated(createFramePayload('root1'));
TestRunner.addResult('Navigating child frame 1');
TestRunner.resourceTreeModel._frameAttached('child1', 'root1');
TestRunner.resourceTreeModel._frameNavigated(createFramePayload('child1', 'root1'));
TestRunner.addResult('Navigating child frame 1 to a different URL');
TestRunner.resourceTreeModel._frameNavigated(createFramePayload('child1', 'root1', 'child1-new'));
TestRunner.addResult('Navigating child frame 2');
TestRunner.resourceTreeModel._frameAttached('child2', 'root1');
TestRunner.resourceTreeModel._frameNavigated(createFramePayload('child2', 'root1'));
TestRunner.addResult('Detaching child frame 1');
TestRunner.resourceTreeModel._frameDetached('child1');
TestRunner.addResult('Navigating root frame');
TestRunner.resourceTreeModel._frameAttached('root2');
TestRunner.resourceTreeModel._frameNavigated(createFramePayload('root2'));
TestRunner.addResult('Navigating root frame, unreachable');
TestRunner.resourceTreeModel._frameAttached('rootUnreachable');
TestRunner.resourceTreeModel._frameNavigated(createUnreachableFramePayload('rootUnreachable'));
TestRunner.completeTest();
function createFramePayload(id, parentId, name) {
var framePayload = {};
framePayload.id = id;
framePayload.parentId = parentId || '';
framePayload.loaderId = 'loader-' + id;
framePayload.name = 'frame-' + id;
framePayload.url = 'http://frame/' + (name || id) + '.html';
framePayload.securityOrigin = framePayload.url;
framePayload.mimeType = 'text/html';
return framePayload;
}
function createUnreachableFramePayload(id, parentId, name) {
var framePayload = {};
framePayload.id = id;
framePayload.parentId = parentId || '';
framePayload.loaderId = 'loader-' + id;
framePayload.name = 'frame-' + id;
framePayload.url = 'http://frame/' + (name || id) + '.html';
framePayload.securityOrigin = '://';
framePayload.mimeType = 'text/html';
framePayload.unreachableUrl = framePayload.url;
return framePayload;
}
})();