Pier Angelo Vendrame pushed to branch mullvad-browser-149.0a1-16.0-2 at The Tor Project / Applications / Mullvad Browser
Commits:
-
f8c9c503
by Pier Angelo Vendrame at 2026-03-24T18:49:28+01:00
-
899e00ed
by Pier Angelo Vendrame at 2026-03-24T18:49:35+01:00
-
d09b8270
by Pier Angelo Vendrame at 2026-03-24T18:49:43+01:00
-
43a1de0d
by Pier Angelo Vendrame at 2026-03-24T18:49:49+01:00
4 changed files:
- browser/app/profile/001-base-profile.js
- dom/canvas/CanvasUtils.cpp
- toolkit/components/search/tests/xpcshell/test_base_browser.js
- toolkit/components/search/tests/xpcshell/test_security_level.js
Changes:
| ... | ... | @@ -492,6 +492,8 @@ pref("privacy.resistFingerprinting.skipEarlyBlankFirstPaint", true); |
| 492 | 492 | pref("webgl.disable-fail-if-major-performance-caveat", true);
|
| 493 | 493 | // tor-browser#16404: disable until we investigate it further (#22333)
|
| 494 | 494 | pref("webgl.enable-webgl2", false);
|
| 495 | +// tor-browser#44763: disable WebGPU until audited.
|
|
| 496 | +pref("dom.webgpu.enabled", false);
|
|
| 495 | 497 | pref("browser.link.open_newwindow.restriction", 0); // Bug 9881: Open popups in new tabs (to avoid fullscreen popups)
|
| 496 | 498 | // tor-browser#42767: Disable offscreen canvas until verified it is not fingerprintable
|
| 497 | 499 | pref("gfx.offscreencanvas.enabled", false);
|
| ... | ... | @@ -382,14 +382,9 @@ ImageExtraction ImageExtractionResult(dom::HTMLCanvasElement* aCanvasElement, |
| 382 | 382 | return ImageExtraction::Placeholder;
|
| 383 | 383 | }
|
| 384 | 384 | |
| 385 | - if (ownerDoc->ShouldResistFingerprinting(
|
|
| 386 | - RFPTarget::EfficientCanvasRandomization) &&
|
|
| 387 | - GetCanvasExtractDataPermission(aPrincipal) !=
|
|
| 388 | - nsIPermissionManager::ALLOW_ACTION) {
|
|
| 389 | - return ImageExtraction::EfficientRandomize;
|
|
| 390 | - }
|
|
| 391 | - |
|
| 392 | - if ((ownerDoc->ShouldResistFingerprinting(RFPTarget::CanvasRandomization) ||
|
|
| 385 | + if ((ownerDoc->ShouldResistFingerprinting(
|
|
| 386 | + RFPTarget::EfficientCanvasRandomization) ||
|
|
| 387 | + ownerDoc->ShouldResistFingerprinting(RFPTarget::CanvasRandomization) ||
|
|
| 393 | 388 | ownerDoc->ShouldResistFingerprinting(RFPTarget::WebGLRandomization)) &&
|
| 394 | 389 | GetCanvasExtractDataPermission(aPrincipal) !=
|
| 395 | 390 | nsIPermissionManager::ALLOW_ACTION) {
|
| ... | ... | @@ -10,6 +10,10 @@ |
| 10 | 10 | |
| 11 | 11 | "use strict";
|
| 12 | 12 | |
| 13 | +const { SearchService } = ChromeUtils.importESModule(
|
|
| 14 | + "moz-src:///toolkit/components/search/SearchService.sys.mjs"
|
|
| 15 | +);
|
|
| 16 | + |
|
| 13 | 17 | const expectedURLs = {
|
| 14 | 18 | ddg: "https://duckduckgo.com/?q=test",
|
| 15 | 19 | "ddg-html": "https://html.duckduckgo.com/html/?q=test",
|
| ... | ... | @@ -21,24 +25,23 @@ const expectedURLs = { |
| 21 | 25 | const defaultEngine = "ddg";
|
| 22 | 26 | |
| 23 | 27 | add_setup(async function setup() {
|
| 24 | - await Services.search.init();
|
|
| 28 | + await SearchService.init();
|
|
| 25 | 29 | });
|
| 26 | 30 | |
| 27 | 31 | add_task(async function test_listEngines() {
|
| 28 | - const { engines } =
|
|
| 29 | - await Services.search.wrappedJSObject._fetchEngineSelectorEngines();
|
|
| 32 | + const { engines } = await SearchService._fetchEngineSelectorEngines();
|
|
| 30 | 33 | const foundIdentifiers = engines.map(e => e.identifier);
|
| 31 | 34 | Assert.deepEqual(foundIdentifiers, Object.keys(expectedURLs));
|
| 32 | 35 | });
|
| 33 | 36 | |
| 34 | 37 | add_task(async function test_default() {
|
| 35 | 38 | Assert.equal(
|
| 36 | - (await Services.search.getDefault()).id,
|
|
| 39 | + (await SearchService.getDefault()).id,
|
|
| 37 | 40 | defaultEngine,
|
| 38 | 41 | `${defaultEngine} is our default search engine in normal mode.`
|
| 39 | 42 | );
|
| 40 | 43 | Assert.equal(
|
| 41 | - (await Services.search.getDefaultPrivate()).id,
|
|
| 44 | + (await SearchService.getDefaultPrivate()).id,
|
|
| 42 | 45 | defaultEngine,
|
| 43 | 46 | `${defaultEngine} is our default search engine in PBM.`
|
| 44 | 47 | );
|
| ... | ... | @@ -46,7 +49,7 @@ add_task(async function test_default() { |
| 46 | 49 | |
| 47 | 50 | add_task(function test_checkSearchURLs() {
|
| 48 | 51 | for (const [id, url] of Object.entries(expectedURLs)) {
|
| 49 | - const engine = Services.search.getEngineById(id);
|
|
| 52 | + const engine = SearchService.getEngineById(id);
|
|
| 50 | 53 | const foundUrl = engine.getSubmission("test").uri.spec;
|
| 51 | 54 | Assert.equal(foundUrl, url, `The URL of ${engine.name} is not altered.`);
|
| 52 | 55 | }
|
| ... | ... | @@ -54,7 +57,7 @@ add_task(function test_checkSearchURLs() { |
| 54 | 57 | |
| 55 | 58 | add_task(async function test_iconsDoesNotFail() {
|
| 56 | 59 | for (const id of Object.keys(expectedURLs)) {
|
| 57 | - const engine = Services.search.getEngineById(id);
|
|
| 60 | + const engine = SearchService.getEngineById(id);
|
|
| 58 | 61 | // No need to assert anything, as in case of error this method should throw.
|
| 59 | 62 | await engine.getIconURL();
|
| 60 | 63 | }
|
| ... | ... | @@ -8,14 +8,18 @@ |
| 8 | 8 | |
| 9 | 9 | "use strict";
|
| 10 | 10 | |
| 11 | +const { SearchService } = ChromeUtils.importESModule(
|
|
| 12 | + "moz-src:///toolkit/components/search/SearchService.sys.mjs"
|
|
| 13 | +);
|
|
| 14 | + |
|
| 11 | 15 | const expectedURLs = {
|
| 12 | 16 | ddg: "https://html.duckduckgo.com/html?q=test",
|
| 13 | 17 | };
|
| 14 | 18 | |
| 15 | 19 | add_task(async function test_securityLevel() {
|
| 16 | - await Services.search.init();
|
|
| 20 | + await SearchService.init();
|
|
| 17 | 21 | for (const [id, url] of Object.entries(expectedURLs)) {
|
| 18 | - const engine = Services.search.getEngineById(id);
|
|
| 22 | + const engine = SearchService.getEngineById(id);
|
|
| 19 | 23 | const foundUrl = engine.getSubmission("test").uri.spec;
|
| 20 | 24 | Assert.equal(foundUrl, url, `${engine.name} is in HTML mode.`);
|
| 21 | 25 | }
|