fix(api): browser.serviceWorker -> target.serviceWorker (#1076)

This commit is contained in:
Dmitry Gozman 2020-02-24 08:31:58 -08:00 committed by GitHub
parent 1f8508d1ed
commit 3677818202
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 29 deletions

View file

@ -331,7 +331,7 @@ If URLs are specified, only cookies that affect those URLs are returned.
Creates a new page in the browser context. Creates a new page in the browser context.
#### browserContext.pages() #### 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. An array of all pages inside the browser context.
@ -3537,7 +3537,6 @@ await browser.stopTracing();
- [event: 'targetdestroyed'](#event-targetdestroyed) - [event: 'targetdestroyed'](#event-targetdestroyed)
- [chromiumBrowser.browserTarget()](#chromiumbrowserbrowsertarget) - [chromiumBrowser.browserTarget()](#chromiumbrowserbrowsertarget)
- [chromiumBrowser.pageTarget(page)](#chromiumbrowserpagetargetpage) - [chromiumBrowser.pageTarget(page)](#chromiumbrowserpagetargetpage)
- [chromiumBrowser.serviceWorker(target)](#chromiumbrowserserviceworkertarget)
- [chromiumBrowser.startTracing(page, [options])](#chromiumbrowserstarttracingpage-options) - [chromiumBrowser.startTracing(page, [options])](#chromiumbrowserstarttracingpage-options)
- [chromiumBrowser.stopTracing()](#chromiumbrowserstoptracing) - [chromiumBrowser.stopTracing()](#chromiumbrowserstoptracing)
- [chromiumBrowser.targets(context)](#chromiumbrowsertargetscontext) - [chromiumBrowser.targets(context)](#chromiumbrowsertargetscontext)
@ -3553,7 +3552,7 @@ await browser.stopTracing();
<!-- GEN:stop --> <!-- GEN:stop -->
#### event: 'targetchanged' #### event: 'targetchanged'
- <[Target]> - <[ChromiumTarget]>
Emitted when the url of a target changes. Emitted when the url of a target changes.
@ -3561,33 +3560,27 @@ Emitted when the url of a target changes.
#### event: 'targetcreated' #### 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). 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. > **NOTE** This includes target creations in incognito browser contexts.
#### event: 'targetdestroyed' #### event: 'targetdestroyed'
- <[Target]> - <[ChromiumTarget]>
Emitted when a target is destroyed, for example when a page is closed. Emitted when a target is destroyed, for example when a page is closed.
> **NOTE** This includes target destructions in incognito browser contexts. > **NOTE** This includes target destructions in incognito browser contexts.
#### chromiumBrowser.browserTarget() #### chromiumBrowser.browserTarget()
- returns: <[Target]> - returns: <[ChromiumTarget]>
Returns browser target. Returns browser target.
#### chromiumBrowser.pageTarget(page) #### chromiumBrowser.pageTarget(page)
- `page` <[Page]> Page to return target for. - `page` <[Page]> Page to return target for.
- returns: <[Target]> a target given page was created from. - returns: <[ChromiumTarget]> 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.
#### chromiumBrowser.startTracing(page, [options]) #### chromiumBrowser.startTracing(page, [options])
- `page` <[Page]> Optional, if specified, tracing includes screenshots of the given page. - `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) #### chromiumBrowser.targets(context)
- `context` <[BrowserContext]> Optional, if specified, only targets from this context are returned. - `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, 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. the method will return an array with all the targets in all browser contexts.
#### chromiumBrowser.waitForTarget(predicate[, options]) #### 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]> - `options` <[Object]>
- `timeout` <[number]> Maximum wait time in milliseconds. Pass `0` to disable the timeout. Defaults to 30 seconds. - `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. This searches for a target in all browser contexts.
@ -3735,6 +3728,7 @@ to send messages.
- [chromiumTarget.createCDPSession()](#chromiumtargetcreatecdpsession) - [chromiumTarget.createCDPSession()](#chromiumtargetcreatecdpsession)
- [chromiumTarget.opener()](#chromiumtargetopener) - [chromiumTarget.opener()](#chromiumtargetopener)
- [chromiumTarget.page()](#chromiumtargetpage) - [chromiumTarget.page()](#chromiumtargetpage)
- [chromiumTarget.serviceWorker()](#chromiumtargetserviceworker)
- [chromiumTarget.type()](#chromiumtargettype) - [chromiumTarget.type()](#chromiumtargettype)
- [chromiumTarget.url()](#chromiumtargeturl) - [chromiumTarget.url()](#chromiumtargeturl)
<!-- GEN:stop --> <!-- GEN:stop -->
@ -3751,7 +3745,7 @@ The browser context the target belongs to.
Creates a Chrome Devtools Protocol session attached to the target. Creates a Chrome Devtools Protocol session attached to the target.
#### chromiumTarget.opener() #### chromiumTarget.opener()
- returns: <?[Target]> - returns: <?[ChromiumTarget]>
Get the target that opened this target. Top-level targets return `null`. 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`. If the target is not of type `"page"` or `"background_page"`, returns `null`.
#### chromiumTarget.serviceWorker()
- returns: <[Promise]<?[Worker]>>
Attaches to the service worker target. If the target is not of type `"service_worker"`, returns `null`.
#### chromiumTarget.type() #### chromiumTarget.type()
- returns: <"page"|"background_page"|"service_worker"|"shared_worker"|"other"|"browser"> - returns: <"page"|"background_page"|"service_worker"|"shared_worker"|"other"|"browser">
@ -3901,7 +3900,6 @@ const { chromium } = require('playwright');
[Response]: #class-response "Response" [Response]: #class-response "Response"
[Selectors]: #class-selectors "Selectors" [Selectors]: #class-selectors "Selectors"
[Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable" [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" [TimeoutError]: #class-timeouterror "TimeoutError"
[UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail" [UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail"
[URL]: https://nodejs.org/api/url.html [URL]: https://nodejs.org/api/url.html

View file

@ -20,7 +20,7 @@ import { Events as CommonEvents } from '../events';
import { assert, helper } from '../helper'; import { assert, helper } from '../helper';
import { BrowserContext, BrowserContextOptions } from '../browserContext'; import { BrowserContext, BrowserContextOptions } from '../browserContext';
import { CRConnection, ConnectionEvents, CRSession } from './crConnection'; import { CRConnection, ConnectionEvents, CRSession } from './crConnection';
import { Page, Worker } from '../page'; import { Page } from '../page';
import { CRTarget } from './crTarget'; import { CRTarget } from './crTarget';
import { Protocol } from './protocol'; import { Protocol } from './protocol';
import { CRPage } from './crPage'; 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')!; return [...this._targets.values()].find(t => t.type() === 'browser')!;
} }
serviceWorker(target: CRTarget): Promise<Worker | null> {
return target._worker();
}
async startTracing(page: Page | undefined, options: { path?: string; screenshots?: boolean; categories?: string[]; } = {}) { async startTracing(page: Page | undefined, options: { path?: string; screenshots?: boolean; categories?: string[]; } = {}) {
assert(!this._tracingRecording, 'Cannot start recording trace while already recording trace.'); assert(!this._tracingRecording, 'Cannot start recording trace while already recording trace.');
this._tracingClient = page ? (page._delegate as CRPage)._client : this._client; this._tracingClient = page ? (page._delegate as CRPage)._client : this._client;

View file

@ -91,8 +91,8 @@ export class CRTarget {
return this._pagePromise; return this._pagePromise;
} }
async _worker(): Promise<Worker | null> { async serviceWorker(): Promise<Worker | null> {
if (this._targetInfo.type !== 'service_worker' && this._targetInfo.type !== 'shared_worker') if (this._targetInfo.type !== 'service_worker')
return null; return null;
if (!this._workerPromise) { if (!this._workerPromise) {
// TODO(einbinder): Make workers send their console logs. // TODO(einbinder): Make workers send their console logs.

View file

@ -82,17 +82,17 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROMI
await page.goto(server.PREFIX + '/serviceworkers/empty/sw.html'); await page.goto(server.PREFIX + '/serviceworkers/empty/sw.html');
const target = await browser.waitForTarget(target => target.type() === 'service_worker'); 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]'); 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.goto(server.EMPTY_PAGE);
await page.evaluate(() => { await page.evaluate(() => {
new SharedWorker('data:text/javascript,console.log("hi")'); new SharedWorker('data:text/javascript,console.log("hi")');
}); });
const target = await browser.waitForTarget(target => target.type() === 'shared_worker'); const target = await browser.waitForTarget(target => target.type() === 'shared_worker');
const worker = await browser.serviceWorker(target); const worker = await target.serviceWorker();
expect(await worker.evaluate(() => self.toString())).toBe('[object SharedWorkerGlobalScope]'); expect(worker).toBe(null);
}); });
it('should report when a target url changes', async({browser, page, server, context}) => { it('should report when a target url changes', async({browser, page, server, context}) => {
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);