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. ...@@ -2,53 +2,64 @@ Tests how execution context and target are selected.
Adding page target Adding page target
Execution context selected: contentScript1 Target selected: Main
Execution context selected: Main
Execution context selected: page-target
Target selected: page-target Target selected: page-target
Execution context selected: page-target:42
Adding sw target Adding frame target
Removing page main frame Adding worker target
Execution context selected: page-target:iframe1
Readding page main frame User selected content script
Execution context selected: page-target:42 Execution context selected: content-script-context
Removing content script
Execution context selected: page-target
Switching to sw target Readding content script
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 Switching to page target
Target selected: page-target Target selected: page-target
Execution context selected: page-target:42 Execution context selected: page-target
User selected content script User selected content script
Execution context selected: contentScript1 Execution context selected: content-script-context
Switching to sw target Switching to worker target
Target selected: sw-target Target selected: worker-target
Execution context selected: sw-target: Execution context selected: worker-target
Switching to page target Switching to page target
Target selected: page-target Target selected: page-target
Execution context selected: page-target:42 Execution context selected: page-target
User selected iframe1 User selected iframe1
Execution context selected: page-target:iframe1 Execution context selected: frame-target
Target selected: frame-target
Switching to sw target Switching to worker target
Target selected: sw-target Target selected: worker-target
Execution context selected: sw-target: Execution context selected: worker-target
Switching to page target Removing worker
Execution context selected: page-target
Target selected: page-target Target selected: page-target
Execution context selected: page-target:iframe1
Switching to sw target User selected content script
Target selected: sw-target Execution context selected: content-script-context
Execution context selected: sw-target:
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 @@ ...@@ -4,15 +4,9 @@
(async function() { (async function() {
TestRunner.addResult(`Tests how execution context and target are selected.\n`); TestRunner.addResult(`Tests how execution context and target are selected.\n`);
await TestRunner.loadModule('sdk_test_runner');
await TestRunner.showPanel('sources'); 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(); var context = new UI.Context();
context.addFlavorChangeListener(SDK.ExecutionContext, executionContextChanged, this); context.addFlavorChangeListener(SDK.ExecutionContext, executionContextChanged, this);
context.addFlavorChangeListener(SDK.Target, targetChanged, this); context.addFlavorChangeListener(SDK.Target, targetChanged, this);
...@@ -22,7 +16,7 @@ ...@@ -22,7 +16,7 @@
var executionContext = event.data; var executionContext = event.data;
TestRunner.addResult( TestRunner.addResult(
'Execution context selected: ' + 'Execution context selected: ' +
(executionContext.isDefault ? executionContext.target().name() + ':' + executionContext.frameId : (executionContext.isDefault ? executionContext.target().name() :
executionContext.name)); executionContext.name));
} }
...@@ -30,49 +24,44 @@ ...@@ -30,49 +24,44 @@
TestRunner.addResult('Target selected: ' + event.data.name()); 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('');
TestRunner.addResult('Adding page target'); TestRunner.addResult('Adding worker target');
var pageTarget = createMockTarget('page-target', SDK.Target.Type.Frame, true /* dontAttachToMain */); var workerMock = new SDKTestRunner.PageMock('mock-url.com/worker.js');
var pageRuntimeModel = pageTarget.model(SDK.RuntimeModel); workerMock.turnIntoWorker();
pageTarget.model(SDK.ResourceTreeModel)._frameAttached('42', ''); var workerTarget = workerMock.connectAsChildTarget('worker-target', pageMock);
pageTarget.model(SDK.ResourceTreeModel)._frameNavigated({ await workerTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
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(''); TestRunner.addResult('');
TestRunner.addResult('Adding sw target'); TestRunner.addResult('User selected content script');
var swTarget = createMockTarget('sw-target', SDK.Target.Type.Worker); context.setFlavor(SDK.ExecutionContext, pageTarget.model(SDK.RuntimeModel).executionContexts().find(context => !context.isDefault));
swTarget.model(SDK.RuntimeModel)
._executionContextCreated(
{id: 'sw1', auxData: {isDefault: true, frameId: ''}, origin: 'origin', name: 'swContext1Name'});
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Removing page main frame'); TestRunner.addResult('Removing content script');
pageRuntimeModel._executionContextDestroyed('p1'); pageMock.removeContentScripts();
await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextDestroyed);
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Readding page main frame'); TestRunner.addResult('Readding content script');
pageRuntimeModel._executionContextCreated( pageMock.evalScript('contentScript2.js', 'var script', true /* isContentScript */);
{id: 'p2', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); await pageTarget.model(SDK.RuntimeModel).once(SDK.RuntimeModel.Events.ExecutionContextCreated);
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Switching to sw target'); TestRunner.addResult('Switching to worker target');
context.setFlavor(SDK.Target, swTarget); context.setFlavor(SDK.Target, workerTarget);
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Switching to page target'); TestRunner.addResult('Switching to page target');
...@@ -80,11 +69,11 @@ ...@@ -80,11 +69,11 @@
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('User selected content script'); 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('');
TestRunner.addResult('Switching to sw target'); TestRunner.addResult('Switching to worker target');
context.setFlavor(SDK.Target, swTarget); context.setFlavor(SDK.Target, workerTarget);
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Switching to page target'); TestRunner.addResult('Switching to page target');
...@@ -92,28 +81,32 @@ ...@@ -92,28 +81,32 @@
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('User selected iframe1'); 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('');
TestRunner.addResult('Switching to sw target'); TestRunner.addResult('Switching to worker target');
context.setFlavor(SDK.Target, swTarget); context.setFlavor(SDK.Target, workerTarget);
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Switching to page target'); TestRunner.addResult('Removing worker');
context.setFlavor(SDK.Target, pageTarget); workerMock.disconnect();
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Switching to sw target'); TestRunner.addResult('User selected content script');
context.setFlavor(SDK.Target, swTarget); context.setFlavor(SDK.ExecutionContext, pageTarget.model(SDK.RuntimeModel).executionContexts().find(context => !context.isDefault));
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Removing page main frame'); TestRunner.addResult('Switching to iframe target');
pageRuntimeModel._executionContextDestroyed('p2'); context.setFlavor(SDK.Target, frameTarget);
TestRunner.addResult(''); TestRunner.addResult('');
TestRunner.addResult('Readding page main frame'); TestRunner.addResult('Removing content script');
pageRuntimeModel._executionContextCreated( pageMock.removeContentScripts();
{id: 'p3', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); 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(); TestRunner.completeTest();
})(); })();
...@@ -51,9 +51,26 @@ SDKTestRunner.PageMock = class { ...@@ -51,9 +51,26 @@ SDKTestRunner.PageMock = class {
this._connection = new MockPageConnection(this, params); this._connection = new MockPageConnection(this, params);
return this._connection; return this._connection;
}); });
this._target = target;
return 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) { evalScript(url, content, isContentScript) {
const id = nextId(); const id = nextId();
content += '\n//# sourceURL=' + url; content += '\n//# sourceURL=' + url;
...@@ -62,6 +79,7 @@ SDKTestRunner.PageMock = class { ...@@ -62,6 +79,7 @@ SDKTestRunner.PageMock = class {
if (!context) { if (!context) {
context = this._createExecutionContext(this._mainFrame, isContentScript); context = this._createExecutionContext(this._mainFrame, isContentScript);
this._executionContexts.push(context);
this._fireEvent('Runtime.executionContextCreated', {context: context}); this._fireEvent('Runtime.executionContextCreated', {context: context});
} }
...@@ -89,6 +107,14 @@ SDKTestRunner.PageMock = class { ...@@ -89,6 +107,14 @@ SDKTestRunner.PageMock = class {
this._fireEvent('Debugger.scriptParsed', script); 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() { reload() {
this._fireEvent('Page.frameStartedLoading', {frameId: this._mainFrame.id}); this._fireEvent('Page.frameStartedLoading', {frameId: this._mainFrame.id});
...@@ -129,7 +155,7 @@ SDKTestRunner.PageMock = class { ...@@ -129,7 +155,7 @@ SDKTestRunner.PageMock = class {
auxData: {isDefault: !isContentScript, frameId: frame.id}, auxData: {isDefault: !isContentScript, frameId: frame.id},
origin: frame.securityOrigin, 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