Commit 6a079ebe authored by Dmitry Gozman's avatar Dmitry Gozman Committed by Commit Bot

[DevTools] Use PageMock in last-execution-context.js

Bug: 775132
Change-Id: I7f7f58f56e437895afd91002e2316c4ef40c92ce
Reviewed-on: https://chromium-review.googlesource.com/c/1324455
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: default avatarAndrey Lushnikov <lushnikov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606592}
parent 8dd318bc
......@@ -2,53 +2,64 @@ Tests how execution context and target are selected.
Adding page target
Execution context selected: contentScript1
Target selected: Main
Execution context selected: Main
Execution context selected: page-target
Target selected: page-target
Execution context selected: page-target:42
Adding sw target
Adding frame target
Removing page main frame
Execution context selected: page-target:iframe1
Adding worker target
Readding page main frame
Execution context selected: page-target:42
User selected content script
Execution context selected: content-script-context
Removing content script
Execution context selected: page-target
Switching to sw target
Target selected: sw-target
Execution context selected: sw-target:
Readding content script
Switching to worker target
Target selected: worker-target
Execution context selected: worker-target
Switching to page target
Target selected: page-target
Execution context selected: page-target:42
Execution context selected: page-target
User selected content script
Execution context selected: contentScript1
Execution context selected: content-script-context
Switching to sw target
Target selected: sw-target
Execution context selected: sw-target:
Switching to worker target
Target selected: worker-target
Execution context selected: worker-target
Switching to page target
Target selected: page-target
Execution context selected: page-target:42
Execution context selected: page-target
User selected iframe1
Execution context selected: page-target:iframe1
Execution context selected: frame-target
Target selected: frame-target
Switching to sw target
Target selected: sw-target
Execution context selected: sw-target:
Switching to worker target
Target selected: worker-target
Execution context selected: worker-target
Switching to page target
Removing worker
Execution context selected: page-target
Target selected: page-target
Execution context selected: page-target:iframe1
Switching to sw target
Target selected: sw-target
Execution context selected: sw-target:
User selected content script
Execution context selected: content-script-context
Switching to iframe target
Target selected: frame-target
Execution context selected: frame-target
Removing page main frame
Removing content script
Readding page main frame
Switching to page target
Target selected: page-target
Execution context selected: page-target
......@@ -4,15 +4,9 @@
(async function() {
TestRunner.addResult(`Tests how execution context and target are selected.\n`);
await TestRunner.loadModule('sdk_test_runner');
await TestRunner.showPanel('sources');
var mockTargetId = 1;
function createMockTarget(name, type, dontAttachToMain) {
return SDK.targetManager.createTarget(
'mock-target-' + mockTargetId++, name, type, params => new SDK.StubConnection(params),
dontAttachToMain ? null : TestRunner.mainTarget);
}
var context = new UI.Context();
context.addFlavorChangeListener(SDK.ExecutionContext, executionContextChanged, this);
context.addFlavorChangeListener(SDK.Target, targetChanged, this);
......@@ -22,7 +16,7 @@
var executionContext = event.data;
TestRunner.addResult(
'Execution context selected: ' +
(executionContext.isDefault ? executionContext.target().name() + ':' + executionContext.frameId :
(executionContext.isDefault ? executionContext.target().name() :
executionContext.name));
}
......@@ -30,49 +24,44 @@
TestRunner.addResult('Target selected: ' + event.data.name());
}
TestRunner.runtimeModel._executionContextsCleared();
TestRunner.addResult('');
TestRunner.addResult('Adding page target');
var pageMock = new SDKTestRunner.PageMock('mock-url.com/page.html');
var pageTarget = pageMock.connectAsMainTarget('page-target');
await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
pageMock.evalScript('contentScript1.js', 'var script', true /* isContentScript */);
await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
TestRunner.addResult('');
TestRunner.addResult('Adding frame target');
var frameMock = new SDKTestRunner.PageMock('mock-url.com/iframe.html');
var frameTarget = frameMock.connectAsChildTarget('frame-target', pageMock);
await frameTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
TestRunner.addResult('');
TestRunner.addResult('Adding page target');
var pageTarget = createMockTarget('page-target', SDK.Target.Type.Frame, true /* dontAttachToMain */);
var pageRuntimeModel = pageTarget.model(SDK.RuntimeModel);
pageTarget.model(SDK.ResourceTreeModel)._frameAttached('42', '');
pageTarget.model(SDK.ResourceTreeModel)._frameNavigated({
id: '42',
parentId: '',
loaderId: '',
name: 'mock-frame',
url: 'mock-url.com/frame.html',
securityOrigin: 'mock-security-origin',
mineType: 'mimeType'
});
pageRuntimeModel._executionContextCreated(
{id: 'cs1', auxData: {isDefault: false, frameId: '42'}, origin: 'origin', name: 'contentScript1'});
pageRuntimeModel._executionContextCreated(
{id: 'if1', auxData: {isDefault: true, frameId: 'iframe1'}, origin: 'origin', name: 'iframeContext1'});
pageRuntimeModel._executionContextCreated(
{id: 'p1', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'});
TestRunner.addResult('Adding worker target');
var workerMock = new SDKTestRunner.PageMock('mock-url.com/worker.js');
workerMock.turnIntoWorker();
var workerTarget = workerMock.connectAsChildTarget('worker-target', pageMock);
await workerTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
TestRunner.addResult('');
TestRunner.addResult('Adding sw target');
var swTarget = createMockTarget('sw-target', SDK.Target.Type.Worker);
swTarget.model(SDK.RuntimeModel)
._executionContextCreated(
{id: 'sw1', auxData: {isDefault: true, frameId: ''}, origin: 'origin', name: 'swContext1Name'});
TestRunner.addResult('User selected content script');
context.setFlavor(SDK.ExecutionContext, pageTarget.model(SDK.RuntimeModel).executionContexts().find(context => !context.isDefault));
TestRunner.addResult('');
TestRunner.addResult('Removing page main frame');
pageRuntimeModel._executionContextDestroyed('p1');
TestRunner.addResult('Removing content script');
pageMock.removeContentScripts();
await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextDestroyed);
TestRunner.addResult('');
TestRunner.addResult('Readding page main frame');
pageRuntimeModel._executionContextCreated(
{id: 'p2', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'});
TestRunner.addResult('Readding content script');
pageMock.evalScript('contentScript2.js', 'var script', true /* isContentScript */);
await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
TestRunner.addResult('');
TestRunner.addResult('Switching to sw target');
context.setFlavor(SDK.Target, swTarget);
TestRunner.addResult('Switching to worker target');
context.setFlavor(SDK.Target, workerTarget);
TestRunner.addResult('');
TestRunner.addResult('Switching to page target');
......@@ -80,11 +69,11 @@
TestRunner.addResult('');
TestRunner.addResult('User selected content script');
context.setFlavor(SDK.ExecutionContext, pageRuntimeModel.executionContexts().find(context => context.id === 'cs1'));
context.setFlavor(SDK.ExecutionContext, pageTarget.model(SDK.RuntimeModel).executionContexts().find(context => !context.isDefault));
TestRunner.addResult('');
TestRunner.addResult('Switching to sw target');
context.setFlavor(SDK.Target, swTarget);
TestRunner.addResult('Switching to worker target');
context.setFlavor(SDK.Target, workerTarget);
TestRunner.addResult('');
TestRunner.addResult('Switching to page target');
......@@ -92,28 +81,32 @@
TestRunner.addResult('');
TestRunner.addResult('User selected iframe1');
context.setFlavor(SDK.ExecutionContext, pageRuntimeModel.executionContexts().find(context => context.id === 'if1'));
context.setFlavor(SDK.ExecutionContext, frameTarget.model(SDK.RuntimeModel).executionContexts()[0]);
TestRunner.addResult('');
TestRunner.addResult('Switching to sw target');
context.setFlavor(SDK.Target, swTarget);
TestRunner.addResult('Switching to worker target');
context.setFlavor(SDK.Target, workerTarget);
TestRunner.addResult('');
TestRunner.addResult('Switching to page target');
context.setFlavor(SDK.Target, pageTarget);
TestRunner.addResult('Removing worker');
workerMock.disconnect();
TestRunner.addResult('');
TestRunner.addResult('Switching to sw target');
context.setFlavor(SDK.Target, swTarget);
TestRunner.addResult('User selected content script');
context.setFlavor(SDK.ExecutionContext, pageTarget.model(SDK.RuntimeModel).executionContexts().find(context => !context.isDefault));
TestRunner.addResult('');
TestRunner.addResult('Removing page main frame');
pageRuntimeModel._executionContextDestroyed('p2');
TestRunner.addResult('Switching to iframe target');
context.setFlavor(SDK.Target, frameTarget);
TestRunner.addResult('');
TestRunner.addResult('Readding page main frame');
pageRuntimeModel._executionContextCreated(
{id: 'p3', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'});
TestRunner.addResult('Removing content script');
pageMock.removeContentScripts();
await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextDestroyed);
TestRunner.addResult('');
TestRunner.addResult('Switching to page target');
context.setFlavor(SDK.Target, pageTarget);
TestRunner.completeTest();
})();
......@@ -51,9 +51,26 @@ SDKTestRunner.PageMock = class {
this._connection = new MockPageConnection(this, params);
return this._connection;
});
this._target = target;
return target;
}
connectAsChildTarget(targetName, parentMock) {
const target = SDK.targetManager.createTarget(nextId('mock-target-'), targetName, this._type, params => {
this._enabledDomains.clear();
this._connection = new MockPageConnection(this, params);
return this._connection;
}, parentMock._target);
this._target = target;
return target;
}
disconnect() {
this._connection.disconnect();
}
evalScript(url, content, isContentScript) {
const id = nextId();
content += '\n//# sourceURL=' + url;
......@@ -62,6 +79,7 @@ SDKTestRunner.PageMock = class {
if (!context) {
context = this._createExecutionContext(this._mainFrame, isContentScript);
this._executionContexts.push(context);
this._fireEvent('Runtime.executionContextCreated', {context: context});
}
......@@ -89,6 +107,14 @@ SDKTestRunner.PageMock = class {
this._fireEvent('Debugger.scriptParsed', script);
}
removeContentScripts() {
const index = this._executionContexts.findIndex(context => !context.auxData.isDefault);
if (index !== -1) {
this._fireEvent('Runtime.executionContextDestroyed', {executionContextId: this._executionContexts[index].id});
this._executionContexts.splice(index, 1);
}
}
reload() {
this._fireEvent('Page.frameStartedLoading', {frameId: this._mainFrame.id});
......@@ -129,7 +155,7 @@ SDKTestRunner.PageMock = class {
auxData: {isDefault: !isContentScript, frameId: frame.id},
origin: frame.securityOrigin,
name: ''
name: isContentScript ? 'content-script-context' : ''
};
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment