Skip to content

Commit 414f24b

Browse files
muodovgithub-actions[bot]
authored andcommitted
Release build 4.58.0 [ci release]
1 parent 06d18be commit 414f24b

File tree

12 files changed

+254
-70
lines changed

12 files changed

+254
-70
lines changed

Sources/ContentScopeScripts/dist/contentScope.js

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1990,7 +1990,7 @@
19901990
__privateAdd(this, _messaging, void 0);
19911991
/** @type {boolean} */
19921992
__privateAdd(this, _isDebugFlagSet, false);
1993-
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
1993+
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, forcedZoomEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
19941994
__privateAdd(this, _args, void 0);
19951995
this.name = featureName;
19961996
__privateSet(this, _args, null);
@@ -2002,6 +2002,9 @@
20022002
get desktopModeEnabled() {
20032003
return __privateGet(this, _args)?.desktopModeEnabled || false;
20042004
}
2005+
get forcedZoomEnabled() {
2006+
return __privateGet(this, _args)?.forcedZoomEnabled || false;
2007+
}
20052008
/**
20062009
* @param {import('./utils').Platform} platform
20072010
*/
@@ -2822,28 +2825,43 @@
28222825
const { forcedDesktopValue, forcedMobileValue } = this.getFeatureSetting("viewportWidth");
28232826
if (typeof forcedDesktopValue === "string" && this.desktopModeEnabled) {
28242827
this.forceViewportTag(viewportTag, forcedDesktopValue);
2828+
return;
28252829
} else if (typeof forcedMobileValue === "string" && !this.desktopModeEnabled) {
28262830
this.forceViewportTag(viewportTag, forcedMobileValue);
2827-
} else if (!viewportTag || this.desktopModeEnabled) {
2828-
const forcedWidth = screen.width >= 1280 ? 1280 : 980;
2829-
const forcedInitialScale = (screen.width / forcedWidth).toFixed(3);
2830-
let newContent = `width=${forcedWidth}, initial-scale=${forcedInitialScale}`;
2831-
parsedViewportContent.forEach(([key], idx) => {
2832-
if (!["width", "initial-scale", "user-scalable"].includes(key)) {
2833-
newContent = newContent.concat(`,${viewportContentParts[idx]}`);
2834-
}
2835-
});
2836-
this.forceViewportTag(viewportTag, newContent);
2831+
return;
2832+
}
2833+
const forcedValues = {};
2834+
if (this.forcedZoomEnabled) {
2835+
forcedValues["initial-scale"] = 1;
2836+
forcedValues["user-scalable"] = "yes";
2837+
forcedValues["maximum-scale"] = 10;
2838+
}
2839+
if (!viewportTag || this.desktopModeEnabled) {
2840+
forcedValues.width = screen.width >= 1280 ? 1280 : 980;
2841+
forcedValues["initial-scale"] = (screen.width / forcedValues.width).toFixed(3);
2842+
forcedValues["user-scalable"] = "yes";
28372843
} else {
28382844
const widthPart = parsedViewportContent.find(([key]) => key === "width");
28392845
const initialScalePart = parsedViewportContent.find(([key]) => key === "initial-scale");
28402846
if (!widthPart && initialScalePart) {
28412847
const parsedInitialScale = parseFloat(initialScalePart[1]);
28422848
if (parsedInitialScale !== 1) {
2843-
this.forceViewportTag(viewportTag, `width=device-width, ${viewportContent}`);
2849+
forcedValues.width = "device-width";
28442850
}
28452851
}
28462852
}
2853+
const newContent = [];
2854+
Object.keys(forcedValues).forEach((key) => {
2855+
newContent.push(`${key}=${forcedValues[key]}`);
2856+
});
2857+
if (newContent.length > 0) {
2858+
parsedViewportContent.forEach(([key], idx) => {
2859+
if (!(key in forcedValues)) {
2860+
newContent.push(viewportContentParts[idx].trim());
2861+
}
2862+
});
2863+
this.forceViewportTag(viewportTag, newContent.join(", "));
2864+
}
28472865
}
28482866
}
28492867
_activeShareRequest = new WeakMap();

Sources/ContentScopeScripts/dist/contentScopeIsolated.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2609,7 +2609,7 @@
26092609
/** @type {boolean} */
26102610
#isDebugFlagSet = false
26112611

2612-
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
2612+
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, forcedZoomEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
26132613
#args
26142614

26152615
constructor (featureName) {
@@ -2626,6 +2626,10 @@
26262626
return this.#args?.desktopModeEnabled || false
26272627
}
26282628

2629+
get forcedZoomEnabled () {
2630+
return this.#args?.forcedZoomEnabled || false
2631+
}
2632+
26292633
/**
26302634
* @param {import('./utils').Platform} platform
26312635
*/

build/android/contentScope.js

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2964,7 +2964,7 @@
29642964
/** @type {boolean} */
29652965
#isDebugFlagSet = false
29662966

2967-
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
2967+
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, forcedZoomEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
29682968
#args
29692969

29702970
constructor (featureName) {
@@ -2981,6 +2981,10 @@
29812981
return this.#args?.desktopModeEnabled || false
29822982
}
29832983

2984+
get forcedZoomEnabled () {
2985+
return this.#args?.forcedZoomEnabled || false
2986+
}
2987+
29842988
/**
29852989
* @param {import('./utils').Platform} platform
29862990
*/
@@ -7994,30 +7998,40 @@
79947998
// Chrome respects only the last viewport tag
79957999
const viewportTag = viewportTags.length === 0 ? null : viewportTags[viewportTags.length - 1];
79968000
const viewportContent = viewportTag?.getAttribute('content') || '';
8001+
/** @type {readonly string[]} **/
79978002
const viewportContentParts = viewportContent ? viewportContent.split(/,|;/) : [];
8003+
/** @type {readonly string[][]} **/
79988004
const parsedViewportContent = viewportContentParts.map((part) => {
79998005
const [key, value] = part.split('=').map(p => p.trim().toLowerCase());
80008006
return [key, value]
80018007
});
80028008

8009+
// first, check if there are any forced values
80038010
const { forcedDesktopValue, forcedMobileValue } = this.getFeatureSetting('viewportWidth');
80048011
if (typeof forcedDesktopValue === 'string' && this.desktopModeEnabled) {
80058012
this.forceViewportTag(viewportTag, forcedDesktopValue);
8013+
return
80068014
} else if (typeof forcedMobileValue === 'string' && !this.desktopModeEnabled) {
80078015
this.forceViewportTag(viewportTag, forcedMobileValue);
8008-
} else if (!viewportTag || this.desktopModeEnabled) {
8016+
return
8017+
}
8018+
8019+
// otherwise, check for special cases
8020+
const forcedValues = {};
8021+
8022+
if (this.forcedZoomEnabled) {
8023+
forcedValues['initial-scale'] = 1;
8024+
forcedValues['user-scalable'] = 'yes';
8025+
forcedValues['maximum-scale'] = 10;
8026+
}
8027+
8028+
if (!viewportTag || this.desktopModeEnabled) {
80098029
// force wide viewport width
8010-
const forcedWidth = screen.width >= 1280 ? 1280 : 980;
8030+
forcedValues.width = screen.width >= 1280 ? 1280 : 980;
8031+
forcedValues['initial-scale'] = (screen.width / forcedValues.width).toFixed(3);
80118032
// 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.
80128033
// Usually this is just an annoyance, but it may be a bigger issue if user-scalable=no is set, so we remove it too.
8013-
const forcedInitialScale = (screen.width / forcedWidth).toFixed(3);
8014-
let newContent = `width=${forcedWidth}, initial-scale=${forcedInitialScale}`;
8015-
parsedViewportContent.forEach(([key], idx) => {
8016-
if (!['width', 'initial-scale', 'user-scalable'].includes(key)) {
8017-
newContent = newContent.concat(`,${viewportContentParts[idx]}`); // reuse the original values, not the parsed ones
8018-
}
8019-
});
8020-
this.forceViewportTag(viewportTag, newContent);
8034+
forcedValues['user-scalable'] = 'yes';
80218035
} else { // mobile mode with a viewport tag
80228036
// fix an edge case where WebView forces the wide viewport
80238037
const widthPart = parsedViewportContent.find(([key]) => key === 'width');
@@ -8026,10 +8040,24 @@
80268040
// Chromium accepts float values for initial-scale
80278041
const parsedInitialScale = parseFloat(initialScalePart[1]);
80288042
if (parsedInitialScale !== 1) {
8029-
this.forceViewportTag(viewportTag, `width=device-width, ${viewportContent}`);
8043+
forcedValues.width = 'device-width';
80308044
}
80318045
}
80328046
}
8047+
8048+
const newContent = [];
8049+
Object.keys(forcedValues).forEach((key) => {
8050+
newContent.push(`${key}=${forcedValues[key]}`);
8051+
});
8052+
8053+
if (newContent.length > 0) { // need to override at least one viewport component
8054+
parsedViewportContent.forEach(([key], idx) => {
8055+
if (!(key in forcedValues)) {
8056+
newContent.push(viewportContentParts[idx].trim()); // reuse the original values, not the parsed ones
8057+
}
8058+
});
8059+
this.forceViewportTag(viewportTag, newContent.join(', '));
8060+
}
80338061
}
80348062
}
80358063

build/chrome-mv3/inject.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2976,7 +2976,7 @@
29762976
/** @type {boolean} */
29772977
#isDebugFlagSet = false
29782978

2979-
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
2979+
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, forcedZoomEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
29802980
#args
29812981

29822982
constructor (featureName) {
@@ -2993,6 +2993,10 @@
29932993
return this.#args?.desktopModeEnabled || false
29942994
}
29952995

2996+
get forcedZoomEnabled () {
2997+
return this.#args?.forcedZoomEnabled || false
2998+
}
2999+
29963000
/**
29973001
* @param {import('./utils').Platform} platform
29983002
*/

build/chrome/inject.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/contentScope.js

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2918,7 +2918,7 @@
29182918
/** @type {boolean} */
29192919
#isDebugFlagSet = false
29202920

2921-
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
2921+
/** @type {{ debug?: boolean, desktopModeEnabled?: boolean, forcedZoomEnabled?: boolean, featureSettings?: Record<string, unknown>, assets?: AssetConfig | undefined, site: Site, messagingConfig?: import('@duckduckgo/messaging').MessagingConfig } | null} */
29222922
#args
29232923

29242924
constructor (featureName) {
@@ -2935,6 +2935,10 @@
29352935
return this.#args?.desktopModeEnabled || false
29362936
}
29372937

2938+
get forcedZoomEnabled () {
2939+
return this.#args?.forcedZoomEnabled || false
2940+
}
2941+
29382942
/**
29392943
* @param {import('./utils').Platform} platform
29402944
*/
@@ -14163,30 +14167,40 @@
1416314167
// Chrome respects only the last viewport tag
1416414168
const viewportTag = viewportTags.length === 0 ? null : viewportTags[viewportTags.length - 1];
1416514169
const viewportContent = viewportTag?.getAttribute('content') || '';
14170+
/** @type {readonly string[]} **/
1416614171
const viewportContentParts = viewportContent ? viewportContent.split(/,|;/) : [];
14172+
/** @type {readonly string[][]} **/
1416714173
const parsedViewportContent = viewportContentParts.map((part) => {
1416814174
const [key, value] = part.split('=').map(p => p.trim().toLowerCase());
1416914175
return [key, value]
1417014176
});
1417114177

14178+
// first, check if there are any forced values
1417214179
const { forcedDesktopValue, forcedMobileValue } = this.getFeatureSetting('viewportWidth');
1417314180
if (typeof forcedDesktopValue === 'string' && this.desktopModeEnabled) {
1417414181
this.forceViewportTag(viewportTag, forcedDesktopValue);
14182+
return
1417514183
} else if (typeof forcedMobileValue === 'string' && !this.desktopModeEnabled) {
1417614184
this.forceViewportTag(viewportTag, forcedMobileValue);
14177-
} else if (!viewportTag || this.desktopModeEnabled) {
14185+
return
14186+
}
14187+
14188+
// otherwise, check for special cases
14189+
const forcedValues = {};
14190+
14191+
if (this.forcedZoomEnabled) {
14192+
forcedValues['initial-scale'] = 1;
14193+
forcedValues['user-scalable'] = 'yes';
14194+
forcedValues['maximum-scale'] = 10;
14195+
}
14196+
14197+
if (!viewportTag || this.desktopModeEnabled) {
1417814198
// force wide viewport width
14179-
const forcedWidth = screen.width >= 1280 ? 1280 : 980;
14199+
forcedValues.width = screen.width >= 1280 ? 1280 : 980;
14200+
forcedValues['initial-scale'] = (screen.width / forcedValues.width).toFixed(3);
1418014201
// 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.
1418114202
// Usually this is just an annoyance, but it may be a bigger issue if user-scalable=no is set, so we remove it too.
14182-
const forcedInitialScale = (screen.width / forcedWidth).toFixed(3);
14183-
let newContent = `width=${forcedWidth}, initial-scale=${forcedInitialScale}`;
14184-
parsedViewportContent.forEach(([key], idx) => {
14185-
if (!['width', 'initial-scale', 'user-scalable'].includes(key)) {
14186-
newContent = newContent.concat(`,${viewportContentParts[idx]}`); // reuse the original values, not the parsed ones
14187-
}
14188-
});
14189-
this.forceViewportTag(viewportTag, newContent);
14203+
forcedValues['user-scalable'] = 'yes';
1419014204
} else { // mobile mode with a viewport tag
1419114205
// fix an edge case where WebView forces the wide viewport
1419214206
const widthPart = parsedViewportContent.find(([key]) => key === 'width');
@@ -14195,10 +14209,24 @@
1419514209
// Chromium accepts float values for initial-scale
1419614210
const parsedInitialScale = parseFloat(initialScalePart[1]);
1419714211
if (parsedInitialScale !== 1) {
14198-
this.forceViewportTag(viewportTag, `width=device-width, ${viewportContent}`);
14212+
forcedValues.width = 'device-width';
1419914213
}
1420014214
}
1420114215
}
14216+
14217+
const newContent = [];
14218+
Object.keys(forcedValues).forEach((key) => {
14219+
newContent.push(`${key}=${forcedValues[key]}`);
14220+
});
14221+
14222+
if (newContent.length > 0) { // need to override at least one viewport component
14223+
parsedViewportContent.forEach(([key], idx) => {
14224+
if (!(key in forcedValues)) {
14225+
newContent.push(viewportContentParts[idx].trim()); // reuse the original values, not the parsed ones
14226+
}
14227+
});
14228+
this.forceViewportTag(viewportTag, newContent.join(', '));
14229+
}
1420214230
}
1420314231
}
1420414232

build/firefox/inject.js

Lines changed: 6 additions & 2 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)