| // 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; |
| } |
| })(); |