From 9db325d790eab1cd850b95f270212e088e25cf48 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Tue, 11 Jun 2024 21:25:41 +0200 Subject: [PATCH] Page -> Emulation.setOrientationOverride --- packages/playwright-core/src/server/webkit/wkPage.ts | 5 ++++- tests/library/browsercontext-viewport.spec.ts | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/webkit/wkPage.ts b/packages/playwright-core/src/server/webkit/wkPage.ts index e0326072f7..25b558a225 100644 --- a/packages/playwright-core/src/server/webkit/wkPage.ts +++ b/packages/playwright-core/src/server/webkit/wkPage.ts @@ -16,6 +16,7 @@ */ import path from 'path'; +import os from 'os'; import { PNG, jpegjs } from '../../utilsBundle'; import { splitErrorMessage } from '../../utils/stackTrace'; import { assert, createGuid, debugAssert, headersArrayToObject } from '../../utils'; @@ -713,7 +714,9 @@ export class WKPage implements PageDelegate { ]; if (options.isMobile) { const angle = viewportSize.width > viewportSize.height ? 90 : 0; - promises.push(this._session.send('Page.setOrientationOverride', { angle })); + // Special handling for macOS 12. + const useLegacySetOrientationOverrideMethod = parseInt(os.release().split('.')[0], 10) <= 21; + promises.push(this._pageProxySession.send(useLegacySetOrientationOverrideMethod ? 'Page.setOrientationOverride' as any : 'Emulation.setOrientationOverride', { angle })); } await Promise.all(promises); } diff --git a/tests/library/browsercontext-viewport.spec.ts b/tests/library/browsercontext-viewport.spec.ts index 6c37ee3ac9..19dd03d335 100644 --- a/tests/library/browsercontext-viewport.spec.ts +++ b/tests/library/browsercontext-viewport.spec.ts @@ -15,6 +15,7 @@ * limitations under the License. */ +import { devices } from '@playwright/test'; import { contextTest as it, expect } from '../config/browserTest'; import { browserTest } from '../config/browserTest'; import { verifyViewport } from '../config/utils'; @@ -175,3 +176,13 @@ browserTest('should be able to get correct orientation angle on non-mobile devic expect(await page.evaluate(() => window.screen.orientation.angle)).toBe(0); await context.close(); }); + +it('should set window.screen.orientation.type for mobile devices', async ({ contextFactory, browserName, server }) => { + it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31151' }); + it.skip(browserName === 'firefox', 'Firefox does not support mobile emulation'); + const context = await contextFactory(devices['iPhone 14']); + const page = await context.newPage(); + await page.goto(server.PREFIX + '/index.html'); + expect(await page.evaluate(() => window.screen.orientation.type)).toBe('portrait-primary'); + await context.close(); +});