feat(webkit): roll to r2083 & have dedicated macOS 15 builds

This commit is contained in:
Max Schmitt 2024-09-26 18:53:21 +02:00
parent b6783bb18b
commit 74af249c38
6 changed files with 36 additions and 11 deletions

View file

@ -50,10 +50,15 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
# Intel: macos-13, macos-14-large # Intel: macos-13, macos-14-large, macos-15-large
# Arm64: macos-13-xlarge, macos-14 # Arm64: macos-13-xlarge, macos-14 macos-15
os: [macos-13, macos-13-xlarge, macos-14-large, macos-14] os: [macos-13, macos-13-xlarge, macos-14-large, macos-14]
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
include:
- os: macos-15-large
browser: webkit
- os: macos-15
browser: webkit
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4

View file

@ -27,7 +27,7 @@
}, },
{ {
"name": "webkit", "name": "webkit",
"revision": "2082", "revision": "2083",
"installByDefault": true, "installByDefault": true,
"revisionOverrides": { "revisionOverrides": {
"mac10.14": "1446", "mac10.14": "1446",

View file

@ -100,6 +100,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip', 'mac13-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
'mac14': 'builds/chromium/%s/chromium-mac.zip', 'mac14': 'builds/chromium/%s/chromium-mac.zip',
'mac14-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip', 'mac14-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
'mac15': 'builds/chromium/%s/chromium-mac.zip',
'mac15-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
'win64': 'builds/chromium/%s/chromium-win64.zip', 'win64': 'builds/chromium/%s/chromium-win64.zip',
}, },
'chromium-tip-of-tree': { 'chromium-tip-of-tree': {
@ -127,6 +129,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip', 'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip', 'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
'mac15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip', 'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip',
}, },
'firefox': { 'firefox': {
@ -154,6 +158,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', 'mac13-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
'mac14': 'builds/firefox/%s/firefox-mac.zip', 'mac14': 'builds/firefox/%s/firefox-mac.zip',
'mac14-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', 'mac14-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
'mac15': 'builds/firefox/%s/firefox-mac.zip',
'mac15-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
'win64': 'builds/firefox/%s/firefox-win64.zip', 'win64': 'builds/firefox/%s/firefox-win64.zip',
}, },
'firefox-beta': { 'firefox-beta': {
@ -181,6 +187,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', 'mac13-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
'mac14': 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac14': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
'mac14-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', 'mac14-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
'mac15': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
'mac15-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
'win64': 'builds/firefox-beta/%s/firefox-beta-win64.zip', 'win64': 'builds/firefox-beta/%s/firefox-beta-win64.zip',
}, },
'webkit': { 'webkit': {
@ -208,6 +216,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/webkit/%s/webkit-mac-13-arm64.zip', 'mac13-arm64': 'builds/webkit/%s/webkit-mac-13-arm64.zip',
'mac14': 'builds/webkit/%s/webkit-mac-14.zip', 'mac14': 'builds/webkit/%s/webkit-mac-14.zip',
'mac14-arm64': 'builds/webkit/%s/webkit-mac-14-arm64.zip', 'mac14-arm64': 'builds/webkit/%s/webkit-mac-14-arm64.zip',
'mac15': 'builds/webkit/%s/webkit-mac-15.zip',
'mac15-arm64': 'builds/webkit/%s/webkit-mac-15-arm64.zip',
'win64': 'builds/webkit/%s/webkit-win64.zip', 'win64': 'builds/webkit/%s/webkit-win64.zip',
}, },
'ffmpeg': { 'ffmpeg': {
@ -235,6 +245,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', 'mac13-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
'mac14': 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac14': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
'mac14-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', 'mac14-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
'mac15': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
'mac15-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
'win64': 'builds/ffmpeg/%s/ffmpeg-win64.zip', 'win64': 'builds/ffmpeg/%s/ffmpeg-win64.zip',
}, },
'android': { 'android': {
@ -262,6 +274,8 @@ const DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {
'mac13-arm64': 'builds/android/%s/android.zip', 'mac13-arm64': 'builds/android/%s/android.zip',
'mac14': 'builds/android/%s/android.zip', 'mac14': 'builds/android/%s/android.zip',
'mac14-arm64': 'builds/android/%s/android.zip', 'mac14-arm64': 'builds/android/%s/android.zip',
'mac15': 'builds/android/%s/android.zip',
'mac15-arm64': 'builds/android/%s/android.zip',
'win64': 'builds/android/%s/android.zip', 'win64': 'builds/android/%s/android.zip',
}, },
// TODO(bidi): implement downloads. // TODO(bidi): implement downloads.

View file

@ -25,6 +25,7 @@ export type HostPlatform = 'win64' |
'mac12' | 'mac12-arm64' | 'mac12' | 'mac12-arm64' |
'mac13' | 'mac13-arm64' | 'mac13' | 'mac13-arm64' |
'mac14' | 'mac14-arm64' | 'mac14' | 'mac14-arm64' |
'mac15' | 'mac15-arm64' |
'ubuntu18.04-x64' | 'ubuntu18.04-arm64' | 'ubuntu18.04-x64' | 'ubuntu18.04-arm64' |
'ubuntu20.04-x64' | 'ubuntu20.04-arm64' | 'ubuntu20.04-x64' | 'ubuntu20.04-arm64' |
'ubuntu22.04-x64' | 'ubuntu22.04-arm64' | 'ubuntu22.04-x64' | 'ubuntu22.04-arm64' |
@ -47,9 +48,9 @@ function calculatePlatform(): { hostPlatform: HostPlatform, isOfficiallySupporte
macVersion = 'mac10.15'; macVersion = 'mac10.15';
} else { } else {
// ver[0] >= 20 // ver[0] >= 20
const LAST_STABLE_MAC_MAJOR_VERSION = 14; const LAST_STABLE_MACOS_MAJOR_VERSION = 15;
// Best-effort support for MacOS beta versions. // Best-effort support for MacOS beta versions.
macVersion = 'mac' + Math.min(ver[0] - 9, LAST_STABLE_MAC_MAJOR_VERSION); macVersion = 'mac' + Math.min(ver[0] - 9, LAST_STABLE_MACOS_MAJOR_VERSION);
// BigSur is the first version that might run on Apple Silicon. // BigSur is the first version that might run on Apple Silicon.
if (os.cpus().some(cpu => cpu.model.includes('Apple'))) if (os.cpus().some(cpu => cpu.model.includes('Apple')))
macVersion += '-arm64'; macVersion += '-arm64';

View file

@ -143,7 +143,7 @@ it('should get multiple cookies', async ({ context, page, server, defaultSameSit
])); ]));
}); });
it('should get cookies from multiple urls', async ({ context, browserName, isWindows }) => { it('should get cookies from multiple urls', async ({ context, browserName, isWindows, platform }) => {
await context.addCookies([{ await context.addCookies([{
url: 'https://foo.com', url: 'https://foo.com',
name: 'doggo', name: 'doggo',
@ -178,7 +178,7 @@ it('should get cookies from multiple urls', async ({ context, browserName, isWin
expires: -1, expires: -1,
httpOnly: false, httpOnly: false,
secure: true, secure: true,
sameSite: 'None', sameSite: (browserName === 'webkit' && platform === 'darwin' && parseInt(os.release(), 10) >= 24) ? 'Lax' : 'None',
}])); }]));
}); });
@ -274,7 +274,7 @@ it('should return secure cookies based on HTTP(S) protocol', async ({ context, b
}]); }]);
}); });
it('should add cookies with an expiration', async ({ context }) => { it('should add cookies with an expiration', async ({ context, browserName, platform }) => {
const expires = Math.floor((Date.now() / 1000)) + 3600; const expires = Math.floor((Date.now() / 1000)) + 3600;
await context.addCookies([{ await context.addCookies([{
url: 'https://foo.com', url: 'https://foo.com',
@ -293,7 +293,7 @@ it('should add cookies with an expiration', async ({ context }) => {
expires, expires,
httpOnly: false, httpOnly: false,
secure: true, secure: true,
sameSite: 'None', sameSite: (browserName === 'webkit' && platform === 'darwin' && parseInt(os.release(), 10) >= 24) ? 'Lax' : 'None',
}]); }]);
{ {
// Rollover to 5-digit year // Rollover to 5-digit year

View file

@ -14,6 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
import os from 'os';
import type { LookupAddress } from 'dns'; import type { LookupAddress } from 'dns';
import formidable from 'formidable'; import formidable from 'formidable';
import fs from 'fs'; import fs from 'fs';
@ -1245,7 +1246,7 @@ it('should work with connectOverCDP', async ({ browserName, browserType, server
} }
}); });
it('should support SameSite cookie attribute over https', async ({ contextFactory, httpsServer, browserName, isWindows }) => { it('should support SameSite cookie attribute over https', async ({ contextFactory, httpsServer, browserName, isWindows, platform }) => {
// Cookies with SameSite=None must also specify the Secure attribute. WebKit navigation // Cookies with SameSite=None must also specify the Secure attribute. WebKit navigation
// to HTTP url will fail if the response contains a cookie with Secure attribute, so // to HTTP url will fail if the response contains a cookie with Secure attribute, so
// we do HTTPS navigation. // we do HTTPS navigation.
@ -1261,6 +1262,8 @@ it('should support SameSite cookie attribute over https', async ({ contextFactor
const [cookie] = await page.context().cookies(); const [cookie] = await page.context().cookies();
if (browserName === 'webkit' && isWindows) if (browserName === 'webkit' && isWindows)
expect(cookie.sameSite).toBe('None'); expect(cookie.sameSite).toBe('None');
else if (browserName === 'webkit' && platform === 'darwin' && value === 'None')
expect(cookie.sameSite).toBe('Lax');
else else
expect(cookie.sameSite).toBe(value); expect(cookie.sameSite).toBe(value);
}); });
@ -1290,7 +1293,7 @@ it('fetch should not throw on long set-cookie value', async ({ context, server }
expect(cookies.map(c => c.name)).toContain('bar'); expect(cookies.map(c => c.name)).toContain('bar');
}); });
it('should support set-cookie with SameSite and without Secure attribute over HTTP', async ({ page, server, browserName, isWindows, isLinux }) => { it('should support set-cookie with SameSite and without Secure attribute over HTTP', async ({ page, server, browserName, isWindows, isLinux, isMac }) => {
for (const value of ['None', 'Lax', 'Strict']) { for (const value of ['None', 'Lax', 'Strict']) {
await it.step(`SameSite=${value}`, async () => { await it.step(`SameSite=${value}`, async () => {
server.setRoute('/empty.html', (req, res) => { server.setRoute('/empty.html', (req, res) => {
@ -1305,6 +1308,8 @@ it('should support set-cookie with SameSite and without Secure attribute over HT
expect(cookie).toBeFalsy(); expect(cookie).toBeFalsy();
else if (browserName === 'webkit' && isWindows) else if (browserName === 'webkit' && isWindows)
expect(cookie.sameSite).toBe('None'); expect(cookie.sameSite).toBe('None');
else if (browserName === 'webkit' && isMac && parseInt(os.release(), 10) >= 24 && value === 'None')
expect(cookie.sameSite).toBe('Lax');
else else
expect(cookie.sameSite).toBe(value); expect(cookie.sameSite).toBe(value);
}); });