diff --git a/docs/api.md b/docs/api.md index 05ccf6d8ae..b8a8bfa99a 100644 --- a/docs/api.md +++ b/docs/api.md @@ -331,7 +331,7 @@ If URLs are specified, only cookies that affect those URLs are returned. Creates a new page in the browser context. #### browserContext.pages() -- returns: <[Promise]<[Array]<[Page]>>> Promise which resolves to an array of all open pages. Non visible pages, such as `"background_page"`, will not be listed here. You can find them using [target.page()](#targetpage). +- returns: <[Promise]<[Array]<[Page]>>> Promise which resolves to an array of all open pages. Non visible pages, such as `"background_page"`, will not be listed here. You can find them using [chromiumTarget.page()](#chromiumtargetpage). An array of all pages inside the browser context. @@ -3537,7 +3537,6 @@ await browser.stopTracing(); - [event: 'targetdestroyed'](#event-targetdestroyed) - [chromiumBrowser.browserTarget()](#chromiumbrowserbrowsertarget) - [chromiumBrowser.pageTarget(page)](#chromiumbrowserpagetargetpage) -- [chromiumBrowser.serviceWorker(target)](#chromiumbrowserserviceworkertarget) - [chromiumBrowser.startTracing(page, [options])](#chromiumbrowserstarttracingpage-options) - [chromiumBrowser.stopTracing()](#chromiumbrowserstoptracing) - [chromiumBrowser.targets(context)](#chromiumbrowsertargetscontext) @@ -3553,7 +3552,7 @@ await browser.stopTracing(); #### event: 'targetchanged' -- <[Target]> +- <[ChromiumTarget]> Emitted when the url of a target changes. @@ -3561,33 +3560,27 @@ Emitted when the url of a target changes. #### event: 'targetcreated' -- <[Target]> +- <[ChromiumTarget]> Emitted when a target is created, for example when a new page is opened by [`window.open`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) or [`browserContext.newPage`](#browsercontextnewpage). > **NOTE** This includes target creations in incognito browser contexts. #### event: 'targetdestroyed' -- <[Target]> +- <[ChromiumTarget]> Emitted when a target is destroyed, for example when a page is closed. > **NOTE** This includes target destructions in incognito browser contexts. #### chromiumBrowser.browserTarget() -- returns: <[Target]> +- returns: <[ChromiumTarget]> Returns browser target. #### chromiumBrowser.pageTarget(page) - `page` <[Page]> Page to return target for. -- returns: <[Target]> a target given page was created from. - -#### chromiumBrowser.serviceWorker(target) -- `target` <[ChromiumTarget]> Target to treat as a service worker -- returns: <[Promise]<[ChromiumWorker]>> - -Attaches to the service worker target. +- returns: <[ChromiumTarget]> a target given page was created from. #### chromiumBrowser.startTracing(page, [options]) - `page` <[Page]> Optional, if specified, tracing includes screenshots of the given page. @@ -3604,16 +3597,16 @@ Only one trace can be active at a time per browser. #### chromiumBrowser.targets(context) - `context` <[BrowserContext]> Optional, if specified, only targets from this context are returned. -- returns: <[Array]<[Target]>> +- returns: <[Array]<[ChromiumTarget]>> An array of all active targets inside the Browser. In case of multiple browser contexts, the method will return an array with all the targets in all browser contexts. #### chromiumBrowser.waitForTarget(predicate[, options]) -- `predicate` <[function]\([Target]\):[boolean]> A function to be run for every target +- `predicate` <[function]\([ChromiumTarget]\):[boolean]> A function to be run for every target - `options` <[Object]> - `timeout` <[number]> Maximum wait time in milliseconds. Pass `0` to disable the timeout. Defaults to 30 seconds. -- returns: <[Promise]<[Target]>> Promise which resolves to the first target found that matches the `predicate` function. +- returns: <[Promise]<[ChromiumTarget]>> Promise which resolves to the first target found that matches the `predicate` function. This searches for a target in all browser contexts. @@ -3735,6 +3728,7 @@ to send messages. - [chromiumTarget.createCDPSession()](#chromiumtargetcreatecdpsession) - [chromiumTarget.opener()](#chromiumtargetopener) - [chromiumTarget.page()](#chromiumtargetpage) +- [chromiumTarget.serviceWorker()](#chromiumtargetserviceworker) - [chromiumTarget.type()](#chromiumtargettype) - [chromiumTarget.url()](#chromiumtargeturl) @@ -3751,7 +3745,7 @@ The browser context the target belongs to. Creates a Chrome Devtools Protocol session attached to the target. #### chromiumTarget.opener() -- returns: +- returns: Get the target that opened this target. Top-level targets return `null`. @@ -3760,6 +3754,11 @@ Get the target that opened this target. Top-level targets return `null`. If the target is not of type `"page"` or `"background_page"`, returns `null`. +#### chromiumTarget.serviceWorker() +- returns: <[Promise]> + +Attaches to the service worker target. If the target is not of type `"service_worker"`, returns `null`. + #### chromiumTarget.type() - returns: <"page"|"background_page"|"service_worker"|"shared_worker"|"other"|"browser"> @@ -3901,7 +3900,6 @@ const { chromium } = require('playwright'); [Response]: #class-response "Response" [Selectors]: #class-selectors "Selectors" [Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable" -[Target]: #class-target "Target" [TimeoutError]: #class-timeouterror "TimeoutError" [UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail" [URL]: https://nodejs.org/api/url.html diff --git a/src/chromium/crBrowser.ts b/src/chromium/crBrowser.ts index 994ace6b85..d04843a346 100644 --- a/src/chromium/crBrowser.ts +++ b/src/chromium/crBrowser.ts @@ -20,7 +20,7 @@ import { Events as CommonEvents } from '../events'; import { assert, helper } from '../helper'; import { BrowserContext, BrowserContextOptions } from '../browserContext'; import { CRConnection, ConnectionEvents, CRSession } from './crConnection'; -import { Page, Worker } from '../page'; +import { Page } from '../page'; import { CRTarget } from './crTarget'; import { Protocol } from './protocol'; import { CRPage } from './crPage'; @@ -248,10 +248,6 @@ export class CRBrowser extends platform.EventEmitter implements Browser { return [...this._targets.values()].find(t => t.type() === 'browser')!; } - serviceWorker(target: CRTarget): Promise { - return target._worker(); - } - async startTracing(page: Page | undefined, options: { path?: string; screenshots?: boolean; categories?: string[]; } = {}) { assert(!this._tracingRecording, 'Cannot start recording trace while already recording trace.'); this._tracingClient = page ? (page._delegate as CRPage)._client : this._client; diff --git a/src/chromium/crTarget.ts b/src/chromium/crTarget.ts index ba90de6227..8f9a6ccba4 100644 --- a/src/chromium/crTarget.ts +++ b/src/chromium/crTarget.ts @@ -91,8 +91,8 @@ export class CRTarget { return this._pagePromise; } - async _worker(): Promise { - if (this._targetInfo.type !== 'service_worker' && this._targetInfo.type !== 'shared_worker') + async serviceWorker(): Promise { + if (this._targetInfo.type !== 'service_worker') return null; if (!this._workerPromise) { // TODO(einbinder): Make workers send their console logs. diff --git a/test/chromium/chromium.spec.js b/test/chromium/chromium.spec.js index 73e9342059..c278f6d39c 100644 --- a/test/chromium/chromium.spec.js +++ b/test/chromium/chromium.spec.js @@ -82,17 +82,17 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROMI await page.goto(server.PREFIX + '/serviceworkers/empty/sw.html'); const target = await browser.waitForTarget(target => target.type() === 'service_worker'); - const worker = await browser.serviceWorker(target); + const worker = await target.serviceWorker(); expect(await worker.evaluate(() => self.toString())).toBe('[object ServiceWorkerGlobalScope]'); }); - it('should create a worker from a shared worker', async({browser, page, server, context}) => { + it('should not create a worker from a shared worker', async({browser, page, server, context}) => { await page.goto(server.EMPTY_PAGE); await page.evaluate(() => { new SharedWorker('data:text/javascript,console.log("hi")'); }); const target = await browser.waitForTarget(target => target.type() === 'shared_worker'); - const worker = await browser.serviceWorker(target); - expect(await worker.evaluate(() => self.toString())).toBe('[object SharedWorkerGlobalScope]'); + const worker = await target.serviceWorker(); + expect(worker).toBe(null); }); it('should report when a target url changes', async({browser, page, server, context}) => { await page.goto(server.EMPTY_PAGE);