From c0f097905597c8b5d16fd5532872cd85c885ccdc Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Tue, 26 Apr 2022 17:13:45 +0100 Subject: [PATCH] fix(frames): networkidle for iframes with quirky urls (#13767) --- packages/playwright-core/src/server/frames.ts | 1 + tests/page/page-wait-for-load-state.spec.ts | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/packages/playwright-core/src/server/frames.ts b/packages/playwright-core/src/server/frames.ts index 4577d508b3..1ca9bf1f45 100644 --- a/packages/playwright-core/src/server/frames.ts +++ b/packages/playwright-core/src/server/frames.ts @@ -468,6 +468,7 @@ export class Frame extends SdkObject { this._firedLifecycleEvents.add('commit'); this._subtreeLifecycleEvents.add('commit'); + this._startNetworkIdleTimer(); } isDetached(): boolean { diff --git a/tests/page/page-wait-for-load-state.spec.ts b/tests/page/page-wait-for-load-state.spec.ts index 9853ab2d05..75b24256fd 100644 --- a/tests/page/page-wait-for-load-state.spec.ts +++ b/tests/page/page-wait-for-load-state.spec.ts @@ -180,3 +180,32 @@ it('should work for frame', async ({ page, server }) => { request.continue(); await loadPromise; }); + +it('should work with javascript: iframe', async ({ page, server, browserName }) => { + it.fixme(browserName === 'firefox', 'no load event'); + + await page.goto(server.EMPTY_PAGE); + await page.setContent(``, { waitUntil: 'commit' }); + await page.waitForLoadState('domcontentloaded'); + await page.waitForLoadState('load'); + await page.waitForLoadState('networkidle'); +}); + +it('should work with broken data-url iframe', async ({ page, server }) => { + await page.goto(server.EMPTY_PAGE); + await page.setContent(``, { waitUntil: 'commit' }); + await page.waitForLoadState('domcontentloaded'); + await page.waitForLoadState('load'); + await page.waitForLoadState('networkidle'); +}); + +it('should work with broken blob-url iframe', async ({ page, server, browserName }) => { + it.fixme(browserName === 'chromium', 'no load event'); + it.fixme(browserName === 'firefox', 'no load event'); + + await page.goto(server.EMPTY_PAGE); + await page.setContent(``, { waitUntil: 'commit' }); + await page.waitForLoadState('domcontentloaded'); + await page.waitForLoadState('load'); + await page.waitForLoadState('networkidle'); +});