Skip to content

Commit 4f11840

Browse files
committed
Limit the scope of the minimum-scale fix
1 parent c6b7bf4 commit 4f11840

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

injected/integration-test/web-compat.spec.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,7 @@ test.describe('Viewport fixes', () => {
495495
const width = await page.evaluate('screen.width');
496496
const expectedWidth = width < 1280 ? 980 : 1280;
497497
const viewportValue = await page.evaluate(getViewportValue);
498-
expect(viewportValue).toEqual(
499-
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, minimum-scale=0`,
500-
);
498+
expect(viewportValue).toEqual(`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes`);
501499
});
502500

503501
test('should respect forced zoom', async ({ page }) => {
@@ -511,7 +509,7 @@ test.describe('Viewport fixes', () => {
511509
const expectedWidth = width < 1280 ? 980 : 1280;
512510
const viewportValue = await page.evaluate(getViewportValue);
513511
expect(viewportValue).toEqual(
514-
`initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, maximum-scale=10, width=${expectedWidth}, minimum-scale=0`,
512+
`initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, maximum-scale=10, width=${expectedWidth}`,
515513
);
516514
});
517515

@@ -571,6 +569,25 @@ test.describe('Viewport fixes', () => {
571569
const width = await page.evaluate('screen.width');
572570
const expectedWidth = width < 1280 ? 980 : 1280;
573571
const viewportValue = await page.evaluate(getViewportValue);
572+
expect(viewportValue).toEqual(
573+
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, something-something`,
574+
);
575+
});
576+
577+
test('should override minimum-scale, if it is set', async ({ page }) => {
578+
await gotoAndWait(
579+
page,
580+
'/blank.html',
581+
{
582+
site: { enabledFeatures: ['webCompat'] },
583+
featureSettings: { webCompat: { viewportWidth: 'enabled' } },
584+
desktopModeEnabled: true,
585+
},
586+
'document.head.innerHTML += \'<meta name="viewport" content="width=device-width, initial-scale=2, user-scalable=no, minimum-scale=1, something-something">\'',
587+
);
588+
const width = await page.evaluate('screen.width');
589+
const expectedWidth = width < 1280 ? 980 : 1280;
590+
const viewportValue = await page.evaluate(getViewportValue);
574591
expect(viewportValue).toEqual(
575592
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, minimum-scale=0, something-something`,
576593
);
@@ -591,7 +608,7 @@ test.describe('Viewport fixes', () => {
591608
const expectedWidth = width < 1280 ? 980 : 1280;
592609
const viewportValue = await page.evaluate(getViewportValue);
593610
expect(viewportValue).toEqual(
594-
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, minimum-scale=0, something-something`,
611+
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, something-something`,
595612
);
596613
});
597614

@@ -611,7 +628,7 @@ test.describe('Viewport fixes', () => {
611628
const expectedWidth = width < 1280 ? 980 : 1280;
612629
const viewportValue = await page.evaluate(getViewportValue);
613630
expect(viewportValue).toEqual(
614-
`initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, maximum-scale=10, width=${expectedWidth}, minimum-scale=0, something-something`,
631+
`initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, maximum-scale=10, width=${expectedWidth}, something-something`,
615632
);
616633
});
617634

@@ -630,7 +647,7 @@ test.describe('Viewport fixes', () => {
630647
const expectedWidth = width < 1280 ? 980 : 1280;
631648
const viewportValue = await page.evaluate(getViewportValue);
632649
expect(viewportValue).toEqual(
633-
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, minimum-scale=0, something-something`,
650+
`width=${expectedWidth}, initial-scale=${(width / expectedWidth).toFixed(3)}, user-scalable=yes, something-something`,
634651
);
635652
});
636653
});

injected/src/features/web-compat.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -719,8 +719,11 @@ export class WebCompat extends ContentFeature {
719719
// Race condition: depending on the loading state of the page, initial scale may or may not be respected, so the page may look zoomed-in after applying this hack.
720720
// Usually this is just an annoyance, but it may be a bigger issue if user-scalable=no is set, so we remove it too.
721721
forcedValues['user-scalable'] = 'yes';
722-
// make sure you can zoom out to see the whole page. See https://app.asana.com/1/137249556945/project/1206777341262243/task/1207691440660873
723-
forcedValues['minimum-scale'] = 0;
722+
const minimumScalePart = parsedViewportContent.find(([key]) => key === 'minimum-scale');
723+
if (minimumScalePart) {
724+
// override minimum-scale to make sure you can zoom out to see the whole page. See https://app.asana.com/1/137249556945/project/1206777341262243/task/1207691440660873
725+
forcedValues['minimum-scale'] = 0;
726+
}
724727
} else {
725728
// mobile mode with a viewport tag
726729
// fix an edge case where WebView forces the wide viewport

0 commit comments

Comments
 (0)