diff --git a/README.md b/README.md index 3798a3a077..59099ff0de 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🎭 Playwright -[![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) [![Chromium version](https://img.shields.io/badge/chromium-124.0.6367.60-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-125.0.1-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-17.4-blue.svg?logo=safari)](https://webkit.org/) +[![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) [![Chromium version](https://img.shields.io/badge/chromium-125.0.6422.4-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-125.0.1-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-17.4-blue.svg?logo=safari)](https://webkit.org/) ## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright) @@ -8,7 +8,7 @@ Playwright is a framework for Web Testing and Automation. It allows testing [Chr | | Linux | macOS | Windows | | :--- | :---: | :---: | :---: | -| Chromium 124.0.6367.60 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Chromium 125.0.6422.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | WebKit 17.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | Firefox 125.0.1 | :white_check_mark: | :white_check_mark: | :white_check_mark: | diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index e14f2dfb7c..19e7c555c1 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -3,9 +3,9 @@ "browsers": [ { "name": "chromium", - "revision": "1114", + "revision": "1115", "installByDefault": true, - "browserVersion": "124.0.6367.60" + "browserVersion": "125.0.6422.4" }, { "name": "chromium-tip-of-tree", diff --git a/packages/playwright-core/src/server/chromium/protocol.d.ts b/packages/playwright-core/src/server/chromium/protocol.d.ts index 0ea475d12e..6d8a2559db 100644 --- a/packages/playwright-core/src/server/chromium/protocol.d.ts +++ b/packages/playwright-core/src/server/chromium/protocol.d.ts @@ -525,6 +525,15 @@ percentage [0 - 100] for scroll driven animations */ animation: Animation; } + /** + * Event for animation that has been updated. + */ + export type animationUpdatedPayload = { + /** + * Animation that was updated. + */ + animation: Animation; + } /** * Disables animation domain notifications. @@ -917,7 +926,7 @@ Should be updated alongside RequestIdTokenStatus in third_party/blink/public/mojom/devtools/inspector_issue.mojom to include all cases except for success. */ - export type FederatedAuthRequestIssueReason = "ShouldEmbargo"|"TooManyRequests"|"WellKnownHttpNotFound"|"WellKnownNoResponse"|"WellKnownInvalidResponse"|"WellKnownListEmpty"|"WellKnownInvalidContentType"|"ConfigNotInWellKnown"|"WellKnownTooBig"|"ConfigHttpNotFound"|"ConfigNoResponse"|"ConfigInvalidResponse"|"ConfigInvalidContentType"|"ClientMetadataHttpNotFound"|"ClientMetadataNoResponse"|"ClientMetadataInvalidResponse"|"ClientMetadataInvalidContentType"|"DisabledInSettings"|"ErrorFetchingSignin"|"InvalidSigninResponse"|"AccountsHttpNotFound"|"AccountsNoResponse"|"AccountsInvalidResponse"|"AccountsListEmpty"|"AccountsInvalidContentType"|"IdTokenHttpNotFound"|"IdTokenNoResponse"|"IdTokenInvalidResponse"|"IdTokenIdpErrorResponse"|"IdTokenCrossSiteIdpErrorResponse"|"IdTokenInvalidRequest"|"IdTokenInvalidContentType"|"ErrorIdToken"|"Canceled"|"RpPageNotVisible"|"SilentMediationFailure"|"ThirdPartyCookiesBlocked"|"NotSignedInWithIdp"; + export type FederatedAuthRequestIssueReason = "ShouldEmbargo"|"TooManyRequests"|"WellKnownHttpNotFound"|"WellKnownNoResponse"|"WellKnownInvalidResponse"|"WellKnownListEmpty"|"WellKnownInvalidContentType"|"ConfigNotInWellKnown"|"WellKnownTooBig"|"ConfigHttpNotFound"|"ConfigNoResponse"|"ConfigInvalidResponse"|"ConfigInvalidContentType"|"ClientMetadataHttpNotFound"|"ClientMetadataNoResponse"|"ClientMetadataInvalidResponse"|"ClientMetadataInvalidContentType"|"DisabledInSettings"|"ErrorFetchingSignin"|"InvalidSigninResponse"|"AccountsHttpNotFound"|"AccountsNoResponse"|"AccountsInvalidResponse"|"AccountsListEmpty"|"AccountsInvalidContentType"|"IdTokenHttpNotFound"|"IdTokenNoResponse"|"IdTokenInvalidResponse"|"IdTokenIdpErrorResponse"|"IdTokenCrossSiteIdpErrorResponse"|"IdTokenInvalidRequest"|"IdTokenInvalidContentType"|"ErrorIdToken"|"Canceled"|"RpPageNotVisible"|"SilentMediationFailure"|"ThirdPartyCookiesBlocked"|"NotSignedInWithIdp"|"MissingTransientUserActivation"|"ReplacedByButtonMode"; export interface FederatedAuthUserInfoRequestIssueDetails { federatedAuthUserInfoRequestIssueReason: FederatedAuthUserInfoRequestIssueReason; } @@ -3441,7 +3450,7 @@ front-end. /** * Pseudo element type. */ - export type PseudoType = "first-line"|"first-letter"|"before"|"after"|"marker"|"backdrop"|"selection"|"target-text"|"spelling-error"|"grammar-error"|"highlight"|"first-line-inherited"|"scrollbar"|"scrollbar-thumb"|"scrollbar-button"|"scrollbar-track"|"scrollbar-track-piece"|"scrollbar-corner"|"resizer"|"input-list-button"|"view-transition"|"view-transition-group"|"view-transition-image-pair"|"view-transition-old"|"view-transition-new"; + export type PseudoType = "first-line"|"first-letter"|"before"|"after"|"marker"|"backdrop"|"selection"|"target-text"|"spelling-error"|"grammar-error"|"highlight"|"first-line-inherited"|"scroll-marker"|"scroll-markers"|"scrollbar"|"scrollbar-thumb"|"scrollbar-button"|"scrollbar-track"|"scrollbar-track-piece"|"scrollbar-corner"|"resizer"|"input-list-button"|"view-transition"|"view-transition-group"|"view-transition-image-pair"|"view-transition-old"|"view-transition-new"; /** * Shadow root type. */ @@ -5973,11 +5982,31 @@ is turned-off. /** * If set, the posture of a foldable device. If not set the posture is set to continuous. +Deprecated, use Emulation.setDevicePostureOverride. */ devicePosture?: DevicePosture; } export type setDeviceMetricsOverrideReturnValue = { } + /** + * Start reporting the given posture value to the Device Posture API. +This override can also be set in setDeviceMetricsOverride(). + */ + export type setDevicePostureOverrideParameters = { + posture: DevicePosture; + } + export type setDevicePostureOverrideReturnValue = { + } + /** + * Clears a device posture override set with either setDeviceMetricsOverride() +or setDevicePostureOverride() and starts using posture information from the +platform again. +Does nothing if no override is set. + */ + export type clearDevicePostureOverrideParameters = { + } + export type clearDevicePostureOverrideReturnValue = { + } export type setScrollbarsHiddenParameters = { /** * Whether scrollbars should be always hidden. @@ -8351,6 +8380,10 @@ records. * Specifies that the request was served from the prefetch cache. */ fromPrefetchCache?: boolean; + /** + * Specifies that the request was served from the prefetch cache. + */ + fromEarlyHints?: boolean; /** * Information about how Service Worker Static Router was used. */ @@ -8614,6 +8647,10 @@ corresponding reason. A cookie could only have at most one exemption reason. * The reason the cookie was exempted. */ exemptionReason: CookieExemptionReason; + /** + * The string representing this individual cookie as it would appear in the header. + */ + cookieLine: string; /** * The cookie object representing the cookie. */ @@ -9537,6 +9574,21 @@ the response with the corresponding reason. */ exemptedCookies?: ExemptedSetCookieWithReason[]; } + /** + * Fired when 103 Early Hints headers is received in addition to the common response. +Not every responseReceived event will have an responseReceivedEarlyHints fired. +Only one responseReceivedEarlyHints may be fired for eached responseReceived event. + */ + export type responseReceivedEarlyHintsPayload = { + /** + * Request identifier. Used to match this information to another responseReceived event. + */ + requestId: RequestId; + /** + * Raw response headers as they were received over the wire. + */ + headers: Headers; + } /** * Fired exactly once for each Trust Token operation. Depending on the type of the operation and whether the operation succeeded or @@ -11573,6 +11625,125 @@ Example URLs: http://www.google.com/file.html -> "google.com" */ eager?: boolean; } + export interface FileFilter { + name?: string; + accepts?: string[]; + } + export interface FileHandler { + action: string; + name: string; + icons?: ImageResource[]; + /** + * Mimic a map, name is the key, accepts is the value. + */ + accepts?: FileFilter[]; + /** + * Won't repeat the enums, using string for easy comparison. Same as the +other enums below. + */ + launchType: string; + } + /** + * The image definition used in both icon and screenshot. + */ + export interface ImageResource { + /** + * The src field in the definition, but changing to url in favor of +consistency. + */ + url: string; + sizes?: string; + type?: string; + } + export interface LaunchHandler { + clientMode: string; + } + export interface ProtocolHandler { + protocol: string; + url: string; + } + export interface RelatedApplication { + id?: string; + url: string; + } + export interface ScopeExtension { + /** + * Instead of using tuple, this field always returns the serialized string +for easy understanding and comparison. + */ + origin: string; + hasOriginWildcard: boolean; + } + export interface Screenshot { + image: ImageResource; + formFactor: string; + label?: string; + } + export interface ShareTarget { + action: string; + method: string; + enctype: string; + /** + * Embed the ShareTargetParams + */ + title?: string; + text?: string; + url?: string; + files?: FileFilter[]; + } + export interface Shortcut { + name: string; + url: string; + } + export interface WebAppManifest { + backgroundColor?: string; + /** + * The extra description provided by the manifest. + */ + description?: string; + dir?: string; + display?: string; + /** + * The overrided display mode controlled by the user. + */ + displayOverrides?: string[]; + /** + * The handlers to open files. + */ + fileHandlers?: FileHandler[]; + icons?: ImageResource[]; + id?: string; + lang?: string; + /** + * TODO(crbug.com/1231886): This field is non-standard and part of a Chrome +experiment. See: +https://github.com/WICG/web-app-launch/blob/main/launch_handler.md + */ + launchHandler?: LaunchHandler; + name?: string; + orientation?: string; + preferRelatedApplications?: boolean; + /** + * The handlers to open protocols. + */ + protocolHandlers?: ProtocolHandler[]; + relatedApplications?: RelatedApplication[]; + scope?: string; + /** + * Non-standard, see +https://github.com/WICG/manifest-incubations/blob/gh-pages/scope_extensions-explainer.md + */ + scopeExtensions?: ScopeExtension[]; + /** + * The screenshots used by chromium. + */ + screenshots?: Screenshot[]; + shareTarget?: ShareTarget; + shortName?: string; + shortcuts?: Shortcut[]; + startUrl?: string; + themeColor?: string; + } /** * Enum of possible auto-response for permission / prompt dialogs. */ @@ -12158,7 +12329,15 @@ option, use with caution. } export type enableReturnValue = { } + /** + * Gets the processed manifest for this current document. + This API always waits for the manifest to be loaded. + If manifestId is provided, and it does not match the manifest of the + current document, this API errors out. + If there isn’t a loaded page, this API errors out immediately. + */ export type getAppManifestParameters = { + manifestId?: string; } export type getAppManifestReturnValue = { /** @@ -12171,9 +12350,10 @@ option, use with caution. */ data?: string; /** - * Parsed manifest properties + * Parsed manifest properties. Deprecated, use manifest instead. */ parsed?: AppManifestParsedProperties; + manifest: WebAppManifest; } export type getInstallabilityErrorsParameters = { } @@ -13778,7 +13958,7 @@ int debugKey?: UnsignedInt64AsBase10; triggerDataMatching: AttributionReportingTriggerDataMatching; } - export type AttributionReportingSourceRegistrationResult = "success"|"internalError"|"insufficientSourceCapacity"|"insufficientUniqueDestinationCapacity"|"excessiveReportingOrigins"|"prohibitedByBrowserPolicy"|"successNoised"|"destinationReportingLimitReached"|"destinationGlobalLimitReached"|"destinationBothLimitsReached"|"reportingOriginsPerSiteLimitReached"|"exceedsMaxChannelCapacity"; + export type AttributionReportingSourceRegistrationResult = "success"|"internalError"|"insufficientSourceCapacity"|"insufficientUniqueDestinationCapacity"|"excessiveReportingOrigins"|"prohibitedByBrowserPolicy"|"successNoised"|"destinationReportingLimitReached"|"destinationGlobalLimitReached"|"destinationBothLimitsReached"|"reportingOriginsPerSiteLimitReached"|"exceedsMaxChannelCapacity"|"exceedsMaxTriggerStateCardinality"; export type AttributionReportingSourceRegistrationTimeConfig = "include"|"exclude"; export interface AttributionReportingAggregatableValueDictEntry { key: string; @@ -14400,6 +14580,18 @@ interestGroupAuctionNetworkRequestCreated. } export type setAttributionReportingTrackingReturnValue = { } + /** + * Sends all pending Attribution Reports immediately, regardless of their +scheduled report time. + */ + export type sendPendingAttributionReportsParameters = { + } + export type sendPendingAttributionReportsReturnValue = { + /** + * The number of reports that were sent. + */ + numSent: number; + } /** * Returns the effective Related Website Sets in use by this profile for the browser session. The effective Related Website Sets will not change during a browser session. @@ -16691,6 +16883,46 @@ a dialog even if one was recently dismissed by the user. } } + /** + * This domain allows interacting with the browser to control PWAs. + */ + export module PWA { + /** + * The following types are the replica of +https://crsrc.org/c/chrome/browser/web_applications/proto/web_app_os_integration_state.proto;drc=9910d3be894c8f142c977ba1023f30a656bc13fc;l=67 + */ + export interface FileHandlerAccept { + /** + * New name of the mimetype according to +https://www.iana.org/assignments/media-types/media-types.xhtml + */ + mediaType: string; + fileExtensions: string[]; + } + export interface FileHandler { + action: string; + accepts: FileHandlerAccept[]; + displayName: string; + } + + + /** + * Returns the following OS state for the given manifest id. + */ + export type getOsAppStateParameters = { + /** + * The id from the webapp's manifest file, commonly it's the url of the +site installing the webapp. See +https://web.dev/learn/pwa/web-app-manifest. + */ + manifestId: string; + } + export type getOsAppStateReturnValue = { + badgeCount: number; + fileHandlers: FileHandler[]; + } + } + /** * This domain is deprecated - use Runtime or Log instead. */ @@ -19329,6 +19561,7 @@ Error was thrown. "Animation.animationCanceled": Animation.animationCanceledPayload; "Animation.animationCreated": Animation.animationCreatedPayload; "Animation.animationStarted": Animation.animationStartedPayload; + "Animation.animationUpdated": Animation.animationUpdatedPayload; "Audits.issueAdded": Audits.issueAddedPayload; "Autofill.addressFormFilled": Autofill.addressFormFilledPayload; "BackgroundService.recordingStateChanged": BackgroundService.recordingStateChangedPayload; @@ -19392,6 +19625,7 @@ Error was thrown. "Network.webTransportClosed": Network.webTransportClosedPayload; "Network.requestWillBeSentExtraInfo": Network.requestWillBeSentExtraInfoPayload; "Network.responseReceivedExtraInfo": Network.responseReceivedExtraInfoPayload; + "Network.responseReceivedEarlyHints": Network.responseReceivedEarlyHintsPayload; "Network.trustTokenOperationDone": Network.trustTokenOperationDonePayload; "Network.subresourceWebBundleMetadataReceived": Network.subresourceWebBundleMetadataReceivedPayload; "Network.subresourceWebBundleMetadataError": Network.subresourceWebBundleMetadataErrorPayload; @@ -19694,6 +19928,8 @@ Error was thrown. "Emulation.setCPUThrottlingRate": Emulation.setCPUThrottlingRateParameters; "Emulation.setDefaultBackgroundColorOverride": Emulation.setDefaultBackgroundColorOverrideParameters; "Emulation.setDeviceMetricsOverride": Emulation.setDeviceMetricsOverrideParameters; + "Emulation.setDevicePostureOverride": Emulation.setDevicePostureOverrideParameters; + "Emulation.clearDevicePostureOverride": Emulation.clearDevicePostureOverrideParameters; "Emulation.setScrollbarsHidden": Emulation.setScrollbarsHiddenParameters; "Emulation.setDocumentCookieDisabled": Emulation.setDocumentCookieDisabledParameters; "Emulation.setEmitTouchEventsForMouse": Emulation.setEmitTouchEventsForMouseParameters; @@ -19950,6 +20186,7 @@ Error was thrown. "Storage.runBounceTrackingMitigations": Storage.runBounceTrackingMitigationsParameters; "Storage.setAttributionReportingLocalTestingMode": Storage.setAttributionReportingLocalTestingModeParameters; "Storage.setAttributionReportingTracking": Storage.setAttributionReportingTrackingParameters; + "Storage.sendPendingAttributionReports": Storage.sendPendingAttributionReportsParameters; "Storage.getRelatedWebsiteSets": Storage.getRelatedWebsiteSetsParameters; "SystemInfo.getInfo": SystemInfo.getInfoParameters; "SystemInfo.getFeatureState": SystemInfo.getFeatureStateParameters; @@ -20018,6 +20255,7 @@ Error was thrown. "FedCm.openUrl": FedCm.openUrlParameters; "FedCm.dismissDialog": FedCm.dismissDialogParameters; "FedCm.resetCooldown": FedCm.resetCooldownParameters; + "PWA.getOsAppState": PWA.getOsAppStateParameters; "Console.clearMessages": Console.clearMessagesParameters; "Console.disable": Console.disableParameters; "Console.enable": Console.enableParameters; @@ -20278,6 +20516,8 @@ Error was thrown. "Emulation.setCPUThrottlingRate": Emulation.setCPUThrottlingRateReturnValue; "Emulation.setDefaultBackgroundColorOverride": Emulation.setDefaultBackgroundColorOverrideReturnValue; "Emulation.setDeviceMetricsOverride": Emulation.setDeviceMetricsOverrideReturnValue; + "Emulation.setDevicePostureOverride": Emulation.setDevicePostureOverrideReturnValue; + "Emulation.clearDevicePostureOverride": Emulation.clearDevicePostureOverrideReturnValue; "Emulation.setScrollbarsHidden": Emulation.setScrollbarsHiddenReturnValue; "Emulation.setDocumentCookieDisabled": Emulation.setDocumentCookieDisabledReturnValue; "Emulation.setEmitTouchEventsForMouse": Emulation.setEmitTouchEventsForMouseReturnValue; @@ -20534,6 +20774,7 @@ Error was thrown. "Storage.runBounceTrackingMitigations": Storage.runBounceTrackingMitigationsReturnValue; "Storage.setAttributionReportingLocalTestingMode": Storage.setAttributionReportingLocalTestingModeReturnValue; "Storage.setAttributionReportingTracking": Storage.setAttributionReportingTrackingReturnValue; + "Storage.sendPendingAttributionReports": Storage.sendPendingAttributionReportsReturnValue; "Storage.getRelatedWebsiteSets": Storage.getRelatedWebsiteSetsReturnValue; "SystemInfo.getInfo": SystemInfo.getInfoReturnValue; "SystemInfo.getFeatureState": SystemInfo.getFeatureStateReturnValue; @@ -20602,6 +20843,7 @@ Error was thrown. "FedCm.openUrl": FedCm.openUrlReturnValue; "FedCm.dismissDialog": FedCm.dismissDialogReturnValue; "FedCm.resetCooldown": FedCm.resetCooldownReturnValue; + "PWA.getOsAppState": PWA.getOsAppStateReturnValue; "Console.clearMessages": Console.clearMessagesReturnValue; "Console.disable": Console.disableReturnValue; "Console.enable": Console.enableReturnValue; diff --git a/packages/playwright-core/src/server/deviceDescriptorsSource.json b/packages/playwright-core/src/server/deviceDescriptorsSource.json index 541d163b8b..544e475e93 100644 --- a/packages/playwright-core/src/server/deviceDescriptorsSource.json +++ b/packages/playwright-core/src/server/deviceDescriptorsSource.json @@ -110,7 +110,7 @@ "defaultBrowserType": "webkit" }, "Galaxy S5": { - "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 360, "height": 640 @@ -121,7 +121,7 @@ "defaultBrowserType": "chromium" }, "Galaxy S5 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 640, "height": 360 @@ -132,7 +132,7 @@ "defaultBrowserType": "chromium" }, "Galaxy S8": { - "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 360, "height": 740 @@ -143,7 +143,7 @@ "defaultBrowserType": "chromium" }, "Galaxy S8 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 740, "height": 360 @@ -154,7 +154,7 @@ "defaultBrowserType": "chromium" }, "Galaxy S9+": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 320, "height": 658 @@ -165,7 +165,7 @@ "defaultBrowserType": "chromium" }, "Galaxy S9+ landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 658, "height": 320 @@ -176,7 +176,7 @@ "defaultBrowserType": "chromium" }, "Galaxy Tab S4": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "viewport": { "width": 712, "height": 1138 @@ -187,7 +187,7 @@ "defaultBrowserType": "chromium" }, "Galaxy Tab S4 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "viewport": { "width": 1138, "height": 712 @@ -978,7 +978,7 @@ "defaultBrowserType": "webkit" }, "LG Optimus L70": { - "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 384, "height": 640 @@ -989,7 +989,7 @@ "defaultBrowserType": "chromium" }, "LG Optimus L70 landscape": { - "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 640, "height": 384 @@ -1000,7 +1000,7 @@ "defaultBrowserType": "chromium" }, "Microsoft Lumia 550": { - "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36 Edge/14.14263", + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36 Edge/14.14263", "viewport": { "width": 640, "height": 360 @@ -1011,7 +1011,7 @@ "defaultBrowserType": "chromium" }, "Microsoft Lumia 550 landscape": { - "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36 Edge/14.14263", + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36 Edge/14.14263", "viewport": { "width": 360, "height": 640 @@ -1022,7 +1022,7 @@ "defaultBrowserType": "chromium" }, "Microsoft Lumia 950": { - "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36 Edge/14.14263", + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36 Edge/14.14263", "viewport": { "width": 360, "height": 640 @@ -1033,7 +1033,7 @@ "defaultBrowserType": "chromium" }, "Microsoft Lumia 950 landscape": { - "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36 Edge/14.14263", + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36 Edge/14.14263", "viewport": { "width": 640, "height": 360 @@ -1044,7 +1044,7 @@ "defaultBrowserType": "chromium" }, "Nexus 10": { - "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "viewport": { "width": 800, "height": 1280 @@ -1055,7 +1055,7 @@ "defaultBrowserType": "chromium" }, "Nexus 10 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "viewport": { "width": 1280, "height": 800 @@ -1066,7 +1066,7 @@ "defaultBrowserType": "chromium" }, "Nexus 4": { - "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 384, "height": 640 @@ -1077,7 +1077,7 @@ "defaultBrowserType": "chromium" }, "Nexus 4 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 640, "height": 384 @@ -1088,7 +1088,7 @@ "defaultBrowserType": "chromium" }, "Nexus 5": { - "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 360, "height": 640 @@ -1099,7 +1099,7 @@ "defaultBrowserType": "chromium" }, "Nexus 5 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 640, "height": 360 @@ -1110,7 +1110,7 @@ "defaultBrowserType": "chromium" }, "Nexus 5X": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 412, "height": 732 @@ -1121,7 +1121,7 @@ "defaultBrowserType": "chromium" }, "Nexus 5X landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 732, "height": 412 @@ -1132,7 +1132,7 @@ "defaultBrowserType": "chromium" }, "Nexus 6": { - "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 412, "height": 732 @@ -1143,7 +1143,7 @@ "defaultBrowserType": "chromium" }, "Nexus 6 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 732, "height": 412 @@ -1154,7 +1154,7 @@ "defaultBrowserType": "chromium" }, "Nexus 6P": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 412, "height": 732 @@ -1165,7 +1165,7 @@ "defaultBrowserType": "chromium" }, "Nexus 6P landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 732, "height": 412 @@ -1176,7 +1176,7 @@ "defaultBrowserType": "chromium" }, "Nexus 7": { - "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "viewport": { "width": 600, "height": 960 @@ -1187,7 +1187,7 @@ "defaultBrowserType": "chromium" }, "Nexus 7 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "viewport": { "width": 960, "height": 600 @@ -1242,7 +1242,7 @@ "defaultBrowserType": "webkit" }, "Pixel 2": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 411, "height": 731 @@ -1253,7 +1253,7 @@ "defaultBrowserType": "chromium" }, "Pixel 2 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 731, "height": 411 @@ -1264,7 +1264,7 @@ "defaultBrowserType": "chromium" }, "Pixel 2 XL": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 411, "height": 823 @@ -1275,7 +1275,7 @@ "defaultBrowserType": "chromium" }, "Pixel 2 XL landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 823, "height": 411 @@ -1286,7 +1286,7 @@ "defaultBrowserType": "chromium" }, "Pixel 3": { - "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 393, "height": 786 @@ -1297,7 +1297,7 @@ "defaultBrowserType": "chromium" }, "Pixel 3 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 786, "height": 393 @@ -1308,7 +1308,7 @@ "defaultBrowserType": "chromium" }, "Pixel 4": { - "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 353, "height": 745 @@ -1319,7 +1319,7 @@ "defaultBrowserType": "chromium" }, "Pixel 4 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 745, "height": 353 @@ -1330,7 +1330,7 @@ "defaultBrowserType": "chromium" }, "Pixel 4a (5G)": { - "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "screen": { "width": 412, "height": 892 @@ -1345,7 +1345,7 @@ "defaultBrowserType": "chromium" }, "Pixel 4a (5G) landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "screen": { "height": 892, "width": 412 @@ -1360,7 +1360,7 @@ "defaultBrowserType": "chromium" }, "Pixel 5": { - "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "screen": { "width": 393, "height": 851 @@ -1375,7 +1375,7 @@ "defaultBrowserType": "chromium" }, "Pixel 5 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "screen": { "width": 851, "height": 393 @@ -1390,7 +1390,7 @@ "defaultBrowserType": "chromium" }, "Pixel 7": { - "userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "screen": { "width": 412, "height": 915 @@ -1405,7 +1405,7 @@ "defaultBrowserType": "chromium" }, "Pixel 7 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "screen": { "width": 915, "height": 412 @@ -1420,7 +1420,7 @@ "defaultBrowserType": "chromium" }, "Moto G4": { - "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 360, "height": 640 @@ -1431,7 +1431,7 @@ "defaultBrowserType": "chromium" }, "Moto G4 landscape": { - "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Mobile Safari/537.36", + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Mobile Safari/537.36", "viewport": { "width": 640, "height": 360 @@ -1442,7 +1442,7 @@ "defaultBrowserType": "chromium" }, "Desktop Chrome HiDPI": { - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "screen": { "width": 1792, "height": 1120 @@ -1457,7 +1457,7 @@ "defaultBrowserType": "chromium" }, "Desktop Edge HiDPI": { - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36 Edg/124.0.6367.60", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36 Edg/125.0.6422.4", "screen": { "width": 1792, "height": 1120 @@ -1502,7 +1502,7 @@ "defaultBrowserType": "webkit" }, "Desktop Chrome": { - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36", "screen": { "width": 1920, "height": 1080 @@ -1517,7 +1517,7 @@ "defaultBrowserType": "chromium" }, "Desktop Edge": { - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36 Edg/124.0.6367.60", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.4 Safari/537.36 Edg/125.0.6422.4", "screen": { "width": 1920, "height": 1080 diff --git a/packages/playwright-core/types/protocol.d.ts b/packages/playwright-core/types/protocol.d.ts index 0ea475d12e..6d8a2559db 100644 --- a/packages/playwright-core/types/protocol.d.ts +++ b/packages/playwright-core/types/protocol.d.ts @@ -525,6 +525,15 @@ percentage [0 - 100] for scroll driven animations */ animation: Animation; } + /** + * Event for animation that has been updated. + */ + export type animationUpdatedPayload = { + /** + * Animation that was updated. + */ + animation: Animation; + } /** * Disables animation domain notifications. @@ -917,7 +926,7 @@ Should be updated alongside RequestIdTokenStatus in third_party/blink/public/mojom/devtools/inspector_issue.mojom to include all cases except for success. */ - export type FederatedAuthRequestIssueReason = "ShouldEmbargo"|"TooManyRequests"|"WellKnownHttpNotFound"|"WellKnownNoResponse"|"WellKnownInvalidResponse"|"WellKnownListEmpty"|"WellKnownInvalidContentType"|"ConfigNotInWellKnown"|"WellKnownTooBig"|"ConfigHttpNotFound"|"ConfigNoResponse"|"ConfigInvalidResponse"|"ConfigInvalidContentType"|"ClientMetadataHttpNotFound"|"ClientMetadataNoResponse"|"ClientMetadataInvalidResponse"|"ClientMetadataInvalidContentType"|"DisabledInSettings"|"ErrorFetchingSignin"|"InvalidSigninResponse"|"AccountsHttpNotFound"|"AccountsNoResponse"|"AccountsInvalidResponse"|"AccountsListEmpty"|"AccountsInvalidContentType"|"IdTokenHttpNotFound"|"IdTokenNoResponse"|"IdTokenInvalidResponse"|"IdTokenIdpErrorResponse"|"IdTokenCrossSiteIdpErrorResponse"|"IdTokenInvalidRequest"|"IdTokenInvalidContentType"|"ErrorIdToken"|"Canceled"|"RpPageNotVisible"|"SilentMediationFailure"|"ThirdPartyCookiesBlocked"|"NotSignedInWithIdp"; + export type FederatedAuthRequestIssueReason = "ShouldEmbargo"|"TooManyRequests"|"WellKnownHttpNotFound"|"WellKnownNoResponse"|"WellKnownInvalidResponse"|"WellKnownListEmpty"|"WellKnownInvalidContentType"|"ConfigNotInWellKnown"|"WellKnownTooBig"|"ConfigHttpNotFound"|"ConfigNoResponse"|"ConfigInvalidResponse"|"ConfigInvalidContentType"|"ClientMetadataHttpNotFound"|"ClientMetadataNoResponse"|"ClientMetadataInvalidResponse"|"ClientMetadataInvalidContentType"|"DisabledInSettings"|"ErrorFetchingSignin"|"InvalidSigninResponse"|"AccountsHttpNotFound"|"AccountsNoResponse"|"AccountsInvalidResponse"|"AccountsListEmpty"|"AccountsInvalidContentType"|"IdTokenHttpNotFound"|"IdTokenNoResponse"|"IdTokenInvalidResponse"|"IdTokenIdpErrorResponse"|"IdTokenCrossSiteIdpErrorResponse"|"IdTokenInvalidRequest"|"IdTokenInvalidContentType"|"ErrorIdToken"|"Canceled"|"RpPageNotVisible"|"SilentMediationFailure"|"ThirdPartyCookiesBlocked"|"NotSignedInWithIdp"|"MissingTransientUserActivation"|"ReplacedByButtonMode"; export interface FederatedAuthUserInfoRequestIssueDetails { federatedAuthUserInfoRequestIssueReason: FederatedAuthUserInfoRequestIssueReason; } @@ -3441,7 +3450,7 @@ front-end. /** * Pseudo element type. */ - export type PseudoType = "first-line"|"first-letter"|"before"|"after"|"marker"|"backdrop"|"selection"|"target-text"|"spelling-error"|"grammar-error"|"highlight"|"first-line-inherited"|"scrollbar"|"scrollbar-thumb"|"scrollbar-button"|"scrollbar-track"|"scrollbar-track-piece"|"scrollbar-corner"|"resizer"|"input-list-button"|"view-transition"|"view-transition-group"|"view-transition-image-pair"|"view-transition-old"|"view-transition-new"; + export type PseudoType = "first-line"|"first-letter"|"before"|"after"|"marker"|"backdrop"|"selection"|"target-text"|"spelling-error"|"grammar-error"|"highlight"|"first-line-inherited"|"scroll-marker"|"scroll-markers"|"scrollbar"|"scrollbar-thumb"|"scrollbar-button"|"scrollbar-track"|"scrollbar-track-piece"|"scrollbar-corner"|"resizer"|"input-list-button"|"view-transition"|"view-transition-group"|"view-transition-image-pair"|"view-transition-old"|"view-transition-new"; /** * Shadow root type. */ @@ -5973,11 +5982,31 @@ is turned-off. /** * If set, the posture of a foldable device. If not set the posture is set to continuous. +Deprecated, use Emulation.setDevicePostureOverride. */ devicePosture?: DevicePosture; } export type setDeviceMetricsOverrideReturnValue = { } + /** + * Start reporting the given posture value to the Device Posture API. +This override can also be set in setDeviceMetricsOverride(). + */ + export type setDevicePostureOverrideParameters = { + posture: DevicePosture; + } + export type setDevicePostureOverrideReturnValue = { + } + /** + * Clears a device posture override set with either setDeviceMetricsOverride() +or setDevicePostureOverride() and starts using posture information from the +platform again. +Does nothing if no override is set. + */ + export type clearDevicePostureOverrideParameters = { + } + export type clearDevicePostureOverrideReturnValue = { + } export type setScrollbarsHiddenParameters = { /** * Whether scrollbars should be always hidden. @@ -8351,6 +8380,10 @@ records. * Specifies that the request was served from the prefetch cache. */ fromPrefetchCache?: boolean; + /** + * Specifies that the request was served from the prefetch cache. + */ + fromEarlyHints?: boolean; /** * Information about how Service Worker Static Router was used. */ @@ -8614,6 +8647,10 @@ corresponding reason. A cookie could only have at most one exemption reason. * The reason the cookie was exempted. */ exemptionReason: CookieExemptionReason; + /** + * The string representing this individual cookie as it would appear in the header. + */ + cookieLine: string; /** * The cookie object representing the cookie. */ @@ -9537,6 +9574,21 @@ the response with the corresponding reason. */ exemptedCookies?: ExemptedSetCookieWithReason[]; } + /** + * Fired when 103 Early Hints headers is received in addition to the common response. +Not every responseReceived event will have an responseReceivedEarlyHints fired. +Only one responseReceivedEarlyHints may be fired for eached responseReceived event. + */ + export type responseReceivedEarlyHintsPayload = { + /** + * Request identifier. Used to match this information to another responseReceived event. + */ + requestId: RequestId; + /** + * Raw response headers as they were received over the wire. + */ + headers: Headers; + } /** * Fired exactly once for each Trust Token operation. Depending on the type of the operation and whether the operation succeeded or @@ -11573,6 +11625,125 @@ Example URLs: http://www.google.com/file.html -> "google.com" */ eager?: boolean; } + export interface FileFilter { + name?: string; + accepts?: string[]; + } + export interface FileHandler { + action: string; + name: string; + icons?: ImageResource[]; + /** + * Mimic a map, name is the key, accepts is the value. + */ + accepts?: FileFilter[]; + /** + * Won't repeat the enums, using string for easy comparison. Same as the +other enums below. + */ + launchType: string; + } + /** + * The image definition used in both icon and screenshot. + */ + export interface ImageResource { + /** + * The src field in the definition, but changing to url in favor of +consistency. + */ + url: string; + sizes?: string; + type?: string; + } + export interface LaunchHandler { + clientMode: string; + } + export interface ProtocolHandler { + protocol: string; + url: string; + } + export interface RelatedApplication { + id?: string; + url: string; + } + export interface ScopeExtension { + /** + * Instead of using tuple, this field always returns the serialized string +for easy understanding and comparison. + */ + origin: string; + hasOriginWildcard: boolean; + } + export interface Screenshot { + image: ImageResource; + formFactor: string; + label?: string; + } + export interface ShareTarget { + action: string; + method: string; + enctype: string; + /** + * Embed the ShareTargetParams + */ + title?: string; + text?: string; + url?: string; + files?: FileFilter[]; + } + export interface Shortcut { + name: string; + url: string; + } + export interface WebAppManifest { + backgroundColor?: string; + /** + * The extra description provided by the manifest. + */ + description?: string; + dir?: string; + display?: string; + /** + * The overrided display mode controlled by the user. + */ + displayOverrides?: string[]; + /** + * The handlers to open files. + */ + fileHandlers?: FileHandler[]; + icons?: ImageResource[]; + id?: string; + lang?: string; + /** + * TODO(crbug.com/1231886): This field is non-standard and part of a Chrome +experiment. See: +https://github.com/WICG/web-app-launch/blob/main/launch_handler.md + */ + launchHandler?: LaunchHandler; + name?: string; + orientation?: string; + preferRelatedApplications?: boolean; + /** + * The handlers to open protocols. + */ + protocolHandlers?: ProtocolHandler[]; + relatedApplications?: RelatedApplication[]; + scope?: string; + /** + * Non-standard, see +https://github.com/WICG/manifest-incubations/blob/gh-pages/scope_extensions-explainer.md + */ + scopeExtensions?: ScopeExtension[]; + /** + * The screenshots used by chromium. + */ + screenshots?: Screenshot[]; + shareTarget?: ShareTarget; + shortName?: string; + shortcuts?: Shortcut[]; + startUrl?: string; + themeColor?: string; + } /** * Enum of possible auto-response for permission / prompt dialogs. */ @@ -12158,7 +12329,15 @@ option, use with caution. } export type enableReturnValue = { } + /** + * Gets the processed manifest for this current document. + This API always waits for the manifest to be loaded. + If manifestId is provided, and it does not match the manifest of the + current document, this API errors out. + If there isn’t a loaded page, this API errors out immediately. + */ export type getAppManifestParameters = { + manifestId?: string; } export type getAppManifestReturnValue = { /** @@ -12171,9 +12350,10 @@ option, use with caution. */ data?: string; /** - * Parsed manifest properties + * Parsed manifest properties. Deprecated, use manifest instead. */ parsed?: AppManifestParsedProperties; + manifest: WebAppManifest; } export type getInstallabilityErrorsParameters = { } @@ -13778,7 +13958,7 @@ int debugKey?: UnsignedInt64AsBase10; triggerDataMatching: AttributionReportingTriggerDataMatching; } - export type AttributionReportingSourceRegistrationResult = "success"|"internalError"|"insufficientSourceCapacity"|"insufficientUniqueDestinationCapacity"|"excessiveReportingOrigins"|"prohibitedByBrowserPolicy"|"successNoised"|"destinationReportingLimitReached"|"destinationGlobalLimitReached"|"destinationBothLimitsReached"|"reportingOriginsPerSiteLimitReached"|"exceedsMaxChannelCapacity"; + export type AttributionReportingSourceRegistrationResult = "success"|"internalError"|"insufficientSourceCapacity"|"insufficientUniqueDestinationCapacity"|"excessiveReportingOrigins"|"prohibitedByBrowserPolicy"|"successNoised"|"destinationReportingLimitReached"|"destinationGlobalLimitReached"|"destinationBothLimitsReached"|"reportingOriginsPerSiteLimitReached"|"exceedsMaxChannelCapacity"|"exceedsMaxTriggerStateCardinality"; export type AttributionReportingSourceRegistrationTimeConfig = "include"|"exclude"; export interface AttributionReportingAggregatableValueDictEntry { key: string; @@ -14400,6 +14580,18 @@ interestGroupAuctionNetworkRequestCreated. } export type setAttributionReportingTrackingReturnValue = { } + /** + * Sends all pending Attribution Reports immediately, regardless of their +scheduled report time. + */ + export type sendPendingAttributionReportsParameters = { + } + export type sendPendingAttributionReportsReturnValue = { + /** + * The number of reports that were sent. + */ + numSent: number; + } /** * Returns the effective Related Website Sets in use by this profile for the browser session. The effective Related Website Sets will not change during a browser session. @@ -16691,6 +16883,46 @@ a dialog even if one was recently dismissed by the user. } } + /** + * This domain allows interacting with the browser to control PWAs. + */ + export module PWA { + /** + * The following types are the replica of +https://crsrc.org/c/chrome/browser/web_applications/proto/web_app_os_integration_state.proto;drc=9910d3be894c8f142c977ba1023f30a656bc13fc;l=67 + */ + export interface FileHandlerAccept { + /** + * New name of the mimetype according to +https://www.iana.org/assignments/media-types/media-types.xhtml + */ + mediaType: string; + fileExtensions: string[]; + } + export interface FileHandler { + action: string; + accepts: FileHandlerAccept[]; + displayName: string; + } + + + /** + * Returns the following OS state for the given manifest id. + */ + export type getOsAppStateParameters = { + /** + * The id from the webapp's manifest file, commonly it's the url of the +site installing the webapp. See +https://web.dev/learn/pwa/web-app-manifest. + */ + manifestId: string; + } + export type getOsAppStateReturnValue = { + badgeCount: number; + fileHandlers: FileHandler[]; + } + } + /** * This domain is deprecated - use Runtime or Log instead. */ @@ -19329,6 +19561,7 @@ Error was thrown. "Animation.animationCanceled": Animation.animationCanceledPayload; "Animation.animationCreated": Animation.animationCreatedPayload; "Animation.animationStarted": Animation.animationStartedPayload; + "Animation.animationUpdated": Animation.animationUpdatedPayload; "Audits.issueAdded": Audits.issueAddedPayload; "Autofill.addressFormFilled": Autofill.addressFormFilledPayload; "BackgroundService.recordingStateChanged": BackgroundService.recordingStateChangedPayload; @@ -19392,6 +19625,7 @@ Error was thrown. "Network.webTransportClosed": Network.webTransportClosedPayload; "Network.requestWillBeSentExtraInfo": Network.requestWillBeSentExtraInfoPayload; "Network.responseReceivedExtraInfo": Network.responseReceivedExtraInfoPayload; + "Network.responseReceivedEarlyHints": Network.responseReceivedEarlyHintsPayload; "Network.trustTokenOperationDone": Network.trustTokenOperationDonePayload; "Network.subresourceWebBundleMetadataReceived": Network.subresourceWebBundleMetadataReceivedPayload; "Network.subresourceWebBundleMetadataError": Network.subresourceWebBundleMetadataErrorPayload; @@ -19694,6 +19928,8 @@ Error was thrown. "Emulation.setCPUThrottlingRate": Emulation.setCPUThrottlingRateParameters; "Emulation.setDefaultBackgroundColorOverride": Emulation.setDefaultBackgroundColorOverrideParameters; "Emulation.setDeviceMetricsOverride": Emulation.setDeviceMetricsOverrideParameters; + "Emulation.setDevicePostureOverride": Emulation.setDevicePostureOverrideParameters; + "Emulation.clearDevicePostureOverride": Emulation.clearDevicePostureOverrideParameters; "Emulation.setScrollbarsHidden": Emulation.setScrollbarsHiddenParameters; "Emulation.setDocumentCookieDisabled": Emulation.setDocumentCookieDisabledParameters; "Emulation.setEmitTouchEventsForMouse": Emulation.setEmitTouchEventsForMouseParameters; @@ -19950,6 +20186,7 @@ Error was thrown. "Storage.runBounceTrackingMitigations": Storage.runBounceTrackingMitigationsParameters; "Storage.setAttributionReportingLocalTestingMode": Storage.setAttributionReportingLocalTestingModeParameters; "Storage.setAttributionReportingTracking": Storage.setAttributionReportingTrackingParameters; + "Storage.sendPendingAttributionReports": Storage.sendPendingAttributionReportsParameters; "Storage.getRelatedWebsiteSets": Storage.getRelatedWebsiteSetsParameters; "SystemInfo.getInfo": SystemInfo.getInfoParameters; "SystemInfo.getFeatureState": SystemInfo.getFeatureStateParameters; @@ -20018,6 +20255,7 @@ Error was thrown. "FedCm.openUrl": FedCm.openUrlParameters; "FedCm.dismissDialog": FedCm.dismissDialogParameters; "FedCm.resetCooldown": FedCm.resetCooldownParameters; + "PWA.getOsAppState": PWA.getOsAppStateParameters; "Console.clearMessages": Console.clearMessagesParameters; "Console.disable": Console.disableParameters; "Console.enable": Console.enableParameters; @@ -20278,6 +20516,8 @@ Error was thrown. "Emulation.setCPUThrottlingRate": Emulation.setCPUThrottlingRateReturnValue; "Emulation.setDefaultBackgroundColorOverride": Emulation.setDefaultBackgroundColorOverrideReturnValue; "Emulation.setDeviceMetricsOverride": Emulation.setDeviceMetricsOverrideReturnValue; + "Emulation.setDevicePostureOverride": Emulation.setDevicePostureOverrideReturnValue; + "Emulation.clearDevicePostureOverride": Emulation.clearDevicePostureOverrideReturnValue; "Emulation.setScrollbarsHidden": Emulation.setScrollbarsHiddenReturnValue; "Emulation.setDocumentCookieDisabled": Emulation.setDocumentCookieDisabledReturnValue; "Emulation.setEmitTouchEventsForMouse": Emulation.setEmitTouchEventsForMouseReturnValue; @@ -20534,6 +20774,7 @@ Error was thrown. "Storage.runBounceTrackingMitigations": Storage.runBounceTrackingMitigationsReturnValue; "Storage.setAttributionReportingLocalTestingMode": Storage.setAttributionReportingLocalTestingModeReturnValue; "Storage.setAttributionReportingTracking": Storage.setAttributionReportingTrackingReturnValue; + "Storage.sendPendingAttributionReports": Storage.sendPendingAttributionReportsReturnValue; "Storage.getRelatedWebsiteSets": Storage.getRelatedWebsiteSetsReturnValue; "SystemInfo.getInfo": SystemInfo.getInfoReturnValue; "SystemInfo.getFeatureState": SystemInfo.getFeatureStateReturnValue; @@ -20602,6 +20843,7 @@ Error was thrown. "FedCm.openUrl": FedCm.openUrlReturnValue; "FedCm.dismissDialog": FedCm.dismissDialogReturnValue; "FedCm.resetCooldown": FedCm.resetCooldownReturnValue; + "PWA.getOsAppState": PWA.getOsAppStateReturnValue; "Console.clearMessages": Console.clearMessagesReturnValue; "Console.disable": Console.disableReturnValue; "Console.enable": Console.enableReturnValue; diff --git a/tests/playwright-test/reporter-html.spec.ts b/tests/playwright-test/reporter-html.spec.ts index f8a8215960..7ea9cbfb80 100644 --- a/tests/playwright-test/reporter-html.spec.ts +++ b/tests/playwright-test/reporter-html.spec.ts @@ -762,14 +762,13 @@ for (const useIntermediateMergeReport of [false, true] as const) { await page.getByRole('link', { name: 'passing' }).click(); const expectedAttachments = [ - ['screenshot', 'screenshot.png', 'f6aa9785bc9c7b8fd40c3f6ede6f59112a939527.png'], + ['screenshot', 'screenshot.png', 'd606c7545cd71c2b0c27d9f99edbad4fa39f1174.png'], ['some-pdf', 'some-pdf.pdf', '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33.pdf'], ['madeup-contentType', 'madeup-contentType.dat', '62cdb7020ff920e5aa642c3d4066950dd1f01f4d.dat'], ['screenshot-that-already-has-an-extension-with-madeup.png', 'screenshot-that-already-has-an-extension-with-madeup.png', '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8.png'], ['screenshot-that-already-has-an-extension-with-correct-contentType.png', 'screenshot-that-already-has-an-extension-with-correct-contentType.png', '84a516841ba77a5b4648de2cd0dfcb30ea46dbb4.png'], ['example.ext with spaces', 'example.ext with spaces', 'e9d71f5ee7c92d6dc9e92ffdad17b8bd49418f98.ext-with-spaces'], ]; - for (const [visibleAttachmentName, downloadFileName, sha1] of expectedAttachments) { await test.step(`should download ${visibleAttachmentName}`, async () => { const downloadPromise = page.waitForEvent('download'); @@ -782,7 +781,7 @@ for (const useIntermediateMergeReport of [false, true] as const) { const files = await fs.promises.readdir(path.join(testInfo.outputPath('playwright-report'), 'data')); expect(new Set(files)).toEqual(new Set([ - 'f6aa9785bc9c7b8fd40c3f6ede6f59112a939527.png', // screenshot + 'd606c7545cd71c2b0c27d9f99edbad4fa39f1174.png', // screenshot '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33.pdf', // some-pdf '62cdb7020ff920e5aa642c3d4066950dd1f01f4d.dat', // madeup-contentType '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8.png', // screenshot-that-already-has-an-extension-with-madeup.png