Skip to content

Commit 6f3cce9

Browse files
authored
feat(webkit): match Safari for device orientation, motion and push (#41660)
1 parent 39a418a commit 6f3cce9

4 files changed

Lines changed: 18 additions & 15 deletions

File tree

packages/playwright-core/src/server/webkit/wkPage.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,13 @@ export class WKPage implements PageDelegate {
215215
}
216216
if (this._page.fileChooserIntercepted())
217217
promises.push(session.send('Page.setInterceptFileChooserDialog', { enabled: true }));
218-
promises.push(session.send('Page.overrideSetting', { setting: 'DeviceOrientationEventEnabled', value: contextOptions.isMobile }));
219218
promises.push(session.send('Page.overrideSetting', { setting: 'FullScreenEnabled', value: !contextOptions.isMobile }));
220219
promises.push(session.send('Page.overrideSetting', { setting: 'NotificationsEnabled', value: !contextOptions.isMobile }));
221220
promises.push(session.send('Page.overrideSetting', { setting: 'PointerLockEnabled', value: !contextOptions.isMobile }));
222221
promises.push(session.send('Page.overrideSetting', { setting: 'InputTypeMonthEnabled', value: contextOptions.isMobile }));
223222
promises.push(session.send('Page.overrideSetting', { setting: 'InputTypeWeekEnabled', value: contextOptions.isMobile }));
224223
promises.push(session.send('Page.overrideSetting', { setting: 'FixedBackgroundsPaintRelativeToDocument', value: contextOptions.isMobile }));
224+
promises.push(session.send('Page.overrideSetting', { setting: 'PushAPIEnabled', value: !contextOptions.isMobile }));
225225
await Promise.all(promises);
226226
}
227227

@@ -795,11 +795,8 @@ export class WKPage implements PageDelegate {
795795

796796
private _calculateBootstrapScript(): string {
797797
const scripts: string[] = [];
798-
if (!this._page.browserContext._options.isMobile) {
798+
if (!this._page.browserContext._options.isMobile)
799799
scripts.push('delete window.orientation');
800-
scripts.push('delete window.ondevicemotion');
801-
scripts.push('delete window.ondeviceorientation');
802-
}
803800
scripts.push('if (!window.safari) window.safari = { pushNotification: { toString() { return "[object SafariRemoteNotification]"; } } };');
804801
scripts.push('if (!window.GestureEvent) window.GestureEvent = function GestureEvent() {};');
805802
scripts.push(this._publicKeyCredentialScript());

tests/assets/modernizr/mobile-safari-18.json renamed to tests/assets/modernizr/mobile-safari-26.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"ambientlight": false,
1818
"applicationcache": false,
1919
"audio": {
20-
"ogg": "",
20+
"ogg": "probably",
2121
"mp3": "probably",
2222
"opus": "probably",
2323
"wav": "probably",
@@ -103,7 +103,7 @@
103103
"flexwrap": true,
104104
"focusvisible": true,
105105
"focuswithin": true,
106-
"fontdisplay": false,
106+
"fontdisplay": true,
107107
"fontface": true,
108108
"generatedcontent": true,
109109
"cssgradients": true,
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"ambientlight": false,
1818
"applicationcache": false,
1919
"audio": {
20-
"ogg": "",
20+
"ogg": "probably",
2121
"mp3": "probably",
2222
"opus": "probably",
2323
"wav": "probably",
@@ -103,7 +103,7 @@
103103
"flexwrap": true,
104104
"focusvisible": true,
105105
"focuswithin": true,
106-
"fontdisplay": false,
106+
"fontdisplay": true,
107107
"fontface": true,
108108
"generatedcontent": true,
109109
"cssgradients": true,
@@ -342,7 +342,7 @@
342342
"webm": "probably",
343343
"vp9": "probably",
344344
"hls": "probably",
345-
"av1": ""
345+
"av1": "probably"
346346
},
347347
"videocrossorigin": true,
348348
"videoloop": true,

tests/library/modernizr.spec.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@ it('Safari Desktop', async ({ browser, browserName, platform, httpsServer, chann
4040
deviceScaleFactor: 2,
4141
ignoreHTTPSErrors: true,
4242
});
43-
const { actual, expected } = await checkFeatures('safari-18', context, httpsServer);
43+
const { actual, expected } = await checkFeatures('safari-26', context, httpsServer);
4444

45-
expected.pushmanager = false;
46-
expected.devicemotion2 = false;
47-
expected.deviceorientation3 = false;
45+
// Shipping Safari exposes `font-display` as a settable CSS property (element.style.fontDisplay === ''),
46+
// but open-source WebKit keeps it a @font-face descriptor only, so it is undefined here. No runtime
47+
// flag bridges the gap, hence the override.
48+
expected.fontdisplay = false;
4849

4950
delete expected.webglextensions;
5051
delete actual.webglextensions;
@@ -96,7 +97,7 @@ it('Mobile Safari', async ({ playwright, browser, browserName, platform, httpsSe
9697
...iPhone,
9798
ignoreHTTPSErrors: true,
9899
});
99-
const { actual, expected } = await checkFeatures('mobile-safari-18', context, httpsServer);
100+
const { actual, expected } = await checkFeatures('mobile-safari-26', context, httpsServer);
100101

101102
{
102103
// All platforms.
@@ -108,6 +109,11 @@ it('Mobile Safari', async ({ playwright, browser, browserName, platform, httpsSe
108109
expected.mediasource = true;
109110
expected.scrolltooptions = false;
110111

112+
// Shipping Safari exposes `font-display` as a settable CSS property (element.style.fontDisplay === ''),
113+
// but open-source WebKit keeps it a @font-face descriptor only, so it is undefined here. No runtime
114+
// flag bridges the gap, hence the override.
115+
expected.fontdisplay = false;
116+
111117
delete expected.webglextensions;
112118
delete actual.webglextensions;
113119
expected.audio = !!expected.audio;

0 commit comments

Comments
 (0)