diff --git a/README.md b/README.md index bb09456143..78a060b056 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🎭 Playwright -[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) [![Chromium version](https://img.shields.io/badge/chromium-88.0.4287.0-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-83.0b6-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-14.0-blue.svg?logo=safari)](https://webkit.org/) +[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) [![Chromium version](https://img.shields.io/badge/chromium-88.0.4314.0-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-83.0b6-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-14.0-blue.svg?logo=safari)](https://webkit.org/) ## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/#?path=docs/api.md) @@ -8,7 +8,7 @@ Playwright is a Node.js library to automate [Chromium](https://www.chromium.org/ | | Linux | macOS | Windows | | :--- | :---: | :---: | :---: | -| Chromium 88.0.4287.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Chromium 88.0.4314.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | WebKit 14.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | Firefox 83.0b6 | :white_check_mark: | :white_check_mark: | :white_check_mark: | diff --git a/browsers.json b/browsers.json index 4a44a764fd..3c623509f9 100644 --- a/browsers.json +++ b/browsers.json @@ -3,7 +3,7 @@ "browsers": [ { "name": "chromium", - "revision": "815036", + "revision": "823078", "download": true }, { diff --git a/src/server/chromium/protocol.ts b/src/server/chromium/protocol.ts index b238195638..04378aeed5 100644 --- a/src/server/chromium/protocol.ts +++ b/src/server/chromium/protocol.ts @@ -786,6 +786,7 @@ some CSP errors in the future. * Specific directive that is violated, causing the CSP issue. */ violatedDirective: string; + isReportOnly: boolean; contentSecurityPolicyViolationType: ContentSecurityPolicyViolationType; frameAncestor?: AffectedFrame; sourceCodeLocation?: SourceCodeLocation; @@ -1007,7 +1008,7 @@ events afterwards if enabled and recording. */ windowState?: WindowState; } - export type PermissionType = "accessibilityEvents"|"audioCapture"|"backgroundSync"|"backgroundFetch"|"clipboardReadWrite"|"clipboardSanitizedWrite"|"durableStorage"|"flash"|"geolocation"|"midi"|"midiSysex"|"nfc"|"notifications"|"paymentHandler"|"periodicBackgroundSync"|"protectedMediaIdentifier"|"sensors"|"videoCapture"|"idleDetection"|"wakeLockScreen"|"wakeLockSystem"; + export type PermissionType = "accessibilityEvents"|"audioCapture"|"backgroundSync"|"backgroundFetch"|"clipboardReadWrite"|"clipboardSanitizedWrite"|"durableStorage"|"flash"|"geolocation"|"midi"|"midiSysex"|"nfc"|"notifications"|"paymentHandler"|"periodicBackgroundSync"|"protectedMediaIdentifier"|"sensors"|"videoCapture"|"videoCapturePanTiltZoom"|"idleDetection"|"wakeLockScreen"|"wakeLockSystem"; export type PermissionSetting = "granted"|"denied"|"prompt"; /** * Definition of PermissionDescriptor defined in the Permissions API: @@ -1032,7 +1033,15 @@ Note that userVisibleOnly = true is the only currently supported type. * For "clipboard" permission, may specify allowWithoutSanitization. */ allowWithoutSanitization?: boolean; + /** + * For "camera" permission, may specify panTiltZoom. + */ + panTiltZoom?: boolean; } + /** + * Browser command ids used by executeBrowserCommand. + */ + export type BrowserCommandId = "openTabSearch"; /** * Chrome histogram bucket. */ @@ -1309,6 +1318,14 @@ with 'left', 'top', 'width' or 'height'. Leaves unspecified fields unchanged. } export type setDockTileReturnValue = { } + /** + * Invoke custom browser commands used by telemetry. + */ + export type executeBrowserCommandParameters = { + commandId: BrowserCommandId; + } + export type executeBrowserCommandReturnValue = { + } } /** @@ -2510,7 +2527,7 @@ front-end. /** * Pseudo element type. */ - export type PseudoType = "first-line"|"first-letter"|"before"|"after"|"marker"|"backdrop"|"selection"|"first-line-inherited"|"scrollbar"|"scrollbar-thumb"|"scrollbar-button"|"scrollbar-track"|"scrollbar-track-piece"|"scrollbar-corner"|"resizer"|"input-list-button"; + export type PseudoType = "first-line"|"first-letter"|"before"|"after"|"marker"|"backdrop"|"selection"|"target-text"|"first-line-inherited"|"scrollbar"|"scrollbar-thumb"|"scrollbar-button"|"scrollbar-track"|"scrollbar-track-piece"|"scrollbar-corner"|"resizer"|"input-list-button"; /** * Shadow root type. */ @@ -4675,6 +4692,10 @@ resource fetches. model: string; mobile: boolean; } + /** + * Enum of image types that can be disabled. + */ + export type DisabledImageType = "avif"|"webp"; /** * Notification sent after the virtual time budget for the current VirtualTimePolicy has run out. @@ -5029,6 +5050,14 @@ on Android. } export type setVisibleSizeReturnValue = { } + export type setDisabledImageTypesParameters = { + /** + * Image types to disable. + */ + imageTypes: DisabledImageType[]; + } + export type setDisabledImageTypesReturnValue = { + } /** * Allows overriding user agent with the given string. */ @@ -5552,6 +5581,22 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the * Force (default: 1.0). */ force?: number; + /** + * The normalized tangential pressure, which has a range of [-1,1] (default: 0). + */ + tangentialPressure?: number; + /** + * The plane angle between the Y-Z plane and the plane containing both the stylus axis and the Y axis, in degrees of the range [-90,90], a positive tiltX is to the right (default: 0) + */ + tiltX?: number; + /** + * The plane angle between the X-Z plane and the plane containing both the stylus axis and the X axis, in degrees of the range [-90,90], a positive tiltY is towards the user (default: 0). + */ + tiltY?: number; + /** + * The clockwise rotation of a pen stylus around its own major axis, in degrees in the range [0,359] (default: 0). + */ + twist?: number; /** * Identifier used to track touch sources between events, must be unique within an event. */ @@ -5690,6 +5735,26 @@ Left=1, Right=2, Middle=4, Back=8, Forward=16, None=0. * Number of times the mouse button was clicked (default: 0). */ clickCount?: number; + /** + * The normalized pressure, which has a range of [0,1] (default: 0). + */ + force?: number; + /** + * The normalized tangential pressure, which has a range of [-1,1] (default: 0). + */ + tangentialPressure?: number; + /** + * The plane angle between the Y-Z plane and the plane containing both the stylus axis and the Y axis, in degrees of the range [-90,90], a positive tiltX is to the right (default: 0). + */ + tiltX?: number; + /** + * The plane angle between the X-Z plane and the plane containing both the stylus axis and the X axis, in degrees of the range [-90,90], a positive tiltY is towards the user (default: 0). + */ + tiltY?: number; + /** + * The clockwise rotation of a pen stylus around its own major axis, in degrees in the range [0,359] (default: 0). + */ + twist?: number; /** * X delta in CSS pixels for mouse wheel event (default: 0). */ @@ -6679,6 +6744,11 @@ milliseconds relatively to this requestTime. * Whether is loaded via link preload. */ isLinkPreload?: boolean; + /** + * Set for requests when the TrustToken API is used. Contains the parameters +passed by the developer (e.g. via "fetch") as understood by the backend. + */ + trustTokenParams?: TrustTokenParams; } /** * Details of a signed certificate timestamp (SCT). @@ -6782,10 +6852,36 @@ milliseconds relatively to this requestTime. * The reason why request was blocked. */ export type BlockedReason = "other"|"csp"|"mixed-content"|"origin"|"inspector"|"subresource-filter"|"content-type"|"collapsed-by-client"|"coep-frame-resource-needs-coep-header"|"coop-sandboxed-iframe-cannot-navigate-to-coop-page"|"corp-not-same-origin"|"corp-not-same-origin-after-defaulted-to-same-origin-by-coep"|"corp-not-same-site"; + /** + * The reason why request was blocked. + */ + export type CorsError = "DisallowedByMode"|"InvalidResponse"|"WildcardOriginNotAllowed"|"MissingAllowOriginHeader"|"MultipleAllowOriginValues"|"InvalidAllowOriginValue"|"AllowOriginMismatch"|"InvalidAllowCredentials"|"CorsDisabledScheme"|"PreflightInvalidStatus"|"PreflightDisallowedRedirect"|"PreflightWildcardOriginNotAllowed"|"PreflightMissingAllowOriginHeader"|"PreflightMultipleAllowOriginValues"|"PreflightInvalidAllowOriginValue"|"PreflightAllowOriginMismatch"|"PreflightInvalidAllowCredentials"|"PreflightMissingAllowExternal"|"PreflightInvalidAllowExternal"|"InvalidAllowMethodsPreflightResponse"|"InvalidAllowHeadersPreflightResponse"|"MethodDisallowedByPreflightResponse"|"HeaderDisallowedByPreflightResponse"|"RedirectContainsCredentials"; + export interface CorsErrorStatus { + corsError: CorsError; + failedParameter: string; + } /** * Source of serviceworker response. */ export type ServiceWorkerResponseSource = "cache-storage"|"http-cache"|"fallback-code"|"network"; + /** + * Determines what type of Trust Token operation is executed and +depending on the type, some additional parameters. + */ + export interface TrustTokenParams { + type: TrustTokenOperationType; + /** + * Only set for "srr-token-redemption" type and determine whether +to request a fresh SRR or use a still valid cached SRR. + */ + refreshPolicy: "UseCached"|"Refresh"; + /** + * Origins of issuers from whom to request tokens or redemption +records. + */ + issuers?: string[]; + } + export type TrustTokenOperationType = "Issuance"|"Redemption"|"Signing"; /** * HTTP response data. */ @@ -7040,11 +7136,11 @@ module) (0-based). /** * Types of reasons why a cookie may not be stored from a response. */ - export type SetCookieBlockedReason = "SecureOnly"|"SameSiteStrict"|"SameSiteLax"|"SameSiteUnspecifiedTreatedAsLax"|"SameSiteNoneInsecure"|"UserPreferences"|"SyntaxError"|"SchemeNotSupported"|"OverwriteSecure"|"InvalidDomain"|"InvalidPrefix"|"UnknownError"; + export type SetCookieBlockedReason = "SecureOnly"|"SameSiteStrict"|"SameSiteLax"|"SameSiteUnspecifiedTreatedAsLax"|"SameSiteNoneInsecure"|"UserPreferences"|"SyntaxError"|"SchemeNotSupported"|"OverwriteSecure"|"InvalidDomain"|"InvalidPrefix"|"UnknownError"|"SchemefulSameSiteStrict"|"SchemefulSameSiteLax"|"SchemefulSameSiteUnspecifiedTreatedAsLax"; /** * Types of reasons why a cookie may not be sent with a request. */ - export type CookieBlockedReason = "SecureOnly"|"NotOnPath"|"DomainMismatch"|"SameSiteStrict"|"SameSiteLax"|"SameSiteUnspecifiedTreatedAsLax"|"SameSiteNoneInsecure"|"UserPreferences"|"UnknownError"; + export type CookieBlockedReason = "SecureOnly"|"NotOnPath"|"DomainMismatch"|"SameSiteStrict"|"SameSiteLax"|"SameSiteUnspecifiedTreatedAsLax"|"SameSiteNoneInsecure"|"UserPreferences"|"UnknownError"|"SchemefulSameSiteStrict"|"SchemefulSameSiteLax"|"SchemefulSameSiteUnspecifiedTreatedAsLax"; /** * A cookie which was not stored from a response with the corresponding reason. */ @@ -7420,6 +7516,10 @@ CORB and streaming. * The reason why loading was blocked, if any. */ blockedReason?: BlockedReason; + /** + * The reason why loading was blocked by CORS, if any. + */ + corsErrorStatus?: CorsErrorStatus; } /** * Fired when HTTP request has finished loading. @@ -8227,15 +8327,15 @@ default domain and path values of the created cookie. export type setExtraHTTPHeadersReturnValue = { } /** - * Specifies whether to sned a debug header to all outgoing requests. + * Specifies whether to attach a page script stack id in requests */ - export type setAttachDebugHeaderParameters = { + export type setAttachDebugStackParameters = { /** - * Whether to send a debug header. + * Whether to attach a page script stack for debugging purpose. */ enabled: boolean; } - export type setAttachDebugHeaderReturnValue = { + export type setAttachDebugStackReturnValue = { } /** * Sets the requests to intercept that match the provided patterns and optionally resource types. @@ -11075,11 +11175,36 @@ For cached script it is the last time the cache entry was validated. * Storage quota (bytes). */ quota: number; + /** + * Whether or not the origin has an active storage quota override + */ + overrideActive: boolean; /** * Storage usage per type (bytes). */ usageBreakdown: UsageForType[]; } + /** + * Override quota for the specified origin + */ + export type overrideQuotaForOriginParameters = { + /** + * Security origin. + */ + origin: string; + /** + * The quota size (in bytes) to override the original quota with. +If this is called multiple times, the overriden quota will be equal to +the quotaSize provided in the final call. If this is called without +specifying a quotaSize, the quota will be reset to the default value for +the specified origin. If this is called multiple times with different +origins, the override will be maintained for each origin until it is +disabled (called without a quotaSize). + */ + quotaSize?: number; + } + export type overrideQuotaForOriginReturnValue = { + } /** * Registers origin to be notified when an update occurs to its cache storage list. */ @@ -11799,6 +11924,12 @@ protocol buffer format. Note that the JSON format will be deprecated soon. * Compression type to use for traces returned via streams. */ export type StreamCompression = "none"|"gzip"; + /** + * Details exposed when memory request explicitly declared. +Keep consistent with memory_dump_request_args.h and +memory_instrumentation.mojom + */ + export type MemoryDumpLevelOfDetail = "background"|"light"|"detailed"; export type bufferUsagePayload = { /** @@ -11884,6 +12015,10 @@ buffer wrapped around. * Enables more deterministic results by forcing garbage collection */ deterministic?: boolean; + /** + * Specifies level of details in memory dump. Defaults to "detailed". + */ + levelOfDetail?: MemoryDumpLevelOfDetail; } export type requestMemoryDumpReturnValue = { /** @@ -12489,9 +12624,14 @@ API. export module WebAuthn { export type AuthenticatorId = string; export type AuthenticatorProtocol = "u2f"|"ctap2"; + export type Ctap2Version = "ctap2_0"|"ctap2_1"; export type AuthenticatorTransport = "usb"|"nfc"|"ble"|"cable"|"internal"; export interface VirtualAuthenticatorOptions { protocol: AuthenticatorProtocol; + /** + * Defaults to ctap2_0. Ignored if |protocol| == u2f. + */ + ctap2Version?: Ctap2Version; transport: AuthenticatorTransport; /** * Defaults to false. @@ -12541,6 +12681,11 @@ assertion. See https://w3c.github.io/webauthn/#signature-counter */ signCount: number; + /** + * The large blob associated with the credential. +See https://w3c.github.io/webauthn/#sctn-large-blob-extension + */ + largeBlob?: binary; } @@ -15507,6 +15652,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Browser.getWindowForTarget": Browser.getWindowForTargetParameters; "Browser.setWindowBounds": Browser.setWindowBoundsParameters; "Browser.setDockTile": Browser.setDockTileParameters; + "Browser.executeBrowserCommand": Browser.executeBrowserCommandParameters; "CSS.addRule": CSS.addRuleParameters; "CSS.collectClassNames": CSS.collectClassNamesParameters; "CSS.createStyleSheet": CSS.createStyleSheetParameters; @@ -15637,6 +15783,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Emulation.setLocaleOverride": Emulation.setLocaleOverrideParameters; "Emulation.setTimezoneOverride": Emulation.setTimezoneOverrideParameters; "Emulation.setVisibleSize": Emulation.setVisibleSizeParameters; + "Emulation.setDisabledImageTypes": Emulation.setDisabledImageTypesParameters; "Emulation.setUserAgentOverride": Emulation.setUserAgentOverrideParameters; "HeadlessExperimental.beginFrame": HeadlessExperimental.beginFrameParameters; "HeadlessExperimental.disable": HeadlessExperimental.disableParameters; @@ -15714,7 +15861,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Network.setCookies": Network.setCookiesParameters; "Network.setDataSizeLimitsForTest": Network.setDataSizeLimitsForTestParameters; "Network.setExtraHTTPHeaders": Network.setExtraHTTPHeadersParameters; - "Network.setAttachDebugHeader": Network.setAttachDebugHeaderParameters; + "Network.setAttachDebugStack": Network.setAttachDebugStackParameters; "Network.setRequestInterception": Network.setRequestInterceptionParameters; "Network.setUserAgentOverride": Network.setUserAgentOverrideParameters; "Network.getSecurityIsolationStatus": Network.getSecurityIsolationStatusParameters; @@ -15823,6 +15970,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Storage.setCookies": Storage.setCookiesParameters; "Storage.clearCookies": Storage.clearCookiesParameters; "Storage.getUsageAndQuota": Storage.getUsageAndQuotaParameters; + "Storage.overrideQuotaForOrigin": Storage.overrideQuotaForOriginParameters; "Storage.trackCacheStorageForOrigin": Storage.trackCacheStorageForOriginParameters; "Storage.trackIndexedDBForOrigin": Storage.trackIndexedDBForOriginParameters; "Storage.untrackCacheStorageForOrigin": Storage.untrackCacheStorageForOriginParameters; @@ -16006,6 +16154,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Browser.getWindowForTarget": Browser.getWindowForTargetReturnValue; "Browser.setWindowBounds": Browser.setWindowBoundsReturnValue; "Browser.setDockTile": Browser.setDockTileReturnValue; + "Browser.executeBrowserCommand": Browser.executeBrowserCommandReturnValue; "CSS.addRule": CSS.addRuleReturnValue; "CSS.collectClassNames": CSS.collectClassNamesReturnValue; "CSS.createStyleSheet": CSS.createStyleSheetReturnValue; @@ -16136,6 +16285,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Emulation.setLocaleOverride": Emulation.setLocaleOverrideReturnValue; "Emulation.setTimezoneOverride": Emulation.setTimezoneOverrideReturnValue; "Emulation.setVisibleSize": Emulation.setVisibleSizeReturnValue; + "Emulation.setDisabledImageTypes": Emulation.setDisabledImageTypesReturnValue; "Emulation.setUserAgentOverride": Emulation.setUserAgentOverrideReturnValue; "HeadlessExperimental.beginFrame": HeadlessExperimental.beginFrameReturnValue; "HeadlessExperimental.disable": HeadlessExperimental.disableReturnValue; @@ -16213,7 +16363,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Network.setCookies": Network.setCookiesReturnValue; "Network.setDataSizeLimitsForTest": Network.setDataSizeLimitsForTestReturnValue; "Network.setExtraHTTPHeaders": Network.setExtraHTTPHeadersReturnValue; - "Network.setAttachDebugHeader": Network.setAttachDebugHeaderReturnValue; + "Network.setAttachDebugStack": Network.setAttachDebugStackReturnValue; "Network.setRequestInterception": Network.setRequestInterceptionReturnValue; "Network.setUserAgentOverride": Network.setUserAgentOverrideReturnValue; "Network.getSecurityIsolationStatus": Network.getSecurityIsolationStatusReturnValue; @@ -16322,6 +16472,7 @@ unsubscribes current runtime agent from Runtime.bindingCalled notifications. "Storage.setCookies": Storage.setCookiesReturnValue; "Storage.clearCookies": Storage.clearCookiesReturnValue; "Storage.getUsageAndQuota": Storage.getUsageAndQuotaReturnValue; + "Storage.overrideQuotaForOrigin": Storage.overrideQuotaForOriginReturnValue; "Storage.trackCacheStorageForOrigin": Storage.trackCacheStorageForOriginReturnValue; "Storage.trackIndexedDBForOrigin": Storage.trackIndexedDBForOriginReturnValue; "Storage.untrackCacheStorageForOrigin": Storage.untrackCacheStorageForOriginReturnValue; diff --git a/test/page-screenshot.spec.ts b/test/page-screenshot.spec.ts index 67499e396a..ddccafa769 100644 --- a/test/page-screenshot.spec.ts +++ b/test/page-screenshot.spec.ts @@ -298,9 +298,7 @@ describe('page screenshot', (suite, { browserName, headful }) => { expect([buffer[0], buffer[1], buffer[2]]).toEqual([0xFF, 0xD8, 0xFF]); }); - it('should work with large size', (test, { browserName }) => { - test.fail(browserName === 'chromium', 'Upstream Chromium bug'); - }, async ({ page }) => { + it('should work with large size', async ({ page }) => { await page.setViewportSize({ width: 1280, height: 800 }); await page.evaluate(() => { document.body.style.margin = '0';