| Index: third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-execution-contexts-events.js
|
| diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-execution-contexts-events.js b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-execution-contexts-events.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7ba4496cc917b0f1817f269400e0f397d3f5069d
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-execution-contexts-events.js
|
| @@ -0,0 +1,64 @@
|
| +(async function(testRunner) {
|
| + let {page, session, dp} = await testRunner.startBlank(``);
|
| +
|
| + dp.Runtime.enable();
|
| + await dp.Runtime.onceExecutionContextCreated();
|
| + testRunner.log('Page context was created');
|
| +
|
| + testRunner.log('Create new frame');
|
| + var loadPromise = session.evaluateAsync(`
|
| + var frame = document.createElement('iframe');
|
| + frame.src = '${testRunner.url('../resources/blank.html')}';
|
| + frame.id = 'iframe';
|
| + document.body.appendChild(frame);
|
| + new Promise(resolve => frame.onload = resolve)
|
| + `);
|
| + var frameExecutionContextId = (await dp.Runtime.onceExecutionContextCreated()).params.context.id;
|
| + testRunner.log('Frame context was created');
|
| +
|
| + await loadPromise;
|
| + testRunner.log('Navigate frame');
|
| + session.evaluate(`window.frames[0].location = '${testRunner.url('../resources/runtime-events-iframe.html')}'`);
|
| + var executionContextId = (await dp.Runtime.onceExecutionContextDestroyed()).params.executionContextId;
|
| + if (frameExecutionContextId !== executionContextId) {
|
| + testRunner.fail(`Execution context with id = ${executionContextId} was destroyed, but iframe's executionContext had id = ${frameExecutionContextId} before navigation`);
|
| + return;
|
| + }
|
| + testRunner.log(`Frame's context was destroyed`);
|
| + frameExecutionContextId = 0;
|
| +
|
| + frameExecutionContextId = (await dp.Runtime.onceExecutionContextCreated()).params.context.id;
|
| + testRunner.log('Frame context was created');
|
| +
|
| + testRunner.log('Remove frame');
|
| + session.evaluate(`document.querySelector('#iframe').remove()`);
|
| + executionContextId = (await dp.Runtime.onceExecutionContextDestroyed()).params.executionContextId;
|
| + if (frameExecutionContextId !== executionContextId) {
|
| + testRunner.fail(`Deleted frame had execution context with id = ${frameExecutionContextId}, but executionContext with id = ${executionContextId} was removed`);
|
| + return;
|
| + }
|
| + testRunner.log(`Frame's context was destroyed`);
|
| +
|
| + testRunner.log('Create new crafted frame');
|
| + session.evaluate(`
|
| + var frame = document.createElement('iframe');
|
| + frame.src = '${testRunner.url('../resources/blank.html')}';
|
| + frame.id = 'crafted-iframe';
|
| + document.body.appendChild(frame);
|
| + frame.contentDocument.write('<div>crafted</div>');
|
| + frame.contentDocument.close();
|
| + `);
|
| +
|
| + frameExecutionContextId = (await dp.Runtime.onceExecutionContextCreated()).params.context.id;
|
| + testRunner.log('Crafted frame context was created');
|
| +
|
| + testRunner.log('Remove crafted frame');
|
| + session.evaluate(`document.querySelector('#crafted-iframe').remove()`);
|
| + executionContextId = (await dp.Runtime.onceExecutionContextDestroyed()).params.executionContextId;
|
| + if (frameExecutionContextId !== executionContextId) {
|
| + testRunner.fail(`Deleted frame had execution context with id = ${frameExecutionContextId}, but executionContext with id = ${executionContextId} was removed`);
|
| + return;
|
| + }
|
| + testRunner.log(`Crafted frame's context was destroyed`);
|
| + testRunner.completeTest();
|
| +})
|
|
|