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');
+});