| (async function(testRunner) { |
| testRunner.log('Tests that multiple sessions receives the same frame lifetime notifications.'); |
| var page = await testRunner.createPage(); |
| var session1 = await page.createSession(); |
| var session2 = await page.createSession(); |
| |
| session1.protocol.Page.enable(); |
| session2.protocol.Page.enable(); |
| |
| testRunner.log('\nAttaching frame in 1'); |
| session1.evaluate(` |
| window.frame = document.createElement('iframe'); |
| frame.src = '${testRunner.url('../resources/blank.html')}'; |
| document.body.appendChild(frame); |
| `); |
| var attachedBoth = Promise.all([session1.protocol.Page.onceFrameAttached(), session2.protocol.Page.onceFrameAttached()]); |
| var startedLoadingBoth = Promise.all([session1.protocol.Page.onceFrameStartedLoading(), session2.protocol.Page.onceFrameStartedLoading()]); |
| var stopLoadingBoth = Promise.all([session1.protocol.Page.onceFrameStoppedLoading(), session2.protocol.Page.onceFrameStoppedLoading()]); |
| var navigatedBoth = Promise.all([session1.protocol.Page.onceFrameNavigated(), session2.protocol.Page.onceFrameNavigated()]); |
| |
| await attachedBoth; |
| testRunner.log('Attached in both'); |
| |
| await startedLoadingBoth; |
| testRunner.log('Started loading in both'); |
| |
| await navigatedBoth; |
| testRunner.log('Navigated in both'); |
| |
| await stopLoadingBoth; |
| testRunner.log('\nNavigating frame in 2'); |
| session2.evaluate('frame.src = "about:blank"'); |
| startedLoadingBoth = Promise.all([session1.protocol.Page.onceFrameStartedLoading(), session2.protocol.Page.onceFrameStartedLoading()]); |
| navigatedBoth = Promise.all([session1.protocol.Page.onceFrameNavigated(), session2.protocol.Page.onceFrameNavigated()]); |
| |
| await startedLoadingBoth; |
| testRunner.log('Started loading in both'); |
| |
| await navigatedBoth; |
| testRunner.log('Navigated in both'); |
| |
| testRunner.log('\nDetaching frame in 2'); |
| session2.evaluate('document.body.removeChild(frame);'); |
| |
| var detachedBoth = Promise.all([session1.protocol.Page.onceFrameDetached(), session2.protocol.Page.onceFrameDetached()]); |
| await detachedBoth; |
| testRunner.log('Detached in both'); |
| |
| testRunner.completeTest(); |
| }) |