Skip to content

Commit 59b849f

Browse files
authored
chore: remove backgroundPages (#37518)
1 parent 7c4d2e7 commit 59b849f

File tree

13 files changed

+26
-177
lines changed

13 files changed

+26
-177
lines changed

docs/src/api/class-browsercontext.md

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -63,39 +63,10 @@ await context.CloseAsync();
6363

6464
## event: BrowserContext.backgroundPage
6565
* since: v1.11
66+
* deprecated: Background pages have been removed from Chromium together with Manifest V2 extensions.
6667
- argument: <[Page]>
6768

68-
:::note
69-
Only works with Chromium browser's persistent context.
70-
:::
71-
72-
Emitted when new background page is created in the context.
73-
74-
```java
75-
context.onBackgroundPage(backgroundPage -> {
76-
System.out.println(backgroundPage.url());
77-
});
78-
```
79-
80-
```js
81-
const backgroundPage = await context.waitForEvent('backgroundpage');
82-
```
83-
84-
```python async
85-
background_page = await context.wait_for_event("backgroundpage")
86-
```
87-
88-
```python sync
89-
background_page = context.wait_for_event("backgroundpage")
90-
```
91-
92-
```csharp
93-
context.BackgroundPage += (_, backgroundPage) =>
94-
{
95-
Console.WriteLine(backgroundPage.Url);
96-
};
97-
98-
```
69+
This event is not emitted.
9970

10071
## property: BrowserContext.clock
10172
* since: v1.45
@@ -456,13 +427,10 @@ Script to be evaluated in all pages in the browser context. Optional.
456427

457428
## method: BrowserContext.backgroundPages
458429
* since: v1.11
430+
* deprecated: Background pages have been removed from Chromium together with Manifest V2 extensions.
459431
- returns: <[Array]<[Page]>>
460432

461-
:::note
462-
Background pages are only supported on Chromium-based browsers.
463-
:::
464-
465-
All existing background pages in the context.
433+
Returns an empty list.
466434

467435
## method: BrowserContext.browser
468436
* since: v1.8

packages/playwright-client/types/types.d.ts

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8199,14 +8199,7 @@ export interface BrowserContext {
81998199
behavior?: 'wait'|'ignoreErrors'|'default'
82008200
}): Promise<void>;
82018201
/**
8202-
* **NOTE** Only works with Chromium browser's persistent context.
8203-
*
8204-
* Emitted when new background page is created in the context.
8205-
*
8206-
* ```js
8207-
* const backgroundPage = await context.waitForEvent('backgroundpage');
8208-
* ```
8209-
*
8202+
* This event is not emitted.
82108203
*/
82118204
on(event: 'backgroundpage', listener: (page: Page) => any): this;
82128205

@@ -8398,14 +8391,7 @@ export interface BrowserContext {
83988391
once(event: 'weberror', listener: (webError: WebError) => any): this;
83998392

84008393
/**
8401-
* **NOTE** Only works with Chromium browser's persistent context.
8402-
*
8403-
* Emitted when new background page is created in the context.
8404-
*
8405-
* ```js
8406-
* const backgroundPage = await context.waitForEvent('backgroundpage');
8407-
* ```
8408-
*
8394+
* This event is not emitted.
84098395
*/
84108396
addListener(event: 'backgroundpage', listener: (page: Page) => any): this;
84118397

@@ -8652,14 +8638,7 @@ export interface BrowserContext {
86528638
off(event: 'weberror', listener: (webError: WebError) => any): this;
86538639

86548640
/**
8655-
* **NOTE** Only works with Chromium browser's persistent context.
8656-
*
8657-
* Emitted when new background page is created in the context.
8658-
*
8659-
* ```js
8660-
* const backgroundPage = await context.waitForEvent('backgroundpage');
8661-
* ```
8662-
*
8641+
* This event is not emitted.
86638642
*/
86648643
prependListener(event: 'backgroundpage', listener: (page: Page) => any): this;
86658644

@@ -8858,9 +8837,8 @@ export interface BrowserContext {
88588837
}>): Promise<void>;
88598838

88608839
/**
8861-
* **NOTE** Background pages are only supported on Chromium-based browsers.
8862-
*
8863-
* All existing background pages in the context.
8840+
* Returns an empty list.
8841+
* @deprecated Background pages have been removed from Chromium together with Manifest V2 extensions.
88648842
*/
88658843
backgroundPages(): Array<Page>;
88668844

@@ -9377,14 +9355,7 @@ export interface BrowserContext {
93779355
}): Promise<void>;
93789356

93799357
/**
9380-
* **NOTE** Only works with Chromium browser's persistent context.
9381-
*
9382-
* Emitted when new background page is created in the context.
9383-
*
9384-
* ```js
9385-
* const backgroundPage = await context.waitForEvent('backgroundpage');
9386-
* ```
9387-
*
9358+
* This event is not emitted.
93889359
*/
93899360
waitForEvent(event: 'backgroundpage', optionsOrPredicate?: { predicate?: (page: Page) => boolean | Promise<boolean>, timeout?: number } | ((page: Page) => boolean | Promise<boolean>)): Promise<Page>;
93909361

packages/playwright-core/src/client/browserContext.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
7272
readonly tracing: Tracing;
7373
readonly clock: Clock;
7474

75-
readonly _backgroundPages = new Set<Page>();
7675
readonly _serviceWorkers = new Set<Worker>();
7776
private _harRecorders = new Map<string, { path: string, content: 'embed' | 'attach' | 'omit' | undefined }>();
7877
_closingStatus: 'none' | 'closing' | 'closed' = 'none';
@@ -102,11 +101,6 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
102101
this._channel.on('page', ({ page }) => this._onPage(Page.from(page)));
103102
this._channel.on('route', ({ route }) => this._onRoute(network.Route.from(route)));
104103
this._channel.on('webSocketRoute', ({ webSocketRoute }) => this._onWebSocketRoute(network.WebSocketRoute.from(webSocketRoute)));
105-
this._channel.on('backgroundPage', ({ page }) => {
106-
const backgroundPage = Page.from(page);
107-
this._backgroundPages.add(backgroundPage);
108-
this.emit(Events.BrowserContext.BackgroundPage, backgroundPage);
109-
});
110104
this._channel.on('serviceWorker', ({ worker }) => {
111105
const serviceWorker = Worker.from(worker);
112106
serviceWorker._context = this;
@@ -456,7 +450,7 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
456450
}
457451

458452
backgroundPages(): Page[] {
459-
return [...this._backgroundPages];
453+
return [];
460454
}
461455

462456
serviceWorkers(): Worker[] {

packages/playwright-core/src/client/events.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const Events = {
4242
// Can't use just 'error' due to node.js special treatment of error events.
4343
// @see https://nodejs.org/api/events.html#events_error_events
4444
WebError: 'weberror',
45-
BackgroundPage: 'backgroundpage',
45+
BackgroundPage: 'backgroundpage', // Deprecated in v1.56, never emitted anymore.
4646
ServiceWorker: 'serviceworker',
4747
Request: 'request',
4848
Response: 'response',

packages/playwright-core/src/client/page.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ export class Page extends ChannelOwner<channels.PageChannel> implements api.Page
238238
_onClose() {
239239
this._closed = true;
240240
this._browserContext._pages.delete(this);
241-
this._browserContext._backgroundPages.delete(this);
242241
this._disposeHarRouters();
243242
this.emit(Events.Page.Close, this);
244243
}

packages/playwright-core/src/protocol/validator.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -963,9 +963,6 @@ scheme.BrowserContextWebSocketRouteEvent = tObject({
963963
scheme.BrowserContextVideoEvent = tObject({
964964
artifact: tChannel(['Artifact']),
965965
});
966-
scheme.BrowserContextBackgroundPageEvent = tObject({
967-
page: tChannel(['Page']),
968-
});
969966
scheme.BrowserContextServiceWorkerEvent = tObject({
970967
worker: tChannel(['Worker']),
971968
});

packages/playwright-core/src/server/chromium/crBrowser.ts

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ export class CRBrowser extends Browser {
4646
private _clientRootSessionPromise: Promise<CDPSession> | null = null;
4747
readonly _contexts = new Map<string, CRBrowserContext>();
4848
_crPages = new Map<string, CRPage>();
49-
_backgroundPages = new Map<string, CRPage>();
5049
_serviceWorkers = new Map<string, CRServiceWorker>();
5150
_devtools?: CRDevTools;
5251
private _version = '';
@@ -176,18 +175,11 @@ export class CRBrowser extends Browser {
176175
}
177176

178177
assert(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
179-
assert(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
180178
assert(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
181179

182-
if (targetInfo.type === 'background_page') {
183-
const backgroundPage = new CRPage(session, targetInfo.targetId, context, null, { hasUIWindow: false, isBackgroundPage: true });
184-
this._backgroundPages.set(targetInfo.targetId, backgroundPage);
185-
return;
186-
}
187-
188180
if (targetInfo.type === 'page' || treatOtherAsPage) {
189181
const opener = targetInfo.openerId ? this._crPages.get(targetInfo.openerId) || null : null;
190-
const crPage = new CRPage(session, targetInfo.targetId, context, opener, { hasUIWindow: targetInfo.type === 'page', isBackgroundPage: false });
182+
const crPage = new CRPage(session, targetInfo.targetId, context, opener, { hasUIWindow: targetInfo.type === 'page' });
191183
this._crPages.set(targetInfo.targetId, crPage);
192184
return;
193185
}
@@ -215,12 +207,6 @@ export class CRBrowser extends Browser {
215207
crPage.didClose();
216208
return;
217209
}
218-
const backgroundPage = this._backgroundPages.get(targetId);
219-
if (backgroundPage) {
220-
this._backgroundPages.delete(targetId);
221-
backgroundPage.didClose();
222-
return;
223-
}
224210
const serviceWorker = this._serviceWorkers.get(targetId);
225211
if (serviceWorker) {
226212
this._serviceWorkers.delete(targetId);
@@ -233,9 +219,6 @@ export class CRBrowser extends Browser {
233219
for (const crPage of this._crPages.values())
234220
crPage.didClose();
235221
this._crPages.clear();
236-
for (const backgroundPage of this._backgroundPages.values())
237-
backgroundPage.didClose();
238-
this._backgroundPages.clear();
239222
for (const serviceWorker of this._serviceWorkers.values())
240223
serviceWorker.didClose();
241224
this._serviceWorkers.clear();
@@ -337,7 +320,6 @@ export class CRBrowser extends Browser {
337320

338321
export class CRBrowserContext extends BrowserContext {
339322
static CREvents = {
340-
BackgroundPage: 'backgroundpage',
341323
ServiceWorker: 'serviceworker',
342324
};
343325

@@ -566,14 +548,6 @@ export class CRBrowserContext extends BrowserContext {
566548
}
567549

568550
onClosePersistent() {
569-
// When persistent context is closed, we do not necessary get Target.detachedFromTarget
570-
// for all the background pages.
571-
for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) {
572-
if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) {
573-
backgroundPage.didClose();
574-
this._browser._backgroundPages.delete(targetId);
575-
}
576-
}
577551
}
578552

579553
override async clearCache(): Promise<void> {
@@ -591,15 +565,6 @@ export class CRBrowserContext extends BrowserContext {
591565
});
592566
}
593567

594-
backgroundPages(): Page[] {
595-
const result: Page[] = [];
596-
for (const backgroundPage of this._browser._backgroundPages.values()) {
597-
if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined())
598-
result.push(backgroundPage._page);
599-
}
600-
return result;
601-
}
602-
603568
serviceWorkers(): Worker[] {
604569
return Array.from(this._browser._serviceWorkers.values()).filter(serviceWorker => serviceWorker.browserContext === this);
605570
}

packages/playwright-core/src/server/chromium/crPage.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import { CRPDF } from './crPdf';
3939
import { exceptionToError, releaseObject, toConsoleMessageLocation } from './crProtocolHelper';
4040
import { platformToFontFamilies } from './defaultFontFamilies';
4141
import { VideoRecorder } from './videoRecorder';
42-
import { BrowserContext } from '../browserContext';
4342
import { TargetClosedError } from '../errors';
4443
import { isSessionClosedError } from '../protocolError';
4544

@@ -68,7 +67,6 @@ export class CRPage implements PageDelegate {
6867
private readonly _pdf: CRPDF;
6968
private readonly _coverage: CRCoverage;
7069
readonly _browserContext: CRBrowserContext;
71-
private _isBackgroundPage: boolean;
7270

7371
// Holds window features for the next popup being opened via window.open,
7472
// until the popup target arrives. This could be racy if two oopifs
@@ -82,10 +80,9 @@ export class CRPage implements PageDelegate {
8280
return crPage._mainFrameSession;
8381
}
8482

85-
constructor(client: CRSession, targetId: string, browserContext: CRBrowserContext, opener: CRPage | null, bits: { hasUIWindow: boolean, isBackgroundPage: boolean }) {
83+
constructor(client: CRSession, targetId: string, browserContext: CRBrowserContext, opener: CRPage | null, bits: { hasUIWindow: boolean }) {
8684
this._targetId = targetId;
8785
this._opener = opener;
88-
this._isBackgroundPage = bits.isBackgroundPage;
8986
const dragManager = new DragManager(this);
9087
this.rawKeyboard = new RawKeyboardImpl(client, browserContext._browser._platform() === 'mac', dragManager);
9188
this.rawMouse = new RawMouseImpl(this, client, dragManager);
@@ -113,10 +110,9 @@ export class CRPage implements PageDelegate {
113110
this._page.setEmulatedSizeFromWindowOpen({ viewport: viewportSize, screen: viewportSize });
114111
}
115112

116-
const createdEvent = this._isBackgroundPage ? CRBrowserContext.CREvents.BackgroundPage : BrowserContext.Events.Page;
117113
this._mainFrameSession._initialize(bits.hasUIWindow).then(
118-
() => this._page.reportAsNew(this._opener?._page, undefined, createdEvent),
119-
error => this._page.reportAsNew(this._opener?._page, error, createdEvent));
114+
() => this._page.reportAsNew(this._opener?._page, undefined),
115+
error => this._page.reportAsNew(this._opener?._page, error));
120116
}
121117

122118
private async _forAllFrameSessions(cb: (frame: FrameSession) => Promise<any>) {

packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,6 @@ export class BrowserContextDispatcher extends Dispatcher<BrowserContext, channel
137137
context.dialogManager.addDialogHandler(this._dialogHandler);
138138

139139
if (context._browser.options.name === 'chromium') {
140-
for (const page of (context as CRBrowserContext).backgroundPages())
141-
this._dispatchEvent('backgroundPage', { page: PageDispatcher.from(this, page) });
142-
this.addObjectListener(CRBrowserContext.CREvents.BackgroundPage, page => this._dispatchEvent('backgroundPage', { page: PageDispatcher.from(this, page) }));
143140
for (const serviceWorker of (context as CRBrowserContext).serviceWorkers())
144141
this._dispatchEvent('serviceWorker', { worker: new WorkerDispatcher(this, serviceWorker) });
145142
this.addObjectListener(CRBrowserContext.CREvents.ServiceWorker, serviceWorker => this._dispatchEvent('serviceWorker', { worker: new WorkerDispatcher(this, serviceWorker) }));

packages/playwright-core/src/server/page.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,16 +191,16 @@ export class Page extends SdkObject {
191191
this.isStorageStatePage = browserContext.isCreatingStorageStatePage();
192192
}
193193

194-
async reportAsNew(opener: Page | undefined, error: Error | undefined = undefined, contextEvent: string = BrowserContext.Events.Page) {
194+
async reportAsNew(opener: Page | undefined, error?: Error) {
195195
if (opener) {
196196
const openerPageOrError = await opener.waitForInitializedOrError();
197197
if (openerPageOrError instanceof Page && !openerPageOrError.isClosed())
198198
this._opener = openerPageOrError;
199199
}
200-
this._markInitialized(error, contextEvent);
200+
this._markInitialized(error);
201201
}
202202

203-
private _markInitialized(error: Error | undefined = undefined, contextEvent: string = BrowserContext.Events.Page) {
203+
private _markInitialized(error: Error | undefined = undefined) {
204204
if (error) {
205205
// Initialization error could have happened because of
206206
// context/browser closure. Just ignore the page.
@@ -209,7 +209,7 @@ export class Page extends SdkObject {
209209
this.frameManager.createDummyMainFrameIfNeeded();
210210
}
211211
this._initialized = error || this;
212-
this.emitOnContext(contextEvent, this);
212+
this.emitOnContext(BrowserContext.Events.Page, this);
213213

214214
for (const pageError of this._pageErrors)
215215
this.emitOnContext(BrowserContext.Events.PageError, pageError, this);

0 commit comments

Comments
 (0)