From ec37d722b78c07c011f76cfa3cd80f8222151c99 Mon Sep 17 00:00:00 2001 From: Jake Writer Date: Mon, 28 Sep 2026 20:14:47 +0000 Subject: [PATCH] Update to Firefox 156.0.1 (#806) * Pin Firefox 156.0.1 Camoufox beta.32 is built on Firefox 156.0.1 (was 152.0.4). Co-Authored-By: Claude Opus 5.5 * port playwright patch to Firefox 156 - nsGeolocationService became mozilla::GeolocationService in toolkit/components/geolocation/GeolocationService.{h,cpp}; the override (Init(isOverride), IsOverride, the UpdateAccuracy early return) moves there. - OnLinkClick now dispatches through OnLinkClickWithLoadState, so the juggler-link-click notification is sent just before that call. - nsWindowWatcher::CalculateChromeFlagsForContent was restructured around ShouldOpenPopup; the explicit-size flag is added on the popup branch. - JUGGLER_WINDOW_EXPLICIT_SIZE was 1<<22, which Firefox 156 assigns to CHROME_DOCUMENT_PIP. The hunk applied cleanly and would have flagged every sized popup as a document PiP window; it moves to the free bit 1<<26, as upstream Playwright did. - EnterprisePolicies _chooseProvider became _buildProvider and the remote settings getter shouldSkipRemoteActivityDueToTests became shouldSkipRemoteActivity. - Port upstream's WorkerScriptLoader fix (microsoft/playwright#42565): from Firefox 153 a reload while a large worker script is still compiling crashes the content process (Bugzilla 2044428). - Drop the GetAcceptLanguages argument swap. Firefox 156 adds callers that use the native signature (worker language override), and the swap changed no behaviour: every caller passes null for an empty override. - The HeadlessCompositorWidget and nsFilePicker include hunks are rebased; the file picker already includes gfxPlatform.h. Co-Authored-By: Claude Opus 5.5 * port playwright leak fixes to Firefox 156 Navigator::Webdriver() now asks Marionette and the remote agent for GetIsBrowserAutomationRunning; the body is still replaced with 'return false'. The policy provider hunk applied cleanly but restored _chooseProvider(), which Firefox 156 renamed to _buildProvider() -- policy loading would have thrown. Co-Authored-By: Claude Opus 5.5 * juggler: follow Firefox 156 API changes - Firefox 156 enforces dom.jsipc.check_safeForUntrustedWebProcess: a JSWindowActor without safeForUntrustedWebProcess is never instantiated in a web content process, so JugglerFrame would not load in any page. - ContextualIdentityService moved to a moz-src:/// URL. - Debugger.onPromiseSettled was removed (bug 2044167). Pending promises are settled the way upstream Juggler does now: reactions in the debuggee hit a debugger statement, and onDebuggerStatement sweeps the pending set. Without this every evaluate returning a pending promise never resolves. - The worker debugger manager is a singleton service; createInstance now fails in the content process, so FrameTree uses getService like upstream. Co-Authored-By: Claude Opus 5.5 * port anti-font-fingerprinting to Firefox 156 gfxTextRun.cpp's include block was re-sorted, and nsPIDOMWindow.h no longer pulls in nsPIDOMWindowInlines.h, so the per-context font group lookup needs it explicitly to link. A whitespace-only hunk that no longer applied is dropped. Co-Authored-By: Claude Opus 5.5 * port contentaccessible-parity to Firefox 156 Firefox 156 moved DevelopmentHelpers.init() out of browser-init.js into a browser-window-delayed-startup category entry in BrowserComponents.manifest, so that entry goes with the file. The stock file-set manifest is re-recorded from the official Firefox 156.0.1 linux-x86_64 build (sha256 7405c048...); the guard refuses to compare across versions. Co-Authored-By: Claude Opus 5.5 * port cross-process-storage to Firefox 156 RecvCreateGMPService's tail changed; the Roverfox storage IPC handlers are added after it unchanged. Co-Authored-By: Claude Opus 5.5 * port librewolf dbus_name to Firefox 156 The D-Bus fallback bus and object path names moved; the same strings are renamed at their new locations. Co-Authored-By: Claude Opus 5.5 * port debugger-invisible-to-content to Firefox 156 Firefox 156 removed asm.js compilation and with it Debugger allowUnobservedAsmJS and the DebuggerObservesAsmJS realm bit. The wasm side is unchanged, so invisibleToContent now keeps wasm unobserved, and the realm flag moves down to the freed bit. The set of content-observable isDebuggee() checks is the same as in 152 (Promise, async stack capture, throw stacks). Co-Authored-By: Claude Opus 5.5 * port fingerprint-injection to Firefox 156 nsGlobalWindowInner::GetInnerWidth/GetInnerHeight gained a CallerType parameter; the MaskConfig override is applied at the top of the new signatures. Co-Authored-By: Claude Opus 5.5 * port librewolf firefox-view to Firefox 156 Firefox 156 already made firefox-view-button a CustomizableWidget that is not in the default tab strip, and removes it from existing profiles. What still applies is dropping the old version-18 migration that would re-add it. Co-Authored-By: Claude Opus 5.5 * port font-hijacker to Firefox 156 Include blocks were re-sorted. LookupLocalFont now returns already_AddRefed and the user font set holds a RefPtr, so the macOS family-name fix builds the entry with MakeRefPtr and the local() mask check just drops the RefPtr. Co-Authored-By: Claude Opus 5.5 * port librewolf hide-default-browser to Firefox 156 The isDefaultPane/isNotDefaultPane visibility conditions gained policy and lock checks; both are still forced false. Co-Authored-By: Claude Opus 5.5 * port media-codec-spoofing to Firefox 156 MatroskaDecoder now asks PDMFactorySupport::IsSupported instead of a PDMFactory instance; the media:spoof_codecs bypass sits before that loop as before. Co-Authored-By: Claude Opus 5.5 * port network-patches to Firefox 156 nsHttpHandler.cpp's includes were re-sorted. Co-Authored-By: Claude Opus 5.5 * port screen-spoofing to Firefox 156 nsDeviceContext.cpp's includes were re-sorted, and ScreenDimensionManager.cpp includes nsPIDOMWindowInlines.h, which nsPIDOMWindow.h no longer pulls in. Co-Authored-By: Claude Opus 5.5 * port sessionstore-popup-close-crash to Firefox 156 SessionStore moved to a class with private #windows, and maybeDontRestoreTabs is now a method; the untracked-window guard is the same. Co-Authored-By: Claude Opus 5.5 * port trusted-automation-events to Firefox 156 HTMLSelectElement::HandleMouseDown now opens the picker through TogglePickerInternal, which also handles the in-content base-select popover (where the release stays in content and pointerup does fire). TogglePickerInternal now reports whether it opened the parent-process dropdown, and only then is the following pointerup suppressed. Co-Authored-By: Claude Opus 5.5 * include nsPIDOMWindowInlines.h in the per-context managers Firefox 156 stopped including nsPIDOMWindowInlines.h from nsPIDOMWindow.h, so the managers' IsFunctionEnabledForWebIDL checks, which call nsPIDOMWindowInner::GetBrowsingContext(), no longer link. Each manager now includes it itself; the rest of these patches applied unchanged. Co-Authored-By: Claude Opus 5.5 * port webrtc-ip-spoofing to Firefox 156 - The getStats() resolve lambda changed (MakeRefPtr report); the IP sanitisation is rebased onto it. - RTCIceCandidateStats.transportId is now a required member, and Firefox 156 exposes foundation and usernameFragment on candidate stats to content. The fabricated srflx entry now carries the same foundation (1) and ufrag as its SDP line, so it is not the only local candidate without them. - WebRTCIPManager.cpp includes nsPIDOMWindowInlines.h (see the managers). Co-Authored-By: Claude Opus 5.5 * port windows-theming-bug-modified to Firefox 156 Firefox 156 removed the macOS repackage recipe from browser/app/Makefile.in; the bundle is declared with MacOSBundle() in browser/app/moz.build and every extra file becomes a make prerequisite. The optional Assets.car copy is ported to where those prerequisites are generated, still for that one file only. Co-Authored-By: Claude Opus 5.5 * package.py: name Firefox 156's gfxtest probe Firefox 156 replaced the glxtest and vaapitest helpers with a single gfxtest program. The packaging list never named any of them, so gfxtest ships; the comment explaining why now names the probe that exists. Co-Authored-By: Claude Opus 5.5 * playwright: announce form-submit navigations on Firefox 156 Firefox 153 made form submission asynchronous (dom.forms.submit_async_navigation, on by default): nsDocShell::OnFormSubmit plans the navigation instead of going through OnLinkClick, so Juggler never heard juggler-link-click for a form and click() returned before the submit's request existed. Upstream Playwright notifies from OnFormSubmit for the same reason; this ports that hunk. Caught by test_should_parse_the_data_if_content_type_is_form_urlencoded. Co-Authored-By: Claude Opus 5.5 * gfx-probes guard: check for Firefox 156's gfxtest probe Firefox 156 folded the glxtest and vaapitest helper programs into a single gfxtest binary that runs both probes as modes. The guard still requires the probe to ship beside the binary, still requires the packaging list not to drop it, and still requires a bare launch to get a WebGL context; only the file name it looks for follows the rename. Co-Authored-By: Claude Opus 5.5 Gate-Change: Firefox 156 replaced the glxtest and vaapitest programs with one gfxtest (toolkit/xre/gfxtest/moz.build Program("gfxtest"), widget/gtk/GfxInfo.cpp GFX_PROBE_BINARY u"gfxtest"); the official 156.0.1 linux-x86_64 tarball ships gfxtest and neither old name. * juggler: let grantPermissions cover Firefox 156's local network access Firefox 156 enables Local Network Access blocking in release builds (network.lna.blocking), gated by the new local-network and loopback-network permissions. Playwright 1.62 maps its local-network-access permission to those two names, but Juggler only applies what is listed in ALL_PERMISSIONS, so the grant was silently dropped and a public page reaching localhost stayed parked on a prompt no one can answer. Upstream Juggler lists them too. Co-Authored-By: Claude Opus 5.5 * run_sundial: exempt sundial's origin from Firefox 156's local network access Sundial posts its score from its public origin to the harness's collector on 127.0.0.1. Firefox 156 turns Local Network Access blocking on in release builds, so that POST now waits for a permission prompt no one can answer and the job times out with nothing measured (CI round 1). The browser is right to block it -- stock 156 does the same -- so the harness exempts only sundial's host with Firefox's own network.lna.skip-domains pref. That leaves the Permissions API reading the stock 'prompt' for the page, unlike a local-network-access grant, which would also mark geolocation and notifications denied for the origin. Nothing the job measures or asserts changes. Co-Authored-By: Claude Opus 5.5 Gate-Change: Firefox 156 made network.lna.blocking true in release builds (modules/libpref/init/StaticPrefList.yaml; @IS_NIGHTLY_BUILD@ in 152.0.4), so a public page's POST to the 127.0.0.1 collector is held for an LNA prompt; reproduced locally (156: collector gets nothing, 152.0.4: delivered; with skip-domains for the page's host: delivered, permission state still 'prompt'). --------- Co-authored-by: Claude Opus 5.5 --- additions/juggler/TargetRegistry.js | 4 +- additions/juggler/components/Juggler.js | 1 + additions/juggler/content/FrameTree.js | 2 +- additions/juggler/content/Runtime.js | 45 +- ci/run_sundial.py | 5 + patches/anti-font-fingerprinting.patch | 71 +- patches/audio-fingerprint-manager.patch | 35 +- patches/contentaccessible-parity.patch | 51 +- patches/cross-process-storage.patch | 24 +- patches/debugger-invisible-to-content.patch | 83 +- patches/fingerprint-injection.patch | 56 +- patches/font-hijacker.patch | 90 +- patches/font-list-spoofing.patch | 91 +- patches/librewolf/dbus_name.patch | 46 +- .../librewolf/ui-patches/firefox-view.patch | 45 +- .../ui-patches/hide-default-browser.patch | 15 +- patches/media-codec-spoofing.patch | 36 +- patches/navigator-spoofing.patch | 31 +- patches/network-patches.patch | 36 +- patches/playwright/0-playwright.patch | 834 +++++---- patches/playwright/1-leak-fixes.patch | 22 +- patches/screen-spoofing.patch | 41 +- patches/sessionstore-popup-close-crash.patch | 20 +- patches/speech-voices-spoofing.patch | 112 +- patches/timezone-spoofing.patch | 53 +- patches/trusted-automation-events.patch | 93 +- patches/webgl-spoofing.patch | 61 +- patches/webrtc-ip-spoofing.patch | 92 +- patches/windows-theming-bug-modified.patch | 41 +- scripts/data/contentaccessible-manifest.json | 1496 ++++------------- scripts/package.py | 9 +- tests/patches/gfx-probes-packaged.py | 13 +- upstream.sh | 4 +- 33 files changed, 1416 insertions(+), 2242 deletions(-) diff --git a/additions/juggler/TargetRegistry.js b/additions/juggler/TargetRegistry.js index 70b12160c..766228d74 100644 --- a/additions/juggler/TargetRegistry.js +++ b/additions/juggler/TargetRegistry.js @@ -4,7 +4,7 @@ const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js'); const {Preferences} = ChromeUtils.importESModule("resource://gre/modules/Preferences.sys.mjs"); -const {ContextualIdentityService} = ChromeUtils.importESModule("resource://gre/modules/ContextualIdentityService.sys.mjs"); +const {ContextualIdentityService} = ChromeUtils.importESModule("moz-src:///toolkit/components/contextualidentity/ContextualIdentityService.sys.mjs"); const {NetUtil} = ChromeUtils.importESModule('resource://gre/modules/NetUtil.sys.mjs'); const {AppConstants} = ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs"); // This module's scope has no timer globals (unlike the content-side juggler @@ -57,6 +57,8 @@ const SNAPSHOT_SCREENCAST_FPS = 25; const ALL_PERMISSIONS = [ 'geo', 'desktop-notification', + 'local-network', + 'loopback-network', ]; let globalTabAndWindowActivationChain = Promise.resolve(); diff --git a/additions/juggler/components/Juggler.js b/additions/juggler/components/Juggler.js index edc38d409..0fe97afcd 100644 --- a/additions/juggler/components/Juggler.js +++ b/additions/juggler/components/Juggler.js @@ -39,6 +39,7 @@ ActorManagerParent.addJSWindowActors({ }, }, allFrames: true, + safeForUntrustedWebProcess: true, }, }); diff --git a/additions/juggler/content/FrameTree.js b/additions/juggler/content/FrameTree.js index ecc24881b..5f20e6280 100644 --- a/additions/juggler/content/FrameTree.js +++ b/additions/juggler/content/FrameTree.js @@ -68,7 +68,7 @@ export class FrameTree { Ci.nsISupportsWeakReference, ]); - this._wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].createInstance(Ci.nsIWorkerDebuggerManager); + this._wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService(Ci.nsIWorkerDebuggerManager); this._wdmListener = { QueryInterface: ChromeUtils.generateQI([Ci.nsIWorkerDebuggerManagerListener]), onRegister: this._onWorkerCreated.bind(this), diff --git a/additions/juggler/content/Runtime.js b/additions/juggler/content/Runtime.js index 2eb21d7d9..88a3879c3 100644 --- a/additions/juggler/content/Runtime.js +++ b/additions/juggler/content/Runtime.js @@ -543,28 +543,35 @@ class Runtime { resolve = a; reject = b; }); - this._pendingPromises.set(obj.promiseID, {resolve, reject, executionContext, exceptionDetails}); + this._pendingPromises.set(obj.promiseID, {resolve, reject, executionContext, exceptionDetails, promiseObj: obj}); + // Firefox 156 removed Debugger.onPromiseSettled (bug 2044167). As upstream + // Juggler does, attach reactions inside the debuggee that hit a `debugger;` + // statement when the promise settles, and sweep the pending promises from + // onDebuggerStatement. This also works in workers, which have no Xrays. if (this._pendingPromises.size === 1) - this._debugger.onPromiseSettled = this._onPromiseSettled.bind(this); + this._debugger.onDebuggerStatement = this._onDebuggerStatement.bind(this); + executionContext._debuggee.executeInGlobalWithBindings( + 'p.then(() => { debugger; }, () => { debugger; })', {p: obj}, {useInnerBindings: true}); return await promise; } - _onPromiseSettled(obj) { - const pendingPromise = this._pendingPromises.get(obj.promiseID); - if (!pendingPromise) - return; - this._pendingPromises.delete(obj.promiseID); + _onDebuggerStatement() { + for (const [promiseID, pendingPromise] of this._pendingPromises) { + const obj = pendingPromise.promiseObj; + if (obj.promiseState === 'pending') + continue; + this._pendingPromises.delete(promiseID); + if (obj.promiseState === 'fulfilled') { + pendingPromise.resolve({success: true, obj: obj.promiseValue}); + continue; + } + const debuggee = pendingPromise.executionContext._debuggee; + pendingPromise.exceptionDetails.text = debuggee.executeInGlobalWithBindings('e.message', {e: obj.promiseReason}, {useInnerBindings: true}).return; + pendingPromise.exceptionDetails.stack = debuggee.executeInGlobalWithBindings('e.stack', {e: obj.promiseReason}, {useInnerBindings: true}).return; + pendingPromise.resolve({success: false, obj: null}); + } if (!this._pendingPromises.size) - this._debugger.onPromiseSettled = undefined; - - if (obj.promiseState === 'fulfilled') { - pendingPromise.resolve({success: true, obj: obj.promiseValue}); - return; - }; - const debuggee = pendingPromise.executionContext._debuggee; - pendingPromise.exceptionDetails.text = debuggee.executeInGlobalWithBindings('e.message', {e: obj.promiseReason}, {useInnerBindings: true}).return; - pendingPromise.exceptionDetails.stack = debuggee.executeInGlobalWithBindings('e.stack', {e: obj.promiseReason}, {useInnerBindings: true}).return; - pendingPromise.resolve({success: false, obj: null}); + this._debugger.onDebuggerStatement = undefined; } createExecutionContext(domWindow, contextGlobal, auxData) { @@ -597,7 +604,7 @@ class Runtime { } } if (!this._pendingPromises.size) - this._debugger.onPromiseSettled = undefined; + this._debugger.onDebuggerStatement = undefined; this._debugger.removeDebuggee(context._contextGlobal); } @@ -613,7 +620,7 @@ class Runtime { } } if (!this._pendingPromises.size) - this._debugger.onPromiseSettled = undefined; + this._debugger.onDebuggerStatement = undefined; this._debugger.removeDebuggee(destroyedContext._contextGlobal); this._executionContexts.delete(destroyedContext._id); if (destroyedContext._domWindow) diff --git a/ci/run_sundial.py b/ci/run_sundial.py index 63f613e03..e096a6fed 100644 --- a/ci/run_sundial.py +++ b/ci/run_sundial.py @@ -719,10 +719,15 @@ async def scan( f"{base_url.rstrip('/')}/?auto=1&score=1&post=" + urllib.parse.quote(f"http://127.0.0.1:{collector.port}/collect", safe="") ) + # The report reaches the collector as a public page POSTing to loopback. + # From Firefox 156 that request is held for a Local Network Access + # prompt nobody can answer, so exempt sundial's own origin -- the + # permission state the page can read stays stock ("prompt"). async with AsyncCamoufox( executable_path=str(binary), headless=headless, os=os_name, + firefox_user_prefs={"network.lna.skip-domains": host}, i_know_what_im_doing=True, ) as browser: context = await browser.new_context() diff --git a/patches/anti-font-fingerprinting.patch b/patches/anti-font-fingerprinting.patch index 971cac9c1..8cbc83ad3 100644 --- a/patches/anti-font-fingerprinting.patch +++ b/patches/anti-font-fingerprinting.patch @@ -1,6 +1,6 @@ diff --git a/dom/base/RoverfoxStorageManager.cpp b/dom/base/RoverfoxStorageManager.cpp new file mode 100644 -index 0000000000..dcb359d25a +index 0000000000..c172727062 --- /dev/null +++ b/dom/base/RoverfoxStorageManager.cpp @@ -0,0 +1,236 @@ @@ -242,7 +242,7 @@ index 0000000000..dcb359d25a +} // namespace mozilla diff --git a/dom/base/RoverfoxStorageManager.h b/dom/base/RoverfoxStorageManager.h new file mode 100644 -index 0000000000..e6d64378e1 +index 0000000000..92dbb8aa07 --- /dev/null +++ b/dom/base/RoverfoxStorageManager.h @@ -0,0 +1,43 @@ @@ -290,10 +290,10 @@ index 0000000000..e6d64378e1 + +#endif // mozilla_dom_RoverfoxStorageManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index 7e8d942191..e44e7259bf 100644 +index 4cab12c55e..ab6d76a796 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -257,6 +257,7 @@ EXPORTS.mozilla.dom += [ +@@ -260,6 +260,7 @@ EXPORTS.mozilla.dom += [ "RequestCallbackManager.h", "ResizeObserver.h", "ResponsiveImageSelector.h", @@ -301,7 +301,7 @@ index 7e8d942191..e44e7259bf 100644 "SameProcessMessageQueue.h", "ScreenLuminance.h", "ScreenOrientation.h", -@@ -461,6 +462,7 @@ UNIFIED_SOURCES += [ +@@ -475,6 +476,7 @@ UNIFIED_SOURCES += [ "RemoteOuterWindowProxy.cpp", "ResizeObserver.cpp", "ResponsiveImageSelector.cpp", @@ -310,7 +310,7 @@ index 7e8d942191..e44e7259bf 100644 "ScreenLuminance.cpp", "ScreenOrientation.cpp", diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 7cdddd10c1..922ddbc377 100644 +index f6307312b3..64768a46a9 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -56,6 +56,7 @@ @@ -321,7 +321,7 @@ index 7cdddd10c1..922ddbc377 100644 #include "mozilla/ExtensionPolicyService.h" #include "mozilla/FloatingPoint.h" #include "mozilla/FlushType.h" -@@ -241,6 +242,8 @@ +@@ -240,6 +241,8 @@ #include "nsICookieService.h" #include "nsID.h" #include "nsIDOMStorageManager.h" @@ -331,10 +331,10 @@ index 7cdddd10c1..922ddbc377 100644 #include "nsIDeviceSensors.h" #include "nsIDocShell.h" diff --git a/dom/canvas/OffscreenCanvas.cpp b/dom/canvas/OffscreenCanvas.cpp -index 7234240711..df84b793dc 100644 +index 345455c14e..f46f13ebf6 100644 --- a/dom/canvas/OffscreenCanvas.cpp +++ b/dom/canvas/OffscreenCanvas.cpp -@@ -654,6 +654,15 @@ void OffscreenCanvas::ReportBlockedFontFamily(const nsCString& aMsg) const { +@@ -655,6 +655,15 @@ void OffscreenCanvas::ReportBlockedFontFamily(const nsCString& aMsg) const { } } @@ -351,10 +351,10 @@ index 7234240711..df84b793dc 100644 if (NS_IsMainThread()) { nsCOMPtr win = do_QueryInterface(GetRelevantGlobal()); diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h -index 7f56e1c86d..80b050c08b 100644 +index b38f31f547..2321f5acd5 100644 --- a/dom/workers/WorkerPrivate.h +++ b/dom/workers/WorkerPrivate.h -@@ -1107,8 +1107,6 @@ class WorkerPrivate final +@@ -1161,8 +1161,6 @@ class WorkerPrivate final void WorkerScriptLoaded(); @@ -364,10 +364,10 @@ index 7f56e1c86d..80b050c08b 100644 void UpdateContextOptions(const JS::ContextOptions& aContextOptions); diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList.cpp -index b3c22e2bb1..6bdcd2a57c 100644 +index a0b8c260c4..2ea46a9810 100644 --- a/gfx/thebes/gfxPlatformFontList.cpp +++ b/gfx/thebes/gfxPlatformFontList.cpp -@@ -448,6 +448,7 @@ class ListFontsVisibilityProvider final : public FontVisibilityProvider { +@@ -455,6 +455,7 @@ class ListFontsVisibilityProvider final : public FontVisibilityProvider { return mozilla::Nothing(); } void UserFontSetUpdated(gfxUserFontEntry*) override {} @@ -376,10 +376,10 @@ index b3c22e2bb1..6bdcd2a57c 100644 private: diff --git a/gfx/thebes/gfxTextRun.cpp b/gfx/thebes/gfxTextRun.cpp -index fc1293be42..cac43a8b1f 100644 +index f2c42a498e..2191ce6129 100644 --- a/gfx/thebes/gfxTextRun.cpp +++ b/gfx/thebes/gfxTextRun.cpp -@@ -24,6 +24,7 @@ +@@ -18,6 +18,7 @@ #include "mozilla/Likely.h" #include "mozilla/MruCache.h" #include "mozilla/ServoStyleSet.h" @@ -387,27 +387,18 @@ index fc1293be42..cac43a8b1f 100644 #include "mozilla/Sprintf.h" #include "mozilla/StaticPresData.h" #include "mozilla/UniquePtr.h" -@@ -33,6 +34,9 @@ +@@ -33,6 +34,10 @@ + #include "nsStyleConsts.h" + #include "nsStyleUtil.h" #include "nsUnicodeProperties.h" - #include "SharedFontList-impl.h" - #include "TextDrawTarget.h" +#include "mozilla/dom/BrowsingContext.h" +#include "mozilla/dom/Document.h" +#include "nsPIDOMWindow.h" ++#include "nsPIDOMWindowInlines.h" #ifdef XP_WIN # include "gfxWindowsPlatform.h" -@@ -699,7 +703,8 @@ void gfxTextRun::DrawEmphasisMarks( - gfxContext* aContext, gfxTextRun* aMark, gfxFloat aMarkAdvance, - gfx::Point aPt, Range aRange, const PropertyProvider* aProvider, - mozilla::gfx::PaletteCache& aPaletteCache) const { -- MOZ_ASSERT(aRange.end <= GetLength()); -+ MOZ_ASSERT( -+ aRange.end <= GetLength()); - - EmphasisMarkDrawParams params(aContext, aPaletteCache); - params.mark = aMark; -@@ -1841,6 +1846,18 @@ gfxFontGroup::gfxFontGroup(FontVisibilityProvider* aFontVisibilityProvider, +@@ -1871,6 +1876,18 @@ gfxFontGroup::gfxFontGroup(FontVisibilityProvider* aFontVisibilityProvider, mFontVariantEmoji(aVariantEmoji) { // We don't use SetUserFontSet() here, as we want to unconditionally call // EnsureFontList() rather than only do UpdateUserFonts() if it changed. @@ -426,7 +417,7 @@ index fc1293be42..cac43a8b1f 100644 } gfxFontGroup::~gfxFontGroup() { -@@ -2583,8 +2600,9 @@ static Script ResolveScriptForLang(const nsAtom* aLanguage, Script aDefault) { +@@ -2598,8 +2615,9 @@ static Script ResolveScriptForLang(const nsAtom* aLanguage, Script aDefault) { static LangScriptCache sCache; static RWLock sLock("LangScriptCache lock"); @@ -438,20 +429,20 @@ index fc1293be42..cac43a8b1f 100644 { // Try to use a cached value without taking an exclusive lock. -@@ -3418,7 +3436,7 @@ already_AddRefed gfxFontGroup::FindFontForChar( - font = FindFallbackFaceForChar(ff, aCh, aNextCh, presentation); - if (font) { - if (CheckCandidate(font, -- {FontMatchType::Kind::kFontGroup, ff.Generic()})) { +@@ -3479,7 +3497,7 @@ already_AddRefed gfxFontGroup::FindFontForChar( + font = FindFallbackFaceForChar(ff, aCh, aNextCh, presentation); + if (font) { + if (CheckCandidate(font, +- {FontMatchType::Kind::kFontGroup, ff.Generic()})) { + {FontMatchType::Kind::kFontGroup, mFonts[i].Generic()})) { - return font.forget(); - } + return font.forget(); } + } diff --git a/gfx/thebes/gfxTextRun.h b/gfx/thebes/gfxTextRun.h -index 85aecf5fdd..79f4df71a4 100644 +index f04c835506..10ddd68fc1 100644 --- a/gfx/thebes/gfxTextRun.h +++ b/gfx/thebes/gfxTextRun.h -@@ -1401,6 +1401,8 @@ class gfxFontGroup final : public gfxTextRunFactory { +@@ -1433,6 +1433,8 @@ class gfxFontGroup final : public gfxTextRunFactory { uint32_t mFontListGeneration = 0; // platform font list generation for this // fontgroup @@ -461,7 +452,7 @@ index 85aecf5fdd..79f4df71a4 100644 * Textrun creation short-cuts for special cases where we don't need to * call a font shaper to generate glyphs. diff --git a/layout/base/nsPresContext.cpp b/layout/base/nsPresContext.cpp -index b2394c6106..da755e553c 100644 +index 02a771ca93..8d6bbebed3 100644 --- a/layout/base/nsPresContext.cpp +++ b/layout/base/nsPresContext.cpp @@ -426,6 +426,10 @@ bool nsPresContext::IsChrome() const { diff --git a/patches/audio-fingerprint-manager.patch b/patches/audio-fingerprint-manager.patch index 13ae5844c..8c64410d9 100644 --- a/patches/audio-fingerprint-manager.patch +++ b/patches/audio-fingerprint-manager.patch @@ -1,15 +1,16 @@ diff --git a/dom/base/AudioFingerprintManager.cpp b/dom/base/AudioFingerprintManager.cpp new file mode 100644 -index 0000000000..6ec4dc5265 +index 0000000000..22a7d41b3c --- /dev/null +++ b/dom/base/AudioFingerprintManager.cpp -@@ -0,0 +1,106 @@ +@@ -0,0 +1,107 @@ +#include "AudioFingerprintManager.h" +#include "nsTHashMap.h" // Must come before RoverfoxStorageManager.h for template defs +#include "nsHashKeys.h" // For nsStringHashKey +#include "RoverfoxStorageManager.h" +#include "MaskConfig.hpp" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" +#include "mozilla/dom/BrowsingContext.h" +#include @@ -148,18 +149,18 @@ index 0000000000..6848990431 + +#endif // mozilla_dom_AudioFingerprintManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index 49c8ac12fa..b503ecab2b 100644 +index ab6d76a796..e8f35ff5c4 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -142,6 +142,7 @@ EXPORTS.mozilla.dom += [ - "AnimationFrameProvider.h", +@@ -143,6 +143,7 @@ EXPORTS.mozilla.dom += [ "AnonymousContent.h", + "AtomAttributes.h", "Attr.h", + "AudioFingerprintManager.h", "AutoPrintEventDispatcher.h", "AutoSuppressEventHandlingAndSuspend.h", "BarProps.h", -@@ -293,6 +294,11 @@ EXPORTS.mozilla.dom += [ +@@ -302,6 +303,11 @@ EXPORTS.mozilla.dom += [ "WindowProxyHolder.h", ] @@ -172,19 +173,19 @@ index 49c8ac12fa..b503ecab2b 100644 EXPORTS.mozilla.dom += [ "FuzzingFunctions.h", diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 0545014921..1cc5156ae0 100644 +index 64768a46a9..fb3a1f640d 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -88,6 +88,7 @@ - #include "mozilla/TimeStamp.h" #include "mozilla/UniquePtr.h" + #include "mozilla/Utf16.h" #include "mozilla/dom/AudioContext.h" +#include "AudioFingerprintManager.h" #include "mozilla/dom/AutoEntryScript.h" #include "mozilla/dom/BarProps.h" #include "mozilla/dom/BindingDeclarations.h" -@@ -7721,6 +7722,29 @@ void nsGlobalWindowInner::ForgetSharedWorker(SharedWorker* aSharedWorker) { - mSharedWorkers.RemoveElement(aSharedWorker); +@@ -7779,6 +7780,29 @@ void nsGlobalWindowInner::UpdateSharedWorkerTimezoneOverride( + } } + @@ -214,10 +215,10 @@ index 0545014921..1cc5156ae0 100644 bool aGranted) { // Invalidate cached StorageAllowed field so that calls to GetLocalStorage diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index 43b3ef9521..a1a0fc5d59 100644 +index a1162b29e3..eec89694f8 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -674,6 +674,9 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, +@@ -678,6 +678,9 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, mozilla::dom::Worklet* GetPaintWorklet(mozilla::ErrorResult& aRv); @@ -344,7 +345,7 @@ index 3c80514a1d..befe6ee2bc 100644 for (size_t i = 0; i < length; ++i) { const float value = tmpBuffer[i]; diff --git a/dom/media/webaudio/AudioBuffer.cpp b/dom/media/webaudio/AudioBuffer.cpp -index 7e684a02e5..5d36f2910d 100644 +index 74fe4e6470..2416f63fa1 100644 --- a/dom/media/webaudio/AudioBuffer.cpp +++ b/dom/media/webaudio/AudioBuffer.cpp @@ -19,6 +19,9 @@ @@ -411,10 +412,10 @@ index 7e684a02e5..5d36f2910d 100644 return; } diff --git a/dom/media/webaudio/moz.build b/dom/media/webaudio/moz.build -index b962c175f1..0bafa2f0a7 100644 +index 3bd802d715..f09eb63946 100644 --- a/dom/media/webaudio/moz.build +++ b/dom/media/webaudio/moz.build -@@ -155,3 +155,6 @@ LOCAL_INCLUDES += [".."] +@@ -152,3 +152,6 @@ LOCAL_INCLUDES += [".."] # DOM Mask LOCAL_INCLUDES += ["/camoucfg"] @@ -422,10 +423,10 @@ index b962c175f1..0bafa2f0a7 100644 +# AudioFingerprintManager in dom/base +LOCAL_INCLUDES += ["/dom/base"] diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index ae2d14e105..16afc72899 100644 +index a25ad800a0..ab1c306617 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -930,6 +930,12 @@ partial interface Window { +@@ -937,6 +937,12 @@ partial interface Window { readonly attribute VisualViewport visualViewport; }; diff --git a/patches/contentaccessible-parity.patch b/patches/contentaccessible-parity.patch index 5bbe305c1..dd1f42e53 100644 --- a/patches/contentaccessible-parity.patch +++ b/patches/contentaccessible-parity.patch @@ -12,15 +12,13 @@ content page: chrome://browser/content/browser-development-helpers.js was present, because it is gated #ifndef MOZILLA_OFFICIAL and Camoufox is not an official build. - Its presence is a positive "built from source" tell. Two RUNTIME - AppConstants.MOZILLA_OFFICIAL checks reach it -- browser-main.js loads the - script and browser-init.js calls DevelopmentHelpers.init() from - _delayedStartup -- so dropping the file from the package alone throws - `ReferenceError: DevelopmentHelpers is not defined` there. That is not just a - console error: _delayedStartup never reaches its - "browser-delayed-startup-finished" notification, and juggler's newPage awaits - exactly that, so every Playwright launch hangs on its first page. Both call - sites go with the file. + Its presence is a positive "built from source" tell. Two other places reach + it -- browser-main.js loads the script, and BrowserComponents.manifest + registers DevelopmentHelpers.init as a browser-window-delayed-startup + category entry (browser-init.js called it directly before Firefox 156) -- so + dropping the file from the package alone breaks _delayedStartup, which must + reach its "browser-delayed-startup-finished" notification because juggler's + newPage awaits exactly that. Both call sites go with the file. Setting MOZILLA_OFFICIAL=1 would fix the second one at the source, but it also moves telemetry, update-channel and branding defaults that Camoufox sets @@ -28,23 +26,8 @@ deliberately, so the narrower change is here. Guard: tests/patches/contentaccessible-parity.py. -diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js -index cc1fe4b27b..d8a76b601d 100644 ---- a/browser/base/content/browser-init.js -+++ b/browser/base/content/browser-init.js -@@ -841,10 +841,6 @@ var gBrowserInit = { - gDataNotificationInfoBar.init(); - } - -- if (!AppConstants.MOZILLA_OFFICIAL) { -- DevelopmentHelpers.init(); -- } -- - gExtensionsNotifications.init(); - - let wasMinimized = window.windowState == window.STATE_MINIMIZED; diff --git a/browser/base/content/browser-main.js b/browser/base/content/browser-main.js -index 1af1dd9d56..f3fd55631b 100644 +index f7f364290e..9d9be0eb33 100644 --- a/browser/base/content/browser-main.js +++ b/browser/base/content/browser-main.js @@ -11,9 +11,6 @@ @@ -58,10 +41,10 @@ index 1af1dd9d56..f3fd55631b 100644 Services.scriptloader.loadSubScript("chrome://browser/content/sidebar/browser-sidebar.js", this); Services.scriptloader.loadSubScript("chrome://browser/content/browser-customtitlebar.js", this); diff --git a/browser/base/jar.mn b/browser/base/jar.mn -index dd0f873535..aa102d3ba3 100644 +index 783c67d397..2118fe4611 100644 --- a/browser/base/jar.mn +++ b/browser/base/jar.mn -@@ -45,9 +45,6 @@ browser.jar: +@@ -41,9 +41,6 @@ browser.jar: content/browser/browser-context.js (content/browser-context.js) content/browser/browser-customization.js (content/browser-customization.js) content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js) @@ -71,6 +54,20 @@ index dd0f873535..aa102d3ba3 100644 content/browser/browser-fullScreenAndPointerLock.js (content/browser-fullScreenAndPointerLock.js) content/browser/browser-gestureSupport.js (content/browser-gestureSupport.js) content/browser/browser-init.js (content/browser-init.js) +diff --git a/browser/components/BrowserComponents.manifest b/browser/components/BrowserComponents.manifest +index 7214821fc5..489c64ea19 100644 +--- a/browser/components/BrowserComponents.manifest ++++ b/browser/components/BrowserComponents.manifest +@@ -89,9 +89,6 @@ category browser-window-delayed-startup chrome://browser/content/browser-fullScr + #ifdef MOZ_DATA_REPORTING + category browser-window-delayed-startup chrome://browser/content/browser-data-submission-info-bar.js gDataNotificationInfoBar.init + #endif +-#ifndef MOZILLA_OFFICIAL +-category browser-window-delayed-startup chrome://browser/content/browser-development-helpers.js DevelopmentHelpers.init +-#endif + category browser-window-delayed-startup chrome://browser/content/browser-addons.js gExtensionsNotifications.init + category browser-window-delayed-startup chrome://browser/content/browser-captivePortal.js CaptivePortalWatcher.delayedStartup + diff --git a/toolkit/crashreporter/jar.mn b/toolkit/crashreporter/jar.mn index 641fcaa2fe..0d9f215fd2 100644 --- a/toolkit/crashreporter/jar.mn diff --git a/patches/cross-process-storage.patch b/patches/cross-process-storage.patch index e9940d064..c51daa8cd 100644 --- a/patches/cross-process-storage.patch +++ b/patches/cross-process-storage.patch @@ -1,8 +1,8 @@ diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp -index a63cb68d9f..2a96a949e3 100644 +index a3b9fd9ead..fb4011d2c3 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp -@@ -1265,6 +1265,28 @@ mozilla::ipc::IPCResult ContentParent::RecvCreateGMPService() { +@@ -1276,6 +1276,28 @@ mozilla::ipc::IPCResult ContentParent::RecvCreateGMPService() { return IPC_OK(); } @@ -28,14 +28,14 @@ index a63cb68d9f..2a96a949e3 100644 + return IPC_OK(); +} + - IPCResult ContentParent::RecvAttributionEvent( - const nsACString& aHost, PrivateAttributionImpressionType aType, - uint32_t aIndex, const nsAString& aAd, const nsACString& aTargetHost) { + static mozilla::glean::security::FissionPrincipalsExtra + GetAndLogPrincipalValidationFailure(nsIPrincipal* aPrincipal, + const char* aMethod) { diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h -index 4c84f11137..a090082892 100644 +index 1f7b097d00..a2f3ca8c04 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h -@@ -363,6 +363,11 @@ class ContentParent final : public PContentParent, +@@ -367,6 +367,11 @@ class ContentParent final : public PContentParent, Endpoint&& aParentEndpoint); mozilla::ipc::IPCResult RecvCreateGMPService(); @@ -46,12 +46,12 @@ index 4c84f11137..a090082892 100644 + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ContentParent, nsIObserver) - NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTING_ISUPPORTS_FINAL diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl -index edb1259e51..10a0bea039 100644 +index 78edbcaac1..b18ffd969f 100644 --- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl -@@ -1136,6 +1136,13 @@ parent: +@@ -1163,6 +1163,13 @@ parent: async CreateGMPService(); @@ -83,10 +83,10 @@ index d562255670..6ea4f999b0 100644 description = This must be synchronous until quota file streams become non-blocking. The synchronous message is never used on the main thread or the PBackground thread or a DOM worker threed. diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp -index 6e2b95ff7f..c13dd1eb5b 100644 +index 916d0e3728..f2127ef18b 100644 --- a/modules/libpref/Preferences.cpp +++ b/modules/libpref/Preferences.cpp -@@ -6517,6 +6517,8 @@ static const PrefListEntry sDynamicPrefOverrideList[]{ +@@ -7315,6 +7315,8 @@ static const PrefListEntry sDynamicPrefOverrideList[]{ PREF_LIST_ENTRY("toolkit.mozprotocol.url"), PREF_LIST_ENTRY("toolkit.telemetry.log.level"), PREF_LIST_ENTRY("ui."), diff --git a/patches/debugger-invisible-to-content.patch b/patches/debugger-invisible-to-content.patch index 13526b9e9..8699bfd96 100644 --- a/patches/debugger-invisible-to-content.patch +++ b/patches/debugger-invisible-to-content.patch @@ -1,8 +1,8 @@ diff --git a/js/src/builtin/Promise.cpp b/js/src/builtin/Promise.cpp -index 273bb542d0..9dc4c2b573 100644 +index a3bb11ee07..73c11a087e 100644 --- a/js/src/builtin/Promise.cpp +++ b/js/src/builtin/Promise.cpp -@@ -6357,7 +6357,7 @@ static MOZ_ALWAYS_INLINE bool IsPromiseThenOrCatchRetValImplicitlyUsed( +@@ -6617,7 +6617,7 @@ static MOZ_ALWAYS_INLINE bool IsPromiseThenOrCatchRetValImplicitlyUsed( } // If devtools is opened, the current realm will become debuggee. @@ -12,10 +12,10 @@ index 273bb542d0..9dc4c2b573 100644 } diff --git a/js/src/debugger/DebugAPI.h b/js/src/debugger/DebugAPI.h -index bfe4060775..a76bff1684 100644 +index cb1998358d..58ec7e549f 100644 --- a/js/src/debugger/DebugAPI.h +++ b/js/src/debugger/DebugAPI.h -@@ -311,6 +311,10 @@ class DebugAPI { +@@ -305,6 +305,10 @@ class DebugAPI { // Whether any Debugger is observing native function call. static bool debuggerObservesNativeCall(GlobalObject* global); @@ -27,18 +27,18 @@ index bfe4060775..a76bff1684 100644 * Return true if the given global is being observed by at least one * Debugger that is tracking allocations. diff --git a/js/src/debugger/Debugger.cpp b/js/src/debugger/Debugger.cpp -index 858be3c571..0250d6d72c 100644 +index 895725a658..744e100a96 100644 --- a/js/src/debugger/Debugger.cpp +++ b/js/src/debugger/Debugger.cpp -@@ -542,6 +542,7 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg) +@@ -543,6 +543,7 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg) + debuggees(cx->zone()), uncaughtExceptionHook(nullptr), - allowUnobservedAsmJS(false), allowUnobservedWasm(false), + invisibleToContent(false), exclusiveDebuggerOnEval(false), inspectNativeCallArguments(false), collectCoverageInfo(false), -@@ -806,6 +807,20 @@ bool DebugAPI::debuggerObservesNativeCall(GlobalObject* global) { +@@ -820,6 +821,20 @@ bool DebugAPI::debuggerObservesNativeCall(GlobalObject* global) { global, [=](Debugger* dbg) { return dbg->observesNativeCalls(); }); } @@ -59,15 +59,7 @@ index 858be3c571..0250d6d72c 100644 /* static */ bool DebugAPI::hasExceptionUnwindHook(GlobalObject* global) { return Debugger::hasLiveHook(global, Debugger::OnExceptionUnwind); -@@ -3529,14 +3544,14 @@ Debugger::IsObserving Debugger::observesAllExecution() const { - } - - Debugger::IsObserving Debugger::observesAsmJS() const { -- if (!allowUnobservedAsmJS) { -+ if (!allowUnobservedAsmJS && !invisibleToContent) { - return Observing; - } - return NotObserving; +@@ -3556,7 +3571,7 @@ Debugger::IsObserving Debugger::observesAllExecution() const { } Debugger::IsObserving Debugger::observesWasm() const { @@ -76,8 +68,8 @@ index 858be3c571..0250d6d72c 100644 return Observing; } return NotObserving; -@@ -4256,6 +4271,8 @@ struct MOZ_STACK_CLASS Debugger::CallData { - bool setAllowUnobservedAsmJS(); +@@ -4335,6 +4350,8 @@ struct MOZ_STACK_CLASS Debugger::CallData { + bool setUncaughtExceptionHook(); bool getAllowUnobservedWasm(); bool setAllowUnobservedWasm(); + bool getInvisibleToContent(); @@ -85,7 +77,7 @@ index 858be3c571..0250d6d72c 100644 bool getExclusiveDebuggerOnEval(); bool setExclusiveDebuggerOnEval(); bool getInspectNativeCallArguments(); -@@ -4564,6 +4581,29 @@ bool Debugger::CallData::setAllowUnobservedWasm() { +@@ -4606,6 +4623,28 @@ bool Debugger::CallData::setAllowUnobservedWasm() { return true; } @@ -104,7 +96,6 @@ index 858be3c571..0250d6d72c 100644 + GlobalObject* global = iter.get(); + Realm* realm = global->realm(); + realm->updateAllDebuggersInvisibleToContent(); -+ realm->updateDebuggerObservesAsmJS(); + realm->updateDebuggerObservesWasm(); + } + @@ -115,24 +106,24 @@ index 858be3c571..0250d6d72c 100644 bool Debugger::CallData::getExclusiveDebuggerOnEval() { args.rval().setBoolean(dbg->exclusiveDebuggerOnEval); return true; -@@ -5074,6 +5114,7 @@ bool Debugger::addDebuggeeGlobal(JSContext* cx, Handle global) { +@@ -5117,6 +5156,7 @@ bool Debugger::addDebuggeeGlobal(JSContext* cx, Handle global) { // (5) AutoRestoreRealmDebugMode debugModeGuard(debuggeeRealm); debuggeeRealm->setIsDebuggee(); + debuggeeRealm->updateAllDebuggersInvisibleToContent(); - debuggeeRealm->updateDebuggerObservesAsmJS(); debuggeeRealm->updateDebuggerObservesWasm(); debuggeeRealm->updateDebuggerObservesCoverage(); -@@ -5196,6 +5237,7 @@ void Debugger::removeDebuggeeGlobal(JS::GCContext* gcx, GlobalObject* global, + if (observesAllExecution() && +@@ -5238,6 +5278,7 @@ void Debugger::removeDebuggeeGlobal(JS::GCContext* gcx, GlobalObject* global, global->realm()->unsetIsDebuggee(); } else { global->realm()->updateDebuggerObservesAllExecution(); + global->realm()->updateAllDebuggersInvisibleToContent(); - global->realm()->updateDebuggerObservesAsmJS(); global->realm()->updateDebuggerObservesWasm(); global->realm()->updateDebuggerObservesCoverage(); -@@ -6879,6 +6921,8 @@ const JSPropertySpec Debugger::properties[] = { - setAllowUnobservedAsmJS), + } +@@ -6942,6 +6983,8 @@ const JSPropertySpec Debugger::properties[] = { + setUncaughtExceptionHook), JS_DEBUG_PSGS("allowUnobservedWasm", getAllowUnobservedWasm, setAllowUnobservedWasm), + JS_DEBUG_PSGS("invisibleToContent", getInvisibleToContent, @@ -141,24 +132,24 @@ index 858be3c571..0250d6d72c 100644 setCollectCoverageInfo), JS_DEBUG_PSGS("exclusiveDebuggerOnEval", getExclusiveDebuggerOnEval, diff --git a/js/src/debugger/Debugger.h b/js/src/debugger/Debugger.h -index 517dc5cc25..6156c921c6 100644 +index bcf6cb8282..c2dfd45d24 100644 --- a/js/src/debugger/Debugger.h +++ b/js/src/debugger/Debugger.h -@@ -642,6 +642,13 @@ class Debugger : private mozilla::LinkedListElement { - bool allowUnobservedAsmJS; +@@ -640,6 +640,13 @@ class Debugger : private mozilla::LinkedListElement { + HeapPtr uncaughtExceptionHook; /* Strong reference. */ bool allowUnobservedWasm; + // When true, this Debugger's debuggees do not take on the debuggee side + // effects that content can observe: extra stack capture for throws, async + // stack capture, the Promise return-value optimization being disabled, and -+ // asm.js/wasm being deoptimized. Lets an embedder attach a Debugger without ++ // wasm being deoptimized. Lets an embedder attach a Debugger without + // the debuggee realm becoming distinguishable from one that has no debugger. + bool invisibleToContent; + // When this flag is true, this debugger should be the only one to have its // hooks called when it evaluates via Frame.evalWithBindings, // Object.executeInGlobalWithBindings or Object.call. -@@ -1025,6 +1032,8 @@ class Debugger : private mozilla::LinkedListElement { +@@ -1035,6 +1042,8 @@ class Debugger : private mozilla::LinkedListElement { bool isExclusiveDebuggerOnEval() const; @@ -168,10 +159,10 @@ index 517dc5cc25..6156c921c6 100644 [[nodiscard]] static bool ensureExecutionObservabilityOfFrame( JSContext* cx, AbstractFramePtr frame); diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp -index 6df2fc69cd..b93285b7f8 100644 +index 567402e54e..5ce789e349 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp -@@ -5034,7 +5034,7 @@ JS_PUBLIC_API bool JS::IsAsyncStackCaptureEnabledForRealm(JSContext* cx) { +@@ -5078,7 +5078,7 @@ JS_PUBLIC_API bool JS::IsAsyncStackCaptureEnabledForRealm(JSContext* cx) { } if (!cx->options().asyncStackCaptureDebuggeeOnly() || @@ -181,10 +172,10 @@ index 6df2fc69cd..b93285b7f8 100644 } diff --git a/js/src/vm/Realm.cpp b/js/src/vm/Realm.cpp -index e9959dc153..b16bcd07f5 100644 +index 5417e8b5d2..0684f1be95 100644 --- a/js/src/vm/Realm.cpp +++ b/js/src/vm/Realm.cpp -@@ -439,6 +439,24 @@ void Realm::setNewObjectMetadata(JSContext* cx, HandleObject obj) { +@@ -442,6 +442,24 @@ void Realm::setNewObjectMetadata(JSContext* cx, HandleObject obj) { } } @@ -209,7 +200,7 @@ index e9959dc153..b16bcd07f5 100644 void Realm::updateDebuggerObservesFlag(unsigned flag) { MOZ_ASSERT(isDebuggee()); MOZ_ASSERT(flag == DebuggerObservesAllExecution || -@@ -653,7 +664,7 @@ bool Realm::shouldCaptureStackForThrow() { +@@ -641,7 +659,7 @@ bool Realm::shouldCaptureStackForThrow() { // To match other browsers, we always capture a stack trace if the realm is a // debuggee (this includes the devtools console being open) or if unlimited // stack traces have been enabled for this realm (used in automation). @@ -219,20 +210,20 @@ index e9959dc153..b16bcd07f5 100644 } diff --git a/js/src/vm/Realm.h b/js/src/vm/Realm.h -index c60b7da46f..7bbfc58948 100644 +index b10dcc451c..087f93b90d 100644 --- a/js/src/vm/Realm.h +++ b/js/src/vm/Realm.h -@@ -407,6 +407,9 @@ class JS::Realm : public JS::shadow::Realm { - DebuggerObservesCoverage = 1 << 3, - DebuggerObservesWasm = 1 << 4, - DebuggerObservesNativeCall = 1 << 5, +@@ -413,6 +413,9 @@ class JS::Realm : public JS::shadow::Realm { + DebuggerObservesCoverage = 1 << 2, + DebuggerObservesWasm = 1 << 3, + DebuggerObservesNativeCall = 1 << 4, + // Set only when the realm has debuggers and *every* one of them has + // invisibleToContent set. See isDebuggeeVisibleToContent. -+ AllDebuggersInvisibleToContent = 1 << 6, ++ AllDebuggersInvisibleToContent = 1 << 5, }; uint32_t debugModeBits_ = 0; friend class js::AutoRestoreRealmDebugMode; -@@ -720,6 +723,16 @@ class JS::Realm : public JS::shadow::Realm { +@@ -726,6 +729,16 @@ class JS::Realm : public JS::shadow::Realm { // object. bool isDebuggee() const { return !!(debugModeBits_ & IsDebuggee); } @@ -249,7 +240,7 @@ index c60b7da46f..7bbfc58948 100644 void setIsDebuggee(); void unsetIsDebuggee(); -@@ -731,6 +744,7 @@ class JS::Realm : public JS::shadow::Realm { +@@ -737,6 +750,7 @@ class JS::Realm : public JS::shadow::Realm { isTracingExecution_ = true; setIsDebuggee(); updateDebuggerObservesAllExecution(); @@ -257,7 +248,7 @@ index c60b7da46f..7bbfc58948 100644 } void disableExecutionTracing() { -@@ -744,6 +758,8 @@ class JS::Realm : public JS::shadow::Realm { +@@ -750,6 +764,8 @@ class JS::Realm : public JS::shadow::Realm { updateDebuggerObservesAllExecution(); if (!hasDebuggers()) { unsetIsDebuggee(); diff --git a/patches/fingerprint-injection.patch b/patches/fingerprint-injection.patch index a4cdcc74c..90c48931c 100644 --- a/patches/fingerprint-injection.patch +++ b/patches/fingerprint-injection.patch @@ -1,8 +1,8 @@ diff --git a/browser/app/moz.build b/browser/app/moz.build -index 28a9650680..9251ac4547 100644 +index db09aba7e9..57a4ecd214 100644 --- a/browser/app/moz.build +++ b/browser/app/moz.build -@@ -186,6 +186,9 @@ for icon in ("firefox", "document", "newwindow", "newtab", "pbmode", "document_p +@@ -290,6 +290,9 @@ for icon in ( icon, ) @@ -13,10 +13,10 @@ index 28a9650680..9251ac4547 100644 WINCONSOLE = True else: diff --git a/dom/base/moz.build b/dom/base/moz.build -index e25ac44451..13839534ad 100644 +index e8f35ff5c4..88cea77d60 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -647,3 +647,6 @@ GeneratedFile( +@@ -664,3 +664,6 @@ GeneratedFile( "/servo/components/style/properties/counted_unknown_properties.py", ], ) @@ -25,7 +25,7 @@ index e25ac44451..13839534ad 100644 +LOCAL_INCLUDES += ["/camoucfg"] \ No newline at end of file diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 4bc6688f9a..693779ca08 100644 +index fb3a1f640d..bc65e5256b 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -3,6 +3,7 @@ @@ -36,25 +36,25 @@ index 4bc6688f9a..693779ca08 100644 #include #include -@@ -3704,6 +3705,8 @@ void nsGlobalWindowInner::SetName(const nsAString& aName, - } +@@ -3718,6 +3719,8 @@ void nsGlobalWindowInner::SetName(const nsAString& aName, - double nsGlobalWindowInner::GetInnerWidth(ErrorResult& aError) { + double nsGlobalWindowInner::GetInnerWidth(CallerType aCallerType, + ErrorResult& aError) { + if (auto value = MaskConfig::GetDouble("window.innerWidth")) + return value.value(); - FORWARD_TO_OUTER_OR_THROW(GetInnerWidthOuter, (aError), aError, 0); - } - -@@ -3715,6 +3718,8 @@ nsresult nsGlobalWindowInner::GetInnerWidth(double* aWidth) { + FORWARD_TO_OUTER_OR_THROW(GetInnerWidthOuter, (aCallerType, aError), aError, + 0); } +@@ -3731,6 +3734,8 @@ nsresult nsGlobalWindowInner::GetInnerWidth(CallerType aCallerType, - double nsGlobalWindowInner::GetInnerHeight(ErrorResult& aError) { + double nsGlobalWindowInner::GetInnerHeight(CallerType aCallerType, + ErrorResult& aError) { + if (auto value = MaskConfig::GetDouble("window.innerHeight")) + return value.value(); - // We ignore aCallerType; we only have that argument because some other things - // called by GetReplaceableWindowCoord need it. If this ever changes, fix - // nsresult nsGlobalWindowInner::GetInnerHeight(double* aInnerWidth) -@@ -3731,6 +3736,12 @@ nsresult nsGlobalWindowInner::GetInnerHeight(double* aHeight) { + FORWARD_TO_OUTER_OR_THROW(GetInnerHeightOuter, (aCallerType, aError), aError, + 0); + } +@@ -3744,6 +3749,12 @@ nsresult nsGlobalWindowInner::GetInnerHeight(CallerType aCallerType, int32_t nsGlobalWindowInner::GetOuterWidth(CallerType aCallerType, ErrorResult& aError) { @@ -67,7 +67,7 @@ index 4bc6688f9a..693779ca08 100644 FORWARD_TO_OUTER_OR_THROW(GetOuterWidthOuter, (aCallerType, aError), aError, 0); } -@@ -3751,11 +3762,13 @@ double nsGlobalWindowInner::ScreenEdgeSlopY() const { +@@ -3764,11 +3775,13 @@ double nsGlobalWindowInner::ScreenEdgeSlopY() const { int32_t nsGlobalWindowInner::GetScreenX(CallerType aCallerType, ErrorResult& aError) { @@ -81,7 +81,7 @@ index 4bc6688f9a..693779ca08 100644 FORWARD_TO_OUTER_OR_THROW(GetScreenYOuter, (aCallerType, aError), aError, 0); } -@@ -3789,6 +3802,8 @@ static nsPresContext* GetPresContextForRatio(Document* aDoc) { +@@ -3802,6 +3815,8 @@ static nsPresContext* GetPresContextForRatio(Document* aDoc) { double nsGlobalWindowInner::GetDevicePixelRatio(CallerType aCallerType, ErrorResult& aError) { ENSURE_ACTIVE_DOCUMENT(aError, 0.0); @@ -91,7 +91,7 @@ index 4bc6688f9a..693779ca08 100644 RefPtr presContext = GetPresContextForRatio(mDoc); if (NS_WARN_IF(!presContext)) { diff --git a/dom/base/nsScreen.cpp b/dom/base/nsScreen.cpp -index de9a6a4d11..78849001c5 100644 +index 3b48a7f1e2..4b989dd48a 100644 --- a/dom/base/nsScreen.cpp +++ b/dom/base/nsScreen.cpp @@ -4,6 +4,8 @@ @@ -103,7 +103,7 @@ index de9a6a4d11..78849001c5 100644 #include "mozilla/GeckoBindings.h" #include "mozilla/dom/BrowsingContextBinding.h" #include "mozilla/dom/Document.h" -@@ -44,6 +46,10 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(nsScreen, DOMEventTargetHelper, +@@ -45,6 +47,10 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(nsScreen, DOMEventTargetHelper, mScreenOrientation) int32_t nsScreen::PixelDepth() { @@ -114,7 +114,7 @@ index de9a6a4d11..78849001c5 100644 // Return 24 to prevent fingerprinting. if (ShouldResistFingerprinting(RFPTarget::ScreenPixelDepth)) { return 24; -@@ -99,6 +105,12 @@ CSSIntRect nsScreen::GetRect() { +@@ -100,6 +106,12 @@ CSSIntRect nsScreen::GetRect() { } CSSIntRect nsScreen::GetAvailRect() { @@ -128,7 +128,7 @@ index de9a6a4d11..78849001c5 100644 if (ShouldResistFingerprinting(RFPTarget::ScreenAvailRect)) { return GetTopWindowInnerRectForRFP(); diff --git a/dom/workers/WorkerNavigator.cpp b/dom/workers/WorkerNavigator.cpp -index e9ebd3e01b..c6f64371f2 100644 +index 519668019e..078d0d975a 100644 --- a/dom/workers/WorkerNavigator.cpp +++ b/dom/workers/WorkerNavigator.cpp @@ -3,6 +3,7 @@ @@ -139,7 +139,7 @@ index e9ebd3e01b..c6f64371f2 100644 #include "ErrorList.h" #include "MainThreadUtils.h" -@@ -106,6 +107,9 @@ JSObject* WorkerNavigator::WrapObject(JSContext* aCx, +@@ -111,6 +112,9 @@ JSObject* WorkerNavigator::WrapObject(JSContext* aCx, } bool WorkerNavigator::GlobalPrivacyControl() const { @@ -149,7 +149,7 @@ index e9ebd3e01b..c6f64371f2 100644 bool gpcStatus = StaticPrefs::privacy_globalprivacycontrol_enabled(); if (!gpcStatus) { JSObject* jso = GetWrapper(); -@@ -128,6 +132,8 @@ void WorkerNavigator::SetLanguages(const nsTArray& aLanguages) { +@@ -134,6 +138,8 @@ void WorkerNavigator::SetLanguages(const nsTArray& aLanguages) { void WorkerNavigator::GetAppVersion(nsString& aAppVersion, CallerType aCallerType, ErrorResult& aRv) const { @@ -158,7 +158,7 @@ index e9ebd3e01b..c6f64371f2 100644 WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); MOZ_ASSERT(workerPrivate); -@@ -150,6 +156,8 @@ void WorkerNavigator::GetAppVersion(nsString& aAppVersion, +@@ -156,6 +162,8 @@ void WorkerNavigator::GetAppVersion(nsString& aAppVersion, void WorkerNavigator::GetPlatform(nsString& aPlatform, CallerType aCallerType, ErrorResult& aRv) const { @@ -167,7 +167,7 @@ index e9ebd3e01b..c6f64371f2 100644 WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); MOZ_ASSERT(workerPrivate); -@@ -210,6 +218,8 @@ class GetUserAgentRunnable final : public WorkerMainThreadRunnable { +@@ -216,6 +224,8 @@ class GetUserAgentRunnable final : public WorkerMainThreadRunnable { void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType, ErrorResult& aRv) const { @@ -176,7 +176,7 @@ index e9ebd3e01b..c6f64371f2 100644 WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); MOZ_ASSERT(workerPrivate); -@@ -221,6 +231,8 @@ void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType, +@@ -227,6 +237,8 @@ void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType, } uint64_t WorkerNavigator::HardwareConcurrency() const { diff --git a/patches/font-hijacker.patch b/patches/font-hijacker.patch index bc5aa2dad..4a2c299c3 100644 --- a/patches/font-hijacker.patch +++ b/patches/font-hijacker.patch @@ -1,16 +1,16 @@ diff --git a/gfx/thebes/CoreTextFontList.cpp b/gfx/thebes/CoreTextFontList.cpp -index 09cc159cad..d999473501 100644 +index b6696c70c4..099c8efa19 100644 --- a/gfx/thebes/CoreTextFontList.cpp +++ b/gfx/thebes/CoreTextFontList.cpp -@@ -4,6 +4,7 @@ +@@ -6,6 +6,7 @@ #include "AppleUtils.h" - #include "CoreTextFontList.h" + #include "MainThreadUtils.h" +#include "MaskConfig.hpp" + #include "SharedFontList-impl.h" #include "gfxFontConstants.h" #include "gfxMacFont.h" - #include "gfxUserFontSet.h" -@@ -1007,7 +1008,12 @@ CoreTextFontList::CoreTextFontList() +@@ -1077,7 +1078,12 @@ CoreTextFontList::CoreTextFontList() #ifdef MOZ_BUNDLED_FONTS // We activate bundled fonts if the pref is > 0 (on) or < 0 (auto), only an // explicit value of 0 (off) will disable them. @@ -24,7 +24,7 @@ index 09cc159cad..d999473501 100644 auto timerId = glean::fontlist::bundledfonts_activate.Start(); ActivateBundledFonts(); glean::fontlist::bundledfonts_activate.StopAndAccumulate( -@@ -1475,6 +1481,11 @@ gfxFontEntry* CoreTextFontList::LookupLocalFont( +@@ -1545,6 +1551,11 @@ already_AddRefed CoreTextFontList::LookupLocalFont( // Reset our string length to match the actual C string we got, which will // usually be much shorter than the maximal buffer we allocated. key.Truncate(strlen(key.get())); @@ -36,32 +36,34 @@ index 09cc159cad..d999473501 100644 ToLowerCase(key); // If the family can't be looked up, this font is not available for use. FontFamily family = FindFamily(aFontVisibilityProvider, key); -@@ -1482,8 +1493,10 @@ gfxFontEntry* CoreTextFontList::LookupLocalFont( +@@ -1552,9 +1563,11 @@ already_AddRefed CoreTextFontList::LookupLocalFont( return nullptr; } -- return new CTFontEntry(aFontName, fontRef, aWeightForEntry, aStretchForEntry, -- aStyleForEntry, false, true); -+ auto* fe = new CTFontEntry(aFontName, fontRef, aWeightForEntry, -+ aStretchForEntry, aStyleForEntry, false, true); +- return MakeAndAddRef(aFontName, fontRef, aWeightForEntry, +- aWidthForEntry, aStyleForEntry, false, +- true); ++ RefPtr fe = ++ MakeRefPtr(aFontName, fontRef, aWeightForEntry, ++ aWidthForEntry, aStyleForEntry, false, true); + fe->mFamilyName = familyName; -+ return fe; ++ return fe.forget(); } - static void ReleaseData(void* info, const void* data, size_t size) { + static void ReleaseFontData(void* aInfo, const void* aData, size_t aSize) { diff --git a/gfx/thebes/gfxDWriteFontList.cpp b/gfx/thebes/gfxDWriteFontList.cpp -index 9c81c07a44..b2941ca5d7 100644 +index 63169b05b7..8cb601b7d6 100644 --- a/gfx/thebes/gfxDWriteFontList.cpp +++ b/gfx/thebes/gfxDWriteFontList.cpp -@@ -7,6 +7,7 @@ - #include "mozilla/intl/OSPreferences.h" - +@@ -5,6 +5,7 @@ #include "gfxDWriteFontList.h" + + #include "../2d/AutoHelpersWin.h" +#include "MaskConfig.hpp" - #include "gfxDWriteFonts.h" + #include "SharedFontList-impl.h" #include "gfxDWriteCommon.h" - #include "nsUnicharUtils.h" -@@ -1629,6 +1630,8 @@ void gfxDWriteFontList::InitSharedFontListForPlatform() { + #include "gfxDWriteFonts.h" +@@ -1634,6 +1635,8 @@ void gfxDWriteFontList::InitSharedFontListForPlatform() { // We activate bundled fonts if the pref is > 0 (on) or < 0 (auto), only an // explicit value of 0 (off) will disable them. TimeStamp start1 = TimeStamp::Now(); @@ -70,7 +72,7 @@ index 9c81c07a44..b2941ca5d7 100644 if (StaticPrefs::gfx_bundled_fonts_activate_AtStartup() != 0) { mBundledFonts = CreateBundledFontsCollection(factory); } -@@ -2622,22 +2625,49 @@ class BundledFontFileEnumerator : public IDWriteFontFileEnumerator { +@@ -2627,22 +2630,49 @@ class BundledFontFileEnumerator : public IDWriteFontFileEnumerator { nsCOMPtr mFontDir; nsCOMPtr mEntries; nsCOMPtr mCurrent; @@ -127,18 +129,18 @@ index 9c81c07a44..b2941ca5d7 100644 } *aHasCurrentFile = hasMore; diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList.cpp -index 6bdcd2a57c..327e485555 100644 +index 2ea46a9810..039316b8d6 100644 --- a/gfx/thebes/gfxPlatformFontList.cpp +++ b/gfx/thebes/gfxPlatformFontList.cpp -@@ -13,6 +13,7 @@ - #include "gfxTextRun.h" - #include "gfxUserFontSet.h" - #include "SharedFontList-impl.h" -+#include "MaskConfig.hpp" +@@ -6,6 +6,7 @@ #include "FontVisibilityProvider.h" - -@@ -891,6 +892,29 @@ void gfxPlatformFontList::GenerateFontListKey(nsACString& aKeyName) { + #include "GeckoProfiler.h" ++#include "MaskConfig.hpp" + #include "SharedFontList-impl.h" + #include "base/eintr_wrapper.h" + #include "gfxScriptItemizer.h" +@@ -900,6 +901,29 @@ void gfxPlatformFontList::GenerateFontListKey(nsACString& aKeyName) { ToLowerCase(aKeyName); } @@ -168,7 +170,7 @@ index 6bdcd2a57c..327e485555 100644 // Used if a stylo thread wants to trigger InitOtherFamilyNames in the main // process: we can't do IPC from the stylo thread so we post this to the main // thread instead. -@@ -1419,6 +1443,17 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( +@@ -1428,6 +1452,17 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( uint32_t aNextCh, Script aRunScript, FontPresentation aPresentation, const gfxFontStyle* aMatchStyle, uint32_t& aCmapCount, FontFamily& aMatchedFamily) { @@ -186,7 +188,7 @@ index 6bdcd2a57c..327e485555 100644 bool useCmaps = IsFontFamilyWhitelistActive() || gfxPlatform::GetPlatform()->UseCmapsDuringSystemFallback(); FontVisibility level = aFontVisibilityProvider -@@ -1428,7 +1463,22 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( +@@ -1437,7 +1472,22 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( // Allow platform-specific fallback code to try and find a usable font gfxFontEntry* fe = PlatformGlobalFontFallback( aFontVisibilityProvider, aCh, aRunScript, aMatchStyle, aMatchedFamily); @@ -210,7 +212,7 @@ index 6bdcd2a57c..327e485555 100644 if (aMatchedFamily.mShared) { if (IsVisibleToCSS(*aMatchedFamily.mShared, level)) { RefPtr font = fe->FindOrMakeFont(aMatchStyle); -@@ -1469,6 +1519,11 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( +@@ -1478,6 +1528,11 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( if (!IsVisibleToCSS(family, level)) { continue; } @@ -222,7 +224,7 @@ index 6bdcd2a57c..327e485555 100644 if (!family.IsFullyInitialized() && StaticPrefs::gfx_font_rendering_fallback_async() && !XRE_IsParentProcess()) { -@@ -1495,6 +1550,13 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( +@@ -1504,6 +1559,13 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback( if (!IsVisibleToCSS(*family, level)) { continue; } @@ -236,7 +238,7 @@ index 6bdcd2a57c..327e485555 100644 // evaluate all fonts in this family for a match family->FindFontForChar(&data); if (data.mMatchDistance == 0.0) { -@@ -1755,6 +1817,11 @@ bool gfxPlatformFontList::FindAndAddFamiliesLocked( +@@ -1732,6 +1794,11 @@ bool gfxPlatformFontList::FindAndAddFamiliesLocked( aFontVisibilityProvider ? aFontVisibilityProvider->GetFontVisibility() : FontVisibility::User; @@ -249,10 +251,10 @@ index 6bdcd2a57c..327e485555 100644 // font-family request by the page), and RFP settings allow generics to be // unrestricted, bump the effective visibility level applied here so as to diff --git a/gfx/thebes/gfxPlatformFontList.h b/gfx/thebes/gfxPlatformFontList.h -index 50964eff36..7e98560f36 100644 +index 66290cd704..bdd4b52666 100644 --- a/gfx/thebes/gfxPlatformFontList.h +++ b/gfx/thebes/gfxPlatformFontList.h -@@ -652,6 +652,19 @@ class gfxPlatformFontList : public gfxFontInfoLoader { +@@ -649,6 +649,19 @@ class gfxPlatformFontList : public gfxFontInfoLoader { return mFontFamilyWhitelistActive; }; @@ -273,13 +275,13 @@ index 50964eff36..7e98560f36 100644 bool AddWithLegacyFamilyName(const nsACString& aLegacyName, diff --git a/gfx/thebes/gfxUserFontSet.cpp b/gfx/thebes/gfxUserFontSet.cpp -index 6ae5b3c04d..724e04364e 100644 +index 084c269bde..4507ab9927 100644 --- a/gfx/thebes/gfxUserFontSet.cpp +++ b/gfx/thebes/gfxUserFontSet.cpp -@@ -466,6 +466,26 @@ void gfxUserFontEntry::DoLoadNextSrc(bool aIsContinue) { +@@ -473,6 +473,24 @@ void gfxUserFontEntry::DoLoadNextSrc(bool aIsContinue) { fe = gfxPlatform::GetPlatform()->LookupLocalFont( fontSet->GetFontVisibilityProvider(), currSrc.mLocalName, Weight(), - Stretch(), SlantStyle()); + Width(), SlantStyle()); + // Camoufox: a local() source that resolves to a family outside the + // spoofed font list must behave exactly like a font that is not + // installed -- the next src is tried and the face ends up in error @@ -295,8 +297,6 @@ index 6ae5b3c04d..724e04364e 100644 + ToLowerCase(familyKey); + if (gfxPlatformFontList::MaskedFontListBlocks( + fontSet->GetFontVisibilityProvider(), familyKey)) { -+ // The lookup hands back a new, unowned entry: release it. -+ RefPtr discard(fe); + fe = nullptr; + } + } @@ -304,10 +304,10 @@ index 6ae5b3c04d..724e04364e 100644 // as this means we are dependent on any updates to the font list. mSeenLocalSource = true; diff --git a/gfx/thebes/moz.build b/gfx/thebes/moz.build -index 2bb893d84f..0088f6cab7 100644 +index a9f68b0563..d3dede3ae0 100644 --- a/gfx/thebes/moz.build +++ b/gfx/thebes/moz.build -@@ -299,3 +299,6 @@ DEFINES["GRAPHITE2_STATIC"] = True +@@ -301,3 +301,6 @@ DEFINES["GRAPHITE2_STATIC"] = True COMPILE_FLAGS["WARNINGS_CXXFLAGS"] += ["-Werror=switch"] include("/tools/fuzzing/libfuzzer-config.mozbuild") @@ -315,10 +315,10 @@ index 2bb893d84f..0088f6cab7 100644 +# DOM Mask +LOCAL_INCLUDES += ["/camoucfg"] diff --git a/layout/style/moz.build b/layout/style/moz.build -index b3886e491f..9236483cec 100644 +index 4b89cbf319..57690f6e1b 100644 --- a/layout/style/moz.build +++ b/layout/style/moz.build -@@ -370,3 +370,6 @@ if CONFIG["COMPILE_ENVIRONMENT"]: +@@ -369,3 +369,6 @@ if CONFIG["COMPILE_ENVIRONMENT"]: "ServoStyleConsts.h", inputs=["/servo/ports/geckolib", "/servo/components/style"], ) diff --git a/patches/font-list-spoofing.patch b/patches/font-list-spoofing.patch index 3d669510b..8bfeccfed 100644 --- a/patches/font-list-spoofing.patch +++ b/patches/font-list-spoofing.patch @@ -1,15 +1,16 @@ diff --git a/dom/base/FontListManager.cpp b/dom/base/FontListManager.cpp new file mode 100644 -index 0000000000..abcdef0001 +index 0000000000..3134b8e816 --- /dev/null +++ b/dom/base/FontListManager.cpp -@@ -0,0 +1,85 @@ +@@ -0,0 +1,86 @@ +/* Camoufox: Per-context font list manager */ +#include "FontListManager.h" + +#include "mozilla/Mutex.h" +#include "mozilla/dom/BrowsingContext.h" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" + +namespace mozilla { @@ -91,7 +92,7 @@ index 0000000000..abcdef0001 +} // namespace mozilla diff --git a/dom/base/FontListManager.h b/dom/base/FontListManager.h new file mode 100644 -index 0000000000..abcdef0002 +index 0000000000..a83b0b0981 --- /dev/null +++ b/dom/base/FontListManager.h @@ -0,0 +1,45 @@ @@ -141,13 +142,13 @@ index 0000000000..abcdef0002 + +#endif // mozilla_dom_FontListManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index xxxxxxxxxx..yyyyyyyyyy 100644 +index 88cea77d60..fa277ae122 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -534,5 +534,12 @@ +@@ -561,6 +561,13 @@ SOURCES += [ "nsPluginArray.cpp", ] - + +# FontListManager compiled separately (includes RoverfoxStorageManager.h) +SOURCES += ["FontListManager.cpp"] + @@ -157,21 +158,23 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 + # Are we targeting x86-32 or x86-64? If so, we want to include SSE2 code for # CharacterDataBuffer.cpp + if CONFIG["INTEL_ARCHITECTURE"]: diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 +index bc65e5256b..7151bc0ba7 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp -@@ -25,5 +25,6 @@ +@@ -21,6 +21,7 @@ + #include "Navigator.h" #include "PaintWorkletImpl.h" #include "SessionStorageCache.h" +#include "FontListManager.h" #include "Units.h" #include "VRManagerChild.h" #include "WindowDestroyedEvent.h" -@@ -7477,6 +7478,25 @@ - mSharedWorkers.RemoveElement(aSharedWorker); +@@ -7818,6 +7819,25 @@ void nsGlobalWindowInner::SetAudioFingerprintSeed(uint32_t seed, + } } - + +void nsGlobalWindowInner::SetFontList(const nsAString& aFontList, + ErrorResult& aRv) { + uint32_t userContextId = 0; @@ -195,13 +198,13 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 bool aGranted) { // Invalidate cached StorageAllowed field so that calls to GetLocalStorage diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index xxxxxxxxxx..yyyyyyyyyy 100644 +index eec89694f8..e7cf0601f4 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -685,6 +685,9 @@ - - void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker); - +@@ -693,6 +693,9 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, + + void UpdateSharedWorkerTimezoneOverride(const nsAString& aTimezoneOverride); + + // Per-context font list spoofing + void SetFontList(const nsAString& aFontList, mozilla::ErrorResult& aRv); + @@ -209,13 +212,13 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index xxxxxxxxxx..yyyyyyyyyy 100644 +index ab1c306617..38227acada 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -892,6 +892,12 @@ partial interface Window { - readonly attribute VisualViewport visualViewport; +@@ -943,6 +943,12 @@ partial interface Window { + undefined setAudioFingerprintSeed(unsigned long seed); }; - + +// Per-context font list +partial interface Window { + [Throws, Func="mozilla::dom::FontListManager::IsFunctionEnabledForWebIDL"] @@ -226,19 +229,21 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 // finding on a page. partial interface Window { diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 +index 039316b8d6..42b2b42650 100644 --- a/gfx/thebes/gfxPlatformFontList.cpp +++ b/gfx/thebes/gfxPlatformFontList.cpp -@@ -42,4 +42,5 @@ +@@ -29,6 +29,7 @@ + #include "mozilla/dom/ContentParent.h" + #include "mozilla/dom/ContentProcessMessageManager.h" #include "mozilla/dom/Document.h" +#include "mozilla/dom/FontListManager.h" #include "mozilla/gfx/2D.h" - #include "mozilla/ipc/FileDescriptorUtils.h" - #include "mozilla/TextUtils.h" -@@ -1632,6 +1633,16 @@ + #include "mozilla/gfx/Logging.h" + #include "mozilla/glean/GfxMetrics.h" +@@ -1789,6 +1790,16 @@ bool gfxPlatformFontList::FindAndAddFamiliesLocked( nsAutoCString key; GenerateFontListKey(aFamily, key); - + + // Per-context font list filtering + { + uint32_t ctx = mozilla::dom::FontListManager::GetCurrentContext(); @@ -253,15 +258,20 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 FontVisibility visibilityLevel = aFontVisibilityProvider ? aFontVisibilityProvider->GetFontVisibility() diff --git a/gfx/thebes/gfxTextRun.cpp b/gfx/thebes/gfxTextRun.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 +index 3ff9d5ec71..bcb2e5ae0c 100644 --- a/gfx/thebes/gfxTextRun.cpp +++ b/gfx/thebes/gfxTextRun.cpp -@@ -36,3 +36,4 @@ - #include "TextDrawTarget.h" +@@ -34,6 +34,7 @@ + #include "nsStyleConsts.h" + #include "nsStyleUtil.h" + #include "nsUnicodeProperties.h" +#include "mozilla/dom/FontListManager.h" - - #ifdef XP_WIN -@@ -1910,4 +1911,6 @@ + #include "mozilla/dom/BrowsingContext.h" + #include "mozilla/dom/Document.h" + #include "nsPIDOMWindow.h" +@@ -1931,6 +1932,8 @@ class DeferredClearResolvedFonts final : public nsIRunnable { + NS_IMPL_ISUPPORTS(DeferredClearResolvedFonts, nsIRunnable) + void gfxFontGroup::EnsureFontList() { + mozilla::dom::AutoFontListContext autoFontListCtx(mUserContextId); + @@ -269,10 +279,12 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 auto* pfl = gfxPlatformFontList::PlatformFontList(); if (mFontListGeneration != pfl->GetGeneration()) { diff --git a/layout/style/FontFaceSet.cpp b/layout/style/FontFaceSet.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 +index 638454ab5e..8f8d767ba8 100644 --- a/layout/style/FontFaceSet.cpp +++ b/layout/style/FontFaceSet.cpp -@@ -30,4 +30,7 @@ +@@ -26,6 +26,9 @@ + #include "mozilla/css/Loader.h" + #include "mozilla/dom/CSSFontFaceRule.h" #include "mozilla/dom/Document.h" +#include "mozilla/dom/BrowsingContext.h" +#include "mozilla/dom/FontListManager.h" @@ -280,7 +292,9 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 #include "mozilla/dom/DocumentInlines.h" #include "mozilla/dom/Event.h" #include "mozilla/dom/FontFaceImpl.h" -@@ -139,2 +142,10 @@ +@@ -134,6 +137,14 @@ already_AddRefed FontFaceSet::Load(JSContext* aCx, + const nsACString& aFont, + const nsAString& aText, ErrorResult& aRv) { + // Per-context font list filtering + uint32_t fontListCtxId = 0; @@ -291,7 +305,10 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 + } + AutoFontListContext autoFontListCtx(fontListCtxId); FlushUserFontSet(); -@@ -169,3 +178,11 @@ + + nsTArray> promises; +@@ -165,6 +176,14 @@ already_AddRefed FontFaceSet::Load(JSContext* aCx, + bool FontFaceSet::Check(const nsACString& aFont, const nsAString& aText, ErrorResult& aRv) { + // Per-context font list filtering @@ -303,3 +320,5 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 + } + AutoFontListContext autoFontListCtx(fontListCtxId); FlushUserFontSet(); + + nsTArray faces; diff --git a/patches/librewolf/dbus_name.patch b/patches/librewolf/dbus_name.patch index 72e5c2d37..4a39d384b 100644 --- a/patches/librewolf/dbus_name.patch +++ b/patches/librewolf/dbus_name.patch @@ -1,8 +1,8 @@ diff --git a/toolkit/components/remote/nsDBusRemoteClient.cpp b/toolkit/components/remote/nsDBusRemoteClient.cpp -index aad9d7054af8..a926d8b6abdc 100644 +index bd1fe5f9cf..b986da164a 100644 --- a/toolkit/components/remote/nsDBusRemoteClient.cpp +++ b/toolkit/components/remote/nsDBusRemoteClient.cpp -@@ -76,7 +76,7 @@ bool nsDBusRemoteClient::GetRemoteDestinationName(const char* aProgram, +@@ -73,14 +73,14 @@ bool nsDBusRemoteClient::GetRemoteDestinationName(const char* aProgram, mozilla::XREAppData::SanitizeNameForDBus(profileName); aDestinationName = @@ -11,25 +11,24 @@ index aad9d7054af8..a926d8b6abdc 100644 if (aDestinationName.Length() > DBUS_MAXIMUM_NAME_LENGTH) aDestinationName.Truncate(DBUS_MAXIMUM_NAME_LENGTH); -@@ -90,7 +90,7 @@ bool nsDBusRemoteClient::GetRemoteDestinationName(const char* aProgram, - if (!sDBusValidateBusName(aDestinationName.get(), nullptr)) { + if (!g_dbus_is_name(aDestinationName.get())) { // We don't have a valid busName yet - try to create a default one. aDestinationName = - nsPrintfCString("org.mozilla.%s.%s", aProgram, "default"); + nsPrintfCString("io.gitlab.%s.%s", aProgram, "default"); - if (!sDBusValidateBusName(aDestinationName.get(), nullptr)) { - // We failed completelly to get a valid bus name - just quit - // to prevent crash at dbus_bus_request_name(). -@@ -117,7 +117,7 @@ nsresult nsDBusRemoteClient::DoSendDBusCommandLine(const char* aProfile, + if (!g_dbus_is_name(aDestinationName.get())) { + // We failed completely to get a valid bus name - just quit. + LOG(" failed to validate profile DBus name"); +@@ -110,7 +110,7 @@ nsresult nsDBusRemoteClient::DoSendDBusCommandLine(const char* aProfile, } nsAutoCString pathName; - pathName = nsPrintfCString("/org/mozilla/%s/Remote", appName.get()); + pathName = nsPrintfCString("/io/gitlab/%s/Remote", appName.get()); - static auto sDBusValidatePathName = (bool (*)(const char*, DBusError*))dlsym( - RTLD_DEFAULT, "dbus_validate_path"); -@@ -128,7 +128,7 @@ nsresult nsDBusRemoteClient::DoSendDBusCommandLine(const char* aProfile, + if (!g_variant_is_object_path(pathName.get())) { + LOG(" failed to validate path name"); +@@ -118,7 +118,7 @@ nsresult nsDBusRemoteClient::DoSendDBusCommandLine(const char* aProfile, } nsAutoCString remoteInterfaceName; @@ -39,10 +38,10 @@ index aad9d7054af8..a926d8b6abdc 100644 LOG(" DBus destination: %s\n", destinationName.get()); LOG(" DBus path: %s\n", pathName.get()); diff --git a/toolkit/components/remote/nsDBusRemoteServer.cpp b/toolkit/components/remote/nsDBusRemoteServer.cpp -index 4afb8381d0bc..bd927334b817 100644 +index 226b2dc528..9cd7bad84a 100644 --- a/toolkit/components/remote/nsDBusRemoteServer.cpp +++ b/toolkit/components/remote/nsDBusRemoteServer.cpp -@@ -29,7 +29,7 @@ static const char* introspect_template = +@@ -25,7 +25,7 @@ static const char* introspect_template = "1.0//EN\"\n" "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n" "\n" @@ -51,7 +50,7 @@ index 4afb8381d0bc..bd927334b817 100644 " \n" " \n" " \n" -@@ -39,7 +39,7 @@ static const char* introspect_template = +@@ -35,7 +35,7 @@ static const char* introspect_template = bool nsDBusRemoteServer::HandleOpenURL(const gchar* aInterfaceName, const gchar* aMethodName, Span aParam) { @@ -60,16 +59,16 @@ index 4afb8381d0bc..bd927334b817 100644 if ((strcmp("OpenURL", aMethodName) != 0) || (strcmp(ourInterfaceName.get(), aInterfaceName) != 0)) { -@@ -132,7 +132,7 @@ static const GDBusInterfaceVTable gInterfaceVTable = { +@@ -128,7 +128,7 @@ static const GDBusInterfaceVTable gInterfaceVTable = { HandleMethodCall, HandleGetProperty, HandleSetProperty}; void nsDBusRemoteServer::OnBusAcquired(GDBusConnection* aConnection) { - mPathName = nsPrintfCString("/org/mozilla/%s/Remote", mAppName.get()); + mPathName = nsPrintfCString("/io/gitlab/%s/Remote", mAppName.get()); - static auto sDBusValidatePathName = (bool (*)(const char*, DBusError*))dlsym( - RTLD_DEFAULT, "dbus_validate_path"); - if (!sDBusValidatePathName || -@@ -206,8 +206,7 @@ nsresult nsDBusRemoteServer::Startup(const char* aAppName, + if (!g_variant_is_object_path(mPathName.get())) { + g_warning("nsDBusRemoteServer: object path is not valid"); + return; +@@ -199,15 +199,14 @@ nsresult nsDBusRemoteServer::Startup(const char* aAppName, mozilla::XREAppData::SanitizeNameForDBus(profileName); @@ -79,12 +78,11 @@ index 4afb8381d0bc..bd927334b817 100644 if (busName.Length() > DBUS_MAXIMUM_NAME_LENGTH) { busName.Truncate(DBUS_MAXIMUM_NAME_LENGTH); } -@@ -221,7 +220,7 @@ nsresult nsDBusRemoteServer::Startup(const char* aAppName, // We don't have a valid busName yet - try to create a default one. - if (!sDBusValidateBusName(busName.get(), nullptr)) { + if (!g_dbus_is_name(busName.get())) { - busName = nsPrintfCString("org.mozilla.%s.%s", mAppName.get(), "default"); + busName = nsPrintfCString("io.gitlab.%s.%s", mAppName.get(), "default"); - if (!sDBusValidateBusName(busName.get(), nullptr)) { - // We failed completelly to get a valid bus name - just quit - // to prevent crash at dbus_bus_request_name(). + if (!g_dbus_is_name(busName.get())) { + // We failed completely to get a valid bus name - just quit. + g_warning("nsDBusRemoteServer: couldn't get a valid bus name!"); diff --git a/patches/librewolf/ui-patches/firefox-view.patch b/patches/librewolf/ui-patches/firefox-view.patch index b845aad20..2059ab528 100644 --- a/patches/librewolf/ui-patches/firefox-view.patch +++ b/patches/librewolf/ui-patches/firefox-view.patch @@ -1,49 +1,8 @@ -diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml -index eb2d8670874b..e57694a72bd3 100644 ---- a/browser/base/content/navigator-toolbox.inc.xhtml -+++ b/browser/base/content/navigator-toolbox.inc.xhtml -@@ -35,14 +35,6 @@ - - - -- -- - -+ -+ - - diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs -index 45d0e0e4872e..4ed336da6bb5 100644 +index 875f8b03d9..6d7b8b649b 100644 --- a/browser/components/customizableui/CustomizableUI.sys.mjs +++ b/browser/components/customizableui/CustomizableUI.sys.mjs -@@ -347,7 +347,6 @@ var CustomizableUIInternal = { - { - type: CustomizableUI.TYPE_TOOLBAR, - defaultPlacements: [ -- "firefox-view-button", - "tabbrowser-tabs", - "new-tab-button", - "alltabs-button", -@@ -707,18 +706,6 @@ var CustomizableUIInternal = { +@@ -775,18 +775,6 @@ var CustomizableUIInternal = { } } diff --git a/patches/librewolf/ui-patches/hide-default-browser.patch b/patches/librewolf/ui-patches/hide-default-browser.patch index 685ffd4f9..5536f9d91 100644 --- a/patches/librewolf/ui-patches/hide-default-browser.patch +++ b/patches/librewolf/ui-patches/hide-default-browser.patch @@ -6,9 +6,10 @@ the globals it declares; removing the blocks outright changed that order away from stock Firefox's. Guard: tests/patches/contentaccessible-parity.py. diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js +index f28e32899b..d98ea24917 100644 --- a/browser/components/preferences/main.js +++ b/browser/components/preferences/main.js -@@ -509,7 +509,7 @@ +@@ -367,7 +367,7 @@ Preferences.addSetting({ * Show button for setting browser as default browser or information that * browser is already the default browser. */ @@ -17,12 +18,15 @@ diff --git a/browser/components/preferences/main.js b/browser/components/prefere disabled: (_, setting) => !DefaultBrowserHelper.canCheck || setting.locked || -@@ -519,15 +519,13 @@ +@@ -377,21 +377,13 @@ Preferences.addSetting({ Preferences.addSetting({ id: "isDefaultPane", deps: ["alwaysCheckDefault"], - visible: () => -- DefaultBrowserHelper.canCheck && DefaultBrowserHelper.isBrowserDefault, +- DefaultBrowserHelper.canCheck && +- DefaultBrowserHelper.isBrowserDefault && +- Services.policies.isAllowed("setDefaultBrowser") && +- !Services.prefs.prefIsLocked("pref.general.disable_button.default_browser"), + visible: () => false, }); @@ -30,7 +34,10 @@ diff --git a/browser/components/preferences/main.js b/browser/components/prefere id: "isNotDefaultPane", deps: ["alwaysCheckDefault"], - visible: () => -- DefaultBrowserHelper.canCheck && !DefaultBrowserHelper.isBrowserDefault, +- DefaultBrowserHelper.canCheck && +- !DefaultBrowserHelper.isBrowserDefault && +- Services.policies.isAllowed("setDefaultBrowser") && +- !Services.prefs.prefIsLocked("pref.general.disable_button.default_browser"), + visible: () => false, onUserClick: (e, { alwaysCheckDefault }) => { if (!DefaultBrowserHelper.canCheck) { diff --git a/patches/media-codec-spoofing.patch b/patches/media-codec-spoofing.patch index d727661b1..394362f92 100644 --- a/patches/media-codec-spoofing.patch +++ b/patches/media-codec-spoofing.patch @@ -1,19 +1,19 @@ diff --git a/dom/media/mp4/MP4Decoder.cpp b/dom/media/mp4/MP4Decoder.cpp -index abcdef0001..abcdef0002 100644 +index fb37d83754..c2e5b16a0a 100644 --- a/dom/media/mp4/MP4Decoder.cpp +++ b/dom/media/mp4/MP4Decoder.cpp @@ -10,6 +10,7 @@ #include "MediaContainerType.h" - #include "PDMFactory.h" + #include "PDMFactorySupport.h" #include "PlatformDecoderModule.h" +#include "MaskConfig.hpp" #include "VPXDecoder.h" #include "VideoUtils.h" #include "mozilla/StaticPrefs_media.h" -@@ -133,6 +134,14 @@ bool MP4Decoder::IsSupportedType(const MediaContainerType& aType, +@@ -137,6 +138,14 @@ bool MP4Decoder::IsSupportedType(const MediaContainerType& aType, return false; } - + + // Camoufox: When media:spoof_codecs is enabled, always report MP4 as + // supported. This prevents canPlayType()/isTypeSupported() from leaking + // which system codec libraries (FFmpeg, VideoToolbox, GStreamer) are @@ -24,32 +24,32 @@ index abcdef0001..abcdef0002 100644 + if (!tracks.IsEmpty()) { // Look for exact match as we know used codecs. - RefPtr platform = new PDMFactory(); + for (const auto& track : tracks) { diff --git a/dom/media/mp4/moz.build b/dom/media/mp4/moz.build -index abcdef0003..abcdef0004 100644 +index 88956ccea8..296b168ded 100644 --- a/dom/media/mp4/moz.build +++ b/dom/media/mp4/moz.build -@@ -32,3 +32,6 @@ CXXFLAGS += [ - +@@ -44,3 +44,6 @@ CXXFLAGS += [ + # Add libFuzzer configuration directives include("/tools/fuzzing/libfuzzer-config.mozbuild") + +# DOM Mask +LOCAL_INCLUDES += ["/camoucfg"] diff --git a/dom/media/webm/MatroskaDecoder.cpp b/dom/media/webm/MatroskaDecoder.cpp -index abcdef0005..abcdef0006 100644 +index ca63eb884a..32bc3e184b 100644 --- a/dom/media/webm/MatroskaDecoder.cpp +++ b/dom/media/webm/MatroskaDecoder.cpp -@@ -12,6 +12,7 @@ +@@ -8,6 +8,7 @@ #include "MediaContainerType.h" - #include "PDMFactory.h" + #include "PDMFactorySupport.h" #include "PlatformDecoderModule.h" +#include "MaskConfig.hpp" #include "VideoUtils.h" #include "mozilla/StaticPrefs_media.h" #include "nsMimeTypes.h" -@@ -130,6 +131,12 @@ bool MatroskaDecoder::IsSupportedType(const MediaContainerType& aContainerType, - +@@ -124,6 +125,12 @@ bool MatroskaDecoder::IsSupportedType(const MediaContainerType& aContainerType, + if (!tracks.IsEmpty()) { // Look for exact match as we know the codecs used. + @@ -58,15 +58,15 @@ index abcdef0005..abcdef0006 100644 + return true; + } + - RefPtr platform = new PDMFactory(); for (const auto& track : tracks) { - if (!track || + if (!track || PDMFactorySupport::IsSupported(SupportDecoderParams(*track), + aDiagnostics) diff --git a/dom/media/webm/moz.build b/dom/media/webm/moz.build -index abcdef0007..abcdef0008 100644 +index 46749416af..0f58406576 100644 --- a/dom/media/webm/moz.build +++ b/dom/media/webm/moz.build -@@ -29,3 +29,6 @@ FINAL_LIBRARY = "xul" - +@@ -31,3 +31,6 @@ FINAL_LIBRARY = "xul" + # Add libFuzzer configuration directives include("/tools/fuzzing/libfuzzer-config.mozbuild") + diff --git a/patches/navigator-spoofing.patch b/patches/navigator-spoofing.patch index fd371055d..cb7a2be39 100644 --- a/patches/navigator-spoofing.patch +++ b/patches/navigator-spoofing.patch @@ -1,5 +1,5 @@ diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp -index bf535cf22d..dc16916ef2 100644 +index 7af722b926..d9d1c9ad7a 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -4,6 +4,10 @@ @@ -153,15 +153,16 @@ index bf535cf22d..dc16916ef2 100644 if (!rts) { diff --git a/dom/base/NavigatorManager.cpp b/dom/base/NavigatorManager.cpp new file mode 100644 -index 0000000000..37a1713159 +index 0000000000..c872037f02 --- /dev/null +++ b/dom/base/NavigatorManager.cpp -@@ -0,0 +1,78 @@ +@@ -0,0 +1,79 @@ +/* Camoufox: Per-context navigator property manager */ +#include "NavigatorManager.h" + +#include "mozilla/dom/BrowsingContext.h" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" + +namespace mozilla { @@ -339,7 +340,7 @@ index 0000000000..918d94be04 + +#endif // mozilla_dom_NavigatorManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index 979dc62755..8e94c6bd70 100644 +index fa277ae122..b0973412be 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build @@ -223,6 +223,7 @@ EXPORTS.mozilla.dom += [ @@ -350,7 +351,7 @@ index 979dc62755..8e94c6bd70 100644 "NodeInfo.h", "NodeInfoInlines.h", "NodeIterator.h", -@@ -546,6 +547,10 @@ SOURCES += [ +@@ -561,6 +562,10 @@ SOURCES += [ "nsPluginArray.cpp", ] @@ -362,7 +363,7 @@ index 979dc62755..8e94c6bd70 100644 SOURCES += ["FontListManager.cpp"] diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 74070680c7..5c3d639da9 100644 +index 7151bc0ba7..99da751676 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -4,6 +4,7 @@ @@ -373,7 +374,7 @@ index 74070680c7..5c3d639da9 100644 #include #include -@@ -7834,6 +7835,92 @@ void nsGlobalWindowInner::SetFontList(const nsAString& aFontList, +@@ -7838,6 +7839,92 @@ void nsGlobalWindowInner::SetFontList(const nsAString& aFontList, } } @@ -467,10 +468,10 @@ index 74070680c7..5c3d639da9 100644 bool aGranted) { // Invalidate cached StorageAllowed field so that calls to GetLocalStorage diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index 6db3b36b98..54b50f7bb1 100644 +index e7cf0601f4..9616144511 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -693,6 +693,14 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, +@@ -696,6 +696,14 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, // Per-context font list spoofing void SetFontList(const nsAString& aFontList, mozilla::ErrorResult& aRv); @@ -486,10 +487,10 @@ index 6db3b36b98..54b50f7bb1 100644 void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index fa276b0969..1aa2baa931 100644 +index 38227acada..bfb0332a1c 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -961,6 +961,30 @@ partial interface Window { +@@ -958,6 +958,30 @@ partial interface Window { optional boolean onHorizontalScrollbar = false); }; @@ -521,7 +522,7 @@ index fa276b0969..1aa2baa931 100644 USVString targetOrigin = "/"; }; diff --git a/dom/workers/WorkerNavigator.cpp b/dom/workers/WorkerNavigator.cpp -index c6f64371f2..b64b00c2fb 100644 +index 078d0d975a..f081fbf9ee 100644 --- a/dom/workers/WorkerNavigator.cpp +++ b/dom/workers/WorkerNavigator.cpp @@ -4,6 +4,8 @@ @@ -533,7 +534,7 @@ index c6f64371f2..b64b00c2fb 100644 #include "ErrorList.h" #include "MainThreadUtils.h" -@@ -156,6 +158,18 @@ void WorkerNavigator::GetAppVersion(nsString& aAppVersion, +@@ -162,6 +164,18 @@ void WorkerNavigator::GetAppVersion(nsString& aAppVersion, void WorkerNavigator::GetPlatform(nsString& aPlatform, CallerType aCallerType, ErrorResult& aRv) const { @@ -552,7 +553,7 @@ index c6f64371f2..b64b00c2fb 100644 if (auto value = MaskConfig::GetString("navigator.platform")) return aPlatform.Assign(NS_ConvertUTF8toUTF16(value.value())); WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); -@@ -218,6 +232,18 @@ class GetUserAgentRunnable final : public WorkerMainThreadRunnable { +@@ -224,6 +238,18 @@ class GetUserAgentRunnable final : public WorkerMainThreadRunnable { void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType, ErrorResult& aRv) const { @@ -571,7 +572,7 @@ index c6f64371f2..b64b00c2fb 100644 if (auto value = MaskConfig::GetString("navigator.userAgent")) return aUserAgent.Assign(NS_ConvertUTF8toUTF16(value.value())); WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); -@@ -231,6 +257,17 @@ void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType, +@@ -237,6 +263,17 @@ void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType, } uint64_t WorkerNavigator::HardwareConcurrency() const { diff --git a/patches/network-patches.patch b/patches/network-patches.patch index 690398963..f0258511d 100644 --- a/patches/network-patches.patch +++ b/patches/network-patches.patch @@ -1,8 +1,8 @@ diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build -index b090a56d88..9fe4a5e1e8 100644 +index 1b8068f235..101ab978e2 100644 --- a/netwerk/protocol/http/moz.build +++ b/netwerk/protocol/http/moz.build -@@ -218,3 +218,6 @@ XPCOM_MANIFESTS += [ +@@ -257,3 +257,6 @@ XPCOM_MANIFESTS += [ ] include("/tools/fuzzing/libfuzzer-config.mozbuild") @@ -11,18 +11,18 @@ index b090a56d88..9fe4a5e1e8 100644 +LOCAL_INCLUDES += ["/camoucfg"] \ No newline at end of file diff --git a/netwerk/protocol/http/nsHttpHandler.cpp b/netwerk/protocol/http/nsHttpHandler.cpp -index d0aebdf965..01472ec205 100644 +index 0192e5f6f2..a43ecf238e 100644 --- a/netwerk/protocol/http/nsHttpHandler.cpp +++ b/netwerk/protocol/http/nsHttpHandler.cpp -@@ -14,6 +14,7 @@ - #include "nsError.h" - #include "nsHttp.h" - #include "nsHttpHandler.h" +@@ -12,6 +12,7 @@ + #include "EventTokenBucket.h" + #include "HttpLog.h" + #include "LoadContextInfo.h" +#include "MaskConfig.hpp" - #include "nsHttpChannel.h" - #include "nsHTTPCompressConv.h" - #include "nsHttpAuthCache.h" -@@ -747,6 +748,15 @@ uint8_t nsHttpHandler::UrgencyFromCoSFlags(uint32_t cos) { + #include "SerializedLoadContext.h" + #include "TRRServiceChannel.h" + #include "Tickler.h" +@@ -993,6 +994,15 @@ uint8_t nsHttpHandler::UrgencyFromCoSFlags(uint32_t cos, //----------------------------------------------------------------------------- const nsCString& nsHttpHandler::UserAgent(bool aShouldResistFingerprinting) { @@ -38,19 +38,19 @@ index d0aebdf965..01472ec205 100644 if (aShouldResistFingerprinting && !mSpoofedUserAgent.IsEmpty()) { LOG(("using spoofed userAgent : %s\n", mSpoofedUserAgent.get())); return mSpoofedUserAgent; -@@ -2077,6 +2087,10 @@ nsresult nsHttpHandler::SetAcceptLanguages() { +@@ -2107,6 +2117,10 @@ nsresult nsHttpHandler::SetAcceptLanguages() { } - + MOZ_ASSERT(NS_IsMainThread()); + if (auto value = MaskConfig::GetString("headers.Accept-Language")) { + mAcceptLanguages.Assign(nsCString(value.value().c_str())); + return NS_OK; + } - + mAcceptLanguagesIsDirty = false; - -@@ -2098,6 +2112,11 @@ nsresult nsHttpHandler::SetAcceptLanguages() { - + +@@ -2123,6 +2137,11 @@ nsresult nsHttpHandler::SetAcceptLanguages() { + nsresult nsHttpHandler::SetAcceptEncodings(const char* aAcceptEncodings, bool isSecure, bool isDictionary) { + nsCString encodingOverride; @@ -61,5 +61,3 @@ index d0aebdf965..01472ec205 100644 if (isDictionary) { mDictionaryAcceptEncodings = aAcceptEncodings; } else if (isSecure) { - mHttpsAcceptEncodings = aAcceptEncodings; - } else { diff --git a/patches/playwright/0-playwright.patch b/patches/playwright/0-playwright.patch index 61f647db4..3ef12b632 100644 --- a/patches/playwright/0-playwright.patch +++ b/patches/playwright/0-playwright.patch @@ -13,7 +13,7 @@ index 2ee93b3834..cdc5972aa1 100644 + readonly attribute boolean isUpdatePendingForJugglerAccessibility; }; diff --git a/accessible/xpcom/xpcAccessibleDocument.cpp b/accessible/xpcom/xpcAccessibleDocument.cpp -index 30c6427da3..166a6837ec 100644 +index d19f8b6132..30d3cb75b3 100644 --- a/accessible/xpcom/xpcAccessibleDocument.cpp +++ b/accessible/xpcom/xpcAccessibleDocument.cpp @@ -149,6 +149,13 @@ xpcAccessibleDocument::GetBrowsingContext( @@ -31,10 +31,10 @@ index 30c6427da3..166a6837ec 100644 // xpcAccessibleDocument diff --git a/accessible/xpcom/xpcAccessibleDocument.h b/accessible/xpcom/xpcAccessibleDocument.h -index 4628a7f264..56450065e8 100644 +index d7717e2903..43b25ce988 100644 --- a/accessible/xpcom/xpcAccessibleDocument.h +++ b/accessible/xpcom/xpcAccessibleDocument.h -@@ -49,6 +49,8 @@ class xpcAccessibleDocument : public xpcAccessibleHyperText, +@@ -48,6 +48,8 @@ class xpcAccessibleDocument : public xpcAccessibleHyperText, nsIAccessibleDocument** aDocument) final; NS_IMETHOD GetBrowsingContext(dom::BrowsingContext** aBrowsingContext) final; @@ -76,7 +76,7 @@ index 8337336dc8..9eb83f33bb 100644 DWORD creationFlags = CREATE_SUSPENDED | CREATE_UNICODE_ENVIRONMENT; diff --git a/browser/installer/allowed-dupes.mn b/browser/installer/allowed-dupes.mn -index 5a38845829..10a82bb86a 100644 +index 3bc36691ce..dbd3d465f6 100644 --- a/browser/installer/allowed-dupes.mn +++ b/browser/installer/allowed-dupes.mn @@ -66,6 +66,12 @@ browser/chrome/browser/builtin-addons/webcompat/shims/empty-shim.txt @@ -93,10 +93,10 @@ index 5a38845829..10a82bb86a 100644 browser/chrome/browser/content/activity-stream/data/content/tippytop/favicons/allegro-pl.ico browser/defaults/settings/main/search-config-icons/96327a73-c433-5eb4-a16d-b090cadfb80b diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in -index 83e52b260c..3ab0c47c71 100644 +index 46725ca049..8aa34cf7cc 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in -@@ -204,6 +204,9 @@ +@@ -197,6 +197,9 @@ @RESPATH@/chrome/remote.manifest #endif @@ -154,10 +154,10 @@ index 257e87fe0c..8c13f02010 100644 const transportProvider = { setListener(upgradeListener) { diff --git a/docshell/base/BrowsingContext.cpp b/docshell/base/BrowsingContext.cpp -index e8b50c6548..a50fa62e66 100644 +index ec540bce58..5da611e913 100644 --- a/docshell/base/BrowsingContext.cpp +++ b/docshell/base/BrowsingContext.cpp -@@ -116,18 +116,20 @@ struct ParamTraits +@@ -119,18 +119,20 @@ struct ParamTraits template <> struct ParamTraits @@ -185,7 +185,7 @@ index e8b50c6548..a50fa62e66 100644 template <> struct ParamTraits -@@ -3555,6 +3557,15 @@ void BrowsingContext::DidSet(FieldIndex, +@@ -3562,6 +3564,15 @@ void BrowsingContext::DidSet(FieldIndex, }); } @@ -201,17 +201,17 @@ index e8b50c6548..a50fa62e66 100644 void BrowsingContext::DidSet(FieldIndex, nsString&& aOldValue) { MOZ_ASSERT(IsTop()); -@@ -3835,7 +3846,7 @@ void BrowsingContext::SetGeolocationServiceOverride( +@@ -3843,7 +3854,7 @@ void BrowsingContext::SetGeolocationServiceOverride( if (aGeolocationOverride.WasPassed()) { if (!mGeolocationServiceOverride) { - mGeolocationServiceOverride = new nsGeolocationService(); + mGeolocationServiceOverride = MakeRefPtr(); - mGeolocationServiceOverride->Init(); + mGeolocationServiceOverride->Init(true /* isOverride */); } mGeolocationServiceOverride->Update(aGeolocationOverride.Value()); - } else if (RefPtr serviceOverride = + } else if (RefPtr serviceOverride = diff --git a/docshell/base/BrowsingContext.h b/docshell/base/BrowsingContext.h -index 02abb6ab95..ca04e2314c 100644 +index c1100f1503..ab3f514b7e 100644 --- a/docshell/base/BrowsingContext.h +++ b/docshell/base/BrowsingContext.h @@ -211,11 +211,11 @@ struct EmbedderColorSchemes { @@ -228,7 +228,7 @@ index 02abb6ab95..ca04e2314c 100644 FIELD(EmbedderElementType, Maybe) \ FIELD(MessageManagerGroup, nsString) \ FIELD(MaxTouchPointsOverride, uint8_t) \ -@@ -260,6 +260,8 @@ struct EmbedderColorSchemes { +@@ -261,6 +261,8 @@ struct EmbedderColorSchemes { * embedder element. */ \ FIELD(EmbedderColorSchemes, EmbedderColorSchemes) \ FIELD(DisplayMode, dom::DisplayMode) \ @@ -237,7 +237,7 @@ index 02abb6ab95..ca04e2314c 100644 /* The number of entries added to the session history because of this \ * browsing context. */ \ FIELD(HistoryEntryCount, uint32_t) \ -@@ -1118,6 +1120,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { +@@ -1123,6 +1125,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { return Top()->GetAnimationsPlayBackRateMultiplier(); } @@ -248,7 +248,7 @@ index 02abb6ab95..ca04e2314c 100644 bool IsInBFCache() const; bool IsEnteringBFCache() const { return mIsEnteringBFCache; } void DeactivateDocuments(); -@@ -1320,6 +1326,11 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { +@@ -1343,6 +1349,11 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { return IsTop(); } @@ -260,7 +260,7 @@ index 02abb6ab95..ca04e2314c 100644 bool CanSet(FieldIndex, dom::ForcedColorsOverride, ContentParent*) { return IsTop(); -@@ -1356,6 +1367,9 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { +@@ -1383,6 +1394,9 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { void DidSet(FieldIndex, double aOldValue); @@ -271,10 +271,10 @@ index 02abb6ab95..ca04e2314c 100644 void WalkPresContexts(Callback&&); void PresContextAffectingFieldChanged(); diff --git a/docshell/base/CanonicalBrowsingContext.cpp b/docshell/base/CanonicalBrowsingContext.cpp -index 6a5e8fba0a..b305352d3b 100644 +index 1fa976de8a..69f04ccd90 100644 --- a/docshell/base/CanonicalBrowsingContext.cpp +++ b/docshell/base/CanonicalBrowsingContext.cpp -@@ -302,6 +302,8 @@ void CanonicalBrowsingContext::ReplacedBy( +@@ -315,6 +315,8 @@ void CanonicalBrowsingContext::ReplacedBy( txn.SetForceOffline(GetForceOffline()); txn.SetInnerSizeSpoofedForRFP(GetInnerSizeSpoofedForRFP()); txn.SetIPAddressSpace(GetIPAddressSpace()); @@ -283,7 +283,7 @@ index 6a5e8fba0a..b305352d3b 100644 txn.SetParentalControlsEnabled(GetParentalControlsEnabled()); if (!GetLanguageOverride().IsEmpty()) { -@@ -1946,6 +1948,12 @@ void CanonicalBrowsingContext::LoadURI(nsIURI* aURI, +@@ -1976,6 +1978,12 @@ void CanonicalBrowsingContext::LoadURI(nsIURI* aURI, (void)SetIsCaptivePortalTab(true); } @@ -297,7 +297,7 @@ index 6a5e8fba0a..b305352d3b 100644 } diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp -index 69d45a59b4..fe0e77f151 100644 +index 6fe906d343..16703bcea9 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -15,6 +15,12 @@ @@ -313,15 +313,16 @@ index 69d45a59b4..fe0e77f151 100644 #include "nsDeviceContext.h" #include "mozilla/Attributes.h" #include "mozilla/AutoRestore.h" -@@ -63,6 +69,7 @@ +@@ -64,6 +70,8 @@ #include "mozilla/dom/DocGroup.h" #include "mozilla/dom/Element.h" #include "mozilla/dom/FragmentDirective.h" +#include "mozilla/dom/Geolocation.h" ++#include "mozilla/GeolocationService.h" #include "mozilla/dom/HTMLAnchorElement.h" #include "mozilla/dom/HTMLIFrameElement.h" #include "mozilla/dom/Navigation.h" -@@ -95,6 +102,7 @@ +@@ -96,6 +104,7 @@ #include "mozilla/dom/DocumentBinding.h" #include "mozilla/glean/DocshellMetrics.h" #include "mozilla/ipc/ProtocolUtils.h" @@ -329,7 +330,7 @@ index 69d45a59b4..fe0e77f151 100644 #include "mozilla/net/DocumentChannel.h" #include "mozilla/net/DocumentChannelChild.h" #include "mozilla/net/ParentChannelWrapper.h" -@@ -119,6 +127,7 @@ +@@ -120,6 +129,7 @@ #include "nsIDocumentViewer.h" #include "mozilla/dom/Document.h" #include "nsHTMLDocument.h" @@ -337,7 +338,7 @@ index 69d45a59b4..fe0e77f151 100644 #include "nsIDocumentLoaderFactory.h" #include "nsIDOMWindow.h" #include "nsIEditingSession.h" -@@ -214,6 +223,7 @@ +@@ -216,6 +226,7 @@ #include "nsGlobalWindowInner.h" #include "nsGlobalWindowOuter.h" #include "nsJSEnvironment.h" @@ -345,7 +346,7 @@ index 69d45a59b4..fe0e77f151 100644 #include "nsNetCID.h" #include "nsNetUtil.h" #include "nsObjectLoadingContent.h" -@@ -353,6 +363,14 @@ nsDocShell::nsDocShell(BrowsingContext* aBrowsingContext, +@@ -356,6 +367,14 @@ nsDocShell::nsDocShell(BrowsingContext* aBrowsingContext, mAllowDNSPrefetch(true), mAllowWindowControl(true), mCSSErrorReportingEnabled(false), @@ -360,7 +361,7 @@ index 69d45a59b4..fe0e77f151 100644 mAllowAuth(mItemType == typeContent), mAllowKeywordFixup(false), mDisableMetaRefreshWhenInactive(false), -@@ -2957,6 +2975,232 @@ nsDocShell::GetMessageManager(ContentFrameMessageManager** aMessageManager) { +@@ -2978,6 +2997,232 @@ nsDocShell::GetMessageManager(ContentFrameMessageManager** aMessageManager) { return NS_OK; } @@ -516,7 +517,7 @@ index 69d45a59b4..fe0e77f151 100644 + ToSupports(element), "juggler-file-picker-shown", nullptr); +} + -+RefPtr nsDocShell::GetGeolocationServiceOverride() { ++RefPtr nsDocShell::GetGeolocationServiceOverride() { + return GetRootDocShell()->mGeolocationServiceOverride; +} + @@ -524,7 +525,7 @@ index 69d45a59b4..fe0e77f151 100644 +nsDocShell::SetGeolocationOverride(nsIDOMGeoPosition* aGeolocationOverride) { + if (aGeolocationOverride) { + if (!mGeolocationServiceOverride) { -+ mGeolocationServiceOverride = new nsGeolocationService(); ++ mGeolocationServiceOverride = new GeolocationService(); + mGeolocationServiceOverride->Init(); + } + mGeolocationServiceOverride->Update(aGeolocationOverride); @@ -593,7 +594,7 @@ index 69d45a59b4..fe0e77f151 100644 NS_IMETHODIMP nsDocShell::GetIsNavigating(bool* aOut) { *aOut = mIsNavigating; -@@ -4624,7 +4868,7 @@ nsDocShell::GetVisibility(bool* aVisibility) { +@@ -4671,7 +4916,7 @@ nsDocShell::GetVisibility(bool* aVisibility) { } void nsDocShell::ActivenessMaybeChanged() { @@ -602,7 +603,7 @@ index 69d45a59b4..fe0e77f151 100644 if (RefPtr presShell = GetPresShell()) { presShell->ActivenessMaybeChanged(); } -@@ -7625,6 +7869,12 @@ nsresult nsDocShell::PerformRetargeting(nsDocShellLoadState* aLoadState) { +@@ -7688,6 +7933,12 @@ nsresult nsDocShell::PerformRetargeting(nsDocShellLoadState* aLoadState) { true, // aForceNoOpener getter_AddRefs(newBC)); MOZ_ASSERT(!newBC); @@ -615,7 +616,7 @@ index 69d45a59b4..fe0e77f151 100644 return rv; } -@@ -8779,6 +9029,9 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, +@@ -8881,6 +9132,9 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, // before calling Stop() below. Document* document = GetDocument(); uint32_t flags = 0; @@ -625,7 +626,7 @@ index 69d45a59b4..fe0e77f151 100644 if (document && !document->CanSavePresentation(nullptr, flags, true)) { // This forces some flags into the WindowGlobalParent's mBFCacheStatus, // which we'll then use in CanonicalBrowsingContext::AllowedInBFCache, -@@ -8854,6 +9107,16 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, +@@ -8956,6 +9210,16 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, attrs.SetFirstPartyDomain(isTopLevelDoc, aLoadState->URI()); nsCOMPtr req; @@ -642,7 +643,7 @@ index 69d45a59b4..fe0e77f151 100644 rv = DoURILoad(aLoadState, aCacheKey, getter_AddRefs(req)); if (NS_SUCCEEDED(rv)) { -@@ -11985,6 +12248,9 @@ class OnLinkClickEvent : public Runnable { +@@ -12067,6 +12331,9 @@ class OnLinkClickEvent : public CancelableRunnable, public SupportsWeakPtr { mHandler->OnLinkClickSync(mContent, mLoadState, mNoOpenerImplied, mTriggeringPrincipal); } @@ -652,20 +653,32 @@ index 69d45a59b4..fe0e77f151 100644 return NS_OK; } -@@ -12102,6 +12368,8 @@ nsresult nsDocShell::OnLinkClick( +@@ -12138,6 +12405,11 @@ nsresult nsDocShell::OnFormSubmit(HTMLFormElement* aForm, + return OnLinkClickSync(aForm, aLoadState, false, aForm->NodePrincipal()); + } + ++ nsCOMPtr observerService = ++ mozilla::services::GetObserverService(); ++ observerService->NotifyObservers(ToSupports(aForm), "juggler-link-click", ++ nullptr); ++ + auto result = OnLinkClickWithLoadState(aForm, aLoadState, false, + aForm->NodePrincipal()); + if (result.isErr()) { +@@ -12276,6 +12548,8 @@ nsresult nsDocShell::OnLinkClick( + ownerDoc->GetScriptTrackingFlags()); + loadState->SetHistoryBehavior(NavigationHistoryBehavior::Auto); - nsCOMPtr ev = new OnLinkClickEvent( - this, aContent, loadState, noOpenerImplied, aTriggeringPrincipal); + nsCOMPtr observerService = mozilla::services::GetObserverService(); + observerService->NotifyObservers(ToSupports(aContent), "juggler-link-click", nullptr); - return Dispatch(ev.forget()); - } - + auto result = OnLinkClickWithLoadState(aContent, loadState, noOpenerImplied, + aTriggeringPrincipal); + return result.isErr() ? result.unwrapErr() : NS_OK; diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h -index ac51e58b45..1e5b74f361 100644 +index c3fcd2985a..5d9a683361 100644 --- a/docshell/base/nsDocShell.h +++ b/docshell/base/nsDocShell.h -@@ -14,6 +14,7 @@ +@@ -15,6 +15,7 @@ #include "mozilla/WeakPtr.h" #include "mozilla/dom/BrowsingContext.h" #include "mozilla/dom/NavigationBinding.h" @@ -673,15 +686,15 @@ index ac51e58b45..1e5b74f361 100644 #include "mozilla/dom/SessionHistoryEntry.h" #include "mozilla/dom/WindowProxyHolder.h" #include "nsCOMPtr.h" -@@ -84,6 +85,7 @@ class nsCommandManager; - class nsDocShellEditorData; - class nsDOMNavigationTiming; - class nsDSURIContentListener; -+class nsGeolocationService; - class nsGlobalWindowOuter; - - class FramingChecker; -@@ -397,6 +399,15 @@ class nsDocShell final : public nsDocLoader, +@@ -42,6 +43,7 @@ + + namespace mozilla { + class Encoding; ++class GeolocationService; + class HTMLEditor; + class ObservedDocShell; + class ScrollContainerFrame; +@@ -383,6 +385,15 @@ class nsDocShell final : public nsDocLoader, void SetWillChangeProcess() { mWillChangeProcess = true; } bool WillChangeProcess() { return mWillChangeProcess; } @@ -692,12 +705,12 @@ index ac51e58b45..1e5b74f361 100644 + + bool IsBypassCSPEnabled(); + -+ RefPtr GetGeolocationServiceOverride(); ++ RefPtr GetGeolocationServiceOverride(); + // Creates a real network channel (not a DocumentChannel) using the specified // parameters. // Used by nsDocShell when not using DocumentChannel, by DocumentLoadListener -@@ -987,6 +998,8 @@ class nsDocShell final : public nsDocLoader, +@@ -1000,6 +1011,8 @@ class nsDocShell final : public nsDocLoader, bool CSSErrorReportingEnabled() const { return mCSSErrorReportingEnabled; } @@ -706,7 +719,7 @@ index ac51e58b45..1e5b74f361 100644 // Handles retrieval of subframe session history for nsDocShell::LoadURI. If a // load is requested in a subframe of the current DocShell, the subframe // loadType may need to reflect the loadType of the parent document, or in -@@ -1298,6 +1311,17 @@ class nsDocShell final : public nsDocLoader, +@@ -1323,6 +1336,17 @@ class nsDocShell final : public nsDocLoader, bool mAllowDNSPrefetch : 1; bool mAllowWindowControl : 1; bool mCSSErrorReportingEnabled : 1; @@ -716,7 +729,7 @@ index ac51e58b45..1e5b74f361 100644 + bool mForceActiveState : 1; + bool mDisallowBFCache : 1; + nsString mLanguageOverride; -+ RefPtr mGeolocationServiceOverride; ++ RefPtr mGeolocationServiceOverride; + ReducedMotionOverride mReducedMotionOverride; + ForcedColorsOverride mForcedColorsOverride; + ContrastOverride mContrastOverride; @@ -725,7 +738,7 @@ index ac51e58b45..1e5b74f361 100644 bool mAllowKeywordFixup : 1; bool mDisableMetaRefreshWhenInactive : 1; diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl -index 4aa56b4ce1..c66eed9b3d 100644 +index db0721841d..12d05dfcaf 100644 --- a/docshell/base/nsIDocShell.idl +++ b/docshell/base/nsIDocShell.idl @@ -43,6 +43,7 @@ interface nsIURI; @@ -783,10 +796,10 @@ index 4aa56b4ce1..c66eed9b3d 100644 * This attempts to save any applicable layout history state (like * scroll position) in the nsISHEntry. This is normally done diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp -index 328b752481..595f3c95ca 100644 +index 3fa58ad226..df25c41312 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp -@@ -3696,6 +3696,9 @@ void Document::SendToConsole(nsCOMArray& aMessages) { +@@ -3850,6 +3850,9 @@ void Document::SendToConsole(nsCOMArray& aMessages) { } void Document::ApplySettingsFromCSP(bool aSpeculative) { @@ -796,7 +809,7 @@ index 328b752481..595f3c95ca 100644 nsresult rv = NS_OK; if (!aSpeculative) { nsIContentSecurityPolicy* csp = PolicyContainer::GetCSP(mPolicyContainer); -@@ -3784,6 +3787,11 @@ nsresult Document::InitCSP(nsIChannel* aChannel) { +@@ -3947,6 +3950,11 @@ nsresult Document::InitCSP(nsIChannel* aChannel) { MOZ_ASSERT(mPolicyContainer, "Policy container must be initialized before CSP!"); @@ -808,7 +821,7 @@ index 328b752481..595f3c95ca 100644 // If this is a data document - no need to set CSP. if (mLoadedAsData) { return NS_OK; -@@ -4739,6 +4747,10 @@ bool Document::HasFocus(ErrorResult& rv) const { +@@ -4928,6 +4936,10 @@ bool Document::HasFocus(ErrorResult& rv) const { return false; } @@ -819,7 +832,7 @@ index 328b752481..595f3c95ca 100644 if (!fm->IsInActiveWindow(bc)) { return false; } -@@ -20795,6 +20807,35 @@ ColorScheme Document::PreferredColorScheme(IgnoreRFP aIgnoreRFP) const { +@@ -21188,6 +21200,35 @@ ColorScheme Document::PreferredColorScheme(IgnoreRFP aIgnoreRFP) const { return PreferenceSheet::PrefsFor(*this).mColorScheme; } @@ -856,10 +869,10 @@ index 328b752481..595f3c95ca 100644 if (!sLoadingForegroundTopLevelContentDocument) { return false; diff --git a/dom/base/Document.h b/dom/base/Document.h -index 70f8117d8a..d4a704f307 100644 +index 1e9501bbc8..4bda1725ce 100644 --- a/dom/base/Document.h +++ b/dom/base/Document.h -@@ -4448,6 +4448,8 @@ class Document : public nsINode, +@@ -4504,6 +4504,8 @@ class Document : public nsINode, // color-scheme meta tag. ColorScheme DefaultColorScheme() const; @@ -869,47 +882,10 @@ index 70f8117d8a..d4a704f307 100644 static bool AutomaticStorageAccessPermissionCanBeGranted( diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp -index 2f945e2f1a..9ba987dfd3 100644 +index 818005d2cf..ccf2153d03 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp -@@ -347,16 +347,15 @@ void Navigator::GetAppName(nsAString& aAppName) const { - * for more detail. - */ - /* static */ --void Navigator::GetAcceptLanguages(nsTArray& aLanguages, -- const nsCString* aLanguageOverride) { -+void Navigator::GetAcceptLanguages(const nsString* aLanguageOverride, nsTArray& aLanguages) { - MOZ_ASSERT(NS_IsMainThread()); - - aLanguages.Clear(); - - // E.g. "de-de, en-us,en". - nsAutoCString acceptLang; -- if (aLanguageOverride) { -- acceptLang.Assign(aLanguageOverride->get()); -+ if (aLanguageOverride && aLanguageOverride->Length()) { -+ acceptLang = NS_ConvertUTF16toUTF8(*aLanguageOverride); - } else { - intl::LocaleService::GetInstance()->GetAcceptLanguages(acceptLang); - } -@@ -416,13 +415,14 @@ void Navigator::GetLanguages(nsTArray& aLanguages) { - const nsCString& languageOverride = bc->Top()->GetLanguageOverride(); - - if (!languageOverride.IsEmpty()) { -- GetAcceptLanguages(aLanguages, &languageOverride); -+ nsString languageOverrideWide = NS_ConvertUTF8toUTF16(languageOverride); -+ GetAcceptLanguages(&languageOverrideWide, aLanguages); - - return; - } - } - -- GetAcceptLanguages(aLanguages, nullptr); -+ GetAcceptLanguages(nullptr, aLanguages); - - // The returned value is cached by the binding code. The window listens to the - // accept languages change and will clear the cache when needed. It has to -@@ -2370,7 +2370,8 @@ bool Navigator::Webdriver() { +@@ -2371,7 +2371,8 @@ bool Navigator::Webdriver() { } #endif @@ -919,25 +895,11 @@ index 2f945e2f1a..9ba987dfd3 100644 } AutoplayPolicy Navigator::GetAutoplayPolicy(AutoplayPolicyMediaType aType) { -diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h -index be19586840..aab58cc025 100644 ---- a/dom/base/Navigator.h -+++ b/dom/base/Navigator.h -@@ -228,8 +228,7 @@ class Navigator final : public nsISupports, public nsWrapperCache { - - StorageManager* Storage(); - -- static void GetAcceptLanguages(nsTArray& aLanguages, -- const nsCString* aLanguageOverride); -+ static void GetAcceptLanguages(const nsString* aLanguageOverride, nsTArray& aLanguages); - - dom::MediaCapabilities* MediaCapabilities(); - dom::MediaSession* MediaSession(); diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp -index 8f53fc6dbe..23c52ffea1 100644 +index ea54b38955..67eb1287f3 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp -@@ -9790,6 +9790,8 @@ Result nsContentUtils::SynthesizeMouseEvent( +@@ -10414,6 +10414,8 @@ Result nsContentUtils::SynthesizeMouseEvent( EventMessage msg; Maybe exitFrom; bool contextMenuKey = false; @@ -946,7 +908,7 @@ index 8f53fc6dbe..23c52ffea1 100644 if (aType.EqualsLiteral("mousedown")) { msg = eMouseDown; } else if (aType.EqualsLiteral("mouseup")) { -@@ -9816,13 +9818,26 @@ Result nsContentUtils::SynthesizeMouseEvent( +@@ -10440,13 +10442,26 @@ Result nsContentUtils::SynthesizeMouseEvent( msg = eMouseHitTest; } else if (aType.EqualsLiteral("MozMouseExploreByTouch")) { msg = eMouseExploreByTouch; @@ -974,7 +936,7 @@ index 8f53fc6dbe..23c52ffea1 100644 if (MOZ_UNLIKELY(aOptions.mIsWidgetEventSynthesized)) { MOZ_ASSERT_UNREACHABLE( "The event shouldn't be dispatched as a synthesized event"); -@@ -9850,6 +9865,7 @@ Result nsContentUtils::SynthesizeMouseEvent( +@@ -10474,6 +10489,7 @@ Result nsContentUtils::SynthesizeMouseEvent( mozilla::widget::AutoSynthesizedEventCallbackNotifier notifier(callback); WidgetMouseEvent& mouseOrPointerEvent = @@ -982,7 +944,7 @@ index 8f53fc6dbe..23c52ffea1 100644 pointerEvent.isSome() ? pointerEvent.ref() : mouseEvent.ref(); mouseOrPointerEvent.pointerId = aMouseEventData.mIdentifier; mouseOrPointerEvent.mModifiers = -@@ -9874,6 +9890,8 @@ Result nsContentUtils::SynthesizeMouseEvent( +@@ -10498,6 +10514,8 @@ Result nsContentUtils::SynthesizeMouseEvent( mouseOrPointerEvent.mFlags.mIsSynthesizedForTests = aOptions.mIsDOMEventSynthesized; mouseOrPointerEvent.mExitFrom = std::move(exitFrom); @@ -992,10 +954,10 @@ index 8f53fc6dbe..23c52ffea1 100644 nsPresContext* presContext = aPresShell->GetPresContext(); diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp -index 2784fae235..9b6cddf8d9 100644 +index 3f3b4faf59..4636ec54a0 100644 --- a/dom/base/nsDOMWindowUtils.cpp +++ b/dom/base/nsDOMWindowUtils.cpp -@@ -705,6 +705,55 @@ nsDOMWindowUtils::GetPresShellId(uint32_t* aPresShellId) { +@@ -706,6 +706,55 @@ nsDOMWindowUtils::GetPresShellId(uint32_t* aPresShellId) { return NS_ERROR_FAILURE; } @@ -1052,10 +1014,10 @@ index 2784fae235..9b6cddf8d9 100644 nsDOMWindowUtils::IsCORSSafelistedRequestHeader(const nsACString& aName, const nsACString& aValue, diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp -index a2af624fec..365d295201 100644 +index e3d3f4060d..42f5a628ed 100644 --- a/dom/base/nsFocusManager.cpp +++ b/dom/base/nsFocusManager.cpp -@@ -1875,6 +1875,10 @@ Maybe nsFocusManager::SetFocusInner(Element* aNewContent, +@@ -1885,6 +1885,10 @@ Maybe nsFocusManager::SetFocusInner(Element* aNewContent, (GetActiveBrowsingContext() == newRootBrowsingContext); } @@ -1066,7 +1028,7 @@ index a2af624fec..365d295201 100644 // Exit fullscreen if a website focuses another window if (StaticPrefs::full_screen_api_exit_on_windowRaise() && !isElementInActiveWindow && (aFlags & FLAG_RAISE)) { -@@ -2436,6 +2440,7 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear, +@@ -2446,6 +2450,7 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear, bool aIsLeavingDocument, bool aAdjustWidget, bool aRemainActive, Element* aElementToFocus, uint64_t aActionId) { @@ -1074,7 +1036,7 @@ index a2af624fec..365d295201 100644 LOGFOCUS(("<>", aActionId)); // hold a reference to the focused content, which may be null -@@ -2479,6 +2484,11 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear, +@@ -2489,6 +2494,11 @@ bool nsFocusManager::BlurImpl(BrowsingContext* aBrowsingContextToClear, return true; } @@ -1086,7 +1048,7 @@ index a2af624fec..365d295201 100644 // Keep a ref to presShell since dispatching the DOM event may cause // the document to be destroyed. RefPtr presShell = docShell->GetPresShell(); -@@ -3187,7 +3197,9 @@ void nsFocusManager::RaiseWindow(nsPIDOMWindowOuter* aWindow, +@@ -3259,7 +3269,9 @@ void nsFocusManager::RaiseWindow(nsPIDOMWindowOuter* aWindow, } } @@ -1098,10 +1060,10 @@ index a2af624fec..365d295201 100644 // care of lowering the present active window. This happens in // a separate runnable to avoid touching multiple windows in diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp -index f8428e5926..dd0124f7e9 100644 +index 5a764db307..c0bd92f276 100644 --- a/dom/base/nsGlobalWindowOuter.cpp +++ b/dom/base/nsGlobalWindowOuter.cpp -@@ -2521,7 +2521,7 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument, +@@ -2530,7 +2530,7 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument, &nsGlobalWindowInner::FireOnNewGlobalObject)); } @@ -1110,7 +1072,7 @@ index f8428e5926..dd0124f7e9 100644 // We should probably notify, except if we have the initial about:blank // in a chrome docshell, defer notification until the first non-initial // document. -@@ -2539,10 +2539,16 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument, +@@ -2548,10 +2548,16 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument, }(); if (!isAboutBlankInChromeDocshell) { @@ -1131,7 +1093,7 @@ index f8428e5926..dd0124f7e9 100644 } } -@@ -2662,6 +2668,19 @@ void nsGlobalWindowOuter::DispatchDOMWindowCreated() { +@@ -2672,6 +2678,19 @@ void nsGlobalWindowOuter::DispatchDOMWindowCreated() { } } @@ -1152,22 +1114,22 @@ index f8428e5926..dd0124f7e9 100644 void nsGlobalWindowOuter::SetDocShell(nsDocShell* aDocShell) { diff --git a/dom/base/nsGlobalWindowOuter.h b/dom/base/nsGlobalWindowOuter.h -index 6b29e4a885..5980d18660 100644 +index 6958d974b4..42a5a1d32b 100644 --- a/dom/base/nsGlobalWindowOuter.h +++ b/dom/base/nsGlobalWindowOuter.h -@@ -302,6 +302,7 @@ class nsGlobalWindowOuter final : public mozilla::dom::EventTarget, +@@ -303,6 +303,7 @@ class nsGlobalWindowOuter final : public mozilla::dom::EventTarget, // Outer windows only. - void DispatchDOMWindowCreated(); + MOZ_CAN_RUN_SCRIPT void DispatchDOMWindowCreated(); + void JugglerDispatchDOMWindowReused(); // Outer windows only. virtual void EnsureSizeAndPositionUpToDate() override; diff --git a/dom/base/nsINode.cpp b/dom/base/nsINode.cpp -index 361f78eb02..e59d8a06bb 100644 +index cee17c4e32..e887857a6f 100644 --- a/dom/base/nsINode.cpp +++ b/dom/base/nsINode.cpp -@@ -1622,6 +1622,61 @@ void nsINode::GetBoxQuadsFromWindowOrigin(const BoxQuadOptions& aOptions, +@@ -1980,6 +1980,61 @@ void nsINode::GetBoxQuadsFromWindowOrigin(const BoxQuadOptions& aOptions, mozilla::GetBoxQuadsFromWindowOrigin(this, aOptions, aResult, aRv); } @@ -1230,10 +1192,10 @@ index 361f78eb02..e59d8a06bb 100644 DOMQuad& aQuad, const GeometryNode& aFrom, const ConvertCoordinateOptions& aOptions, CallerType aCallerType, diff --git a/dom/base/nsINode.h b/dom/base/nsINode.h -index bd8c0993aa..b3ebfe9a84 100644 +index 271c98870e..16c69324c8 100644 --- a/dom/base/nsINode.h +++ b/dom/base/nsINode.h -@@ -2509,6 +2509,10 @@ class nsINode : public mozilla::dom::EventTarget { +@@ -3057,6 +3057,10 @@ class nsINode : public mozilla::dom::EventTarget { nsTArray>& aResult, ErrorResult& aRv); @@ -1245,7 +1207,7 @@ index bd8c0993aa..b3ebfe9a84 100644 DOMQuad& aQuad, const TextOrElementOrDocument& aFrom, const ConvertCoordinateOptions& aOptions, CallerType aCallerType, diff --git a/dom/base/nsJSUtils.cpp b/dom/base/nsJSUtils.cpp -index 59b306ffb0..8486e23714 100644 +index 6a58ddfa1b..b71dfa31f3 100644 --- a/dom/base/nsJSUtils.cpp +++ b/dom/base/nsJSUtils.cpp @@ -149,6 +149,11 @@ bool nsJSUtils::GetEnvironmentChainForElement(JSContext* aCx, Element* aElement, @@ -1261,7 +1223,7 @@ index 59b306ffb0..8486e23714 100644 void nsJSUtils::ResetTimeZone() { JS::ResetTimeZone(); } diff --git a/dom/base/nsJSUtils.h b/dom/base/nsJSUtils.h -index 841cab0c7f..418f5cc276 100644 +index 897b094dc2..81872eb2e9 100644 --- a/dom/base/nsJSUtils.h +++ b/dom/base/nsJSUtils.h @@ -72,6 +72,7 @@ class nsJSUtils { @@ -1273,7 +1235,7 @@ index 841cab0c7f..418f5cc276 100644 static bool DumpEnabled(); diff --git a/dom/chrome-webidl/BrowsingContext.webidl b/dom/chrome-webidl/BrowsingContext.webidl -index d0508a8c29..518580aa7a 100644 +index 7b3dca8a55..51fbda3076 100644 --- a/dom/chrome-webidl/BrowsingContext.webidl +++ b/dom/chrome-webidl/BrowsingContext.webidl @@ -72,6 +72,17 @@ enum PrefersReducedMotionOverride { @@ -1305,10 +1267,10 @@ index d0508a8c29..518580aa7a 100644 * A unique identifier for the browser element that is hosting this * BrowsingContext tree. Every BrowsingContext in the element's tree will diff --git a/dom/fetch/Fetch.cpp b/dom/fetch/Fetch.cpp -index 6f59fc662e..33d54178c6 100644 +index b572ae277f..e05252ca5a 100644 --- a/dom/fetch/Fetch.cpp +++ b/dom/fetch/Fetch.cpp -@@ -721,6 +721,12 @@ already_AddRefed FetchRequest(nsIGlobalObject* aGlobal, +@@ -722,6 +722,12 @@ already_AddRefed FetchRequest(nsIGlobalObject* aGlobal, actor->SetOriginStack(std::move(stack)); } @@ -1322,10 +1284,10 @@ index 6f59fc662e..33d54178c6 100644 return p.forget(); diff --git a/dom/fetch/FetchService.cpp b/dom/fetch/FetchService.cpp -index 1800656681..a4a77ca8e0 100644 +index 8012135056..1270558a0c 100644 --- a/dom/fetch/FetchService.cpp +++ b/dom/fetch/FetchService.cpp -@@ -266,6 +266,14 @@ RefPtr FetchService::FetchInstance::Fetch() { +@@ -267,6 +267,14 @@ RefPtr FetchService::FetchInstance::Fetch() { net::ClassificationFlags({0, 0}) // TrackingFlags ); @@ -1341,113 +1303,35 @@ index 1800656681..a4a77ca8e0 100644 auto& args = mArgs.as(); mFetchDriver->SetWorkerScript(args.mWorkerScript); diff --git a/dom/geolocation/Geolocation.cpp b/dom/geolocation/Geolocation.cpp -index 20a3eded3a..9fb873c74b 100644 +index 51efcf97c0..328b7f4406 100644 --- a/dom/geolocation/Geolocation.cpp +++ b/dom/geolocation/Geolocation.cpp -@@ -409,7 +409,10 @@ nsGeolocationRequest::Allow(JS::Handle aChoices) { +@@ -393,7 +393,10 @@ nsGeolocationRequest::Allow(JS::Handle aChoices) { self->Cancel(); }; - if (mBehavior != SystemGeolocationPermissionBehavior::NoPrompt) { -+ RefPtr gs = nsGeolocationService::GetGeolocationService( -+ mLocator->GetBrowsingContext()); ++ RefPtr gs = ++ GeolocationService::GetGeolocationService(mLocator->GetBrowsingContext()); + + if (mBehavior != SystemGeolocationPermissionBehavior::NoPrompt && !gs->IsOverride()) { // Asynchronously present the system dialog or open system preferences // (RequestGeolocationPermissionFromUser will know which to do), and wait // for the permission to change or the request to be canceled. If the -@@ -433,8 +436,6 @@ nsGeolocationRequest::Allow(JS::Handle aChoices) { +@@ -417,8 +420,6 @@ nsGeolocationRequest::Allow(JS::Handle aChoices) { return NS_OK; } -- RefPtr gs = nsGeolocationService::GetGeolocationService( -- mLocator->GetBrowsingContext()); +- RefPtr gs = +- GeolocationService::GetGeolocationService(mLocator->GetBrowsingContext()); bool canUseCache = false; CachedPositionAndAccuracy lastPosition = gs->GetCachedPosition(); if (lastPosition.position) { -@@ -721,11 +722,16 @@ NS_INTERFACE_MAP_END - NS_IMPL_ADDREF(nsGeolocationService) - NS_IMPL_RELEASE(nsGeolocationService) - --nsresult nsGeolocationService::Init() { -+nsresult nsGeolocationService::Init(bool isOverride) { - if (!StaticPrefs::geo_enabled()) { - return NS_ERROR_FAILURE; - } - -+ if (isOverride) { -+ mIsOverride = true; -+ mHigherAccuracy = true; -+ } -+ - if (XRE_IsContentProcess()) { - return NS_OK; - } -@@ -804,6 +810,10 @@ nsresult nsGeolocationService::Init() { - return NS_OK; - } - -+bool nsGeolocationService::IsOverride() { -+ return mIsOverride; -+} -+ - nsGeolocationService::~nsGeolocationService() = default; - - NS_IMETHODIMP -@@ -947,6 +957,10 @@ bool nsGeolocationService::HighAccuracyRequested() { - } - - void nsGeolocationService::UpdateAccuracy(bool aForceHigh) { -+ if (mIsOverride) { -+ return; -+ } -+ - bool highRequired = aForceHigh || HighAccuracyRequested(); - - if (XRE_IsContentProcess()) { -diff --git a/dom/geolocation/Geolocation.h b/dom/geolocation/Geolocation.h -index 2194983e91..79c0e97ad8 100644 ---- a/dom/geolocation/Geolocation.h -+++ b/dom/geolocation/Geolocation.h -@@ -63,7 +63,7 @@ class nsGeolocationService final : public nsIGeolocationUpdate, - - nsGeolocationService() = default; - -- nsresult Init(); -+ nsresult Init(bool isOverride = false); - - // Management of the Geolocation objects - void AddLocator(mozilla::dom::Geolocation* aLocator); -@@ -88,6 +88,8 @@ class nsGeolocationService final : public nsIGeolocationUpdate, - void UpdateAccuracy(bool aForceHigh = false); - bool HighAccuracyRequested(); - -+ bool IsOverride(); -+ - private: - ~nsGeolocationService(); - -@@ -114,6 +116,8 @@ class nsGeolocationService final : public nsIGeolocationUpdate, - // Nothing() if not being started, or a boolean reflecting the requested - // accuracy. - mozilla::Maybe mStarting; -+ -+ bool mIsOverride = false; - }; - - namespace mozilla::dom { diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp -index e3698a2cbc..dce23cb29d 100644 +index c7f99855d5..7139f8f598 100644 --- a/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp -@@ -39,20 +39,21 @@ - #include "mozilla/dom/Document.h" - #include "mozilla/dom/DocumentInlines.h" - #include "mozilla/dom/DocumentOrShadowRoot.h" - #include "mozilla/dom/ElementBinding.h" - #include "mozilla/dom/FileSystemUtils.h" - #include "mozilla/dom/FormData.h" - #include "mozilla/dom/GetFilesHelper.h" +@@ -46,6 +46,7 @@ #include "mozilla/dom/HTMLDataListElement.h" #include "mozilla/dom/HTMLOptionElement.h" #include "mozilla/dom/InputType.h" @@ -1455,21 +1339,7 @@ index e3698a2cbc..dce23cb29d 100644 #include "mozilla/dom/MouseEvent.h" #include "mozilla/dom/NumericInputTypes.h" #include "mozilla/dom/ProgressEvent.h" - #include "mozilla/dom/UnionTypes.h" - #include "mozilla/dom/UserActivation.h" - #include "mozilla/dom/WheelEventBinding.h" - #include "mozilla/dom/WindowContext.h" - #include "mozilla/dom/WindowGlobalChild.h" - #include "mozilla/glean/DomMetrics.h" - #include "nsAttrValueInlines.h" -@@ -922,20 +923,27 @@ - } - - // Get parent nsPIDOMWindow object. - nsCOMPtr doc = OwnerDoc(); - - RefPtr bc = doc->GetBrowsingContext(); - if (!bc) { +@@ -924,6 +925,13 @@ nsresult HTMLInputElement::InitFilePicker(FilePickerType aType) { return NS_ERROR_FAILURE; } @@ -1483,16 +1353,8 @@ index e3698a2cbc..dce23cb29d 100644 if (IsPickerBlocked(doc)) { return NS_OK; } - - // Get Loc title - nsAutoString title; - nsAutoString okButtonLabel; - if (aType == FILE_PICKER_DIRECTORY) { - nsContentUtils::GetMaybeLocalizedString(PropertiesFile::FORMS_PROPERTIES, - "DirectoryUpload", doc, title); - diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl -index 5c0c24dc52..44284cc319 100644 +index 83313786eb..6f1b03076b 100644 --- a/dom/interfaces/base/nsIDOMWindowUtils.idl +++ b/dom/interfaces/base/nsIDOMWindowUtils.idl @@ -325,6 +325,26 @@ interface nsIDOMWindowUtils : nsISupports { @@ -1523,12 +1385,10 @@ index 5c0c24dc52..44284cc319 100644 * wheel. * diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp -index c6d774103c..9389fb3742 100644 +index 36ec79dc9e..5867a82022 100644 --- a/dom/ipc/BrowserChild.cpp +++ b/dom/ipc/BrowserChild.cpp -@@ -1609,9 +1609,19 @@ mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityRealMouseMoveEvent( - mozilla::ipc::IPCResult BrowserChild::RecvRealMouseMoveEvent( - const WidgetMouseEvent& aMouseEvent, const ScrollableLayerGuid& aGuid, +@@ -1603,7 +1603,17 @@ mozilla::ipc::IPCResult BrowserChild::RecvRealMouseMoveEvent( const uint64_t& aInputBlockId) { MOZ_ASSERT(!aMouseEvent.AsPointerEvent()); MOZ_ASSERT(!aMouseEvent.AsDragEvent()); @@ -1547,7 +1407,7 @@ index c6d774103c..9389fb3742 100644 CoalescedMouseData* data = mCoalescedMouseData.GetOrInsertNew(aMouseEvent.pointerId); MOZ_ASSERT(data); -@@ -1840,6 +1850,21 @@ void BrowserChild::HandleRealMouseButtonEvent( +@@ -1832,6 +1842,21 @@ void BrowserChild::HandleRealMouseButtonEvent( if (postLayerization) { postLayerization->Register(); } @@ -1816,7 +1676,7 @@ index 7f3e2e0360..44df1ff0a9 100644 const nsCOMPtr mControlThread; // Set in StartCapture. diff --git a/dom/script/ScriptSettings.cpp b/dom/script/ScriptSettings.cpp -index 9cdecc7f34..e3aae194a3 100644 +index d1cf4b188f..dba6adb997 100644 --- a/dom/script/ScriptSettings.cpp +++ b/dom/script/ScriptSettings.cpp @@ -146,6 +146,30 @@ ScriptSettingsStackEntry::~ScriptSettingsStackEntry() { @@ -1907,10 +1767,10 @@ index 584d39da5f..65eb701435 100644 * returned quads are further translated relative to the window * origin -- which is not the layout origin. Further translation diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index ae2d14e105..77f35801a0 100644 +index c419101584..a25ad800a0 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -394,6 +394,8 @@ dictionary SynthesizeMouseEventData : SynthesizeEventData { +@@ -396,6 +396,8 @@ dictionary SynthesizeMouseEventData : SynthesizeEventData { short inputSource = 1; // Modifiers pressed, using constants defined as MODIFIER_* in nsIDOMWindowUtils. long modifiers = 0; @@ -1919,7 +1779,7 @@ index ae2d14e105..77f35801a0 100644 }; // Mozilla-specific stuff -@@ -432,6 +434,8 @@ dictionary SynthesizeEventOptions { +@@ -434,6 +436,8 @@ dictionary SynthesizeEventOptions { // Set this to true to ensure that the event is dispatched to this DOM window // or one of its children. boolean toWindow = false; @@ -1929,29 +1789,18 @@ index ae2d14e105..77f35801a0 100644 boolean isDOMEventSynthesized = true; }; diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp -index 0a8e4aca1d..c73d686458 100644 +index 32e39162d3..e5f8828932 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp -@@ -1105,7 +1105,7 @@ void PrefLanguagesChanged(const char* /* aPrefName */, void* /* aClosure */) { - AssertIsOnMainThread(); - - nsTArray languages; -- Navigator::GetAcceptLanguages(languages, nullptr); -+ Navigator::GetAcceptLanguages(nullptr, languages); - - RuntimeService* runtime = RuntimeService::GetService(); - if (runtime) { -@@ -1281,8 +1281,7 @@ bool RuntimeService::RegisterWorker(WorkerPrivate& aWorkerPrivate) { +@@ -1316,7 +1316,6 @@ bool RuntimeService::RegisterWorker(WorkerPrivate& aWorkerPrivate) { } // The navigator overridden properties should have already been read. - -- Navigator::GetAcceptLanguages(mNavigatorProperties.mLanguages, nullptr); -+ Navigator::GetAcceptLanguages(nullptr, mNavigatorProperties.mLanguages); + Navigator::GetAcceptLanguages(mNavigatorProperties.mLanguages, nullptr); mNavigatorPropertiesLoaded = true; } - -@@ -1915,6 +1914,13 @@ void RuntimeService::PropagateStorageAccessPermissionGranted( +@@ -2013,6 +2012,13 @@ void RuntimeService::UpdateTimezoneOverrideForWorkers( } } @@ -1965,7 +1814,7 @@ index 0a8e4aca1d..c73d686458 100644 template void RuntimeService::BroadcastAllWorkers(const Func& aFunc) { AssertIsOnMainThread(); -@@ -2481,6 +2487,14 @@ void PropagateStorageAccessPermissionGrantedToWorkers( +@@ -2603,6 +2609,14 @@ void UpdateTimezoneOverrideForWorkers(const nsPIDOMWindowInner& aWindow, } } @@ -1981,25 +1830,70 @@ index 0a8e4aca1d..c73d686458 100644 MOZ_ASSERT(!NS_IsMainThread()); MOZ_ASSERT(aCx); diff --git a/dom/workers/RuntimeService.h b/dom/workers/RuntimeService.h -index f024885058..fcaf831426 100644 +index 777352c728..f1d647afe8 100644 --- a/dom/workers/RuntimeService.h +++ b/dom/workers/RuntimeService.h -@@ -111,6 +111,8 @@ class RuntimeService final : public nsIObserver { - void PropagateStorageAccessPermissionGranted( - const nsPIDOMWindowInner& aWindow); +@@ -123,6 +123,8 @@ class RuntimeService final : public nsIObserver { + void UpdateTimezoneOverrideForWorkers(const nsPIDOMWindowInner& aWindow, + const nsAString& aTimezone); + void ResetDefaultLocaleInAllWorkers(); + NavigatorProperties GetNavigatorProperties() const { MutexAutoLock lock(mMutex); return mNavigatorProperties; +diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp +index 8c88d73aa9..7058eb3253 100644 +--- a/dom/workers/ScriptLoader.cpp ++++ b/dom/workers/ScriptLoader.cpp +@@ -1169,6 +1169,14 @@ bool WorkerScriptLoader::EvaluateScript(JSContext* aCx, + mWorkerRef->Private()->AssertIsOnWorkerThread(); + MOZ_ASSERT(!IsDynamicImport(aRequest)); + ++ // ----- Playwright begin ----- ++ ++mEvaluatingScriptCount; ++ auto decrementEvaluatingCount = MakeScopeExit([&] { ++ MOZ_ASSERT(mEvaluatingScriptCount > 0); ++ --mEvaluatingScriptCount; ++ }); ++ // ----- Playwright end ------- ++ + WorkerLoadContext* loadContext = aRequest->GetWorkerLoadContext(); + + NS_ASSERTION(!loadContext->mChannel, "Should no longer have a channel!"); +diff --git a/dom/workers/ScriptLoader.h b/dom/workers/ScriptLoader.h +index 6ea3f0a9ed..496b805f19 100644 +--- a/dom/workers/ScriptLoader.h ++++ b/dom/workers/ScriptLoader.h +@@ -157,6 +157,10 @@ class WorkerScriptLoader : public JS::loader::ScriptLoaderInterface, + bool mExecutionAborted = false; + bool mMutedErrorFlag = false; + ++ // ----- Playwright begin ----- ++ uint32_t mEvaluatingScriptCount = 0; ++ // ----- Playwright end ------- ++ + // Count of loading module requests. mLoadingRequests doesn't keep track of + // child module requests. + // This member should be accessed on worker thread. +@@ -228,7 +232,9 @@ class WorkerScriptLoader : public JS::loader::ScriptLoaderInterface, + bool ProcessPendingRequests(JSContext* aCx); + + bool AllScriptsExecuted() { +- return mLoadingRequests.isEmpty() && mLoadedRequests.isEmpty(); ++ // https://github.com/microsoft/playwright/issues/42565 ++ return mEvaluatingScriptCount == 0 && mLoadingRequests.isEmpty() && ++ mLoadedRequests.isEmpty(); + } + + bool IsDebuggerScript() const { return mWorkerScriptType == DebuggerScript; } diff --git a/dom/workers/WorkerCommon.h b/dom/workers/WorkerCommon.h -index b5a06c2300..b8bae691b5 100644 +index 79f09daf92..b921254ac2 100644 --- a/dom/workers/WorkerCommon.h +++ b/dom/workers/WorkerCommon.h -@@ -49,6 +49,8 @@ void ResumeWorkersForWindow(const nsPIDOMWindowInner& aWindow); - void PropagateStorageAccessPermissionGrantedToWorkers( - const nsPIDOMWindowInner& aWindow); +@@ -52,6 +52,8 @@ void PropagateStorageAccessPermissionGrantedToWorkers( + void UpdateTimezoneOverrideForWorkers(const nsPIDOMWindowInner& aWindow, + const nsAString& aTimezone); +void ResetDefaultLocaleInAllWorkers(); + @@ -2007,10 +1901,10 @@ index b5a06c2300..b8bae691b5 100644 bool IsWorkerGlobal(JSObject* global); diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp -index 0460a81a45..6f88f1f176 100644 +index f6619cf308..f8563ba6eb 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp -@@ -743,6 +743,18 @@ class UpdateContextOptionsRunnable final : public WorkerControlRunnable { +@@ -769,6 +769,18 @@ class UpdateTimezoneOverrideRunnable final : public WorkerThreadRunnable { } }; @@ -2029,7 +1923,7 @@ index 0460a81a45..6f88f1f176 100644 class UpdateLanguagesRunnable final : public WorkerThreadRunnable { nsTArray mLanguages; -@@ -2333,6 +2345,16 @@ void WorkerPrivate::UpdateContextOptions( +@@ -2436,6 +2448,16 @@ void WorkerPrivate::UpdateContextOptions( } } @@ -2046,7 +1940,7 @@ index 0460a81a45..6f88f1f176 100644 void WorkerPrivate::UpdateLanguages(const nsTArray& aLanguages) { AssertIsOnParentThread(); -@@ -6063,6 +6085,15 @@ void WorkerPrivate::UpdateContextOptionsInternal( +@@ -6414,6 +6436,15 @@ void WorkerPrivate::UpdateTimezoneOverrideInternal(JSContext* aCx, } } @@ -2063,27 +1957,27 @@ index 0460a81a45..6f88f1f176 100644 const nsTArray& aLanguages) { WorkerGlobalScope* globalScope = GlobalScope(); diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h -index 8e6131e16d..7f56e1c86d 100644 +index 95bfd6ddb2..b38f31f547 100644 --- a/dom/workers/WorkerPrivate.h +++ b/dom/workers/WorkerPrivate.h -@@ -460,6 +460,8 @@ class WorkerPrivate final - void UpdateContextOptionsInternal(JSContext* aCx, - const JS::ContextOptions& aContextOptions); +@@ -462,6 +462,8 @@ class WorkerPrivate final + void UpdateTimezoneOverrideInternal(JSContext* aCx, + const nsAString& aTimezone); + void ResetDefaultLocaleInternal(JSContext* aCx); + void UpdateLanguagesInternal(const nsTArray& aLanguages); - void UpdateJSWorkerMemoryParameterInternal(JSContext* aCx, JSGCParamKey key, -@@ -1111,6 +1113,8 @@ class WorkerPrivate final + void UpdateLanguageOverrideInternal( +@@ -1167,6 +1169,8 @@ class WorkerPrivate final - void UpdateContextOptions(const JS::ContextOptions& aContextOptions); + void UpdateTimezoneOverride(const nsAString& aTimezone); + void ResetDefaultLocale(); + void UpdateLanguages(const nsTArray& aLanguages); - void UpdateJSWorkerMemoryParameter(JSGCParamKey key, Maybe value); + void UpdateLanguageOverride(const nsACString& aLanguageOverride, diff --git a/intl/components/src/TimeZone.cpp b/intl/components/src/TimeZone.cpp index a360ddb39e..687375f501 100644 --- a/intl/components/src/TimeZone.cpp @@ -2124,7 +2018,7 @@ index 34acc89341..e2f9675edd 100644 * Set the default time zone. */ diff --git a/js/public/Date.h b/js/public/Date.h -index 0310517fa3..90d8708e2b 100644 +index c36ea65ae6..55c8db661d 100644 --- a/js/public/Date.h +++ b/js/public/Date.h @@ -54,6 +54,8 @@ namespace JS { @@ -2137,10 +2031,10 @@ index 0310517fa3..90d8708e2b 100644 inline ClippedTime TimeClip(double time); diff --git a/js/src/debugger/Object.cpp b/js/src/debugger/Object.cpp -index 57cd28a445..398b82832b 100644 +index 29e128ec72..270ee326e1 100644 --- a/js/src/debugger/Object.cpp +++ b/js/src/debugger/Object.cpp -@@ -2510,7 +2510,11 @@ Maybe DebuggerObject::call(JSContext* cx, +@@ -2623,7 +2623,11 @@ Maybe DebuggerObject::call(JSContext* cx, invokeArgs[i].set(args2[i]); } @@ -2153,10 +2047,10 @@ index 57cd28a445..398b82832b 100644 } diff --git a/js/src/vm/DateTime.cpp b/js/src/vm/DateTime.cpp -index 50657afb4a..f8a975acc3 100644 +index 51d1d54ee7..a358ad1bf5 100644 --- a/js/src/vm/DateTime.cpp +++ b/js/src/vm/DateTime.cpp -@@ -164,7 +164,7 @@ static int32_t UTCToLocalStandardOffsetSeconds() { +@@ -163,7 +163,7 @@ static int32_t UTCToLocalStandardOffsetSeconds() { void js::DateTimeInfo::internalResetTimeZone(ResetTimeZoneMode mode) { #if JS_HAS_INTL_API @@ -2165,7 +2059,7 @@ index 50657afb4a..f8a975acc3 100644 #endif // Nothing to do when an update request is already enqueued. -@@ -204,28 +204,16 @@ void js::DateTimeInfo::resetState() { +@@ -203,28 +203,16 @@ void js::DateTimeInfo::resetState() { #endif /* JS_HAS_INTL_API */ } @@ -2198,7 +2092,7 @@ index 50657afb4a..f8a975acc3 100644 #endif bool updateIfChanged = timeZoneStatus_ == TimeZoneStatus::UpdateIfChanged; -@@ -263,21 +251,6 @@ js::DateTimeInfo::DateTimeInfo() { +@@ -262,21 +250,6 @@ js::DateTimeInfo::DateTimeInfo() { timeZoneStatus_ = TimeZoneStatus::NeedsUpdate; } @@ -2220,7 +2114,7 @@ index 50657afb4a..f8a975acc3 100644 js::DateTimeInfo::~DateTimeInfo() = default; -@@ -544,9 +517,9 @@ bool js::DateTimeInfo::internalTimeZoneId(TimeZoneIdentifierVector& result) { +@@ -543,9 +516,9 @@ bool js::DateTimeInfo::internalTimeZoneId(TimeZoneIdentifierVector& result) { mozilla::intl::TimeZone* js::DateTimeInfo::timeZone() { if (!timeZone_) { mozilla::Maybe> timeZoneOverride; @@ -2232,7 +2126,7 @@ index 50657afb4a..f8a975acc3 100644 } auto timeZone = mozilla::intl::TimeZone::TryCreate(timeZoneOverride); -@@ -554,7 +527,7 @@ mozilla::intl::TimeZone* js::DateTimeInfo::timeZone() { +@@ -553,7 +526,7 @@ mozilla::intl::TimeZone* js::DateTimeInfo::timeZone() { // If a time zone override was specified, but couldn't be resolved to a // valid time zone, then we ignore the override request and instead use the // system default time zone. @@ -2241,7 +2135,7 @@ index 50657afb4a..f8a975acc3 100644 timeZone = mozilla::intl::TimeZone::TryCreate(); } -@@ -591,10 +564,24 @@ void js::ResetTimeZoneInternal(ResetTimeZoneMode mode) { +@@ -590,10 +563,24 @@ void js::ResetTimeZoneInternal(ResetTimeZoneMode mode) { js::DateTimeInfo::resetTimeZone(mode); } @@ -2266,7 +2160,7 @@ index 50657afb4a..f8a975acc3 100644 #if JS_HAS_INTL_API # if defined(XP_WIN) static bool IsOlsonCompatibleWindowsTimeZoneId(std::string_view tz) { -@@ -808,9 +795,17 @@ static bool ReadTimeZoneLink(std::string_view tz, +@@ -807,9 +794,17 @@ static bool ReadTimeZoneLink(std::string_view tz, void js::DateTimeInfo::internalResyncICUDefaultTimeZone() { #if JS_HAS_INTL_API @@ -2354,7 +2248,7 @@ index 2fb6b9c281..41b0c5be27 100644 void internalResyncICUDefaultTimeZone(); diff --git a/js/src/vm/Realm.cpp b/js/src/vm/Realm.cpp -index e9959dc153..ced7514d30 100644 +index 298c3d67b3..5417e8b5d2 100644 --- a/js/src/vm/Realm.cpp +++ b/js/src/vm/Realm.cpp @@ -579,22 +579,10 @@ void Realm::setLocaleOverride(const char* locale) { @@ -2436,10 +2330,10 @@ index eaaf69687f..6f965a110d 100644 // No boxes to return return; diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp -index 38891d8d9f..0c649cec87 100644 +index 8b1f69b523..38eb79887d 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp -@@ -11791,7 +11791,9 @@ bool PresShell::ComputeActiveness() const { +@@ -11981,7 +11981,9 @@ bool PresShell::ComputeActiveness() const { if (!browserChild->IsVisible()) { MOZ_LOG(gLog, LogLevel::Debug, (" > BrowserChild %p is not visible", browserChild)); @@ -2451,10 +2345,10 @@ index 38891d8d9f..0c649cec87 100644 // If the browser is visible but just due to be preserving layers diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp -index 46967151f9..585561b2a0 100644 +index 0ef8c469da..056c0e2f7f 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp -@@ -702,6 +702,10 @@ bool nsLayoutUtils::AllowZoomingForDocument( +@@ -701,6 +701,10 @@ bool nsLayoutUtils::AllowZoomingForDocument(const Document* aDocument) { !aDocument->GetPresShell()->AsyncPanZoomEnabled()) { return false; } @@ -2465,7 +2359,7 @@ index 46967151f9..585561b2a0 100644 // True if we allow zooming for all documents on this platform, or if we are // in RDM. BrowsingContext* bc = aDocument->GetBrowsingContext(); -@@ -9832,6 +9836,9 @@ void nsLayoutUtils::ComputeSystemFont(nsFont* aSystemFont, +@@ -9932,6 +9936,9 @@ void nsLayoutUtils::ComputeSystemFont(nsFont* aSystemFont, /* static */ bool nsLayoutUtils::ShouldHandleMetaViewport(const Document* aDocument) { @@ -2476,10 +2370,10 @@ index 46967151f9..585561b2a0 100644 return StaticPrefs::dom_meta_viewport_enabled() || (bc && bc->InRDMPane()); } diff --git a/layout/style/GeckoBindings.h b/layout/style/GeckoBindings.h -index b8317e0062..29739fa0e9 100644 +index 574c2683ca..bc435e754f 100644 --- a/layout/style/GeckoBindings.h +++ b/layout/style/GeckoBindings.h -@@ -622,6 +622,7 @@ float Gecko_MediaFeatures_GetResolution(const mozilla::dom::Document*); +@@ -606,6 +606,7 @@ float Gecko_MediaFeatures_GetResolution(const mozilla::dom::Document*); bool Gecko_MediaFeatures_PrefersReducedMotion(const mozilla::dom::Document*); bool Gecko_MediaFeatures_PrefersReducedTransparency( const mozilla::dom::Document*); @@ -2540,10 +2434,10 @@ index 1f9613b8cd..1fb108ea92 100644 return StylePrefersContrast::NoPreference; } diff --git a/netwerk/base/LoadInfo.cpp b/netwerk/base/LoadInfo.cpp -index a9abddc425..32ac87268f 100644 +index 18d89d2e1d..771e28b41b 100644 --- a/netwerk/base/LoadInfo.cpp +++ b/netwerk/base/LoadInfo.cpp -@@ -2105,4 +2105,16 @@ void LoadInfo::UpdateParentAddressSpaceInfo() { +@@ -2118,4 +2118,16 @@ void LoadInfo::UpdateParentAddressSpaceInfo() { } } @@ -2561,10 +2455,10 @@ index a9abddc425..32ac87268f 100644 + } // namespace mozilla::net diff --git a/netwerk/base/LoadInfo.h b/netwerk/base/LoadInfo.h -index 797517e695..93927bb84e 100644 +index 9e48f631d8..71cb6d4cac 100644 --- a/netwerk/base/LoadInfo.h +++ b/netwerk/base/LoadInfo.h -@@ -550,6 +550,8 @@ class LoadInfo final : public nsILoadInfo { +@@ -546,6 +546,8 @@ class LoadInfo final : public nsILoadInfo { dom::UserNavigationInvolvement::None; bool mSkipHTTPSUpgrade = false; @@ -2574,10 +2468,10 @@ index 797517e695..93927bb84e 100644 // This is exposed solely for testing purposes and should not be used outside of // LoadInfo diff --git a/netwerk/base/TRRLoadInfo.cpp b/netwerk/base/TRRLoadInfo.cpp -index 8acc7468ae..5cf23f8a39 100644 +index 9a4cf06487..574aceb570 100644 --- a/netwerk/base/TRRLoadInfo.cpp +++ b/netwerk/base/TRRLoadInfo.cpp -@@ -555,5 +555,15 @@ TRRLoadInfo::GetFetchDestination(nsACString& aDestination) { +@@ -556,5 +556,15 @@ TRRLoadInfo::GetFetchDestination(nsACString& aDestination) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -2594,10 +2488,10 @@ index 8acc7468ae..5cf23f8a39 100644 } // namespace net } // namespace mozilla diff --git a/netwerk/base/nsILoadInfo.idl b/netwerk/base/nsILoadInfo.idl -index f6a22a498d..cbc8f92fab 100644 +index 5529ed0ea4..89601e3015 100644 --- a/netwerk/base/nsILoadInfo.idl +++ b/netwerk/base/nsILoadInfo.idl -@@ -1720,4 +1720,6 @@ interface nsILoadInfo : nsISupports +@@ -1711,4 +1711,6 @@ interface nsILoadInfo : nsISupports return static_cast(userNavigationInvolvement); } %} @@ -2626,10 +2520,10 @@ index 3654f3ed20..f685e7668a 100644 * Set the status and reason for the forthcoming synthesized response. * Multiple calls overwrite existing values. diff --git a/netwerk/ipc/DocumentLoadListener.cpp b/netwerk/ipc/DocumentLoadListener.cpp -index 29c5421f66..0ab0296f64 100644 +index d9783f7852..c99d1bb54c 100644 --- a/netwerk/ipc/DocumentLoadListener.cpp +++ b/netwerk/ipc/DocumentLoadListener.cpp -@@ -195,6 +195,7 @@ static auto CreateDocumentLoadInfo(CanonicalBrowsingContext* aBrowsingContext, +@@ -206,6 +206,7 @@ static auto CreateDocumentLoadInfo(CanonicalBrowsingContext* aBrowsingContext, aLoadState->GetTextDirectiveUserActivation() || aLoadState->HasLoadFlags(nsIWebNavigation::LOAD_FLAGS_FROM_EXTERNAL)); loadInfo->SetIsMetaRefresh(aLoadState->IsMetaRefresh()); @@ -2638,10 +2532,10 @@ index 29c5421f66..0ab0296f64 100644 return loadInfo.forget(); } diff --git a/netwerk/protocol/http/InterceptedHttpChannel.cpp b/netwerk/protocol/http/InterceptedHttpChannel.cpp -index 60626cc9b3..99c85a483d 100644 +index d8c47fb9a4..90b268fc65 100644 --- a/netwerk/protocol/http/InterceptedHttpChannel.cpp +++ b/netwerk/protocol/http/InterceptedHttpChannel.cpp -@@ -726,10 +726,33 @@ NS_IMPL_ISUPPORTS(ResetInterceptionHeaderVisitor, nsIHttpHeaderVisitor) +@@ -729,10 +729,33 @@ NS_IMPL_ISUPPORTS(ResetInterceptionHeaderVisitor, nsIHttpHeaderVisitor) } // anonymous namespace @@ -2675,7 +2569,7 @@ index 60626cc9b3..99c85a483d 100644 if (mCanceled) { return mStatus; } -@@ -1143,11 +1166,18 @@ InterceptedHttpChannel::OnStartRequest(nsIRequest* aRequest) { +@@ -1151,11 +1174,18 @@ InterceptedHttpChannel::OnStartRequest(nsIRequest* aRequest) { GetCallback(mProgressSink); } @@ -2695,7 +2589,7 @@ index 60626cc9b3..99c85a483d 100644 if (mPump && mLoadFlags & LOAD_CALL_CONTENT_SNIFFERS) { RefPtr pump(mPump); diff --git a/netwerk/protocol/http/InterceptedHttpChannel.h b/netwerk/protocol/http/InterceptedHttpChannel.h -index 430646881b..6b5bbb2a41 100644 +index ab440756a6..2ba8db7005 100644 --- a/netwerk/protocol/http/InterceptedHttpChannel.h +++ b/netwerk/protocol/http/InterceptedHttpChannel.h @@ -89,6 +89,11 @@ class InterceptedHttpChannel final @@ -2711,10 +2605,10 @@ index 430646881b..6b5bbb2a41 100644 * InterceptionTimeStamps is used to record the time stamps of the * interception. diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp -index 42ee24d0b9..31b7adf7d6 100644 +index bbbfbd55f1..9fe25a2b56 100644 --- a/netwerk/protocol/http/nsHttpChannel.cpp +++ b/netwerk/protocol/http/nsHttpChannel.cpp -@@ -941,11 +941,9 @@ nsresult nsHttpChannel::OnBeforeConnect() { +@@ -942,11 +942,9 @@ nsresult nsHttpChannel::OnBeforeConnect() { // SecurityInfo.sys.mjs mLoadInfo->SetHstsStatus(isSecureURI); @@ -2727,7 +2621,7 @@ index 42ee24d0b9..31b7adf7d6 100644 BYPASS_LOCAL_CACHE(mLoadFlags, LoadPreferCacheLoadOverBypass())) { return NS_ERROR_OFFLINE; } -@@ -1058,9 +1056,7 @@ nsresult nsHttpChannel::MaybeUseHTTPSRRForUpgrade(bool aShouldUpgrade, +@@ -1066,9 +1064,7 @@ nsresult nsHttpChannel::MaybeUseHTTPSRRForUpgrade(bool aShouldUpgrade, return aStatus; } @@ -2738,7 +2632,7 @@ index 42ee24d0b9..31b7adf7d6 100644 if (mURI->SchemeIs("https") || aShouldUpgrade || !LoadUseHTTPSSVC() || forceOffline) { -@@ -1523,15 +1519,14 @@ nsresult nsHttpChannel::ContinueConnect() { +@@ -1541,15 +1537,14 @@ nsresult nsHttpChannel::ContinueConnect() { "CORS preflight must have been finished by the time we " "do the rest of ContinueConnect"); @@ -2756,7 +2650,7 @@ index 42ee24d0b9..31b7adf7d6 100644 BYPASS_LOCAL_CACHE(mLoadFlags, LoadPreferCacheLoadOverBypass())) { return NS_ERROR_OFFLINE; } -@@ -1573,7 +1568,7 @@ nsresult nsHttpChannel::ContinueConnect() { +@@ -1591,7 +1586,7 @@ nsresult nsHttpChannel::ContinueConnect() { } // We're about to hit the network. Don't if we're forced offline. @@ -2765,7 +2659,7 @@ index 42ee24d0b9..31b7adf7d6 100644 return NS_ERROR_OFFLINE; } -@@ -1681,12 +1676,9 @@ void nsHttpChannel::SpeculativeConnect() { +@@ -1699,12 +1694,9 @@ void nsHttpChannel::SpeculativeConnect() { // don't speculate if we are offline, when doing http upgrade (i.e. // websockets bootstrap), or if we can't do keep-alive (because then we // couldn't reuse the speculative connection anyhow). @@ -2779,7 +2673,7 @@ index 42ee24d0b9..31b7adf7d6 100644 return; } -@@ -4951,9 +4943,6 @@ nsresult nsHttpChannel::OpenCacheEntryInternal(bool isHttps) { +@@ -5034,9 +5026,6 @@ nsresult nsHttpChannel::OpenCacheEntryInternal(bool isHttps) { uint32_t cacheEntryOpenFlags; bool offline = gIOService->IsOffline(); @@ -2789,7 +2683,7 @@ index 42ee24d0b9..31b7adf7d6 100644 nsAutoCString cacheControlRequestHeader; (void)mRequestHead.GetHeader(nsHttp::Cache_Control, cacheControlRequestHeader); -@@ -4962,7 +4951,7 @@ nsresult nsHttpChannel::OpenCacheEntryInternal(bool isHttps) { +@@ -5045,7 +5034,7 @@ nsresult nsHttpChannel::OpenCacheEntryInternal(bool isHttps) { return NS_OK; } @@ -2798,7 +2692,7 @@ index 42ee24d0b9..31b7adf7d6 100644 if (offline || (mLoadFlags & INHIBIT_CACHING) || forceOffline) { if (BYPASS_LOCAL_CACHE(mLoadFlags, LoadPreferCacheLoadOverBypass()) && !offline && !forceOffline) { -@@ -8196,6 +8185,20 @@ void nsHttpChannel::MaybeStartDNSPrefetch() { +@@ -8524,6 +8513,20 @@ void nsHttpChannel::MaybeStartDNSPrefetch() { } } @@ -2820,10 +2714,10 @@ index 42ee24d0b9..31b7adf7d6 100644 nsHttpChannel::GetEncodedBodySize(uint64_t* aEncodedBodySize) { if (mCacheEntry && !LoadCacheEntryIsWriteOnly()) { diff --git a/netwerk/protocol/http/nsHttpChannel.h b/netwerk/protocol/http/nsHttpChannel.h -index 4576bdef9b..c023312fd1 100644 +index cb5da1a630..b826374a2d 100644 --- a/netwerk/protocol/http/nsHttpChannel.h +++ b/netwerk/protocol/http/nsHttpChannel.h -@@ -305,6 +305,10 @@ class nsHttpChannel final : public HttpBaseChannel, +@@ -317,6 +317,10 @@ class nsHttpChannel final : public HttpBaseChannel, void MaybeResolveProxyAndBeginConnect(); void MaybeStartDNSPrefetch(); @@ -2835,10 +2729,10 @@ index 4576bdef9b..c023312fd1 100644 // end server host name. nsIHttpChannelInternal::ProxyDNSStrategy ComputeProxyDNSStrategy(); diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp -index 9d085e0a5f..928862ea76 100644 +index 610c78f6f5..6787041317 100644 --- a/parser/html/nsHtml5TreeOpExecutor.cpp +++ b/parser/html/nsHtml5TreeOpExecutor.cpp -@@ -1448,6 +1448,10 @@ void nsHtml5TreeOpExecutor::UpdateReferrerInfoFromMeta( +@@ -1450,6 +1450,10 @@ void nsHtml5TreeOpExecutor::UpdateReferrerInfoFromMeta( void nsHtml5TreeOpExecutor::AddSpeculationCSP(const nsAString& aCSP) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); @@ -2850,10 +2744,10 @@ index 9d085e0a5f..928862ea76 100644 nsCOMPtr preloadCsp = mDocument->GetPreloadCsp(); if (!preloadCsp) { diff --git a/security/manager/ssl/nsCertOverrideService.cpp b/security/manager/ssl/nsCertOverrideService.cpp -index 068d9702fd..9ff49d6de9 100644 +index 30ca546027..049725c879 100644 --- a/security/manager/ssl/nsCertOverrideService.cpp +++ b/security/manager/ssl/nsCertOverrideService.cpp -@@ -624,6 +624,8 @@ void nsCertOverrideService::CountPermanentOverrideTelemetry( +@@ -616,6 +616,8 @@ void nsCertOverrideService::CountPermanentOverrideTelemetry( } static bool IsDebugger() { @@ -2863,10 +2757,10 @@ index 068d9702fd..9ff49d6de9 100644 nsCOMPtr marionette = do_GetService(NS_MARIONETTE_CONTRACTID); if (marionette) { diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs -index da12049e14..24621137e2 100644 +index 70f77c9fcb..e11bad0f28 100644 --- a/services/settings/Utils.sys.mjs +++ b/services/settings/Utils.sys.mjs -@@ -99,7 +99,7 @@ const _cdnURLs = {}; +@@ -105,7 +105,7 @@ function _isUndefined(value) { export var Utils = { get SERVER_URL() { @@ -2875,14 +2769,14 @@ index da12049e14..24621137e2 100644 ? // eslint-disable-next-line mozilla/valid-lazy lazy.gServerURL : AppConstants.REMOTE_SETTINGS_SERVER_URLS[0]; -@@ -113,6 +113,9 @@ export var Utils = { +@@ -119,6 +119,9 @@ export var Utils = { log, - get shouldSkipRemoteActivityDueToTests() { + get shouldSkipRemoteActivity() { + // Playwright does not set Cu.isInAutomation, hence we just return true + // here in order to disable the remote activity. + return true; - return ( + if ( (lazy.isRunningTests || Cu.isInAutomation) && this.SERVER_URL == "data:,#remote-settings-dummy/v1" diff --git a/third_party/libwebrtc/api/location.h b/third_party/libwebrtc/api/location.h @@ -2906,35 +2800,37 @@ index 0000000000..040cbc972b + +#endif // API_LOCATION_H_ diff --git a/toolkit/components/browser/nsIWebBrowserChrome.idl b/toolkit/components/browser/nsIWebBrowserChrome.idl -index a665bd039d..5ef9dc01fa 100644 +index c5c10b0e20..9f36ca5334 100644 --- a/toolkit/components/browser/nsIWebBrowserChrome.idl +++ b/toolkit/components/browser/nsIWebBrowserChrome.idl -@@ -87,6 +87,9 @@ interface nsIWebBrowserChrome : nsISupports - // Whether this is a Document Picture-in-Picture window - const unsigned long CHROME_DOCUMENT_PIP = 1 << 22; +@@ -94,7 +94,10 @@ interface nsIWebBrowserChrome : nsISupports + // ignored for Linux. + const unsigned long CHROME_SUPPRESS_ANIMATION = 1 << 24; +- // Two bits are free here. + // Whether this window has "width" or "height" defined in features -+ const unsigned long JUGGLER_WINDOW_EXPLICIT_SIZE = 0x00400000; ++ const unsigned long JUGGLER_WINDOW_EXPLICIT_SIZE = 1 << 26; + - // Prevents new window animations on MacOS and Windows. Currently - // ignored for Linux. - const unsigned long CHROME_SUPPRESS_ANIMATION = 1 << 24; ++ // One bit is free here. + + const unsigned long CHROME_CENTER_SCREEN = 1 << 27; + diff --git a/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs b/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs -index 0d081a03a9..647db4d2f6 100644 +index 7c5bde49c4..8123110513 100644 --- a/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs +++ b/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs -@@ -115,7 +115,9 @@ EnterprisePoliciesManager.prototype = { +@@ -113,7 +113,9 @@ EnterprisePoliciesManager.prototype = { Services.prefs.clearUserPref(PREF_POLICIES_APPLIED); } -- let provider = this._chooseProvider(); +- let provider = this._buildProvider(); + // --- Playwright begin --- + let provider = new PlaywrightPoliciesProvider(); + // --- Playwright end --- if (provider.failed) { this.status = Ci.nsIEnterprisePolicies.FAILED; -@@ -687,6 +689,19 @@ class JSONPoliciesProvider { +@@ -760,6 +762,19 @@ class JSONPoliciesProvider extends PoliciesProvider { } } @@ -2951,27 +2847,89 @@ index 0d081a03a9..647db4d2f6 100644 + } +} + - class WindowsGPOPoliciesProvider { + class WindowsGPOPoliciesProvider extends PoliciesProvider { constructor() { - this._policies = null; -diff --git a/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp b/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp -index 06300097b4..f190383e75 100644 ---- a/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp -+++ b/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp -@@ -837,7 +837,7 @@ void PopulateLanguages() { - // sufficient to only collect this information as the other properties are - // just reformats of Navigator::GetAcceptLanguages. - nsTArray languages; -- dom::Navigator::GetAcceptLanguages(languages, nullptr); -+ dom::Navigator::GetAcceptLanguages(nullptr, languages); - nsCString output = "["_ns; - - for (const auto& language : languages) { + super(); +diff --git a/toolkit/components/geolocation/GeolocationService.cpp b/toolkit/components/geolocation/GeolocationService.cpp +index 70af7ec0c2..b416d24f61 100644 +--- a/toolkit/components/geolocation/GeolocationService.cpp ++++ b/toolkit/components/geolocation/GeolocationService.cpp +@@ -52,11 +52,16 @@ NS_INTERFACE_MAP_END + NS_IMPL_ADDREF(GeolocationService) + NS_IMPL_RELEASE(GeolocationService) + +-nsresult GeolocationService::Init() { ++nsresult GeolocationService::Init(bool isOverride) { + if (!StaticPrefs::geo_enabled()) { + return NS_ERROR_FAILURE; + } + ++ if (isOverride) { ++ mIsOverride = true; ++ mHigherAccuracy = true; ++ } ++ + if (XRE_IsContentProcess()) { + return NS_OK; + } +@@ -135,6 +140,10 @@ nsresult GeolocationService::Init() { + return NS_OK; + } + ++bool GeolocationService::IsOverride() { ++ return mIsOverride; ++} ++ + GeolocationService::~GeolocationService() = default; + + NS_IMETHODIMP +@@ -277,6 +286,10 @@ bool GeolocationService::HighAccuracyRequested() { + } + + void GeolocationService::UpdateAccuracy(bool aForceHigh) { ++ if (mIsOverride) { ++ return; ++ } ++ + bool highRequired = aForceHigh || HighAccuracyRequested(); + + if (XRE_IsContentProcess()) { +diff --git a/toolkit/components/geolocation/GeolocationService.h b/toolkit/components/geolocation/GeolocationService.h +index ab90326cca..2d9b99658c 100644 +--- a/toolkit/components/geolocation/GeolocationService.h ++++ b/toolkit/components/geolocation/GeolocationService.h +@@ -42,7 +42,7 @@ class GeolocationService final : public nsIGeolocationService, + + GeolocationService() = default; + +- nsresult Init(); ++ nsresult Init(bool isOverride = false); + + // Management of the Geolocation objects + void AddLocator(mozilla::dom::Geolocation* aLocator); +@@ -67,6 +67,8 @@ class GeolocationService final : public nsIGeolocationService, + void UpdateAccuracy(bool aForceHigh = false); + bool HighAccuracyRequested(); + ++ bool IsOverride(); ++ + private: + ~GeolocationService(); + +@@ -93,6 +95,8 @@ class GeolocationService final : public nsIGeolocationService, + // Nothing() if not being started, or a boolean reflecting the requested + // accuracy. + mozilla::Maybe mStarting; ++ ++ bool mIsOverride = false; + }; + + } // namespace mozilla diff --git a/toolkit/components/startup/nsAppStartup.cpp b/toolkit/components/startup/nsAppStartup.cpp -index 772232ea09..75a959d894 100644 +index 542d0c5590..ead00b7a14 100644 --- a/toolkit/components/startup/nsAppStartup.cpp +++ b/toolkit/components/startup/nsAppStartup.cpp -@@ -359,7 +359,7 @@ nsAppStartup::Quit(uint32_t aMode, int aExitCode, bool* aUserAllowedQuit) { +@@ -377,7 +377,7 @@ nsAppStartup::Quit(uint32_t aMode, int aExitCode, bool* aUserAllowedQuit) { nsCOMPtr windowEnumerator; nsCOMPtr mediator( do_GetService(NS_WINDOWMEDIATOR_CONTRACTID)); @@ -2996,27 +2954,31 @@ index efe8ff5541..e0157515de 100644 int32_t aMaxSelfProgress, int32_t aCurTotalProgress, diff --git a/toolkit/components/windowwatcher/nsWindowWatcher.cpp b/toolkit/components/windowwatcher/nsWindowWatcher.cpp -index 387727f68c..9925947e12 100644 +index 15e5f4982d..01c1809611 100644 --- a/toolkit/components/windowwatcher/nsWindowWatcher.cpp +++ b/toolkit/components/windowwatcher/nsWindowWatcher.cpp -@@ -1922,7 +1922,11 @@ uint32_t nsWindowWatcher::CalculateChromeFlagsForContent( - - // Open a minimal popup. - *aIsPopupRequested = true; -- return nsIWebBrowserChrome::CHROME_MINIMAL_POPUP; -+ uint32_t chromeFlags = 0; +@@ -1902,8 +1902,14 @@ uint32_t nsWindowWatcher::CalculateChromeFlagsForContent( + return nsIWebBrowserChrome::CHROME_DOCUMENT_PICTURE_IN_PICTURE_FLAGS; + } + *aIsPopupRequested = ShouldOpenPopup(aFeatures); +- return *aIsPopupRequested ? nsIWebBrowserChrome::CHROME_MINIMAL_POPUP +- : nsIWebBrowserChrome::CHROME_ALL; ++ if (!*aIsPopupRequested) { ++ return nsIWebBrowserChrome::CHROME_ALL; ++ } ++ uint32_t chromeFlags = nsIWebBrowserChrome::CHROME_MINIMAL_POPUP; + if (aFeatures.Exists("width") || aFeatures.Exists("height")) { + chromeFlags |= nsIWebBrowserChrome::JUGGLER_WINDOW_EXPLICIT_SIZE; + } -+ return chromeFlags | nsIWebBrowserChrome::CHROME_MINIMAL_POPUP; ++ return chromeFlags; } /** diff --git a/toolkit/mozapps/update/UpdateService.sys.mjs b/toolkit/mozapps/update/UpdateService.sys.mjs -index db167b74f0..78690b35f7 100644 +index 755d82f483..b5d98b5d41 100644 --- a/toolkit/mozapps/update/UpdateService.sys.mjs +++ b/toolkit/mozapps/update/UpdateService.sys.mjs -@@ -4024,6 +4024,8 @@ export class UpdateService { +@@ -4038,6 +4038,8 @@ export class UpdateService { } get disabledForTesting() { @@ -3073,10 +3035,10 @@ index b7c376eadc..4438577634 100644 // Only run this code if LauncherProcessWin.h was included beforehand, thus // signalling that the hosting process should support launcher mode. diff --git a/uriloader/base/nsDocLoader.cpp b/uriloader/base/nsDocLoader.cpp -index 059ef152a4..772c7428af 100644 +index 524451a83e..a44b3c5da2 100644 --- a/uriloader/base/nsDocLoader.cpp +++ b/uriloader/base/nsDocLoader.cpp -@@ -884,6 +884,12 @@ void nsDocLoader::DocLoaderIsEmpty(bool aFlushLayout, +@@ -886,6 +886,12 @@ void nsDocLoader::DocLoaderIsEmpty(bool aFlushLayout, mIsLoadingJavascriptURI ? "javascript URI" : "document.open")); @@ -3090,10 +3052,10 @@ index 059ef152a4..772c7428af 100644 // nsDocumentViewer::LoadComplete that doesn't do various things // that are not relevant here because this wasn't an actual diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp -index bad0ab7878..78653310be 100644 +index 601070dcca..35329182ea 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp -@@ -110,6 +110,8 @@ +@@ -116,6 +116,8 @@ #include "mozilla/Components.h" #include "mozilla/ClearOnShutdown.h" @@ -3102,7 +3064,7 @@ index bad0ab7878..78653310be 100644 #include "mozilla/Preferences.h" #include "mozilla/ipc/URIUtils.h" -@@ -884,6 +886,12 @@ NS_IMETHODIMP nsExternalHelperAppService::ApplyDecodingForExtension( +@@ -891,6 +893,12 @@ NS_IMETHODIMP nsExternalHelperAppService::ApplyDecodingForExtension( return NS_OK; } @@ -3115,7 +3077,7 @@ index bad0ab7878..78653310be 100644 nsresult nsExternalHelperAppService::GetFileTokenForPath( const char16_t* aPlatformAppPath, nsIFile** aFile) { nsDependentString platformAppPath(aPlatformAppPath); -@@ -1517,7 +1525,12 @@ nsresult nsExternalAppHandler::SetUpTempFile(nsIChannel* aChannel) { +@@ -1569,7 +1577,12 @@ nsresult nsExternalAppHandler::SetUpTempFile(nsIChannel* aChannel) { // Strip off the ".part" from mTempLeafName mTempLeafName.Truncate(mTempLeafName.Length() - std::size(".part") + 1); @@ -3128,7 +3090,7 @@ index bad0ab7878..78653310be 100644 mSaver = do_CreateInstance(NS_BACKGROUNDFILESAVERSTREAMLISTENER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); -@@ -1701,7 +1714,36 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { +@@ -1753,7 +1766,36 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { return NS_OK; } @@ -3166,7 +3128,7 @@ index bad0ab7878..78653310be 100644 if (NS_FAILED(rv)) { nsresult transferError = rv; -@@ -1763,6 +1805,9 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { +@@ -1815,6 +1857,9 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { bool alwaysAsk = true; mMimeInfo->GetAlwaysAskBeforeHandling(&alwaysAsk); @@ -3176,7 +3138,7 @@ index bad0ab7878..78653310be 100644 if (alwaysAsk) { // But we *don't* ask if this mimeInfo didn't come from // our user configuration datastore and the user has said -@@ -2279,6 +2324,16 @@ nsExternalAppHandler::OnSaveComplete(nsIBackgroundFileSaver* aSaver, +@@ -2341,6 +2386,16 @@ nsExternalAppHandler::OnSaveComplete(nsIBackgroundFileSaver* aSaver, NotifyTransfer(aStatus); } @@ -3193,7 +3155,7 @@ index bad0ab7878..78653310be 100644 return NS_OK; } -@@ -2764,6 +2819,15 @@ NS_IMETHODIMP nsExternalAppHandler::Cancel(nsresult aReason) { +@@ -2826,6 +2881,15 @@ NS_IMETHODIMP nsExternalAppHandler::Cancel(nsresult aReason) { } } @@ -3210,10 +3172,10 @@ index bad0ab7878..78653310be 100644 // OnStartRequest) mDialog = nullptr; diff --git a/uriloader/exthandler/nsExternalHelperAppService.h b/uriloader/exthandler/nsExternalHelperAppService.h -index 3f8586ed7e..929fe5b2b5 100644 +index 477afd0a41..f2941eff52 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.h +++ b/uriloader/exthandler/nsExternalHelperAppService.h -@@ -269,6 +269,8 @@ class nsExternalHelperAppService : public nsIExternalHelperAppService, +@@ -302,6 +302,8 @@ class nsExternalHelperAppService : public nsIExternalHelperAppService, mozilla::dom::BrowsingContext* aContentContext, bool aForceSave, nsIInterfaceRequestor* aWindowContext, nsIStreamListener** aStreamListener); @@ -3222,7 +3184,7 @@ index 3f8586ed7e..929fe5b2b5 100644 }; /** -@@ -467,6 +469,9 @@ class nsExternalAppHandler final : public nsIStreamListener, +@@ -500,6 +502,9 @@ class nsExternalAppHandler final : public nsIStreamListener, * Upon successful return, both mTempFile and mSaver will be valid. */ nsresult SetUpTempFile(nsIChannel* aChannel); @@ -3304,10 +3266,10 @@ index 777157e17e..50cf4bfffc 100644 } #endif diff --git a/widget/MouseEvents.h b/widget/MouseEvents.h -index cf1adccb36..33b6b3b819 100644 +index e0e3b70f71..251c024381 100644 --- a/widget/MouseEvents.h +++ b/widget/MouseEvents.h -@@ -495,6 +495,9 @@ class WidgetMouseEvent : public WidgetMouseEventBase, +@@ -507,6 +507,9 @@ class WidgetMouseEvent : public WidgetMouseEventBase, // Otherwise, this must be 0. uint32_t mClickCount = 0; @@ -3317,7 +3279,7 @@ index cf1adccb36..33b6b3b819 100644 // Whether the event should ignore scroll frame bounds during dispatch. bool mIgnoreRootScrollFrame = false; -@@ -542,6 +545,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase, +@@ -554,6 +557,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase, mContextMenuTrigger = aEvent.mContextMenuTrigger; mExitFrom = aEvent.mExitFrom; mClickCount = aEvent.mClickCount; @@ -3326,10 +3288,10 @@ index cf1adccb36..33b6b3b819 100644 mIgnoreCapturingContent = aEvent.mIgnoreCapturingContent; mClickEventPrevented = aEvent.mClickEventPrevented; diff --git a/widget/cocoa/NativeKeyBindings.mm b/widget/cocoa/NativeKeyBindings.mm -index 9711cfaf4e..34292be046 100644 +index 4246b5ab66..9b173d81b5 100644 --- a/widget/cocoa/NativeKeyBindings.mm +++ b/widget/cocoa/NativeKeyBindings.mm -@@ -618,6 +618,10 @@ +@@ -635,6 +635,10 @@ void NativeKeyBindings::GetEditCommandsForTests( break; case KEY_NAME_INDEX_ArrowUp: if (aEvent.IsControl()) { @@ -3340,7 +3302,7 @@ index 9711cfaf4e..34292be046 100644 break; } if (aEvent.IsMeta()) { -@@ -655,6 +659,10 @@ +@@ -672,6 +676,10 @@ void NativeKeyBindings::GetEditCommandsForTests( break; case KEY_NAME_INDEX_ArrowDown: if (aEvent.IsControl()) { @@ -3351,20 +3313,8 @@ index 9711cfaf4e..34292be046 100644 break; } if (aEvent.IsMeta()) { -diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp -index dde3f3d783..7b75368c48 100644 ---- a/widget/gtk/nsFilePicker.cpp -+++ b/widget/gtk/nsFilePicker.cpp -@@ -21,6 +21,7 @@ - #include "mozilla/Preferences.h" - #include "mozilla/dom/Promise.h" - #include "mozilla/dom/Document.h" -+#include "gfxPlatform.h" - - #include "nsArrayEnumerator.h" - #include "nsEnumeratorUtils.h" diff --git a/widget/headless/HeadlessCompositorWidget.cpp b/widget/headless/HeadlessCompositorWidget.cpp -index cbaa021c9d..6cf72e6006 100644 +index 8484851f67..2804831ec7 100644 --- a/widget/headless/HeadlessCompositorWidget.cpp +++ b/widget/headless/HeadlessCompositorWidget.cpp @@ -2,6 +2,8 @@ @@ -3373,10 +3323,10 @@ index cbaa021c9d..6cf72e6006 100644 +#include "mozilla/gfx/2D.h" +#include "mozilla/layers/CompositorThread.h" - #include "mozilla/widget/PlatformWidgetTypes.h" #include "HeadlessCompositorWidget.h" + #include "VsyncDispatcher.h" -@@ -14,9 +16,30 @@ HeadlessCompositorWidget::HeadlessCompositorWidget( +@@ -15,9 +17,30 @@ HeadlessCompositorWidget::HeadlessCompositorWidget( const layers::CompositorOptions& aOptions, HeadlessWidget* aWindow) : CompositorWidget(aOptions), mWidget(aWindow), @@ -3407,7 +3357,7 @@ index cbaa021c9d..6cf72e6006 100644 void HeadlessCompositorWidget::ObserveVsync(VsyncObserver* aObserver) { if (RefPtr cvd = mWidget->GetCompositorVsyncDispatcher()) { -@@ -30,6 +53,59 @@ void HeadlessCompositorWidget::NotifyClientSizeChanged( +@@ -31,6 +54,59 @@ void HeadlessCompositorWidget::NotifyClientSizeChanged( const LayoutDeviceIntSize& aClientSize) { auto size = mClientSize.Lock(); *size = aClientSize; @@ -3468,7 +3418,7 @@ index cbaa021c9d..6cf72e6006 100644 LayoutDeviceIntSize HeadlessCompositorWidget::GetClientSize() { diff --git a/widget/headless/HeadlessCompositorWidget.h b/widget/headless/HeadlessCompositorWidget.h -index 8374cd0094..0345d19d1d 100644 +index f9454a79f3..68e7b94c3a 100644 --- a/widget/headless/HeadlessCompositorWidget.h +++ b/widget/headless/HeadlessCompositorWidget.h @@ -5,6 +5,7 @@ @@ -3476,10 +3426,10 @@ index 8374cd0094..0345d19d1d 100644 #define widget_headless_HeadlessCompositorWidget_h +#include "mozilla/ReentrantMonitor.h" + #include "HeadlessWidget.h" #include "mozilla/widget/CompositorWidget.h" - #include "HeadlessWidget.h" -@@ -22,8 +23,11 @@ class HeadlessCompositorWidget final : public CompositorWidget, +@@ -21,8 +22,11 @@ class HeadlessCompositorWidget final : public CompositorWidget, HeadlessWidget* aWindow); void NotifyClientSizeChanged(const LayoutDeviceIntSize& aClientSize); @@ -3491,7 +3441,7 @@ index 8374cd0094..0345d19d1d 100644 uintptr_t GetWidgetKey() override; -@@ -41,10 +45,18 @@ class HeadlessCompositorWidget final : public CompositorWidget, +@@ -40,10 +44,18 @@ class HeadlessCompositorWidget final : public CompositorWidget, } private: @@ -3511,10 +3461,10 @@ index 8374cd0094..0345d19d1d 100644 } // namespace widget diff --git a/widget/headless/HeadlessWidget.cpp b/widget/headless/HeadlessWidget.cpp -index 867b4a9fd9..0d239412f9 100644 +index 0c28540ee6..23458a37b6 100644 --- a/widget/headless/HeadlessWidget.cpp +++ b/widget/headless/HeadlessWidget.cpp -@@ -112,6 +112,8 @@ void HeadlessWidget::Destroy() { +@@ -113,6 +113,8 @@ void HeadlessWidget::Destroy() { } } @@ -3523,7 +3473,7 @@ index 867b4a9fd9..0d239412f9 100644 nsIWidget::OnDestroy(); nsIWidget::Destroy(); -@@ -572,5 +574,14 @@ nsresult HeadlessWidget::SynthesizeNativeTouchpadPan( +@@ -574,5 +576,14 @@ nsresult HeadlessWidget::SynthesizeNativeTouchpadPan( return NS_OK; } @@ -3539,7 +3489,7 @@ index 867b4a9fd9..0d239412f9 100644 } // namespace widget } // namespace mozilla diff --git a/widget/headless/HeadlessWidget.h b/widget/headless/HeadlessWidget.h -index ca31e584b7..1dff8fd40c 100644 +index 05ae8d02e8..236d2991b7 100644 --- a/widget/headless/HeadlessWidget.h +++ b/widget/headless/HeadlessWidget.h @@ -127,6 +127,9 @@ class HeadlessWidget final : public nsIWidget { @@ -3553,10 +3503,10 @@ index ca31e584b7..1dff8fd40c 100644 ~HeadlessWidget(); bool mEnabled; diff --git a/widget/nsGUIEventIPC.h b/widget/nsGUIEventIPC.h -index baf960fdb5..92e5df09b6 100644 +index a2a73f583d..9220795976 100644 --- a/widget/nsGUIEventIPC.h +++ b/widget/nsGUIEventIPC.h -@@ -357,6 +357,7 @@ struct ParamTraits { +@@ -316,6 +316,7 @@ struct ParamTraits { WriteParam(aWriter, aParam.mContextMenuTrigger); WriteParam(aWriter, aParam.mExitFrom); WriteParam(aWriter, aParam.mClickCount); @@ -3564,7 +3514,7 @@ index baf960fdb5..92e5df09b6 100644 WriteParam(aWriter, aParam.mCallbackId); WriteParam(aWriter, aParam.mMovement); -@@ -381,6 +382,7 @@ struct ParamTraits { +@@ -340,6 +341,7 @@ struct ParamTraits { ReadParam(aReader, &aResult->mContextMenuTrigger) && ReadParam(aReader, &aResult->mExitFrom) && ReadParam(aReader, &aResult->mClickCount) && @@ -3573,10 +3523,10 @@ index baf960fdb5..92e5df09b6 100644 ReadParam(aReader, &aResult->mMovement); } diff --git a/xpcom/reflect/xptinfo/xptinfo.h b/xpcom/reflect/xptinfo/xptinfo.h -index 2888ffaf43..cd4cce73f6 100644 +index 7b1d918e86..3d2bc93391 100644 --- a/xpcom/reflect/xptinfo/xptinfo.h +++ b/xpcom/reflect/xptinfo/xptinfo.h -@@ -503,7 +503,7 @@ static_assert(sizeof(nsXPTMethodInfo) == 8, "wrong size"); +@@ -504,7 +504,7 @@ static_assert(sizeof(nsXPTMethodInfo) == 8, "wrong size"); #if defined(MOZ_THUNDERBIRD) || defined(MOZ_SUITE) # define PARAM_BUFFER_COUNT 18 #else diff --git a/patches/playwright/1-leak-fixes.patch b/patches/playwright/1-leak-fixes.patch index a461da772..cebded793 100644 --- a/patches/playwright/1-leak-fixes.patch +++ b/patches/playwright/1-leak-fixes.patch @@ -1,26 +1,26 @@ diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp -index 9880047350..318d2edba8 100644 +index bf63df47f6..60293c00b6 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp -@@ -2316,28 +2316,7 @@ dom::PrivateAttribution* Navigator::PrivateAttribution() { +@@ -2351,28 +2351,7 @@ dom::ModelContext* Navigator::ModelContext() { /* static */ bool Navigator::Webdriver() { -#ifdef ENABLE_WEBDRIVER - nsCOMPtr marionette = do_GetService(NS_MARIONETTE_CONTRACTID); - if (marionette) { -- bool marionetteRunning = false; -- marionette->GetRunning(&marionetteRunning); -- if (marionetteRunning) { +- bool isBrowserAutomationRunning = false; +- marionette->GetIsBrowserAutomationRunning(&isBrowserAutomationRunning); +- if (isBrowserAutomationRunning) { - return true; - } - } - - nsCOMPtr agent = do_GetService(NS_REMOTEAGENT_CONTRACTID); - if (agent) { -- bool remoteAgentRunning = false; -- agent->GetRunning(&remoteAgentRunning); -- if (remoteAgentRunning) { +- bool isBrowserAutomationRunning = false; +- agent->GetIsBrowserAutomationRunning(&isBrowserAutomationRunning); +- if (isBrowserAutomationRunning) { - return true; - } - } @@ -33,17 +33,17 @@ index 9880047350..318d2edba8 100644 AutoplayPolicy Navigator::GetAutoplayPolicy(AutoplayPolicyMediaType aType) { diff --git a/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs b/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs -index cf5ae51466..97efc14262 100644 +index 8123110513..14cd00bc43 100644 --- a/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs +++ b/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.sys.mjs -@@ -106,9 +106,7 @@ EnterprisePoliciesManager.prototype = { +@@ -113,9 +113,7 @@ EnterprisePoliciesManager.prototype = { Services.prefs.clearUserPref(PREF_POLICIES_APPLIED); } - // --- Playwright begin --- - let provider = new PlaywrightPoliciesProvider(); - // --- Playwright end --- -+ let provider = this._chooseProvider(); ++ let provider = this._buildProvider(); if (provider.failed) { this.status = Ci.nsIEnterprisePolicies.FAILED; diff --git a/patches/screen-spoofing.patch b/patches/screen-spoofing.patch index 49ab278c7..bb0e233ed 100644 --- a/patches/screen-spoofing.patch +++ b/patches/screen-spoofing.patch @@ -1,14 +1,15 @@ diff --git a/dom/base/ScreenDimensionManager.cpp b/dom/base/ScreenDimensionManager.cpp new file mode 100644 -index 0000000000..bcfdb0a863 +index 0000000000..336fe886ee --- /dev/null +++ b/dom/base/ScreenDimensionManager.cpp -@@ -0,0 +1,45 @@ +@@ -0,0 +1,46 @@ +/* Camoufox: Per-context screen dimension manager */ +#include "ScreenDimensionManager.h" + +#include "mozilla/dom/BrowsingContext.h" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" + +namespace mozilla { @@ -141,10 +142,10 @@ index 0000000000..6861cdcfbc + +#endif // mozilla_dom_ScreenDimensionManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index 8e94c6bd70..7607e2429e 100644 +index b0973412be..926cadf3dc 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -262,6 +262,7 @@ EXPORTS.mozilla.dom += [ +@@ -264,6 +264,7 @@ EXPORTS.mozilla.dom += [ "ResponsiveImageSelector.h", "RoverfoxStorageManager.h", "SameProcessMessageQueue.h", @@ -152,7 +153,7 @@ index 8e94c6bd70..7607e2429e 100644 "ScreenLuminance.h", "ScreenOrientation.h", "Selection.h", -@@ -551,6 +552,9 @@ SOURCES += [ +@@ -566,6 +567,9 @@ SOURCES += [ # (includes RoverfoxStorageManager.h which can affect compilation units) SOURCES += ["NavigatorManager.cpp"] @@ -163,7 +164,7 @@ index 8e94c6bd70..7607e2429e 100644 SOURCES += ["FontListManager.cpp"] diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 5c3d639da9..8620f732ec 100644 +index 99da751676..469c30e02c 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -5,6 +5,7 @@ @@ -174,7 +175,7 @@ index 5c3d639da9..8620f732ec 100644 #include #include -@@ -7921,6 +7922,56 @@ void nsGlobalWindowInner::SetNavigatorUserAgent(const nsAString& ua, +@@ -7925,6 +7926,56 @@ void nsGlobalWindowInner::SetNavigatorUserAgent(const nsAString& ua, } } @@ -232,10 +233,10 @@ index 5c3d639da9..8620f732ec 100644 bool aGranted) { // Invalidate cached StorageAllowed field so that calls to GetLocalStorage diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index 54b50f7bb1..e907a2c31a 100644 +index 9616144511..ff8c14d011 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -701,6 +701,11 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, +@@ -704,6 +704,11 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, mozilla::ErrorResult& aRv); void SetNavigatorUserAgent(const nsAString& ua, mozilla::ErrorResult& aRv); @@ -248,7 +249,7 @@ index 54b50f7bb1..e907a2c31a 100644 void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, diff --git a/dom/base/nsScreen.cpp b/dom/base/nsScreen.cpp -index 78849001c5..d27c51aa5a 100644 +index 4b989dd48a..6dfd4ea066 100644 --- a/dom/base/nsScreen.cpp +++ b/dom/base/nsScreen.cpp @@ -5,8 +5,10 @@ @@ -262,7 +263,7 @@ index 78849001c5..d27c51aa5a 100644 #include "mozilla/dom/BrowsingContextBinding.h" #include "mozilla/dom/Document.h" #include "mozilla/dom/DocumentInlines.h" -@@ -23,6 +25,19 @@ +@@ -24,6 +26,19 @@ using namespace mozilla; using namespace mozilla::dom; @@ -282,7 +283,7 @@ index 78849001c5..d27c51aa5a 100644 nsScreen::nsScreen(nsPIDOMWindowInner* aWindow) : DOMEventTargetHelper(aWindow) {} -@@ -46,6 +61,12 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(nsScreen, DOMEventTargetHelper, +@@ -47,6 +62,12 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(nsScreen, DOMEventTargetHelper, mScreenOrientation) int32_t nsScreen::PixelDepth() { @@ -295,7 +296,7 @@ index 78849001c5..d27c51aa5a 100644 if (auto value = MaskConfig::GetUint32("screen.colorDepth")) return value.value(); if (auto value = MaskConfig::GetUint32("screen.pixelDepth")) -@@ -73,6 +94,17 @@ nsDeviceContext* nsScreen::GetDeviceContext() const { +@@ -74,6 +95,17 @@ nsDeviceContext* nsScreen::GetDeviceContext() const { } CSSIntRect nsScreen::GetRect() { @@ -313,7 +314,7 @@ index 78849001c5..d27c51aa5a 100644 // Return window inner rect to prevent fingerprinting. if (ShouldResistFingerprinting(RFPTarget::ScreenRect)) { return GetTopWindowInnerRectForRFP(); -@@ -105,6 +137,15 @@ CSSIntRect nsScreen::GetRect() { +@@ -106,6 +138,15 @@ CSSIntRect nsScreen::GetRect() { } CSSIntRect nsScreen::GetAvailRect() { @@ -330,10 +331,10 @@ index 78849001c5..d27c51aa5a 100644 "screen.availWidth", "screen.availHeight"); if (rect.has_value()) { diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index 1aa2baa931..cde7d1ba98 100644 +index bfb0332a1c..c4cb127e83 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -985,6 +985,18 @@ partial interface Window { +@@ -982,6 +982,18 @@ partial interface Window { undefined setNavigatorUserAgent(DOMString ua); }; @@ -367,7 +368,7 @@ index 91fd96a691..03adf5d674 100644 DEFINES["USE_NEON"] = True LOCAL_INCLUDES += ["/third_party/xsimd/include"] diff --git a/gfx/src/nsDeviceContext.cpp b/gfx/src/nsDeviceContext.cpp -index 06b86c6c75..9641c8457c 100644 +index 0a628c93d2..cf8de1839e 100644 --- a/gfx/src/nsDeviceContext.cpp +++ b/gfx/src/nsDeviceContext.cpp @@ -3,6 +3,7 @@ @@ -375,10 +376,10 @@ index 06b86c6c75..9641c8457c 100644 #include "nsDeviceContext.h" +#include "MaskConfig.hpp" + #include // for max - #include "gfxContext.h" - #include "gfxPoint.h" // for gfxSize -@@ -193,6 +194,13 @@ bool nsDeviceContext::GetScreenIsHDR() { + +@@ -196,6 +197,13 @@ bool nsDeviceContext::GetScreenIsHDR() { } nsSize nsDeviceContext::GetDeviceSurfaceDimensions() { diff --git a/patches/sessionstore-popup-close-crash.patch b/patches/sessionstore-popup-close-crash.patch index 3662bc816..9d5e557a8 100644 --- a/patches/sessionstore-popup-close-crash.patch +++ b/patches/sessionstore-popup-close-crash.patch @@ -1,25 +1,25 @@ diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs -index 183543c5f2..a2a236c7c8 100644 +index 52fc803050..b43bcf0ecb 100644 --- a/browser/components/sessionstore/SessionStore.sys.mjs +++ b/browser/components/sessionstore/SessionStore.sys.mjs -@@ -4884,8 +4884,19 @@ var SessionStoreInternal = { - }, - +@@ -4346,8 +4346,19 @@ class _SessionStore { + } + maybeDontRestoreTabs(aWindow) { + // Camoufox: a window.open() popup created with window features opens as a + // separate chrome window that SessionStore may never have registered (the + // popup-window path can skip onLoad tracking, and our session-restore is + // disabled). globalOverlay.js calls this unconditionally on window close, so -+ // an untracked window left this._windows[aWindow.__SSi] undefined and the ++ // an untracked window left this.#windows[aWindow.__SSi] undefined and the + // bare property set threw, crashing Browser.removeBrowserContext and killing + // the juggler channel. No-op for untracked windows, matching onClose's guard. -+ const winData = aWindow.__SSi && this._windows[aWindow.__SSi]; ++ const winData = aWindow.__SSi && this.#windows[aWindow.__SSi]; + if (!winData) { + return; + } // Don't restore the tabs if we restore the session at startup -- this._windows[aWindow.__SSi]._maybeDontRestoreTabs = true; +- this.#windows[aWindow.__SSi]._maybeDontRestoreTabs = true; + winData._maybeDontRestoreTabs = true; - }, - - isLastRestorableWindow() { + } + + #isLastRestorableWindow() { diff --git a/patches/speech-voices-spoofing.patch b/patches/speech-voices-spoofing.patch index 19847b6a7..7d21b3bbd 100644 --- a/patches/speech-voices-spoofing.patch +++ b/patches/speech-voices-spoofing.patch @@ -1,15 +1,16 @@ diff --git a/dom/base/SpeechVoicesManager.cpp b/dom/base/SpeechVoicesManager.cpp new file mode 100644 -index 0000000000..abcdef1234 +index 0000000000..9d34ae6822 --- /dev/null +++ b/dom/base/SpeechVoicesManager.cpp -@@ -0,0 +1,77 @@ +@@ -0,0 +1,78 @@ +/* Camoufox: Per-context speech voices manager */ +#include "SpeechVoicesManager.h" + +#include "mozilla/dom/BrowsingContext.h" +#include "mozilla/Mutex.h" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" + +namespace mozilla { @@ -83,7 +84,7 @@ index 0000000000..abcdef1234 +} // namespace mozilla diff --git a/dom/base/SpeechVoicesManager.h b/dom/base/SpeechVoicesManager.h new file mode 100644 -index 0000000000..bcdef12345 +index 0000000000..def6218919 --- /dev/null +++ b/dom/base/SpeechVoicesManager.h @@ -0,0 +1,29 @@ @@ -117,13 +118,13 @@ index 0000000000..bcdef12345 + +#endif // mozilla_dom_SpeechVoicesManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index xxxxxxxxxx..yyyyyyyyyy 100644 +index 926cadf3dc..c1b1fbf7e6 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -534,5 +534,13 @@ - "nsPluginArray.cpp", +@@ -577,6 +577,14 @@ EXPORTS.mozilla.dom += [ + "FontListManager.h", ] - + +# SpeechVoicesManager compiled separately to avoid unified build scope issues +# (includes RoverfoxStorageManager.h which can affect compilation units) +SOURCES += ["SpeechVoicesManager.cpp"] @@ -134,33 +135,23 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 + # Are we targeting x86-32 or x86-64? If so, we want to include SSE2 code for # CharacterDataBuffer.cpp -diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/base/nsGlobalWindowInner.h -+++ b/dom/base/nsGlobalWindowInner.h -@@ -685,6 +685,9 @@ - - void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker); - -+ // Per-context speech voices -+ void SetSpeechVoices(const nsAString& aVoices, mozilla::ErrorResult& aRv); -+ - public: - void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); - void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, + if CONFIG["INTEL_ARCHITECTURE"]: diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 +index 469c30e02c..ef345fa7ea 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp -@@ -22,3 +22,4 @@ +@@ -19,6 +19,7 @@ + #include "AudioChannelService.h" #include "AutoplayPolicy.h" #include "Crypto.h" +#include "SpeechVoicesManager.h" #include "MainThreadUtils.h" -@@ -7477,6 +7478,25 @@ - mSharedWorkers.RemoveElement(aSharedWorker); + #include "Navigator.h" + #include "PaintWorkletImpl.h" +@@ -7976,6 +7977,25 @@ void nsGlobalWindowInner::SetScreenColorDepth(uint32_t depth, + } } - + +void nsGlobalWindowInner::SetSpeechVoices(const nsAString& aVoices, + ErrorResult& aRv) { + uint32_t userContextId = 0; @@ -183,36 +174,34 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 RefPtr nsGlobalWindowInner::StorageAccessPermissionChanged( bool aGranted) { // Invalidate cached StorageAllowed field so that calls to GetLocalStorage -diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/webidl/Window.webidl -+++ b/dom/webidl/Window.webidl -@@ -892,6 +892,12 @@ partial interface Window { - readonly attribute VisualViewport visualViewport; - }; - -+// Per-context speech voices -+partial interface Window { -+ [Throws, Func="mozilla::dom::SpeechVoicesManager::IsFunctionEnabledForWebIDL"] -+ undefined setSpeechVoices(DOMString voices); -+}; +diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h +index ff8c14d011..d6826ed802 100644 +--- a/dom/base/nsGlobalWindowInner.h ++++ b/dom/base/nsGlobalWindowInner.h +@@ -709,6 +709,9 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, + mozilla::ErrorResult& aRv); + void SetScreenColorDepth(uint32_t depth, mozilla::ErrorResult& aRv); + ++ // Per-context speech voices ++ void SetSpeechVoices(const nsAString& aVoices, mozilla::ErrorResult& aRv); + - // Used to assign marks to appear on the scrollbar when - // finding on a page. - partial interface Window { + public: + void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); + void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, diff --git a/dom/media/webspeech/synth/SpeechSynthesis.cpp b/dom/media/webspeech/synth/SpeechSynthesis.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 +index e6ce729415..4dc0b589da 100644 --- a/dom/media/webspeech/synth/SpeechSynthesis.cpp +++ b/dom/media/webspeech/synth/SpeechSynthesis.cpp -@@ -14,5 +14,7 @@ +@@ -12,6 +12,8 @@ + #include "mozilla/dom/WindowGlobalChild.h" #include "nsContentUtils.h" #include "nsGlobalWindowInner.h" +#include "mozilla/dom/BrowsingContext.h" +#include "SpeechVoicesManager.h" #include "nsIDocShell.h" #include "nsISupportsPrimitives.h" - #include "nsSpeechTask.h" -@@ -222,6 +224,17 @@ + #include "nsPIDOMWindowInlines.h" +@@ -236,6 +238,17 @@ void SpeechSynthesis::OnEnd(const nsSpeechTask* aTask) { void SpeechSynthesis::GetVoices( nsTArray >& aResult) { aResult.Clear(); @@ -230,12 +219,10 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 uint32_t voiceCount = 0; nsCOMPtr window = GetOwnerWindow(); nsCOMPtr docShell = window ? window->GetDocShell() : nullptr; -@@ -246,8 +259,18 @@ - if (NS_FAILED(rv)) { - NS_WARNING("Failed to retrieve voice from registry"); +@@ -261,6 +274,16 @@ void SpeechSynthesis::GetVoices( continue; } - + + // Per-context voice filtering: skip voices not in allowed list + if (mozilla::dom::SpeechVoicesManager::HasVoices(speechVoiceCtxId)) { + nsAutoString voiceName; @@ -247,14 +234,33 @@ index xxxxxxxxxx..yyyyyyyyyy 100644 + } + SpeechSynthesisVoice* voice = mVoiceCache.GetWeak(uri); - + if (!voice) { diff --git a/dom/media/webspeech/synth/moz.build b/dom/media/webspeech/synth/moz.build -index xxxxxxxxxx..yyyyyyyyyy 100644 +index e1bf345159..ca6ffacb21 100644 --- a/dom/media/webspeech/synth/moz.build +++ b/dom/media/webspeech/synth/moz.build -@@ -62,3 +62,4 @@ +@@ -59,5 +59,6 @@ include("/ipc/chromium/chromium-config.mozbuild") + + FINAL_LIBRARY = "xul" LOCAL_INCLUDES += [ + "/dom/base", "ipc", ] +diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl +index c4cb127e83..e4db344794 100644 +--- a/dom/webidl/Window.webidl ++++ b/dom/webidl/Window.webidl +@@ -949,6 +949,12 @@ partial interface Window { + undefined setFontList(DOMString fontList); + }; + ++// Per-context speech voices ++partial interface Window { ++ [Throws, Func="mozilla::dom::SpeechVoicesManager::IsFunctionEnabledForWebIDL"] ++ undefined setSpeechVoices(DOMString voices); ++}; ++ + // Used to assign marks to appear on the scrollbar when + // finding on a page. + partial interface Window { diff --git a/patches/timezone-spoofing.patch b/patches/timezone-spoofing.patch index 8d3f3675f..01252d619 100644 --- a/patches/timezone-spoofing.patch +++ b/patches/timezone-spoofing.patch @@ -1,13 +1,14 @@ diff --git a/dom/base/TimezoneManager.cpp b/dom/base/TimezoneManager.cpp new file mode 100644 -index 0000000000..206a027918 +index 0000000000..a54411bf28 --- /dev/null +++ b/dom/base/TimezoneManager.cpp -@@ -0,0 +1,90 @@ +@@ -0,0 +1,91 @@ +#include "TimezoneManager.h" +#include "RoverfoxStorageManager.h" +#include "MaskConfig.hpp" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" +#include "mozilla/dom/BrowsingContext.h" +#include "mozilla/dom/Document.h" @@ -134,10 +135,10 @@ index 0000000000..888303c315 + +#endif // mozilla_dom_TimezoneManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index 56e0798c8b..eab5894010 100644 +index c1b1fbf7e6..ee5d0b9149 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -284,6 +284,7 @@ EXPORTS.mozilla.dom += [ +@@ -290,6 +290,7 @@ EXPORTS.mozilla.dom += [ "TimeoutBudgetManager.h", "TimeoutHandler.h", "TimeoutManager.h", @@ -145,7 +146,7 @@ index 56e0798c8b..eab5894010 100644 "TreeIterator.h", "TreeOrderedArray.h", "TreeOrderedArrayInlines.h", -@@ -501,6 +502,7 @@ UNIFIED_SOURCES += [ +@@ -518,6 +519,7 @@ UNIFIED_SOURCES += [ "TimeoutExecutor.cpp", "TimeoutHandler.cpp", "TimeoutManager.cpp", @@ -154,10 +155,10 @@ index 56e0798c8b..eab5894010 100644 "UIDirectionManager.cpp", "UserActivation.cpp", diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index fb9c5c69d3..d4453fda3f 100644 +index ef345fa7ea..fe3cdaebd5 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp -@@ -248,6 +248,8 @@ +@@ -247,6 +247,8 @@ #include "nsICookieService.h" #include "nsID.h" #include "nsIDOMStorageManager.h" @@ -166,7 +167,7 @@ index fb9c5c69d3..d4453fda3f 100644 #include "nsDocShell.h" #include "mozilla/OriginAttributes.h" #include "nsIDOMXULControlElement.h" -@@ -7763,6 +7765,50 @@ IntlUtils* nsGlobalWindowInner::GetIntlUtils(ErrorResult& aError) { +@@ -7765,6 +7767,50 @@ IntlUtils* nsGlobalWindowInner::GetIntlUtils(ErrorResult& aError) { return mIntlUtils; } @@ -218,10 +219,10 @@ index fb9c5c69d3..d4453fda3f 100644 MOZ_ASSERT(aSharedWorker); MOZ_ASSERT(!mSharedWorkers.Contains(aSharedWorker)); diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index 43600d66bf..1f9f283026 100644 +index d6826ed802..a9d8fb50ba 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -683,6 +683,8 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, +@@ -685,6 +685,8 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, mozilla::dom::IntlUtils* GetIntlUtils(mozilla::ErrorResult& aRv); @@ -231,7 +232,7 @@ index 43600d66bf..1f9f283026 100644 void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker); diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp -index dd0124f7e9..549e0869d0 100644 +index c0bd92f276..7f6ea88dea 100644 --- a/dom/base/nsGlobalWindowOuter.cpp +++ b/dom/base/nsGlobalWindowOuter.cpp @@ -87,6 +87,8 @@ @@ -243,7 +244,7 @@ index dd0124f7e9..549e0869d0 100644 #include "mozilla/Likely.h" #include "mozilla/Preferences.h" #include "mozilla/SchedulerGroup.h" -@@ -2506,6 +2508,31 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument, +@@ -2515,6 +2517,31 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument, MOZ_ALWAYS_SUCCEEDS(bc->SetCurrentInnerWindowId(mInnerWindow->WindowID())); } @@ -276,7 +277,7 @@ index dd0124f7e9..549e0869d0 100644 // its not being reused and clear our reference. if (doomCurrentInner) { diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp -index 21d69bdfed..fa2a7e3be3 100644 +index 2da511a657..3b4f16cd41 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -3,6 +3,9 @@ @@ -289,7 +290,7 @@ index 21d69bdfed..fa2a7e3be3 100644 #include "mozilla/EventDispatcher.h" #include "mozilla/HoldDropJSObjects.h" -@@ -1800,6 +1803,16 @@ void nsJSContext::EnsureStatics() { +@@ -1804,6 +1807,16 @@ void nsJSContext::EnsureStatics() { return; } @@ -307,10 +308,10 @@ index 21d69bdfed..fa2a7e3be3 100644 MOZ_ASSERT(NS_IsMainThread()); diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index 162c95ba3d..b20d7c1f6f 100644 +index e4db344794..c2c6eb41b8 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -952,6 +952,12 @@ partial interface Window { +@@ -955,6 +955,12 @@ partial interface Window { undefined setSpeechVoices(DOMString voices); }; @@ -324,7 +325,7 @@ index 162c95ba3d..b20d7c1f6f 100644 // finding on a page. partial interface Window { diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp -index 6f88f1f176..9f4fe197b2 100644 +index f8563ba6eb..ad144a8d36 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -21,6 +21,8 @@ @@ -336,7 +337,7 @@ index 6f88f1f176..9f4fe197b2 100644 #include "js/Exception.h" #include "js/LocaleSensitive.h" #include "js/MemoryMetrics.h" -@@ -6425,6 +6427,20 @@ WorkerGlobalScope* WorkerPrivate::GetOrCreateGlobalScope(JSContext* aCx) { +@@ -6776,6 +6778,20 @@ WorkerGlobalScope* WorkerPrivate::GetOrCreateGlobalScope(JSContext* aCx) { data->mScope->DisconnectGlobalTeardownObservers(); } @@ -358,7 +359,7 @@ index 6f88f1f176..9f4fe197b2 100644 return data->mScope; diff --git a/js/public/Date.h b/js/public/Date.h -index 90d8708e2b..2a650570f6 100644 +index 55c8db661d..a9fa7a43d9 100644 --- a/js/public/Date.h +++ b/js/public/Date.h @@ -55,6 +55,9 @@ namespace JS { @@ -372,10 +373,10 @@ index 90d8708e2b..2a650570f6 100644 class ClippedTime; inline ClippedTime TimeClip(double time); diff --git a/js/src/vm/DateTime.cpp b/js/src/vm/DateTime.cpp -index f8a975acc3..05f26e45c8 100644 +index a358ad1bf5..690ebed68c 100644 --- a/js/src/vm/DateTime.cpp +++ b/js/src/vm/DateTime.cpp -@@ -36,6 +36,7 @@ +@@ -35,6 +35,7 @@ #include "util/Text.h" #include "vm/MutexIDs.h" #include "vm/Realm.h" @@ -383,7 +384,7 @@ index f8a975acc3..05f26e45c8 100644 static bool ComputeLocalTime(time_t local, struct tm* ptm) { // Neither localtime_s nor localtime_r are required to act as if tzset has -@@ -254,6 +255,20 @@ js::DateTimeInfo::DateTimeInfo() { +@@ -253,6 +254,20 @@ js::DateTimeInfo::DateTimeInfo() { js::DateTimeInfo::~DateTimeInfo() = default; @@ -404,7 +405,7 @@ index f8a975acc3..05f26e45c8 100644 int64_t js::DateTimeInfo::toClampedSeconds(int64_t milliseconds) { int64_t seconds = milliseconds / msPerSecond; int64_t millis = milliseconds % msPerSecond; -@@ -582,6 +597,18 @@ JS_PUBLIC_API bool JS::SetTimeZoneOverride(const char* timeZoneId) { +@@ -581,6 +596,18 @@ JS_PUBLIC_API bool JS::SetTimeZoneOverride(const char* timeZoneId) { return true; } @@ -436,7 +437,7 @@ index 41b0c5be27..eb11caadb2 100644 // The spec implicitly assumes DST and time zone adjustment information // never change in the course of a function -- sometimes even across diff --git a/js/src/vm/Realm.cpp b/js/src/vm/Realm.cpp -index 8d195ca7c8..62f67c0658 100644 +index 0684f1be95..b0ef2b39a5 100644 --- a/js/src/vm/Realm.cpp +++ b/js/src/vm/Realm.cpp @@ -597,10 +597,19 @@ void Realm::setLocaleOverride(const char* locale) { @@ -464,10 +465,10 @@ index 8d195ca7c8..62f67c0658 100644 } diff --git a/js/src/vm/Realm.h b/js/src/vm/Realm.h -index 7bbfc58948..ab0a588abd 100644 +index 087f93b90d..bf36a670eb 100644 --- a/js/src/vm/Realm.h +++ b/js/src/vm/Realm.h -@@ -353,6 +353,8 @@ class JS::Realm : public JS::shadow::Realm { +@@ -360,6 +360,8 @@ class JS::Realm : public JS::shadow::Realm { #if JS_HAS_INTL_API // Date-time info for realms with non-default time zones. js::UniquePtr dateTimeInfo_; diff --git a/patches/trusted-automation-events.patch b/patches/trusted-automation-events.patch index e7183ab64..55778b066 100644 --- a/patches/trusted-automation-events.patch +++ b/patches/trusted-automation-events.patch @@ -1,3 +1,5 @@ +diff --git a/dom/base/nsINode.cpp b/dom/base/nsINode.cpp +index e887857a6f..3ca68e5271 100644 --- a/dom/base/nsINode.cpp +++ b/dom/base/nsINode.cpp @@ -27,6 +27,10 @@ @@ -11,7 +13,7 @@ #include "mozilla/MemoryReporting.h" #include "mozilla/Preferences.h" #include "mozilla/PresShell.h" -@@ -1701,8 +1705,109 @@ +@@ -2059,8 +2063,109 @@ already_AddRefed nsINode::ConvertPointFromNode( aCallerType, aRv); } @@ -121,7 +123,7 @@ // XXX sXBL/XBL2 issue -- do we really want the owner here? What // if that's the XBL document? Would we want its presshell? Or what? nsCOMPtr document = OwnerDoc(); -@@ -1715,6 +1820,12 @@ +@@ -2073,6 +2178,12 @@ bool nsINode::DispatchEvent(Event& aEvent, CallerType aCallerType, // Obtain a presentation shell RefPtr context = document->GetPresContext(); @@ -134,7 +136,7 @@ nsEventStatus status = nsEventStatus_eIgnore; nsresult rv = EventDispatcher::DispatchDOMEvent(this, nullptr, &aEvent, context, &status); -@@ -1722,6 +1833,12 @@ +@@ -2080,6 +2191,12 @@ bool nsINode::DispatchEvent(Event& aEvent, CallerType aCallerType, if (NS_FAILED(rv)) { aRv.Throw(rv); } @@ -147,6 +149,8 @@ return retval; } +diff --git a/dom/events/Event.cpp b/dom/events/Event.cpp +index 98ebfdab77..0a1d501537 100644 --- a/dom/events/Event.cpp +++ b/dom/events/Event.cpp @@ -8,7 +8,9 @@ @@ -159,7 +163,7 @@ #include "mozilla/ContentEvents.h" #include "mozilla/DOMEventTargetHelper.h" #include "mozilla/EventDispatcher.h" -@@ -402,6 +404,37 @@ bool Event::ShouldIgnoreChromeEventTargetListener() const { +@@ -403,6 +405,37 @@ bool Event::ShouldIgnoreChromeEventTargetListener() const { return bc->IsContent(); } @@ -197,7 +201,7 @@ bool Event::Init(mozilla::dom::EventTarget* aGlobal) { if (!mIsMainThreadEvent) { return IsCurrentThreadRunningChromeWorker(); -@@ -410,7 +443,7 @@ bool Event::Init(mozilla::dom::EventTarget* aGlobal) { +@@ -411,7 +444,7 @@ bool Event::Init(mozilla::dom::EventTarget* aGlobal) { if (aGlobal) { if (nsPIDOMWindowInner* w = aGlobal->GetAsInnerWindow()) { if (Document* d = w->GetExtantDoc()) { @@ -240,7 +244,7 @@ index 67c117c6c5..7a99aabb48 100644 int32_t MovementY() { return GetMovementPoint().y; } float MozPressure(CallerType) const; diff --git a/dom/events/PointerEventHandler.cpp b/dom/events/PointerEventHandler.cpp -index 01a6e2638c..681a9e1bac 100644 +index 1bf2e04fdb..4e7f31c852 100644 --- a/dom/events/PointerEventHandler.cpp +++ b/dom/events/PointerEventHandler.cpp @@ -15,6 +15,7 @@ @@ -251,15 +255,15 @@ index 01a6e2638c..681a9e1bac 100644 #include "mozilla/dom/MouseEventBinding.h" #include "nsIContentInlines.h" #include "nsIFrame.h" -@@ -48,6 +49,7 @@ Maybe PointerEventHandler::sSpoofedPointerId; - StaticAutoPtr PointerEventHandler::sLastMouseInfo; - StaticRefPtr PointerEventHandler::sLastMousePresShell; +@@ -50,6 +51,7 @@ StaticRefPtr PointerEventHandler::sLastMousePresShell; + StaticRefPtr PointerEventHandler::sLastMouseWidget; + Maybe PointerEventHandler::sLastMousePointerId; Maybe PointerEventHandler::sLastPointerId; +bool PointerEventHandler::sDropDownOpenedByLastMouseDown = false; // Keeps a map between pointerId and element that currently capturing pointer // with such pointerId. If pointerId is absent in this map then nobody is -@@ -1257,6 +1259,24 @@ void PointerEventHandler::DispatchPointerFromMouseOrTouch( +@@ -1316,6 +1318,24 @@ void PointerEventHandler::DispatchPointerFromMouseOrTouch( return; } @@ -285,10 +289,10 @@ index 01a6e2638c..681a9e1bac 100644 // pointer" by PresShell::ProcessSynthMouseOrPointerMoveEvent(). However: // 1. if the event is synthesized via nsIDOMWindowUtils, it's not marked as diff --git a/dom/events/PointerEventHandler.h b/dom/events/PointerEventHandler.h -index 14b942f7dd..29c2629d96 100644 +index 266ab7ece7..f7e5fb66ec 100644 --- a/dom/events/PointerEventHandler.h +++ b/dom/events/PointerEventHandler.h -@@ -662,6 +662,17 @@ class PointerEventHandler final { +@@ -694,6 +694,17 @@ class PointerEventHandler final { // Stores the last pointerId which has not left from all documents managed in // this process. static Maybe sLastPointerId; @@ -307,28 +311,65 @@ index 14b942f7dd..29c2629d96 100644 } // namespace mozilla diff --git a/dom/html/HTMLSelectElement.cpp b/dom/html/HTMLSelectElement.cpp -index b969ecca19..bcd5979e15 100644 +index 3b83803e78..831d84edc4 100644 --- a/dom/html/HTMLSelectElement.cpp +++ b/dom/html/HTMLSelectElement.cpp -@@ -19,6 +19,7 @@ - #include "mozilla/dom/Document.h" - #include "mozilla/dom/Element.h" - #include "mozilla/dom/FormData.h" +@@ -34,6 +34,7 @@ + #include "mozilla/dom/HTMLSlotElementBinding.h" + #include "mozilla/dom/MouseEventBinding.h" + #include "mozilla/dom/NameSpaceConstants.h" +#include "mozilla/dom/PointerEventHandler.h" - #include "mozilla/dom/HTMLOptGroupElement.h" - #include "mozilla/dom/HTMLOptionElement.h" - #include "mozilla/dom/HTMLSelectElementBinding.h" -@@ -1779,7 +1780,12 @@ nsresult HTMLSelectElement::HandleMouseDown(EventChainPostVisitor& aVisitor) { + #include "mozilla/dom/ShadowRoot.h" + #include "mozilla/dom/ShadowRootBinding.h" + #include "mozilla/dom/UnionTypes.h" +@@ -197,7 +198,7 @@ nsGenericHTMLElement* HTMLSelectElement::GetPickerElement() const { + FindShadowPseudo(PseudoStyleType::Picker)); + } + +-void HTMLSelectElement::TogglePickerInternal(bool aIsSourceTouchEvent) { ++bool HTMLSelectElement::TogglePickerInternal(bool aIsSourceTouchEvent) { + if (IsBaseSelectAppearance()) { + if (RefPtr picker = GetPickerElement()) { + IgnoredErrorResult rv; +@@ -206,12 +207,14 @@ void HTMLSelectElement::TogglePickerInternal(bool aIsSourceTouchEvent) { + } else { + picker->ShowPopoverInternal(this, rv); + } +- return; ++ return false; + } + } + if (!OpenInParentProcess()) { + FireDropDownEvent(true, aIsSourceTouchEvent); ++ return true; + } ++ return false; + } + + void HTMLSelectElement::GetSlotNameFor(const ShadowRoot& aShadow, +@@ -2298,7 +2301,10 @@ nsresult HTMLSelectElement::HandleMouseDown(EventChainPostVisitor& aVisitor) { } const bool isSourceTouchEvent = - inputSource == MouseEvent_Binding::MOZ_SOURCE_TOUCH; -- FireDropDownEvent(!OpenInParentProcess(), isSourceTouchEvent); -+ const bool opening = !OpenInParentProcess(); -+ FireDropDownEvent(opening, isSourceTouchEvent); -+ if (opening) { + mouseEvent->mInputSource == MouseEvent_Binding::MOZ_SOURCE_TOUCH; +- TogglePickerInternal(isSourceTouchEvent); ++ if (TogglePickerInternal(isSourceTouchEvent)) { + // The panel takes the button release, so no "pointerup" follows. + PointerEventHandler::NotifyDropDownOpenedByMouseDown(); + } return NS_OK; } +diff --git a/dom/html/HTMLSelectElement.h b/dom/html/HTMLSelectElement.h +index e43a1fc66b..47dac17de5 100644 +--- a/dom/html/HTMLSelectElement.h ++++ b/dom/html/HTMLSelectElement.h +@@ -279,7 +279,8 @@ class HTMLSelectElement final : public nsGenericHTMLFormControlElementWithState, + + bool IsBaseSelectAppearance() const; + nsGenericHTMLElement* GetPickerElement() const; +- MOZ_CAN_RUN_SCRIPT void TogglePickerInternal( ++ // Returns whether this opened the parent-process dropdown panel. ++ MOZ_CAN_RUN_SCRIPT bool TogglePickerInternal( + bool aIsSourceTouchEvent = false); + + bool OpenInParentProcess() const { return mIsOpenInParentProcess; } diff --git a/patches/webgl-spoofing.patch b/patches/webgl-spoofing.patch index bb09186b7..51af7c5f7 100644 --- a/patches/webgl-spoofing.patch +++ b/patches/webgl-spoofing.patch @@ -1,14 +1,15 @@ diff --git a/dom/base/WebGLParamsManager.cpp b/dom/base/WebGLParamsManager.cpp new file mode 100644 -index 0000000000..4f1ff23af4 +index 0000000000..020afee28f --- /dev/null +++ b/dom/base/WebGLParamsManager.cpp -@@ -0,0 +1,82 @@ +@@ -0,0 +1,83 @@ +/* Camoufox: Per-context WebGL parameter manager */ +#include "WebGLParamsManager.h" + +#include "mozilla/dom/BrowsingContext.h" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "xpcpublic.h" + +namespace mozilla { @@ -125,10 +126,10 @@ index 0000000000..72df27b6e5 + +#endif // mozilla_dom_WebGLParamsManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index 922a79af86..b718f44036 100644 +index ee5d0b9149..cb146517aa 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -572,6 +572,14 @@ EXPORTS.mozilla.dom += [ +@@ -587,6 +587,14 @@ EXPORTS.mozilla.dom += [ "SpeechVoicesManager.h", ] @@ -144,7 +145,7 @@ index 922a79af86..b718f44036 100644 # CharacterDataBuffer.cpp if CONFIG["INTEL_ARCHITECTURE"]: diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 3db3ef3003..007e8f5eae 100644 +index fe3cdaebd5..d0e286b11f 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -27,6 +27,7 @@ @@ -155,7 +156,7 @@ index 3db3ef3003..007e8f5eae 100644 #include "WindowDestroyedEvent.h" #include "WindowNamedPropertiesHandler.h" #include "js/ComparisonOperators.h" -@@ -8036,6 +8037,51 @@ void nsGlobalWindowInner::SetSpeechVoices(const nsAString& aVoices, +@@ -8042,6 +8043,51 @@ void nsGlobalWindowInner::SetSpeechVoices(const nsAString& aVoices, } } @@ -208,10 +209,10 @@ index 3db3ef3003..007e8f5eae 100644 bool aGranted) { // Invalidate cached StorageAllowed field so that calls to GetLocalStorage diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index bfde19786c..17e00f408f 100644 +index a9d8fb50ba..f3fbefbbfd 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -710,6 +710,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, +@@ -714,6 +714,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, // Per-context speech voices void SetSpeechVoices(const nsAString& aVoices, mozilla::ErrorResult& aRv); @@ -223,7 +224,7 @@ index bfde19786c..17e00f408f 100644 void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp -index aee042ab75..383ab5a761 100644 +index 5aaa4279fd..ead3743ac0 100644 --- a/dom/canvas/ClientWebGLContext.cpp +++ b/dom/canvas/ClientWebGLContext.cpp @@ -3,6 +3,14 @@ @@ -241,7 +242,7 @@ index aee042ab75..383ab5a761 100644 #include -@@ -759,6 +767,35 @@ void ClientWebGLContext::SetUnpackColorSpace( +@@ -781,6 +789,35 @@ void ClientWebGLContext::SetUnpackColorSpace( Run(*mUnpackColorSpace); } @@ -277,9 +278,9 @@ index aee042ab75..383ab5a761 100644 void ClientWebGLContext::GetContextAttributes( dom::Nullable& retval) { retval.SetNull(); -@@ -769,6 +806,9 @@ void ClientWebGLContext::GetContextAttributes( +@@ -794,6 +831,9 @@ void ClientWebGLContext::GetContextAttributes( - const auto& options = mNotLost->info.options; + const auto& options = notLost->info.options; + // Camoufox: context attributes are what the page requested (resolved by the + // real context), never a spoofed table -- a page compares them with what it @@ -287,7 +288,7 @@ index aee042ab75..383ab5a761 100644 result.mAlpha.Construct(options.alpha); result.mDepth = options.depth; result.mStencil = options.stencil; -@@ -974,18 +1014,28 @@ bool ClientWebGLContext::CreateHostContext(const uvec2& requestedSize) { +@@ -999,18 +1039,28 @@ bool ClientWebGLContext::CreateHostContext(const uvec2& requestedSize) { std::unordered_map webgl::MakeIsEnabledMap(const bool webgl2) { auto ret = std::unordered_map{}; @@ -326,7 +327,7 @@ index aee042ab75..383ab5a761 100644 } return ret; -@@ -2027,6 +2077,129 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, +@@ -2179,6 +2229,129 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, const auto& state = State(); // - @@ -456,7 +457,7 @@ index aee042ab75..383ab5a761 100644 const auto fnSetRetval_Buffer = [&](const GLenum target) { const auto buffer = *MaybeFind(state.mBoundBufferByTarget, target); -@@ -2132,49 +2305,80 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, +@@ -2284,49 +2457,80 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, // 2 floats case LOCAL_GL_DEPTH_RANGE: @@ -550,7 +551,7 @@ index aee042ab75..383ab5a761 100644 return; } -@@ -2355,6 +2559,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, +@@ -2506,6 +2710,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, switch (pname) { case dom::WEBGL_debug_renderer_info_Binding::UNMASKED_RENDERER_WEBGL: @@ -568,7 +569,7 @@ index aee042ab75..383ab5a761 100644 if (ShouldResistFingerprinting(RFPTarget::WebGLRenderInfo) || ShouldResistFingerprinting(RFPTarget::WebGLRendererConstant)) { ret = Some("Mozilla"_ns); -@@ -2367,6 +2582,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, +@@ -2518,6 +2733,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, break; case dom::WEBGL_debug_renderer_info_Binding::UNMASKED_VENDOR_WEBGL: @@ -586,7 +587,7 @@ index aee042ab75..383ab5a761 100644 if (ShouldResistFingerprinting(RFPTarget::WebGLRenderInfo)) { ret = Some("Mozilla"_ns); } else if (ShouldResistFingerprinting( -@@ -2478,7 +2704,9 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, +@@ -2629,7 +2855,9 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname, case LOCAL_GL_COLOR_WRITEMASK: { const auto mask = uint8_t(*maybe); const auto bs = std::bitset<4>(mask); @@ -597,9 +598,9 @@ index aee042ab75..383ab5a761 100644 JS::Rooted arr(cx); if (!dom::ToJSValue(cx, src.data(), src.size(), &arr)) { rv = NS_ERROR_OUT_OF_MEMORY; -@@ -2871,6 +3099,24 @@ ClientWebGLContext::GetShaderPrecisionFormat(const GLenum shadertype, - const FuncScope funcScope(*this, "getShaderPrecisionFormat"); - if (IsContextLost()) return nullptr; +@@ -3020,6 +3248,24 @@ ClientWebGLContext::GetShaderPrecisionFormat(const GLenum shadertype, + return nullptr; + } + // Check for spoofed value + if (auto value = @@ -622,7 +623,7 @@ index aee042ab75..383ab5a761 100644 const auto& shaderPrecisions = *notLost->info.shaderPrecisions; const auto args = webgl::GetShaderPrecisionFormatArgs{shadertype, precisiontype}; -@@ -5948,6 +6194,17 @@ bool ClientWebGLContext::IsSupported(const WebGLExtensionID ext, +@@ -6392,6 +6638,17 @@ bool ClientWebGLContext::IsSupported(const WebGLExtensionID ext, return false; } @@ -640,8 +641,8 @@ index aee042ab75..383ab5a761 100644 const auto& limits = Limits(); return limits.supportedExtensions[ext]; } -@@ -5959,6 +6216,18 @@ void ClientWebGLContext::GetSupportedExtensions( - if (IsContextLost()) return; +@@ -6406,6 +6663,18 @@ void ClientWebGLContext::GetSupportedExtensions( + } auto& retarr = retval.SetValue(); + @@ -660,10 +661,10 @@ index aee042ab75..383ab5a761 100644 if (!IsSupported(i, callerType)) continue; diff --git a/dom/canvas/ClientWebGLContext.h b/dom/canvas/ClientWebGLContext.h -index 40e100d982..d8835693df 100644 +index 6f73f55eef..53693f8fec 100644 --- a/dom/canvas/ClientWebGLContext.h +++ b/dom/canvas/ClientWebGLContext.h -@@ -1082,6 +1082,11 @@ class ClientWebGLContext final : public nsICanvasRenderingContextInternal, +@@ -1089,6 +1089,11 @@ class ClientWebGLContext final : public nsICanvasRenderingContextInternal, void GetContextAttributes(dom::Nullable& retval); private: @@ -676,10 +677,10 @@ index 40e100d982..d8835693df 100644 WebGLFramebufferJS* fb, bool webvr, const webgl::SwapChainOptions& options = webgl::SwapChainOptions()); diff --git a/dom/canvas/moz.build b/dom/canvas/moz.build -index b370df55dd..71893f4db2 100644 +index b5809a1fca..8d36d592b2 100644 --- a/dom/canvas/moz.build +++ b/dom/canvas/moz.build -@@ -184,6 +184,10 @@ TEST_DIRS += [ +@@ -180,6 +180,10 @@ TEST_DIRS += [ # Suppress warnings from third-party code. SOURCES["MurmurHash3.cpp"].flags += ["-Wno-implicit-fallthrough"] @@ -691,10 +692,10 @@ index b370df55dd..71893f4db2 100644 "/js/xpconnect/wrappers", ] diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index f01e8011cc..3a13d4963f 100644 +index c2c6eb41b8..6cf202d17a 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -1009,6 +1009,18 @@ partial interface Window { +@@ -1006,6 +1006,18 @@ partial interface Window { undefined setScreenColorDepth(unsigned long depth); }; diff --git a/patches/webrtc-ip-spoofing.patch b/patches/webrtc-ip-spoofing.patch index 2d27cda7a..5300208e7 100644 --- a/patches/webrtc-ip-spoofing.patch +++ b/patches/webrtc-ip-spoofing.patch @@ -1,14 +1,15 @@ diff --git a/dom/base/WebRTCIPManager.cpp b/dom/base/WebRTCIPManager.cpp new file mode 100644 -index 0000000000..8834c93e4b +index 0000000000..75f57a03f2 --- /dev/null +++ b/dom/base/WebRTCIPManager.cpp -@@ -0,0 +1,146 @@ +@@ -0,0 +1,147 @@ +#include "WebRTCIPManager.h" +#include "nsTHashMap.h" +#include "RoverfoxStorageManager.h" +#include "nsPrintfCString.h" +#include "nsGlobalWindowInner.h" ++#include "nsPIDOMWindowInlines.h" +#include "nsDocShell.h" +#include "xpcpublic.h" +#include "mozilla/dom/BrowsingContext.h" @@ -262,10 +263,10 @@ index 0000000000..c9810a06d2 + +#endif // mozilla_dom_WebRTCIPManager_h diff --git a/dom/base/moz.build b/dom/base/moz.build -index ba674a00d9..ef7c9bdff2 100644 +index cb146517aa..f2fa8a3543 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build -@@ -296,10 +296,15 @@ EXPORTS.mozilla.dom += [ +@@ -302,10 +302,15 @@ EXPORTS.mozilla.dom += [ "VideoFrameProvider.h", "ViewportMetaData.h", "VisualViewport.h", @@ -282,10 +283,10 @@ index ba674a00d9..ef7c9bdff2 100644 # in unified builds (it includes RoverfoxStorageManager.h which can affect # alphabetically-later files like BarProps.cpp) diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index 740c59ed8b..4b7d3d1297 100644 +index d0e286b11f..8ead869729 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp -@@ -334,6 +334,10 @@ +@@ -333,6 +333,10 @@ #include "xpcprivate.h" #include "xpcpublic.h" @@ -296,7 +297,7 @@ index 740c59ed8b..4b7d3d1297 100644 #ifdef NS_PRINTING # include "nsIPrintSettings.h" #endif -@@ -7810,6 +7814,42 @@ void nsGlobalWindowInner::SetTimezone(const nsAString& timezone, ErrorResult& aR +@@ -7812,6 +7816,42 @@ void nsGlobalWindowInner::SetTimezone(const nsAString& timezone, ErrorResult& aR } } @@ -340,10 +341,10 @@ index 740c59ed8b..4b7d3d1297 100644 MOZ_ASSERT(aSharedWorker); MOZ_ASSERT(!mSharedWorkers.Contains(aSharedWorker)); diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index 9199f08fdf..66f858aad5 100644 +index f3fbefbbfd..2b581e729a 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -685,6 +685,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, +@@ -687,6 +687,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, void SetTimezone(const nsAString& timezone, mozilla::ErrorResult& aRv); @@ -355,10 +356,10 @@ index 9199f08fdf..66f858aad5 100644 void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker); diff --git a/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp b/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp -index e9afe2cfb2..97263a3d04 100644 +index 0eefdc2645..40f8f1499f 100644 --- a/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp +++ b/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp -@@ -98,6 +98,11 @@ +@@ -100,6 +100,11 @@ #include "mozilla/glean/DomMediaWebrtcMetrics.h" #include "mozilla/net/DataChannelProtocol.h" #include "mozilla/net/WebrtcProxyConfig.h" @@ -370,7 +371,7 @@ index e9afe2cfb2..97263a3d04 100644 #include "nsContentUtils.h" #include "nsDOMJSUtils.h" #include "nsGlobalWindowInner.h" -@@ -227,6 +232,14 @@ class DataChannel; +@@ -230,6 +235,14 @@ class DataChannel; namespace mozilla { @@ -385,7 +386,7 @@ index e9afe2cfb2..97263a3d04 100644 void PeerConnectionAutoTimer::RegisterConnection() { mRefCnt++; } void PeerConnectionAutoTimer::UnregisterConnection(bool aContainedAV) { -@@ -1585,7 +1598,15 @@ PeerConnectionImpl::SetLocalDescription(int32_t aAction, const char* aSDP) { +@@ -1622,7 +1635,15 @@ PeerConnectionImpl::SetLocalDescription(int32_t aAction, const char* aSDP) { } }; @@ -402,7 +403,7 @@ index e9afe2cfb2..97263a3d04 100644 SyncToJsep(); -@@ -1751,11 +1772,85 @@ already_AddRefed PeerConnectionImpl::GetStats( +@@ -1788,11 +1809,90 @@ already_AddRefed PeerConnectionImpl::GetStats( MOZ_CRASH("Failed to create a promise!"); } @@ -412,6 +413,7 @@ index e9afe2cfb2..97263a3d04 100644 + // entry below matches the candidate/SDP exactly. 0 = nothing fabricated. + uint16_t fabricatedSrflxPort = mFabricatedSrflxPort; + nsString fabricatedSrflxStatsId = mFabricatedSrflxStatsId; ++ nsString fabricatedSrflxUfrag = mFabricatedSrflxUfrag; + GetStats(aSelector, false) ->Then( @@ -419,7 +421,7 @@ index e9afe2cfb2..97263a3d04 100644 - [promise, - window = mWindow](UniquePtr&& aReport) { + [promise, window = mWindow, shouldSanitizeStats, -+ fabricatedSrflxPort, fabricatedSrflxStatsId]( ++ fabricatedSrflxPort, fabricatedSrflxStatsId, fabricatedSrflxUfrag]( + UniquePtr&& aReport) { + // Camoufox: Sanitize IP addresses in stats before exposing to JS + if (shouldSanitizeStats && aReport) { @@ -474,23 +476,27 @@ index e9afe2cfb2..97263a3d04 100644 + cand.mProtocol.Construct(NS_ConvertASCIItoUTF16("udp")); + cand.mProxied.Construct(NS_ConvertASCIItoUTF16("proxied")); + cand.mId.Construct(fabricatedSrflxStatsId); -+ // Associate with the same transport as the real candidates. -+ for (const auto& existing : aReport->mIceCandidateStats) { -+ if (existing.mTransportId.WasPassed()) { -+ cand.mTransportId.Construct(existing.mTransportId.Value()); -+ break; ++ // Firefox 156 exposes foundation and usernameFragment on ++ // candidate stats: the same values as the SDP line. ++ cand.mFoundation.Construct(u"1"_ns); ++ cand.mUsernameFragment.Construct(fabricatedSrflxUfrag); ++ // Associate with the same transport as the real candidates; ++ // transportId is required, so with none there is nothing to ++ // attach a candidate to. ++ if (!aReport->mIceCandidateStats.IsEmpty()) { ++ cand.mTransportId = ++ aReport->mIceCandidateStats[0].mTransportId; ++ if (!aReport->mIceCandidateStats.AppendElement(cand, ++ fallible)) { ++ mozalloc_handle_oom(0); + } + } -+ if (!aReport->mIceCandidateStats.AppendElement(cand, -+ fallible)) { -+ mozalloc_handle_oom(0); -+ } + } + } - RefPtr report(new RTCStatsReport(window)); + RefPtr report = MakeRefPtr(window); report->Incorporate(*aReport); promise->MaybeResolve(std::move(report)); -@@ -3274,12 +3369,22 @@ const std::string& PeerConnectionImpl::GetName() { +@@ -3313,12 +3413,22 @@ const std::string& PeerConnectionImpl::GetName() { return mName; } @@ -514,7 +520,7 @@ index e9afe2cfb2..97263a3d04 100644 if (mForceIceTcp && std::string::npos != candidate.find(" UDP ")) { CSFLogWarn(LOGTAG, "Blocking local UDP candidate: %s", candidate.c_str()); STAMP_TIMECARD(mTimeCard, "UDP Ice Candidate blocked"); -@@ -3342,10 +3447,438 @@ void PeerConnectionImpl::SendLocalIceCandidateToContent( +@@ -3381,10 +3491,439 @@ void PeerConnectionImpl::SendLocalIceCandidateToContent( uint16_t level, const std::string& mid, const std::string& candidate, const std::string& ufrag) { STAMP_TIMECARD(mTimeCard, "Send Ice Candidate to content"); @@ -824,6 +830,7 @@ index e9afe2cfb2..97263a3d04 100644 + mSurfacedHostUdpPort ? mSurfacedHostUdpPort : RandomEphemeralPort(); + if (wantSrflx) { + mFabricatedSrflxPort = port; ++ mFabricatedSrflxUfrag = NS_ConvertUTF8toUTF16(ufrag.c_str()); + if (mFabricatedSrflxStatsId.IsEmpty()) { + // Candidate stats ids are 8 lowercase hex digits. + char id[9]; @@ -955,10 +962,10 @@ index e9afe2cfb2..97263a3d04 100644 + RandomSrflxDelayMs()); } - void PeerConnectionImpl::IceConnectionStateChange( -@@ -3434,6 +3967,47 @@ void PeerConnectionImpl::IceConnectionStateChange( - // If connectionIceConnectionStateChanged is true, fire an event named - // iceconnectionstatechange at connection. + // Implements the steps to "change the selected candidate pair and state". +@@ -3514,6 +4053,47 @@ void PeerConnectionImpl::IceConnectionStateChange( + // 12. If connectionIceConnectionStateChanged is true, fire an event + // named iceconnectionstatechange at connection. if (connectionIceConnectionStateChanged) { + // Camoufox: behind a TCP proxy, ICE fails almost immediately and gathering + // never reaches "complete" (no null-candidate event fires), so the @@ -1004,7 +1011,7 @@ index e9afe2cfb2..97263a3d04 100644 pcObserver->OnStateChange(PCObserverStateType::IceConnectionState, rv); } -@@ -3619,6 +4193,12 @@ void PeerConnectionImpl::IceGatheringStateChange( +@@ -3699,6 +4279,12 @@ void PeerConnectionImpl::IceGatheringStateChange( // If connectionIceGatheringStateChanged is true, fire an event named // icegatheringstatechange at connection. if (gatheringStateChanged) { @@ -1017,7 +1024,7 @@ index e9afe2cfb2..97263a3d04 100644 // NOTE: If we're in the "complete" case, our JS code will fire a null // icecandidate event after firing the icegatheringstatechange event. // Fire an event named icecandidate using the RTCPeerConnectionIceEvent -@@ -3710,11 +4290,27 @@ void PeerConnectionImpl::UpdateDefaultCandidate( +@@ -3790,11 +4376,27 @@ void PeerConnectionImpl::UpdateDefaultCandidate( const std::string& defaultRtcpAddr, uint16_t defaultRtcpPort, const std::string& transportId) { CSFLogDebug(LOGTAG, "%s", __FUNCTION__); @@ -1047,7 +1054,7 @@ index e9afe2cfb2..97263a3d04 100644 transportId); } } -@@ -4485,8 +5081,10 @@ bool PeerConnectionImpl::GetPrefDefaultAddressOnly() const { +@@ -4578,8 +5180,10 @@ bool PeerConnectionImpl::GetPrefDefaultAddressOnly() const { uint64_t winId = mWindow->WindowID(); @@ -1061,10 +1068,10 @@ index e9afe2cfb2..97263a3d04 100644 !MediaManager::Get()->IsActivelyCapturingOrHasAPermission(winId); return default_address_only; diff --git a/dom/media/webrtc/jsapi/PeerConnectionImpl.h b/dom/media/webrtc/jsapi/PeerConnectionImpl.h -index 084a437313..b556e82084 100644 +index dfda4b5b9c..7919a66eed 100644 --- a/dom/media/webrtc/jsapi/PeerConnectionImpl.h +++ b/dom/media/webrtc/jsapi/PeerConnectionImpl.h -@@ -620,8 +620,17 @@ class PeerConnectionImpl final +@@ -610,8 +610,17 @@ class PeerConnectionImpl final RefPtr GetMediaPipelineForTrack( dom::MediaStreamTrack& aRecvTrack); @@ -1083,7 +1090,7 @@ index 084a437313..b556e82084 100644 void SendLocalIceCandidateToContent(uint16_t level, const std::string& mid, const std::string& candidate, const std::string& ufrag); -@@ -719,6 +728,21 @@ class PeerConnectionImpl final +@@ -709,6 +718,24 @@ class PeerConnectionImpl final unsigned int mDataChannelsClosed = 0; bool mForceIceTcp; @@ -1097,6 +1104,9 @@ index 084a437313..b556e82084 100644 + // Camoufox: the fabricated srflx's getStats() id, in the shape real candidate + // ids have (8 hex digits), fixed for the life of the connection. + nsString mFabricatedSrflxStatsId; ++ // Camoufox: the local ICE ufrag the fabricated srflx was emitted under; its ++ // getStats() entry reports it as usernameFragment, as a real candidate does. ++ nsString mFabricatedSrflxUfrag; + // Camoufox: set once a host candidate reached content (real or fabricated), + // with the UDP host's port, so a fabricated srflx never brings a second host + // set and shares the host's port as a real gather does. @@ -1106,10 +1116,10 @@ index 084a437313..b556e82084 100644 RefPtr mTransportHandler; diff --git a/dom/media/webrtc/jsapi/moz.build b/dom/media/webrtc/jsapi/moz.build -index d32e08c2b0..40a750196a 100644 +index 92c2255785..d1c4a6788a 100644 --- a/dom/media/webrtc/jsapi/moz.build +++ b/dom/media/webrtc/jsapi/moz.build -@@ -68,3 +68,6 @@ EXPORTS.mozilla.dom += [ +@@ -72,3 +72,6 @@ EXPORTS.mozilla.dom += [ ] FINAL_LIBRARY = "xul" @@ -1117,10 +1127,10 @@ index d32e08c2b0..40a750196a 100644 +# DOM Mask +LOCAL_INCLUDES += ["/camoucfg"] diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index 2471488e16..b7833efded 100644 +index 6cf202d17a..6a5b50744d 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl -@@ -958,6 +958,17 @@ partial interface Window { +@@ -961,6 +961,17 @@ partial interface Window { undefined setTimezone(DOMString timezone); }; diff --git a/patches/windows-theming-bug-modified.patch b/patches/windows-theming-bug-modified.patch index ba8147d75..05517a87c 100644 --- a/patches/windows-theming-bug-modified.patch +++ b/patches/windows-theming-bug-modified.patch @@ -1,13 +1,28 @@ -diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in -index a615f68a6f..f950c876fa 100644 ---- a/browser/app/Makefile.in -+++ b/browser/app/Makefile.in -@@ -84,7 +84,7 @@ tools repackage:: $(DIST)/bin/$(MOZ_APP_NAME) $(objdir)/macbuild/Contents/MacOS- - rsync -aL $(DIST)/bin/$(MOZ_APP_NAME) '$(dist_dest)/Contents/MacOS' - cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/firefox.icns '$(dist_dest)/Contents/Resources/firefox.icns' - cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/document.icns '$(dist_dest)/Contents/Resources/document.icns' -- cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/Assets.car '$(dist_dest)/Contents/Resources/Assets.car' -+ test ! -f $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/Assets.car || cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/Assets.car '$(dist_dest)/Contents/Resources/Assets.car' - $(MKDIR) -p '$(dist_dest)/Contents/Library/LaunchServices' - ifdef MOZ_UPDATER - cp -f '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' '$(dist_dest)/Contents/Library/LaunchServices' +Camoufox: build the macOS bundle when the branding has no Assets.car. + +Assets.car is compiled with actool, which only ships with Xcode on macOS; +elsewhere scripts/generate-assets-car.sh can only reuse an existing catalog. +Firefox used to copy it in browser/app/Makefile.in's repackage recipe, which +this patch made conditional. From Firefox 156 the bundle is declared with +MacOSBundle() in browser/app/moz.build and every extra file becomes a make +prerequisite of the bundle, so the same tolerance now lives where those +prerequisites are generated. Only that one file is optional. + +diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py +index 33e69209c3..0174787548 100644 +--- a/python/mozbuild/mozbuild/backend/recursivemake.py ++++ b/python/mozbuild/mozbuild/backend/recursivemake.py +@@ -1989,6 +1989,13 @@ class RecursiveMakeBackend(MakeBackend): + for key in ("binaries", "extra_files"): + for source, dest in spec[key]: + path = Path(context, source) ++ # Camoufox: the Assets.car icon catalog can only be compiled on ++ # macOS, so a branding built elsewhere may not have one. Bundle ++ # without it rather than failing on a missing prerequisite. ++ if dest == "Resources/Assets.car" and not os.path.exists( ++ path.full_path ++ ): ++ continue + resolved[key].append([path.full_path, dest]) + inputs.append(path) + if spec["stage"]: diff --git a/scripts/data/contentaccessible-manifest.json b/scripts/data/contentaccessible-manifest.json index cc540502f..9db8a08b8 100644 --- a/scripts/data/contentaccessible-manifest.json +++ b/scripts/data/contentaccessible-manifest.json @@ -1,28 +1,29 @@ { - "firefox_version": "152.0.4", + "firefox_version": "156.0.1", "packages": { "browser/omni.ja|content|activity-stream": { "files": [ + "chrome/browser/content/activity-stream/data/content/assets/backdrop-adaptive.svg", "chrome/browser/content/activity-stream/data/content/assets/br-amo-fox-paint.svg", + "chrome/browser/content/activity-stream/data/content/assets/br-backup-fox-in-box.svg", + "chrome/browser/content/activity-stream/data/content/assets/br-backup-fox-outside-box.svg", "chrome/browser/content/activity-stream/data/content/assets/br-fxa-fox-mirror.svg", "chrome/browser/content/activity-stream/data/content/assets/br-gratitude-fox-rock.svg", "chrome/browser/content/activity-stream/data/content/assets/br-import-fox-house.svg", + "chrome/browser/content/activity-stream/data/content/assets/br-migration-fox-juggle.svg", "chrome/browser/content/activity-stream/data/content/assets/br-set-default-fox-heart.svg", "chrome/browser/content/activity-stream/data/content/assets/confetti.svg", - "chrome/browser/content/activity-stream/data/content/assets/device-migration.svg", "chrome/browser/content/activity-stream/data/content/assets/euo-chatbot.svg", "chrome/browser/content/activity-stream/data/content/assets/euo-tab-orientation.svg", "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup-restore.svg", - "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup.svg", "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-tail.png", "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving-static.png", "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving.gif", "chrome/browser/content/activity-stream/data/content/assets/glyph-webextension-16.svg", "chrome/browser/content/activity-stream/data/content/assets/heart.webp", + "chrome/browser/content/activity-stream/data/content/assets/kit-sit-look-up.svg", "chrome/browser/content/activity-stream/data/content/assets/long-zap.svg", - "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user-cn.svg", "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user.svg", - "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-new-user-cn.svg", "chrome/browser/content/activity-stream/data/content/assets/mr-amo-collection.svg", "chrome/browser/content/activity-stream/data/content/assets/mr-gratitude.svg", "chrome/browser/content/activity-stream/data/content/assets/mr-import.svg", @@ -39,6 +40,7 @@ "chrome/browser/content/activity-stream/data/content/assets/person-typing.svg", "chrome/browser/content/activity-stream/data/content/assets/short-zap.svg", "chrome/browser/content/activity-stream/data/content/assets/splash-logo.svg", + "chrome/browser/content/activity-stream/data/content/assets/splash-screen.webm", "chrome/browser/content/activity-stream/data/content/assets/tabs-side-zap-transparent.svg", "chrome/browser/content/activity-stream/data/content/assets/tabs-top-zap-transparent.svg", "chrome/browser/content/activity-stream/data/content/tippytop/favicons/addons-mozilla.png", @@ -77,6 +79,7 @@ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/weibo-com.ico", "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wikipedia-org.ico", "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wix.ico", + "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wrexham.png", "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wykop-pl.png", "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-com.png", "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-ru.png", @@ -118,6 +121,7 @@ "chrome/browser/content/activity-stream/data/content/tippytop/images/weibo-com@2x.png", "chrome/browser/content/activity-stream/data/content/tippytop/images/wikipedia-org@2x.png", "chrome/browser/content/activity-stream/data/content/tippytop/images/wix@2x.jpg", + "chrome/browser/content/activity-stream/data/content/tippytop/images/wrexham@2x.png", "chrome/browser/content/activity-stream/data/content/tippytop/images/wykop-pl@2x.png", "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-com@2x.png", "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-ru@2x.png", @@ -193,11 +197,6 @@ "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.mjs", "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.css", "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.css", - "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/login-origin-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/login-password-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/login-username-field.mjs", "chrome/browser/content/browser/aboutlogins/components/login-alert.css", "chrome/browser/content/browser/aboutlogins/components/login-alert.mjs", "chrome/browser/content/browser/aboutlogins/components/login-command-button.css", @@ -233,20 +232,35 @@ "chrome/browser/content/browser/aiwindow/ai-window-shared.css", "chrome/browser/content/browser/aiwindow/aiChatContent.html", "chrome/browser/content/browser/aiwindow/aiWindow.html", + "chrome/browser/content/browser/aiwindow/aitab/component_schema.json", + "chrome/browser/content/browser/aiwindow/assets/agent-watch.svg", "chrome/browser/content/browser/aiwindow/assets/ai-chat-grid-loading.svg", "chrome/browser/content/browser/aiwindow/assets/ask-icon.svg", "chrome/browser/content/browser/aiwindow/assets/icon-grid-view.svg", "chrome/browser/content/browser/aiwindow/assets/icon-list-view.svg", + "chrome/browser/content/browser/aiwindow/assets/kit-meditating.svg", + "chrome/browser/content/browser/aiwindow/assets/kit.svg", "chrome/browser/content/browser/aiwindow/assets/loader.svg", "chrome/browser/content/browser/aiwindow/assets/memories-off.svg", "chrome/browser/content/browser/aiwindow/assets/memories-on.svg", + "chrome/browser/content/browser/aiwindow/assets/model-choice-0.svg", "chrome/browser/content/browser/aiwindow/assets/model-choice-1.svg", "chrome/browser/content/browser/aiwindow/assets/model-choice-2.svg", "chrome/browser/content/browser/aiwindow/assets/model-choice-3.svg", + "chrome/browser/content/browser/aiwindow/assets/model-choice-gemini.svg", + "chrome/browser/content/browser/aiwindow/assets/model-choice-mistral.svg", + "chrome/browser/content/browser/aiwindow/assets/model-choice-qwen.svg", "chrome/browser/content/browser/aiwindow/assets/new-chat.svg", "chrome/browser/content/browser/aiwindow/assets/set-default-onboarding.svg", + "chrome/browser/content/browser/aiwindow/assets/sff-autofill-icon.svg", "chrome/browser/content/browser/aiwindow/assets/smart-window-promo-default.svg", + "chrome/browser/content/browser/aiwindow/assets/smart-window.svg", "chrome/browser/content/browser/aiwindow/assets/stop-generation.svg", + "chrome/browser/content/browser/aiwindow/components/SmartwindowOverflowRow.mjs", + "chrome/browser/content/browser/aiwindow/components/agent-monitor-item.css", + "chrome/browser/content/browser/aiwindow/components/agent-monitor-item.mjs", + "chrome/browser/content/browser/aiwindow/components/ai-action-confirmation.css", + "chrome/browser/content/browser/aiwindow/components/ai-action-confirmation.mjs", "chrome/browser/content/browser/aiwindow/components/ai-action-result.css", "chrome/browser/content/browser/aiwindow/components/ai-action-result.mjs", "chrome/browser/content/browser/aiwindow/components/ai-chat-card.css", @@ -259,6 +273,12 @@ "chrome/browser/content/browser/aiwindow/components/ai-chat-message.mjs", "chrome/browser/content/browser/aiwindow/components/ai-chat-table.css", "chrome/browser/content/browser/aiwindow/components/ai-chat-table.mjs", + "chrome/browser/content/browser/aiwindow/components/ai-grouped-chip-container.css", + "chrome/browser/content/browser/aiwindow/components/ai-grouped-chip-container.mjs", + "chrome/browser/content/browser/aiwindow/components/ai-sff-tab-selector.css", + "chrome/browser/content/browser/aiwindow/components/ai-sff-tab-selector.mjs", + "chrome/browser/content/browser/aiwindow/components/ai-tasks.css", + "chrome/browser/content/browser/aiwindow/components/ai-tasks.mjs", "chrome/browser/content/browser/aiwindow/components/ai-website-chip.css", "chrome/browser/content/browser/aiwindow/components/ai-website-chip.mjs", "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.css", @@ -271,6 +291,8 @@ "chrome/browser/content/browser/aiwindow/components/applied-memories-button.mjs", "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.css", "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.mjs", + "chrome/browser/content/browser/aiwindow/components/chat-assistant-citations.css", + "chrome/browser/content/browser/aiwindow/components/chat-assistant-citations.mjs", "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.css", "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.mjs", "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.css", @@ -279,28 +301,49 @@ "chrome/browser/content/browser/aiwindow/components/context-icon-button.mjs", "chrome/browser/content/browser/aiwindow/components/input-cta.css", "chrome/browser/content/browser/aiwindow/components/input-cta.mjs", + "chrome/browser/content/browser/aiwindow/components/input-model-select.css", + "chrome/browser/content/browser/aiwindow/components/input-model-select.mjs", + "chrome/browser/content/browser/aiwindow/components/kit-mention.css", + "chrome/browser/content/browser/aiwindow/components/kit-mention.mjs", "chrome/browser/content/browser/aiwindow/components/memories-icon-button.css", "chrome/browser/content/browser/aiwindow/components/memories-icon-button.mjs", + "chrome/browser/content/browser/aiwindow/components/monitor-icon.mjs", + "chrome/browser/content/browser/aiwindow/components/monitors-display.css", + "chrome/browser/content/browser/aiwindow/components/monitors-display.mjs", "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.css", "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.mjs", + "chrome/browser/content/browser/aiwindow/components/smartwindow-group-tabs.mjs", "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.css", "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.mjs", + "chrome/browser/content/browser/aiwindow/components/smartwindow-history-menu.css", + "chrome/browser/content/browser/aiwindow/components/smartwindow-history-menu.mjs", + "chrome/browser/content/browser/aiwindow/components/smartwindow-overflow-row.css", "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.css", "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.mjs", "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.css", "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.mjs", "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.css", "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.mjs", + "chrome/browser/content/browser/aiwindow/components/smartwindow-smartbar-glow.css", + "chrome/browser/content/browser/aiwindow/components/smartwindow-smartbar-glow.mjs", + "chrome/browser/content/browser/aiwindow/components/smartwindow-topsites.css", + "chrome/browser/content/browser/aiwindow/components/smartwindow-topsites.mjs", "chrome/browser/content/browser/aiwindow/components/website-chip-container.css", "chrome/browser/content/browser/aiwindow/components/website-chip-container.mjs", "chrome/browser/content/browser/aiwindow/firstrun.css", "chrome/browser/content/browser/aiwindow/firstrun.html", "chrome/browser/content/browser/aiwindow/firstrun.js", "chrome/browser/content/browser/aiwindow/modules/ChatMarkdownParser.mjs", - "chrome/browser/content/browser/aiwindow/modules/TokenStreamParser.mjs", + "chrome/browser/content/browser/aiwindow/modules/ClientErrorTelemetry.mjs", + "chrome/browser/content/browser/aiwindow/modules/SmartFormFillConstants.mjs", + "chrome/browser/content/browser/aiwindow/smartformfill-tab-select.css", + "chrome/browser/content/browser/aiwindow/smartformfill-tab-select.html", + "chrome/browser/content/browser/aiwindow/smartformfill-tab-select.mjs", "chrome/browser/content/browser/aiwindow/smartwindow-init.mjs", + "chrome/browser/content/browser/aiwindow/tasks.html", "chrome/browser/content/browser/asrouter/asrouter-admin.bundle.js", "chrome/browser/content/browser/asrouter/asrouter-admin.html", + "chrome/browser/content/browser/asrouter/assets/arrow-down-tiny.svg", "chrome/browser/content/browser/asrouter/assets/checkmark-16.svg", "chrome/browser/content/browser/asrouter/assets/close-16.svg", "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-banner.svg", @@ -315,6 +358,10 @@ "chrome/browser/content/browser/asrouter/assets/glyph-cfr-feature-16.svg", "chrome/browser/content/browser/asrouter/assets/glyph-mail-mask-16.svg", "chrome/browser/content/browser/asrouter/assets/hero-relay-email-masks.svg", + "chrome/browser/content/browser/asrouter/assets/kit-checkmark-flipped.svg", + "chrome/browser/content/browser/asrouter/assets/kit-checkmark.svg", + "chrome/browser/content/browser/asrouter/assets/kit-peek-bottom.svg", + "chrome/browser/content/browser/asrouter/assets/kit-peek.svg", "chrome/browser/content/browser/asrouter/assets/shield-checkmark-16.svg", "chrome/browser/content/browser/asrouter/assets/smiling-fox-icon.svg", "chrome/browser/content/browser/asrouter/assets/subtract-16.svg", @@ -333,13 +380,10 @@ "chrome/browser/content/browser/asrouter/render.js", "chrome/browser/content/browser/asrouter/schemas/BackgroundTaskMessagingExperiment.schema.json", "chrome/browser/content/browser/asrouter/schemas/MessagingExperiment.schema.json", - "chrome/browser/content/browser/assets/cookie-banners-begone.svg", "chrome/browser/content/browser/assets/focus-logo.svg", - "chrome/browser/content/browser/assets/focus-promo.png", - "chrome/browser/content/browser/assets/focus-qr-code.svg", - "chrome/browser/content/browser/assets/klar-qr-code.svg", "chrome/browser/content/browser/assets/moz-vpn.svg", "chrome/browser/content/browser/assets/private-promo-asset.svg", + "chrome/browser/content/browser/assets/relay-promo.svg", "chrome/browser/content/browser/assets/vpn-logo.svg", "chrome/browser/content/browser/backup/ArchiveJSONBlock.1.schema.json", "chrome/browser/content/browser/backup/ArchiveJSONBlock.2.schema.json", @@ -417,17 +461,17 @@ "chrome/browser/content/browser/contentSearchHandoffUI.css", "chrome/browser/content/browser/contentSearchHandoffUI.mjs", "chrome/browser/content/browser/contentTheme.js", - "chrome/browser/content/browser/contentsharing/background-dark.svg", - "chrome/browser/content/browser/contentsharing/background-light.svg", - "chrome/browser/content/browser/contentsharing/content-sharing-icon.svg", - "chrome/browser/content/browser/contentsharing/content-sharing-modal.css", - "chrome/browser/content/browser/contentsharing/content-sharing-modal.mjs", - "chrome/browser/content/browser/contentsharing/contentSharingModal.xhtml", - "chrome/browser/content/browser/contentsharing/contentsharing.schema.json", + "chrome/browser/content/browser/controlcenter/assets/breach-alert-shield-check.svg", + "chrome/browser/content/browser/controlcenter/assets/breach-alert-shield-cross.svg", + "chrome/browser/content/browser/controlcenter/assets/breach-alert-shield-warning.svg", "chrome/browser/content/browser/controlcenter/assets/fox-concern.svg", "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.css", "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.mjs", "chrome/browser/content/browser/customizableui/panelUI.js", + "chrome/browser/content/browser/customizableui/sync-promo.css", + "chrome/browser/content/browser/customizableui/sync-promo.mjs", + "chrome/browser/content/browser/customkeys/customkeys-sidebar.css", + "chrome/browser/content/browser/customkeys/customkeys-sidebar.mjs", "chrome/browser/content/browser/customkeys/customkeys.css", "chrome/browser/content/browser/customkeys/customkeys.html", "chrome/browser/content/browser/customkeys/customkeys.js", @@ -474,13 +518,9 @@ "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.mjs", "chrome/browser/content/browser/firefoxview/syncedtabs.mjs", "chrome/browser/content/browser/firefoxview/view-chats.svg", - "chrome/browser/content/browser/firefoxview/view-history.svg", "chrome/browser/content/browser/firefoxview/view-opentabs.css", - "chrome/browser/content/browser/firefoxview/view-opentabs.svg", - "chrome/browser/content/browser/firefoxview/view-recentbrowsing.svg", "chrome/browser/content/browser/firefoxview/view-recentlyclosed.svg", "chrome/browser/content/browser/firefoxview/view-syncedtabs.css", - "chrome/browser/content/browser/firefoxview/view-syncedtabs.svg", "chrome/browser/content/browser/firefoxview/viewpage.mjs", "chrome/browser/content/browser/genai/assets/brands/chatgpt.svg", "chrome/browser/content/browser/genai/assets/brands/claude.svg", @@ -492,6 +532,8 @@ "chrome/browser/content/browser/genai/chat.css", "chrome/browser/content/browser/genai/chat.html", "chrome/browser/content/browser/genai/chat.js", + "chrome/browser/content/browser/genai/content/chatbot-promo.css", + "chrome/browser/content/browser/genai/content/chatbot-promo.mjs", "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.css", "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.mjs", "chrome/browser/content/browser/genai/content/link-preview-card.css", @@ -502,6 +544,14 @@ "chrome/browser/content/browser/genai/content/page-assist.mjs", "chrome/browser/content/browser/genai/pageAssist.html", "chrome/browser/content/browser/global-scripts.js", + "chrome/browser/content/browser/icons/kit.ico", + "chrome/browser/content/browser/icons/minimal-dark.ico", + "chrome/browser/content/browser/icons/minimal-light.ico", + "chrome/browser/content/browser/icons/momo.ico", + "chrome/browser/content/browser/icons/pixelated.ico", + "chrome/browser/content/browser/icons/pride.ico", + "chrome/browser/content/browser/icons/retro2004.ico", + "chrome/browser/content/browser/icons/retro2017.ico", "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-dark.svg", "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-light.svg", "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-dark.svg", @@ -516,6 +566,12 @@ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-off.svg", "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-on.svg", "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-paused.svg", + "chrome/browser/content/browser/ipprotection/assets/toolbaricons/ipprotection-error.svg", + "chrome/browser/content/browser/ipprotection/assets/toolbaricons/ipprotection-excluded.svg", + "chrome/browser/content/browser/ipprotection/assets/toolbaricons/ipprotection-info.svg", + "chrome/browser/content/browser/ipprotection/assets/toolbaricons/ipprotection-off.svg", + "chrome/browser/content/browser/ipprotection/assets/toolbaricons/ipprotection-on.svg", + "chrome/browser/content/browser/ipprotection/assets/toolbaricons/ipprotection-paused.svg", "chrome/browser/content/browser/ipprotection/assets/vpn-settings-get-started.svg", "chrome/browser/content/browser/ipprotection/bandwidth-usage.css", "chrome/browser/content/browser/ipprotection/bandwidth-usage.mjs", @@ -533,21 +589,17 @@ "chrome/browser/content/browser/ipprotection/ipprotection-utils.mjs", "chrome/browser/content/browser/ipprotection/locations-list.mjs", "chrome/browser/content/browser/ipprotection/locations-subview.css", + "chrome/browser/content/browser/kit-signed-out.svg", "chrome/browser/content/browser/license.html", "chrome/browser/content/browser/lockwise-card.mjs", "chrome/browser/content/browser/logos/etp-mobile.svg", - "chrome/browser/content/browser/logos/fxa-logo.svg", - "chrome/browser/content/browser/logos/ipprotection-error.svg", - "chrome/browser/content/browser/logos/ipprotection-excluded.svg", - "chrome/browser/content/browser/logos/ipprotection-info.svg", - "chrome/browser/content/browser/logos/ipprotection-off.svg", - "chrome/browser/content/browser/logos/ipprotection-on.svg", - "chrome/browser/content/browser/logos/ipprotection-paused.svg", "chrome/browser/content/browser/logos/lockwise.svg", "chrome/browser/content/browser/logos/monitor.svg", "chrome/browser/content/browser/logos/passkey.svg", + "chrome/browser/content/browser/logos/relay-monochrome.svg", "chrome/browser/content/browser/logos/relay.svg", "chrome/browser/content/browser/logos/send.svg", + "chrome/browser/content/browser/logos/share-firefox.svg", "chrome/browser/content/browser/logos/tracking-protection-dark-theme.svg", "chrome/browser/content/browser/logos/tracking-protection.svg", "chrome/browser/content/browser/logos/vpn-promo-logo.svg", @@ -571,6 +623,7 @@ "chrome/browser/content/browser/monitor-card.mjs", "chrome/browser/content/browser/multilineeditor/multiline-editor.css", "chrome/browser/content/browser/multilineeditor/multiline-editor.mjs", + "chrome/browser/content/browser/multilineeditor/plugins/CommandsPlugin.mjs", "chrome/browser/content/browser/multilineeditor/plugins/MentionsPlugin.mjs", "chrome/browser/content/browser/multilineeditor/prosemirror.bundle.mjs", "chrome/browser/content/browser/multilineeditor/prosemirror.css", @@ -611,6 +664,8 @@ "chrome/browser/content/browser/parent/ext-topSites.js", "chrome/browser/content/browser/parent/ext-url-overrides.js", "chrome/browser/content/browser/parent/ext-windows.js", + "chrome/browser/content/browser/passwordmgr/login-doorhanger-username-field.css", + "chrome/browser/content/browser/passwordmgr/login-doorhanger-username-field.mjs", "chrome/browser/content/browser/places/bookmarkProperties.js", "chrome/browser/content/browser/places/bookmarkProperties.xhtml", "chrome/browser/content/browser/places/bookmarksSidebar.js", @@ -640,6 +695,8 @@ "chrome/browser/content/browser/policies/policies-active.svg", "chrome/browser/content/browser/policies/policies-documentation.svg", "chrome/browser/content/browser/policies/policies-error.svg", + "chrome/browser/content/browser/preferences/DefaultBrowserHelper.mjs", + "chrome/browser/content/browser/preferences/FocusHistory.mjs", "chrome/browser/content/browser/preferences/OnDeviceModelManager.mjs", "chrome/browser/content/browser/preferences/browser-layout-horizontal.svg", "chrome/browser/content/browser/preferences/browser-layout-vertical.svg", @@ -652,6 +709,8 @@ "chrome/browser/content/browser/preferences/config/aiFeatures.mjs", "chrome/browser/content/browser/preferences/config/appearance.mjs", "chrome/browser/content/browser/preferences/config/block-ai-confirmation-dialog.css", + "chrome/browser/content/browser/preferences/config/browser-icon.mjs", + "chrome/browser/content/browser/preferences/config/containers.mjs", "chrome/browser/content/browser/preferences/config/downloads.mjs", "chrome/browser/content/browser/preferences/config/firefoxLabs.mjs", "chrome/browser/content/browser/preferences/config/home-startup.mjs", @@ -663,7 +722,6 @@ "chrome/browser/content/browser/preferences/config/search.mjs", "chrome/browser/content/browser/preferences/config/tabs-browsing.mjs", "chrome/browser/content/browser/preferences/config/translations.mjs", - "chrome/browser/content/browser/preferences/containers.js", "chrome/browser/content/browser/preferences/dialogs/applicationManager.js", "chrome/browser/content/browser/preferences/dialogs/applicationManager.xhtml", "chrome/browser/content/browser/preferences/dialogs/browserLanguages.js", @@ -686,6 +744,8 @@ "chrome/browser/content/browser/preferences/dialogs/permissions.xhtml", "chrome/browser/content/browser/preferences/dialogs/selectBookmark.js", "chrome/browser/content/browser/preferences/dialogs/selectBookmark.xhtml", + "chrome/browser/content/browser/preferences/dialogs/siteContainer.js", + "chrome/browser/content/browser/preferences/dialogs/siteContainer.xhtml", "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.js", "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.xhtml", "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.js", @@ -704,7 +764,6 @@ "chrome/browser/content/browser/preferences/fxaPairDevice.xhtml", "chrome/browser/content/browser/preferences/home.js", "chrome/browser/content/browser/preferences/main.js", - "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg", "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple.svg", "chrome/browser/content/browser/preferences/moreFromMozilla.js", "chrome/browser/content/browser/preferences/preferences.js", @@ -865,6 +924,8 @@ "chrome/browser/content/browser/profiles/assets/80_sparkle-single.svg", "chrome/browser/content/browser/profiles/assets/80_star.svg", "chrome/browser/content/browser/profiles/assets/80_video-game-controller.svg", + "chrome/browser/content/browser/profiles/assets/kit-profiles-dark.svg", + "chrome/browser/content/browser/profiles/assets/kit-profiles-light.svg", "chrome/browser/content/browser/profiles/assets/plus.svg", "chrome/browser/content/browser/profiles/assets/profilesBackground0.svg", "chrome/browser/content/browser/profiles/assets/profilesBackground1.svg", @@ -948,11 +1009,19 @@ "chrome/browser/content/browser/search/addEngine.xhtml", "chrome/browser/content/browser/search/autocomplete-popup.js", "chrome/browser/content/browser/search/searchbar.js", - "chrome/browser/content/browser/security/unexpectedScriptLoad.css", - "chrome/browser/content/browser/security/unexpectedScriptLoad.js", - "chrome/browser/content/browser/security/unexpectedScriptLoad.xhtml", "chrome/browser/content/browser/setDesktopBackground.js", "chrome/browser/content/browser/setDesktopBackground.xhtml", + "chrome/browser/content/browser/sharing/background-dark.svg", + "chrome/browser/content/browser/sharing/background-light.svg", + "chrome/browser/content/browser/sharing/content-sharing-icon.svg", + "chrome/browser/content/browser/sharing/content-sharing-modal.css", + "chrome/browser/content/browser/sharing/content-sharing-modal.mjs", + "chrome/browser/content/browser/sharing/contentSharingModal.xhtml", + "chrome/browser/content/browser/sharing/contentsharing.schema.json", + "chrome/browser/content/browser/sharing/copy-link.svg", + "chrome/browser/content/browser/sharing/mail.svg", + "chrome/browser/content/browser/sharing/qr-code.svg", + "chrome/browser/content/browser/sharing/share-alt.svg", "chrome/browser/content/browser/sidebar/browser-sidebar.js", "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.css", "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.mjs", @@ -966,9 +1035,16 @@ "chrome/browser/content/browser/sidebar/sidebar-history.mjs", "chrome/browser/content/browser/sidebar/sidebar-main.css", "chrome/browser/content/browser/sidebar/sidebar-main.mjs", + "chrome/browser/content/browser/sidebar/sidebar-opentabs-preview.css", + "chrome/browser/content/browser/sidebar/sidebar-opentabs-preview.mjs", + "chrome/browser/content/browser/sidebar/sidebar-opentabs.css", + "chrome/browser/content/browser/sidebar/sidebar-opentabs.html", + "chrome/browser/content/browser/sidebar/sidebar-opentabs.mjs", "chrome/browser/content/browser/sidebar/sidebar-page.mjs", "chrome/browser/content/browser/sidebar/sidebar-panel-header.css", "chrome/browser/content/browser/sidebar/sidebar-panel-header.mjs", + "chrome/browser/content/browser/sidebar/sidebar-panel-switcher.css", + "chrome/browser/content/browser/sidebar/sidebar-panel-switcher.mjs", "chrome/browser/content/browser/sidebar/sidebar-permissions-ui.mjs", "chrome/browser/content/browser/sidebar/sidebar-permissions.mjs", "chrome/browser/content/browser/sidebar/sidebar-pins-promo.css", @@ -993,10 +1069,12 @@ "chrome/browser/content/browser/tabbrowser/opentabs.css", "chrome/browser/content/browser/tabbrowser/opentabs.html", "chrome/browser/content/browser/tabbrowser/split-view-footer.js", + "chrome/browser/content/browser/tabbrowser/status-panel.js", + "chrome/browser/content/browser/tabbrowser/tab-bar-visibility.js", + "chrome/browser/content/browser/tabbrowser/tab-context-menu.js", "chrome/browser/content/browser/tabbrowser/tab-groups-list.mjs", "chrome/browser/content/browser/tabbrowser/tab-hover-preview.mjs", "chrome/browser/content/browser/tabbrowser/tab.js", - "chrome/browser/content/browser/tabbrowser/tabbrowser.js", "chrome/browser/content/browser/tabbrowser/tabgroup-menu.js", "chrome/browser/content/browser/tabbrowser/tabgroup.js", "chrome/browser/content/browser/tabbrowser/tabnote-menu.js", @@ -1012,11 +1090,30 @@ "chrome/browser/content/browser/translations/TranslationsPanelShared.sys.mjs", "chrome/browser/content/browser/translations/fullPageTranslationsPanel.js", "chrome/browser/content/browser/translations/selectTranslationsPanel.js", + "chrome/browser/content/browser/urlbar/L10nCache.mjs", + "chrome/browser/content/browser/urlbar/SearchEngineStore.mjs", "chrome/browser/content/browser/urlbar/SearchModeSwitcher.mjs", + "chrome/browser/content/browser/urlbar/SearchbarInput.mjs", "chrome/browser/content/browser/urlbar/SmartbarInput.mjs", "chrome/browser/content/browser/urlbar/SmartbarInputController.mjs", "chrome/browser/content/browser/urlbar/SmartbarInputUtils.mjs", + "chrome/browser/content/browser/urlbar/UrlbarChildController.mjs", + "chrome/browser/content/browser/urlbar/UrlbarChildTelemetry.mjs", + "chrome/browser/content/browser/urlbar/UrlbarContentPrefs.mjs", + "chrome/browser/content/browser/urlbar/UrlbarContentUtils.mjs", + "chrome/browser/content/browser/urlbar/UrlbarEventBufferer.mjs", "chrome/browser/content/browser/urlbar/UrlbarInput.mjs", + "chrome/browser/content/browser/urlbar/UrlbarInputBase.mjs", + "chrome/browser/content/browser/urlbar/UrlbarParentControllerProxy.mjs", + "chrome/browser/content/browser/urlbar/UrlbarQueryContext.mjs", + "chrome/browser/content/browser/urlbar/UrlbarResult.mjs", + "chrome/browser/content/browser/urlbar/UrlbarShared.mjs", + "chrome/browser/content/browser/urlbar/UrlbarTelemetryUtils.mjs", + "chrome/browser/content/browser/urlbar/UrlbarView.mjs", + "chrome/browser/content/browser/usercontext/ContainerCreationPanel.mjs", + "chrome/browser/content/browser/usercontext/ContainerEditor.mjs", + "chrome/browser/content/browser/usercontext/container-select.css", + "chrome/browser/content/browser/usercontext/container-select.mjs", "chrome/browser/content/browser/usercontext/usercontext.css", "chrome/browser/content/browser/utilityOverlay.js", "chrome/browser/content/browser/vpn-card.mjs", @@ -1036,6 +1133,7 @@ "files": [ "chrome/devtools/modules/devtools/client/jsonview/css/general.css", "chrome/devtools/modules/devtools/client/jsonview/css/headers-panel.css", + "chrome/devtools/modules/devtools/client/jsonview/css/json-breadcrumb.css", "chrome/devtools/modules/devtools/client/jsonview/css/json-panel.css", "chrome/devtools/modules/devtools/client/jsonview/css/main.css", "chrome/devtools/modules/devtools/client/jsonview/css/search-box.css", @@ -1054,9 +1152,6 @@ }, "browser/omni.ja|resource|builtin-addons": { "files": [ - "chrome/browser/builtin-addons/data-leak-blocker/api.js", - "chrome/browser/builtin-addons/data-leak-blocker/manifest.json", - "chrome/browser/builtin-addons/data-leak-blocker/schema.json", "chrome/browser/builtin-addons/formautofill/api.js", "chrome/browser/builtin-addons/formautofill/background.js", "chrome/browser/builtin-addons/formautofill/content/addressFormLayout.mjs", @@ -1066,6 +1161,8 @@ "chrome/browser/builtin-addons/formautofill/content/editCreditCard.mjs", "chrome/browser/builtin-addons/formautofill/content/editCreditCard.xhtml", "chrome/browser/builtin-addons/formautofill/content/editDialog.mjs", + "chrome/browser/builtin-addons/formautofill/content/editPassport.mjs", + "chrome/browser/builtin-addons/formautofill/content/editPassport.xhtml", "chrome/browser/builtin-addons/formautofill/content/formautofill.css", "chrome/browser/builtin-addons/formautofill/content/formfill-anchor.svg", "chrome/browser/builtin-addons/formautofill/content/icon-credit-card-generic.svg", @@ -1078,6 +1175,7 @@ "chrome/browser/builtin-addons/formautofill/content/skin/editAddress.css", "chrome/browser/builtin-addons/formautofill/content/skin/editCreditCard.css", "chrome/browser/builtin-addons/formautofill/content/skin/editDialog-shared.css", + "chrome/browser/builtin-addons/formautofill/content/skin/editPassport.css", "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-amex.png", "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-amex@2x.png", "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-cartebancaire.png", @@ -1109,7 +1207,9 @@ "chrome/browser/builtin-addons/ipp-activator/conditions/vpn.js", "chrome/browser/builtin-addons/ipp-activator/manifest.json", "chrome/browser/builtin-addons/newtab/common/Actions.mjs", + "chrome/browser/builtin-addons/newtab/common/PageLayoutVariants.mjs", "chrome/browser/builtin-addons/newtab/common/Reducers.sys.mjs", + "chrome/browser/builtin-addons/newtab/common/StocksWatchlist.mjs", "chrome/browser/builtin-addons/newtab/common/WidgetsRegistry.mjs", "chrome/browser/builtin-addons/newtab/data/content/abouthomecache/page.html.template", "chrome/browser/builtin-addons/newtab/data/content/abouthomecache/script.js.template", @@ -1125,10 +1225,15 @@ "chrome/browser/builtin-addons/newtab/data/data/content/assets/download-qr-code-var-a.png", "chrome/browser/builtin-addons/newtab/data/data/content/assets/download-qr-code-var-b.png", "chrome/browser/builtin-addons/newtab/data/data/content/assets/download-qr-code-var-c.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-heart-dark-narrow.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-heart-dark-responsive.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-heart-dark.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-heart-light-narrow.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-heart-light-responsive.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-heart-light.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-paintbucket-rgb.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-motion-head-pop-up-no-bg.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/foxtail-goal.png", "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-add-circle-fill-16.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-info-critical-16.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-mail-16.svg", @@ -1140,15 +1245,20 @@ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-pin-16.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-unpin-16.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-webextension-16.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/feature-callout-tail-dark.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/feature-callout-tail-hcm.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/feature-callout-tail.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/firefox-mascot-prop-paintbucket-rgb.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/firefox-wallpaper-desktop-hills-light-rgb.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/omc-newtab-follow.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/omc-newtab-shortcuts.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/omc-newtab-wallpapers.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/wallpaper-callout.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/widget-non-worldcup.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/widget-survey.webp", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/widget-worldcup.png", "chrome/browser/builtin-addons/newtab/data/data/content/assets/icon-removed-bookmark.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-champion.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-champion.webm", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-circle-animated.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-default.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-default.webm", "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-in-circle.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit.png", "chrome/browser/builtin-addons/newtab/data/data/content/assets/lists-empty-state-comet.svg", @@ -1157,9 +1267,8 @@ "chrome/browser/builtin-addons/newtab/data/data/content/assets/lists-empty-state-nova.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/pocket-swoosh.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/puzzle-fox.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/shaft-arrow-left.svg", - "chrome/browser/builtin-addons/newtab/data/data/content/assets/shaft-arrow-right.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/spinner.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpaper-landscape-planet.svg", "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-beach.avif", "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-color.avif", "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-landscape.avif", @@ -1173,6 +1282,19 @@ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-panda.avif", "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-sky.avif", "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-message.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-bolt.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-etp-off.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-kit.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-planet.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-shield-check.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-shield.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-privacy-star.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/widgets-cta.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/world-cup-widgets-cta.svg", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/worldcup-large.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/worldcup-large.webm", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/worldcup-medium.png", + "chrome/browser/builtin-addons/newtab/data/data/content/assets/worldcup-medium.webm", "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/ASRouterNewTabMessageChild.sys.mjs", "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/ASRouterNewTabMessageParent.sys.mjs", "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/asrouter-newtab-message.css", @@ -1183,6 +1305,7 @@ "chrome/browser/builtin-addons/newtab/lib/ActivityStream.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/ActivityStreamMessageChannel.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/ActivityStreamPrefs.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/AdsClient.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/AdsFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/DefaultSites.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/DiscoveryStreamFeed.sys.mjs", @@ -1223,12 +1346,17 @@ "chrome/browser/builtin-addons/newtab/lib/TemporaryMerinoClientShim.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/TopSitesFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/TopStoriesFeed.sys.mjs", - "chrome/browser/builtin-addons/newtab/lib/UTEventReporting.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/Wallpapers/WallpaperThemeUtils.mjs", "chrome/browser/builtin-addons/newtab/lib/WeatherFeed.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/WebNotificationsFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/Widgets/ListsFeed.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/Widgets/PictureOfTheDayFeed.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/Widgets/PrivacyFeed.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/Widgets/PrivacyMessages.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/Widgets/RecentSearchesFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/Widgets/SportsFeed.sys.mjs", + "chrome/browser/builtin-addons/newtab/lib/Widgets/StocksFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/Widgets/TimerFeed.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/actors/MozNewTabRemoteRendererProtocolParent.sys.mjs", "chrome/browser/builtin-addons/newtab/lib/actors/NewTabAttributionChild.sys.mjs", @@ -1248,6 +1376,7 @@ "chrome/browser/builtin-addons/pictureinpicture/run.js", "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/airmozilla.js", "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/apple.js", + "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/ardmediathek.js", "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/bbc.js", "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/canalplus.js", "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/cbc.js", @@ -1289,31 +1418,30 @@ "chrome/browser/builtin-addons/webcompat/about-compat/aboutPage.js", "chrome/browser/builtin-addons/webcompat/about-compat/aboutPage.json", "chrome/browser/builtin-addons/webcompat/about-compat/aboutPageProcessScript.js", + "chrome/browser/builtin-addons/webcompat/data/interventions/1081239-cmbchina.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1280834-bankofamerica.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1287715-littlealchemy2.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1385206-rakuten.co.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1448747-FastClick_breakage.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1457335-histography.io.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1472075-bankofamerica.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1509873-zmags.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1570108-steamcommunity.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1574522-enuri.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1574564-ceskatelevize.cz.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1575000-apply.lloydsbank.co.uk.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1577519-directv.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1579159-m.tailieu.vn.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1582582-watch.sling.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1598198-galaxy.store.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1610026-www.mobilesuica.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1610046-diverse.direct.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1610344-directv.com.co.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1622063-wp1-ext.usps.gov.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1644830-usps.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1646791-santanderbank.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1651292-www.jp.square-enix.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1666754-lffl.org.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1665720-lffl.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1704673-app.xiaomi.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1709653-Office_365_email_handling_prompt.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1712807-www.dealnews.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1718366-smugmug.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1719859-saxoinvestor.fr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1724868-news.yahoo.co.jp.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1728450-directv.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1729435-milkbarstore.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1741234-patient.alphalabs.ca.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1743429-Sites_with_issues_with_Firefox_versions_over_99.json", @@ -1333,28 +1461,11 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1800880-clipchamp.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1813177-rbi.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1815733-Office_365_Outlook_locations.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1815836-All_international_Nintendo_domains.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1818818-FastClick_breakage_legacy.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1819450-cmbchina.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1823966-elearning.dmv.ca.gov.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_119402-oirsa.org.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_120450-onp.cloud.waterloo.ca.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_65753-admissions.nid.edu.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_68007-frankfred.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_68520-onvue.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_68635-avizia.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_76785-www.yourtexasbenefits.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_77727-www.free4talk.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_77912-watch.indee.tv.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_80180-viewer-ebook.books.com.tw.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1823785-elearning.dmv.ca.gov.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1830307-cnn.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1830739-Casino_sites.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1830796-copyleaks.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1830821_113663-webcartop.jp.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1830821_90981-enjoy.point.auone.jp.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1831007-All_international_Nintendo_domains.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1836105-cnn.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1836109-watch.tonton.com.my.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1836135-gts-pro.iyuno.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1836178-atracker.pro.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1836872-docs.google.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1841730-www.korg.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1842437-YouTube_back_forward_fix.json", @@ -1363,12 +1474,9 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1847971-ebay.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1848849-theaa.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1850998-chaturbate.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1854165-Sites_relying_on_there_being_no_window.InstallTrigger.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1855014-eksiseyler.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1855088-hrmis2.eghrmis.gov.my.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1855102-my.southerncross.co.nz.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1859617-Sites_relying_on_there_being_no_window.InstallTrigger.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1860417-www.samsung.com_images_fix.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1865000-bmo.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1865004-digimart.net.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1865007-portal.circle.ms.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1873166-nsandi.com.json", @@ -1377,14 +1485,14 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1886293-Future_PLC_websites.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1886566-quezoncity.gov.ph.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1886616-www.six-group.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1889326-Office_365_email_handling_prompt.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1889505-bankmandiri.co.id.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1889520-avizia.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1891016-usps.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1892073-snapchat.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1893908-www.1blv.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1894308-dingtalk.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1895051-www.zhihu.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1895672-hackgreensdr.org_and_websdr.78dx.ru.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1895997-e.seb.lt.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1896349-vivaldi.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1896354-my.rhinoshield.fr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1896361-Meta_Messenger.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1896424-meet.google.com_legacy_group_calls_exploratory.json", @@ -1399,32 +1507,45 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1898915-locator.dhl.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898916-smartmirror.link.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898917-sekowf.wns.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898919-bmo.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898923-trade-in.vodafone.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898926-dgslms.aduacademy.in.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898929-app.sessionlinkpro.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898930-hrmis2.eghrmis.gov.my.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898931-facturador.afip.gob.ar.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898932-account.gov.il.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898934-tza.red.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1898935-mysunlife.sunlife.com.hk.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898936-app.stormx.io.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898937-goodyearfiaetrc.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898938-conference.amwell.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898939-smartgpseco.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898940-my.southerncross.co.nz.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898941-events.webinar.ru.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898943-carelink.minimed.eu.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898946-transcrib.io.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898947-onp.cloud.waterloo.ca.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898949-my.murj.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898951-hexagame.io.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898952-digits.t-mobile.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898953-oirsa.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898960-hrm.online.comarch.pl.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898963-england.nhs.attendanywhere.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898970-watch.tonton.com.my.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1898978-gts-pro.iyuno.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898983-elibrary.ferc.gov.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898988-prudential.com.hk.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898989-mymsc.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1898996-oculus.com_and_meta.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899047-enjoy.point.auone.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1899049-bcbs.pinpointglobal.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899052-watch.indee.tv.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899053-www.free4talk.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1899054-icorrectproof.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899055-www.yourtexasbenefits.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899057-onvue.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899059-bankmandiri.co.id.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1899060-wbte.drcedirect.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1899061-admissions.nid.edu.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1899063-onlinestep.pgc.edu.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1899066-bookcreator.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1899067-game.granbluefantasy.jp.json", @@ -1480,12 +1601,19 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1902520-www.keisan.nta.go.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1902527-app.gather.town.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1903480-ace7.acecombat.jp.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1903659-web.telegram.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1904141-mega.nz.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1904371-viewer-ebook.books.com.tw.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1904411-frankfred.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1904412-steamcommunity.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1904417-watch.sling.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1905069-one.geekie.com.br.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1905235-atracker.pro.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1905607-10play.com.au.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1905885-playlist-manager.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1906630-watch.foxtel.com.au.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1908636-xmgl.ccccltd.cn.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1910292-ssd.skhynix.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1911243-tsu-results.rf.gd.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1911253-qq.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1912923-class.com.json", @@ -1499,7 +1627,6 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1916900-vuemotion.santacasaba.org.br.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1918604-g1.globo.com_Caca_Palavras.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1918995-calculator.net.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1919004-www.editoracontexto.com.br.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1919263-www.nbcsports.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1922498-ilgeniodellapizza.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1923656-ipmph.com.json", @@ -1510,25 +1637,26 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1926564-app.phase.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1928605-votermaps.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1928941-oasis.decart.ai.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1930440-online.singaporepools.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1931538-buzzfeed.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1933169-next.goalplan.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1933910-www.tiktok.com_tiktokstudio.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1933929-toei-anim.co.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1934189-fdj.fr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1934518-app.fullcodemedical.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1934534-thnet.gov.cn.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1934567-port8.fi.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1934908-www.cbsnews.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1935598-testbook.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1936429-diadora.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1939248-rosasthai.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1939697-paypal.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1941530-climate.rutgers.edu.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1940173-bambulab.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1942292-beterbed.nl.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1943289-livestorm.co.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1943898-www.capital.gr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1943987-andisearch.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1943993-arenti.net.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1944039-webcartop.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1944219-zoom.us.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1944518-app.powerbi.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1944727-linkedin.com.json", @@ -1570,18 +1698,16 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/1966330-salling.dk.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1966377-nvidia.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1966585-hiskin.care.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1967694-onlyfaucet.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1968187-authface.liquid-auth.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1970810-camper-van-week-end.fr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1972511-cmyportal.tkc.co.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1973019-mitsukoshi.mistore.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1973976-iweather.gov.vn.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1974686-hermes.admin.ch.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1975651-comic.k-manga.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1975652-gree.jp.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/1975926-kuruma-news.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1975927-trafficnews.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1977195-wattpad.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/1977440-firesmoke.ca.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1978572-store.renishaw.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1980129-app.simplenote.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/1980382-www.fidrec.com.sg.json", @@ -1626,11 +1752,12 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/2004679-paybill.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2005520-portal.adtpulse.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2006036-fbo.fubon.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/2007641-papajohns.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/2008115-pge.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2009174-otr.oregon.gov.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2009187-deadpixeltest.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2009358-stgguaiba.com.br.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2009375-hrd.rda.go.kr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2009380-circuitdesremparts.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2009389-anyto.imyfone.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2010102-osmosis.org.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2010794-ipn2.paymentus.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2011819-ogcrush.com.json", @@ -1642,26 +1769,65 @@ "chrome/browser/builtin-addons/webcompat/data/interventions/2013856-4gamer.net.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2013906-tibi.be.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2014713-javalab.org.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2015406-tiktok.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2015723-bchydro.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2015962-usbank.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2016030-prodamus.ru.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2018641-cloudplay.jiogames.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2018892-museumofpragueai.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/2019231-setmore.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2019543-showroom-live.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2019545-www.gdm.or.jp.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2020285-Eurocontrol_Network_Operations_Portal.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2020644-catalog.archives.gov.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2021019-rudder.taleez.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2021850-aladhan.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2023905-clw.westminster.gov.uk.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2024684-gueval2.digimoolyankan.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2025249-infyspringboard.onwingspan.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2029246-discord.com.json", - "chrome/browser/builtin-addons/webcompat/data/interventions/2031600-indeed.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2029349-form.cellosign.co.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2029563-shop.fratellilunardi.it.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2031646-www.interview.micro1.ai.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2031974-www.ozon.ru.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2032348-www.av-connection.dk.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2032364-sirhus.dsi.cnrs.fr.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2034355-rok.lilith.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2034409-www.wanyiwan.top.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2035485-ncvtmis.gov.in.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2038076-alaskawifi.com.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2038180-geforcenow.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2038272-wowow.co.jp.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2039268-mms.pinduoduo.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2040371-keywords.smarthr.jp.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2041215-vitra.com.tr.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2042797-ftiunpam.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2043670-mz-denmark.eu5.alta.avigilon.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2044279-hallway.ai.json", "chrome/browser/builtin-addons/webcompat/data/interventions/2044288-www.kuaishou.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2044337-www.okini.net.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2044341-digital.alinmacapital.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2044652-iqconnect.house.gov.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2044729-global.playtoa.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2045679-ebok.citylink.pl.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2045731-resultadosegundavuelta.onpe.gob.pe.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2046741-mylabmastering.pearson.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2049641-las.cnas.org.cn.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2051291-customers.extend.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2051501-community.acer.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2051521-nailsolutionplus.firebaseapp.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2052823-payback.de.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2053077-jobs.abbott.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2054006-gofilee.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2055536-bateaux.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2056260-waimaie.meituan.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2056920_my.younify.tv.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2057149-patreon.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2057493-middleboroughpolice.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2058162-the-image-editor.com.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2059742-13coins.toast.site.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2060224-alreadyordered.no.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2060611-youtube.com_background-video-playback.json", + "chrome/browser/builtin-addons/webcompat/data/interventions/2060760_fwicloud.com.json", "chrome/browser/builtin-addons/webcompat/data/shims.js", "chrome/browser/builtin-addons/webcompat/experiment-apis/aboutConfigPrefs.js", "chrome/browser/builtin-addons/webcompat/experiment-apis/aboutConfigPrefs.json", @@ -1677,13 +1843,14 @@ "chrome/browser/builtin-addons/webcompat/experiment-apis/trackingProtection.json", "chrome/browser/builtin-addons/webcompat/experiment-apis/urlHelpers.js", "chrome/browser/builtin-addons/webcompat/experiment-apis/urlHelpers.json", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1081239-cmbchina.com.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1280834-bankofamerica.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1448747-FastClick_breakage.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1457335-histography.io.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1472075-bankofamerica.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1575000-apply.lloydsbank.co.uk-fix_misaligned_radio_buttons.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1579159-m.tailieu.vn.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1610046-diverse.direct-fix_image_flickering.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1610344-directv.com.co-hide_browser_notice.css", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1644830-usps.com-fix_terms_and_conditions_checkboxes.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1709653-Office_365_email_handling_prompt.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1718366-smugmug.com-fix_image_flickering.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1724868-news.yahoo.co.jp-1.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1724868-news.yahoo.co.jp.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1729435-milkbarstore.com-fix_cart_quantities.css", @@ -1694,27 +1861,22 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1779908-play.google.com-hide_extra_scrollbars.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1799968-www.samsung.com_scrolling_fix.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1815733-Office_365_Outlook_locations.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1815836-All_international_Nintendo_domains.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1818818-FastClick_breakage_legacy.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1819450-cmbchina.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1827678_77727-www.free4talk.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1830796-copyleaks.com-hide_browser_notice.css", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1831007-All_international_Nintendo_domains.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1836105-cnn.com-fix_blank_pages_when_printing.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1830307-cnn.com-fix_blank_pages_when_printing.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1836872-docs.google.com-fix_inaccessible_menus.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1841730-www.korg.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1842437-YouTube_back_forward_fix.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1845299-Google_Slides-hide_extra_scrollbars.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1848849-theaa.com-fix_blank_print_preview.css", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1859617-Sites_relying_on_there_being_no_window.InstallTrigger.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1854165-Sites_relying_on_there_being_no_window.InstallTrigger.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1860417-www.samsung.com_images_fix.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1873166-nsandi.com-hide_browser_notice.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1886293-Future_PLC_websites-fix_trending_scrollbar.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1886566-quezoncity.gov.ph-fix_invisible_iframe.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1886616-www.six-group.com-unhide_selected_inputs.css", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1889326-Office_365_email_handling_prompt.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1889505-bankmandiri.co.id.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1891016-usps.com-fix_terms_and_conditions_checkboxes.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1895051-www.zhihu.com-fix_unclickable_directory_buttons.css", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1896349-vivaldi.com-unhide-text-selections.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1896571-gracobaby.ca-unlock-scrolling.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898915-locator.dhl.com-hide_browser_notice.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898929-app.sessionlinkpro.com.js", @@ -1723,7 +1885,9 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898952-digits.t-mobile.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898983-elibrary.ferc.gov.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898996-oculus.com_and_meta.com.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899053-www.free4talk.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899054-icorrectproof.com.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899059-bankmandiri.co.id.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899063-onlinestep.pgc.edu-hide_browser_notice.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899829-animeflv.net-fix-premiere-labels.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899930-africanews.com-hide_browser_notice.css", @@ -1735,12 +1899,13 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902405-soffice.11st.co.kr-hide_browser_notice.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902406-sp.hi.co.kr.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902407-www.sigadoc.mt.gov.br.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902415-kaigetsu.staysee.jp-hide_browser_notice.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902415-kaigetsu.staysee.jp.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902416-acionafacil.com.br.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902419-jamsune.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902520-www.keisan.nta.go.jp.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1903480-ace7.acecombat.jp.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1905069-one.geekie.com.br.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1910292-ssd.skhynix.com-fix_image_flickering.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1911243-tsu-results.rf.gd-fix-table-headers.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1911253-qq.com-unhide-checkboxes.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1913668-workbench.researchallofus.org-hide-browser-notice.css", @@ -1752,13 +1917,13 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1925508-developer.apple.com-fallback_for_css_zoom.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1928605-votermaps.org-center-map-icons.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1928941-oasis.decart.ai.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1930440-online.singaporepools.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1931538-buzzfeed.com-card_game_fix.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1934534-thnet.gov.cn.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1934567-port8.fi-fix_scrolling.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1934908-www.cbsnews.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1936429-diadora.com-hide-extra-scrollbars.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1939248-rosasthai.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1941530-climate.rutgers.edu-fix-broken-images.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1940173-bambulab.com-fix_image_flickering.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1942292-beterbed.nl-hide_extra_scrollbars.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1943987-andisearch.com-fix-offscreen-elements.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1944518-app.powerbi.com-hide_extra_scrollbars.css", @@ -1786,8 +1951,8 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1966585-hiskin.care-unhide_missing_content.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1970810-camper-van-week-end.fr.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1973976-iweather.gov.vn-fix_narrow_interface.css", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug1974686-hermes.admin.ch-fix_overlapping_table_cells.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1975651-comic.k-manga.jp.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug1977440-firesmoke.ca-fix_image_flickering.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1978572-store.renishaw.com-fix_range_sliders.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1980382-www.fidrec.com.sg-fix_radio_buttons.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug1981995-mygeha.com-fix_location_section_layout.css", @@ -1810,9 +1975,9 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2004610-character.ai-fix_broken_italics.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2005520-portal.adtpulse.com-hide_browser_notice.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2006036-fbo.fubon.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug2007641-papajohns.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug2008115-pge.com-hide_browser_notice.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2009187-deadpixeltest.org-fix_popup_position.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2009358-stgguaiba.com.br-fix_table_layout.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2009389-anyto.imyfone.com-fix_table_of_contents_height.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2010102-osmosis.org-center_pages.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2011819-ogcrush.com-fix_slick_slide_height.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2011862-copilot.zenwork.com.js", @@ -1820,17 +1985,30 @@ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2012708-myordbok.com-fix_layout.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2012760-snowplowmap.a2gov.org-fix_ticker_performance.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2012789-zoopla.co.uk.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2015406-tiktok.com-fix_reply_button.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2015962-usbank.com-fix_minimum_font_size.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2016030-prodamus.ru-fix_hidden_content.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2018892-museumofpragueai.com-hide_mic_icon.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2018892-museumofpragueai.com.js", - "chrome/browser/builtin-addons/webcompat/injections/generated/bug2019231-setmore.com.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2020285-Eurocontrol_Network_Operations_Portal.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2021019-rudder.taleez.com-fix_overlapping_content.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2025249-infyspringboard.onwingspan.com-hide_browser_notice.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2029246-discord.com-fix_scrollbars.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2031646-www.interview.micro1.ai.js", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2034409-www.wanyiwan.top.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2038272-wowow.co.jp-fix_partly_offscreen_searchbar.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2040371-keywords.smarthr.jp-hide_browser_notice.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2041215-vitra.com.tr-fix_zero_width_product_images.css", "chrome/browser/builtin-addons/webcompat/injections/generated/bug2044288-www.kuaishou.com-fix_missing_video_thumbnails.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2045731-resultadosegundavuelta.onpe.gob.pe.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2046741-mylabmastering.pearson.com-hide_unsupported_modal.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2051291-customers.extend-hide_preloader.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2051501-community.acer.com-fix_clipped_tables.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2053077-jobs.abbott-restore_otp_inputs.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2057149-patreon.com.js", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2058162-the-image-editor.com-allow_body_scrollbar.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2059742-13coins.toast.site-vertically_shrink_menuitems.css", + "chrome/browser/builtin-addons/webcompat/injections/generated/bug2060224-alreadyordered.no.js", "chrome/browser/builtin-addons/webcompat/injections/js/add_chrome_to_useragent.js", "chrome/browser/builtin-addons/webcompat/injections/js/add_samsung_to_useragent.js", "chrome/browser/builtin-addons/webcompat/injections/js/bug1287715-littlealchemy2.com-fix-audio-race-condition.js", @@ -1847,8 +2025,12 @@ "chrome/browser/builtin-addons/webcompat/injections/js/bug1956165-www.youtube.com-picture-in-picture-fix.js", "chrome/browser/builtin-addons/webcompat/injections/js/bug1994562-shim-mstp-mstg-on-window.js", "chrome/browser/builtin-addons/webcompat/injections/js/bug1999198-anime-bit.ru-fix-broken-scrolling.js", + "chrome/browser/builtin-addons/webcompat/injections/js/bug2020644-catalog.archives.gov-change-array-sort-behavior.js", + "chrome/browser/builtin-addons/webcompat/injections/js/bug2021850-aladhan.com-unblock-fetch-requests.js", "chrome/browser/builtin-addons/webcompat/injections/js/bug2034355-rok.lilith.com-prevent-blank-page.js", "chrome/browser/builtin-addons/webcompat/injections/js/bug2038180-shim-keyboard-lock.js", + "chrome/browser/builtin-addons/webcompat/injections/js/bug2044652-iqconnect.house.gov-fix-forms.js", + "chrome/browser/builtin-addons/webcompat/injections/js/bug2060611-youtube.com-background-video-playback.js", "chrome/browser/builtin-addons/webcompat/injections/js/clear_navigator_plugins.js", "chrome/browser/builtin-addons/webcompat/injections/js/deduplicate_registerProtocolHandler.js", "chrome/browser/builtin-addons/webcompat/injections/js/define_InstallTrigger.js", @@ -1879,6 +2061,7 @@ "chrome/browser/builtin-addons/webcompat/injections/js/round_pageYOffset.js", "chrome/browser/builtin-addons/webcompat/injections/js/run_late_window_load_listeners.js", "chrome/browser/builtin-addons/webcompat/injections/js/slow_down_wheel_events.js", + "chrome/browser/builtin-addons/webcompat/injections/js/speed_up_wheel_events.js", "chrome/browser/builtin-addons/webcompat/injections/js/spoof_as_windows.js", "chrome/browser/builtin-addons/webcompat/injections/js/support_nonstandard_timezones.js", "chrome/browser/builtin-addons/webcompat/injections/js/undefine_InstallTrigger.js", @@ -1992,1049 +2175,22 @@ }, "browser/omni.ja|resource|usercontext-content": { "files": [ - "chrome/browser/content/activity-stream/data/content/assets/br-amo-fox-paint.svg", - "chrome/browser/content/activity-stream/data/content/assets/br-fxa-fox-mirror.svg", - "chrome/browser/content/activity-stream/data/content/assets/br-gratitude-fox-rock.svg", - "chrome/browser/content/activity-stream/data/content/assets/br-import-fox-house.svg", - "chrome/browser/content/activity-stream/data/content/assets/br-set-default-fox-heart.svg", - "chrome/browser/content/activity-stream/data/content/assets/confetti.svg", - "chrome/browser/content/activity-stream/data/content/assets/device-migration.svg", - "chrome/browser/content/activity-stream/data/content/assets/euo-chatbot.svg", - "chrome/browser/content/activity-stream/data/content/assets/euo-tab-orientation.svg", - "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup-restore.svg", - "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup.svg", - "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-tail.png", - "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving-static.png", - "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving.gif", - "chrome/browser/content/activity-stream/data/content/assets/glyph-webextension-16.svg", - "chrome/browser/content/activity-stream/data/content/assets/heart.webp", - "chrome/browser/content/activity-stream/data/content/assets/long-zap.svg", - "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user-cn.svg", - "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user.svg", - "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-new-user-cn.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-amo-collection.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-gratitude.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-import.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-kit-smart-window.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-pinprivate.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-pintaskbar.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-privacysegmentation.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-rtamo-background-image.svg", - "chrome/browser/content/activity-stream/data/content/assets/mr-settodefault.svg", - "chrome/browser/content/activity-stream/data/content/assets/noodle-C.svg", - "chrome/browser/content/activity-stream/data/content/assets/noodle-outline-L.svg", - "chrome/browser/content/activity-stream/data/content/assets/noodle-solid-L.svg", - "chrome/browser/content/activity-stream/data/content/assets/nuo-taborientation.svg", - "chrome/browser/content/activity-stream/data/content/assets/person-typing.svg", - "chrome/browser/content/activity-stream/data/content/assets/short-zap.svg", - "chrome/browser/content/activity-stream/data/content/assets/splash-logo.svg", - "chrome/browser/content/activity-stream/data/content/assets/tabs-side-zap-transparent.svg", - "chrome/browser/content/activity-stream/data/content/assets/tabs-top-zap-transparent.svg", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/addons-mozilla.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/adidas.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/aliexpress-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/allegro-pl.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/amazon.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/apnews.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/avito-ru.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/baidu-com.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/bbc-uk.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/bing-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ctrip-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/duckduckgo-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ebay.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/etsy.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/facebook-com.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/geico.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/google-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/hrblock.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ifeng-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/iqiyi-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/leboncoin-fr.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/lemonde.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ndtv.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/nike.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ok-ru.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/olx-pl.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/reddit-com.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/samsung.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/tagesschau.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/turbotax.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/twitter-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/vk-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/vodafone.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/weibo-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wikipedia-org.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wix.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wykop-pl.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-com.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-ru.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/youtube-com.png", - "chrome/browser/content/activity-stream/data/content/tippytop/favicons/zhihu-com.ico", - "chrome/browser/content/activity-stream/data/content/tippytop/images/addons-mozilla@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/adidas@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/aliexpress-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/allegro-pl@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/amazon@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/apnews@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/avito-ru@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/baidu-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/bbc-uk@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/bing-com@2x.svg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/ctrip-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/duckduckgo-com@2x.svg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/ebay@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/etsy@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/facebook-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/geico@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/google-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/hrblock@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/ifeng-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/iqiyi-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/leboncoin-fr@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/lemonde@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/ndtv@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/nike@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/ok-ru@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/olx-pl@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/reddit-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/samsung@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/tagesschau@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/turbotax@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/twitter-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/vk-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/vodafone@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/weibo-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/wikipedia-org@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/wix@2x.jpg", - "chrome/browser/content/activity-stream/data/content/tippytop/images/wykop-pl@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-ru@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/youtube-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/images/zhihu-com@2x.png", - "chrome/browser/content/activity-stream/data/content/tippytop/top_sites.json", - "chrome/browser/content/branding/about-logo-private.png", - "chrome/browser/content/branding/about-logo-private@2x.png", - "chrome/browser/content/branding/about-logo.png", - "chrome/browser/content/branding/about-logo.svg", - "chrome/browser/content/branding/about-logo@2x.png", - "chrome/browser/content/branding/about-wordmark.svg", - "chrome/browser/content/branding/about.png", - "chrome/browser/content/branding/aboutDialog.css", - "chrome/browser/content/branding/document.ico", - "chrome/browser/content/branding/document_pdf.svg", - "chrome/browser/content/branding/firefox-wordmark.svg", - "chrome/browser/content/branding/icon128.png", - "chrome/browser/content/branding/icon16.png", - "chrome/browser/content/branding/icon32.png", - "chrome/browser/content/branding/icon48.png", - "chrome/browser/content/branding/icon64.png", - "chrome/browser/content/briefcase.svg", - "chrome/browser/content/browser/aboutDialog-appUpdater.js", - "chrome/browser/content/browser/aboutDialog.css", - "chrome/browser/content/browser/aboutDialog.js", - "chrome/browser/content/browser/aboutDialog.xhtml", - "chrome/browser/content/browser/aboutFrameCrashed.html", - "chrome/browser/content/browser/aboutPrivateBrowsing.css", - "chrome/browser/content/browser/aboutPrivateBrowsing.html", - "chrome/browser/content/browser/aboutPrivateBrowsing.js", - "chrome/browser/content/browser/aboutRestartRequired.js", - "chrome/browser/content/browser/aboutRestartRequired.xhtml", - "chrome/browser/content/browser/aboutRobots-icon.png", - "chrome/browser/content/browser/aboutRobots.css", - "chrome/browser/content/browser/aboutRobots.js", - "chrome/browser/content/browser/aboutRobots.xhtml", - "chrome/browser/content/browser/aboutSessionRestore.js", - "chrome/browser/content/browser/aboutSessionRestore.xhtml", - "chrome/browser/content/browser/aboutTabCrashed.css", - "chrome/browser/content/browser/aboutTabCrashed.js", - "chrome/browser/content/browser/aboutTabCrashed.xhtml", - "chrome/browser/content/browser/aboutWelcomeBack.xhtml", - "chrome/browser/content/browser/aboutlogins/aboutLogins.css", - "chrome/browser/content/browser/aboutlogins/aboutLogins.html", - "chrome/browser/content/browser/aboutlogins/aboutLogins.mjs", - "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.css", - "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.html", - "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.mjs", - "chrome/browser/content/browser/aboutlogins/aboutLoginsUtils.mjs", - "chrome/browser/content/browser/aboutlogins/common.css", - "chrome/browser/content/browser/aboutlogins/components/confirmation-dialog.css", - "chrome/browser/content/browser/aboutlogins/components/confirmation-dialog.mjs", - "chrome/browser/content/browser/aboutlogins/components/fxaccounts-button.css", - "chrome/browser/content/browser/aboutlogins/components/fxaccounts-button.mjs", - "chrome/browser/content/browser/aboutlogins/components/generic-dialog.css", - "chrome/browser/content/browser/aboutlogins/components/generic-dialog.mjs", - "chrome/browser/content/browser/aboutlogins/components/import-details-row.mjs", - "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.css", - "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.mjs", - "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.css", - "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.css", - "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/login-origin-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/login-password-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/input-field/login-username-field.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-alert.css", - "chrome/browser/content/browser/aboutlogins/components/login-alert.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-command-button.css", - "chrome/browser/content/browser/aboutlogins/components/login-command-button.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-filter.css", - "chrome/browser/content/browser/aboutlogins/components/login-filter.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-intro.css", - "chrome/browser/content/browser/aboutlogins/components/login-intro.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-item.css", - "chrome/browser/content/browser/aboutlogins/components/login-item.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-list-item.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-list-lit-item.css", - "chrome/browser/content/browser/aboutlogins/components/login-list-lit-item.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-list-section.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-list.css", - "chrome/browser/content/browser/aboutlogins/components/login-list.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-message-popup.css", - "chrome/browser/content/browser/aboutlogins/components/login-message-popup.mjs", - "chrome/browser/content/browser/aboutlogins/components/login-timeline.css", - "chrome/browser/content/browser/aboutlogins/components/login-timeline.mjs", - "chrome/browser/content/browser/aboutlogins/components/menu-button.css", - "chrome/browser/content/browser/aboutlogins/components/menu-button.mjs", - "chrome/browser/content/browser/aboutlogins/components/remove-logins-dialog.css", - "chrome/browser/content/browser/aboutlogins/components/remove-logins-dialog.mjs", - "chrome/browser/content/browser/aboutlogins/icons/breached-website.svg", - "chrome/browser/content/browser/aboutlogins/icons/intro-illustration.svg", - "chrome/browser/content/browser/aboutlogins/icons/vulnerable-password.svg", - "chrome/browser/content/browser/aboutwelcome/aboutwelcome.bundle.js", - "chrome/browser/content/browser/aboutwelcome/aboutwelcome.css", - "chrome/browser/content/browser/aboutwelcome/aboutwelcome.html", - "chrome/browser/content/browser/aiwindow/ai-window-content.css", - "chrome/browser/content/browser/aiwindow/ai-window-overrides.css", - "chrome/browser/content/browser/aiwindow/ai-window-shared.css", - "chrome/browser/content/browser/aiwindow/aiChatContent.html", - "chrome/browser/content/browser/aiwindow/aiWindow.html", - "chrome/browser/content/browser/aiwindow/assets/ai-chat-grid-loading.svg", - "chrome/browser/content/browser/aiwindow/assets/ask-icon.svg", - "chrome/browser/content/browser/aiwindow/assets/icon-grid-view.svg", - "chrome/browser/content/browser/aiwindow/assets/icon-list-view.svg", - "chrome/browser/content/browser/aiwindow/assets/loader.svg", - "chrome/browser/content/browser/aiwindow/assets/memories-off.svg", - "chrome/browser/content/browser/aiwindow/assets/memories-on.svg", - "chrome/browser/content/browser/aiwindow/assets/model-choice-1.svg", - "chrome/browser/content/browser/aiwindow/assets/model-choice-2.svg", - "chrome/browser/content/browser/aiwindow/assets/model-choice-3.svg", - "chrome/browser/content/browser/aiwindow/assets/new-chat.svg", - "chrome/browser/content/browser/aiwindow/assets/set-default-onboarding.svg", - "chrome/browser/content/browser/aiwindow/assets/smart-window-promo-default.svg", - "chrome/browser/content/browser/aiwindow/assets/stop-generation.svg", - "chrome/browser/content/browser/aiwindow/components/ai-action-result.css", - "chrome/browser/content/browser/aiwindow/components/ai-action-result.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-chat-card.css", - "chrome/browser/content/browser/aiwindow/components/ai-chat-card.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-chat-content.css", - "chrome/browser/content/browser/aiwindow/components/ai-chat-content.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-chat-grid.css", - "chrome/browser/content/browser/aiwindow/components/ai-chat-grid.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-chat-message.css", - "chrome/browser/content/browser/aiwindow/components/ai-chat-message.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-chat-table.css", - "chrome/browser/content/browser/aiwindow/components/ai-chat-table.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-website-chip.css", - "chrome/browser/content/browser/aiwindow/components/ai-website-chip.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.css", - "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-website-select.css", - "chrome/browser/content/browser/aiwindow/components/ai-website-select.mjs", - "chrome/browser/content/browser/aiwindow/components/ai-window.css", - "chrome/browser/content/browser/aiwindow/components/ai-window.mjs", - "chrome/browser/content/browser/aiwindow/components/applied-memories-button.css", - "chrome/browser/content/browser/aiwindow/components/applied-memories-button.mjs", - "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.css", - "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.mjs", - "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.css", - "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.mjs", - "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.css", - "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.mjs", - "chrome/browser/content/browser/aiwindow/components/context-icon-button.css", - "chrome/browser/content/browser/aiwindow/components/context-icon-button.mjs", - "chrome/browser/content/browser/aiwindow/components/input-cta.css", - "chrome/browser/content/browser/aiwindow/components/input-cta.mjs", - "chrome/browser/content/browser/aiwindow/components/memories-icon-button.css", - "chrome/browser/content/browser/aiwindow/components/memories-icon-button.mjs", - "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.css", - "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.mjs", - "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.css", - "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.mjs", - "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.css", - "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.mjs", - "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.css", - "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.mjs", - "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.css", - "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.mjs", - "chrome/browser/content/browser/aiwindow/components/website-chip-container.css", - "chrome/browser/content/browser/aiwindow/components/website-chip-container.mjs", - "chrome/browser/content/browser/aiwindow/firstrun.css", - "chrome/browser/content/browser/aiwindow/firstrun.html", - "chrome/browser/content/browser/aiwindow/firstrun.js", - "chrome/browser/content/browser/aiwindow/modules/ChatMarkdownParser.mjs", - "chrome/browser/content/browser/aiwindow/modules/TokenStreamParser.mjs", - "chrome/browser/content/browser/aiwindow/smartwindow-init.mjs", - "chrome/browser/content/browser/asrouter/asrouter-admin.bundle.js", - "chrome/browser/content/browser/asrouter/asrouter-admin.html", - "chrome/browser/content/browser/asrouter/assets/checkmark-16.svg", - "chrome/browser/content/browser/asrouter/assets/close-16.svg", - "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-banner.svg", - "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-eu-QR.svg", - "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-non-eu-QR.svg", - "chrome/browser/content/browser/asrouter/assets/fox-with-box-on-cloud.svg", - "chrome/browser/content/browser/asrouter/assets/fox-with-checkmark.svg", - "chrome/browser/content/browser/asrouter/assets/fox-with-devices.svg", - "chrome/browser/content/browser/asrouter/assets/fox-with-locked-box.svg", - "chrome/browser/content/browser/asrouter/assets/fox-with-mobile.svg", - "chrome/browser/content/browser/asrouter/assets/fox-with-profiles.svg", - "chrome/browser/content/browser/asrouter/assets/glyph-cfr-feature-16.svg", - "chrome/browser/content/browser/asrouter/assets/glyph-mail-mask-16.svg", - "chrome/browser/content/browser/asrouter/assets/hero-relay-email-masks.svg", - "chrome/browser/content/browser/asrouter/assets/shield-checkmark-16.svg", - "chrome/browser/content/browser/asrouter/assets/smiling-fox-icon.svg", - "chrome/browser/content/browser/asrouter/assets/subtract-16.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-animated-dark.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-animated-light.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-static-dark.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-static-light.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-animated-dark.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-animated-light.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-static-dark.svg", - "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-static-light.svg", - "chrome/browser/content/browser/asrouter/components/ASRouterAdmin/ASRouterAdmin.css", - "chrome/browser/content/browser/asrouter/components/menu-message.css", - "chrome/browser/content/browser/asrouter/components/menu-message.mjs", - "chrome/browser/content/browser/asrouter/components/remote-text.js", - "chrome/browser/content/browser/asrouter/render.js", - "chrome/browser/content/browser/asrouter/schemas/BackgroundTaskMessagingExperiment.schema.json", - "chrome/browser/content/browser/asrouter/schemas/MessagingExperiment.schema.json", - "chrome/browser/content/browser/assets/cookie-banners-begone.svg", - "chrome/browser/content/browser/assets/focus-logo.svg", - "chrome/browser/content/browser/assets/focus-promo.png", - "chrome/browser/content/browser/assets/focus-qr-code.svg", - "chrome/browser/content/browser/assets/klar-qr-code.svg", - "chrome/browser/content/browser/assets/moz-vpn.svg", - "chrome/browser/content/browser/assets/private-promo-asset.svg", - "chrome/browser/content/browser/assets/vpn-logo.svg", - "chrome/browser/content/browser/backup/ArchiveJSONBlock.1.schema.json", - "chrome/browser/content/browser/backup/ArchiveJSONBlock.2.schema.json", - "chrome/browser/content/browser/backup/BackupManifest.1.schema.json", - "chrome/browser/content/browser/backup/BackupManifest.2.schema.json", - "chrome/browser/content/browser/backup/archive.css", - "chrome/browser/content/browser/backup/archive.js", - "chrome/browser/content/browser/backup/archive.template.html", - "chrome/browser/content/browser/backup/backup-common.css", - "chrome/browser/content/browser/backup/backup-constants.mjs", - "chrome/browser/content/browser/backup/backup-errors.mjs", - "chrome/browser/content/browser/backup/backup-settings.css", - "chrome/browser/content/browser/backup/backup-settings.mjs", - "chrome/browser/content/browser/backup/disable-backup-encryption.css", - "chrome/browser/content/browser/backup/disable-backup-encryption.mjs", - "chrome/browser/content/browser/backup/enable-backup-encryption.css", - "chrome/browser/content/browser/backup/enable-backup-encryption.mjs", - "chrome/browser/content/browser/backup/password-rules-tooltip.css", - "chrome/browser/content/browser/backup/password-rules-tooltip.mjs", - "chrome/browser/content/browser/backup/password-validation-inputs.css", - "chrome/browser/content/browser/backup/password-validation-inputs.mjs", - "chrome/browser/content/browser/backup/restore-from-backup.css", - "chrome/browser/content/browser/backup/restore-from-backup.mjs", - "chrome/browser/content/browser/backup/turn-off-scheduled-backups.css", - "chrome/browser/content/browser/backup/turn-off-scheduled-backups.mjs", - "chrome/browser/content/browser/backup/turn-on-scheduled-backups.css", - "chrome/browser/content/browser/backup/turn-on-scheduled-backups.mjs", - "chrome/browser/content/browser/blanktab.html", - "chrome/browser/content/browser/blockedSite.js", - "chrome/browser/content/browser/blockedSite.xhtml", - "chrome/browser/content/browser/browser-a11yUtils.js", - "chrome/browser/content/browser/browser-addons.js", - "chrome/browser/content/browser/browser-captivePortal.js", - "chrome/browser/content/browser/browser-commands.js", - "chrome/browser/content/browser/browser-context.js", - "chrome/browser/content/browser/browser-customization.js", - "chrome/browser/content/browser/browser-customtitlebar.js", - "chrome/browser/content/browser/browser-data-submission-info-bar.js", - "chrome/browser/content/browser/browser-fullScreenAndPointerLock.js", - "chrome/browser/content/browser/browser-gestureSupport.js", - "chrome/browser/content/browser/browser-graphics-utils.js", - "chrome/browser/content/browser/browser-init.js", - "chrome/browser/content/browser/browser-main.js", - "chrome/browser/content/browser/browser-menubar.js", - "chrome/browser/content/browser/browser-pageActions.js", - "chrome/browser/content/browser/browser-pagestyle.js", - "chrome/browser/content/browser/browser-places.js", - "chrome/browser/content/browser/browser-profiles.js", - "chrome/browser/content/browser/browser-safebrowsing.js", - "chrome/browser/content/browser/browser-sets.js", - "chrome/browser/content/browser/browser-siteIdentity.js", - "chrome/browser/content/browser/browser-sitePermissionPanel.js", - "chrome/browser/content/browser/browser-siteProtections.js", - "chrome/browser/content/browser/browser-sync.js", - "chrome/browser/content/browser/browser-thumbnails.js", - "chrome/browser/content/browser/browser-toolbarKeyNav.js", - "chrome/browser/content/browser/browser-trustPanel.js", - "chrome/browser/content/browser/browser-unified-extensions.js", - "chrome/browser/content/browser/browser-webrtc.js", - "chrome/browser/content/browser/browser.js", - "chrome/browser/content/browser/browser.xhtml", - "chrome/browser/content/browser/built_in_addons.json", - "chrome/browser/content/browser/callout-tab-pickup-dark.svg", - "chrome/browser/content/browser/callout-tab-pickup.svg", - "chrome/browser/content/browser/child/ext-browser-content-only.js", - "chrome/browser/content/browser/child/ext-browser.js", - "chrome/browser/content/browser/child/ext-devtools-inspectedWindow.js", - "chrome/browser/content/browser/child/ext-devtools-network.js", - "chrome/browser/content/browser/child/ext-devtools-panels.js", - "chrome/browser/content/browser/child/ext-devtools.js", - "chrome/browser/content/browser/child/ext-menus-child.js", - "chrome/browser/content/browser/child/ext-menus.js", - "chrome/browser/content/browser/child/ext-omnibox.js", - "chrome/browser/content/browser/child/ext-tabs.js", - "chrome/browser/content/browser/contentSearchHandoffUI.css", - "chrome/browser/content/browser/contentSearchHandoffUI.mjs", - "chrome/browser/content/browser/contentTheme.js", - "chrome/browser/content/browser/contentsharing/background-dark.svg", - "chrome/browser/content/browser/contentsharing/background-light.svg", - "chrome/browser/content/browser/contentsharing/content-sharing-icon.svg", - "chrome/browser/content/browser/contentsharing/content-sharing-modal.css", - "chrome/browser/content/browser/contentsharing/content-sharing-modal.mjs", - "chrome/browser/content/browser/contentsharing/contentSharingModal.xhtml", - "chrome/browser/content/browser/contentsharing/contentsharing.schema.json", - "chrome/browser/content/browser/controlcenter/assets/fox-concern.svg", - "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.css", - "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.mjs", - "chrome/browser/content/browser/customizableui/panelUI.js", - "chrome/browser/content/browser/customkeys/customkeys.css", - "chrome/browser/content/browser/customkeys/customkeys.html", - "chrome/browser/content/browser/customkeys/customkeys.js", - "chrome/browser/content/browser/default-bookmarks.html", - "chrome/browser/content/browser/downloads/allDownloadsView.js", - "chrome/browser/content/browser/downloads/contentAreaDownloadsView.css", - "chrome/browser/content/browser/downloads/contentAreaDownloadsView.js", - "chrome/browser/content/browser/downloads/contentAreaDownloadsView.xhtml", - "chrome/browser/content/browser/downloads/downloads.css", - "chrome/browser/content/browser/downloads/downloads.js", - "chrome/browser/content/browser/downloads/downloadsCommands.js", - "chrome/browser/content/browser/downloads/indicator.js", - "chrome/browser/content/browser/ext-browser.json", - "chrome/browser/content/browser/extension-popup-panel.css", - "chrome/browser/content/browser/extension.css", - "chrome/browser/content/browser/firefoxview/card-container.css", - "chrome/browser/content/browser/firefoxview/card-container.mjs", - "chrome/browser/content/browser/firefoxview/chats-tab-list.css", - "chrome/browser/content/browser/firefoxview/chats-tab-list.mjs", - "chrome/browser/content/browser/firefoxview/chats.mjs", - "chrome/browser/content/browser/firefoxview/empty-chat.svg", - "chrome/browser/content/browser/firefoxview/firefoxview.css", - "chrome/browser/content/browser/firefoxview/firefoxview.html", - "chrome/browser/content/browser/firefoxview/firefoxview.mjs", - "chrome/browser/content/browser/firefoxview/fxview-empty-state.css", - "chrome/browser/content/browser/firefoxview/fxview-empty-state.mjs", - "chrome/browser/content/browser/firefoxview/fxview-tab-list.css", - "chrome/browser/content/browser/firefoxview/fxview-tab-list.mjs", - "chrome/browser/content/browser/firefoxview/fxview-tab-row.css", - "chrome/browser/content/browser/firefoxview/helpers.mjs", - "chrome/browser/content/browser/firefoxview/history-empty.svg", - "chrome/browser/content/browser/firefoxview/history.css", - "chrome/browser/content/browser/firefoxview/history.mjs", - "chrome/browser/content/browser/firefoxview/opentabs-tab-list.css", - "chrome/browser/content/browser/firefoxview/opentabs-tab-list.mjs", - "chrome/browser/content/browser/firefoxview/opentabs-tab-row.css", - "chrome/browser/content/browser/firefoxview/opentabs.mjs", - "chrome/browser/content/browser/firefoxview/recentbrowsing.mjs", - "chrome/browser/content/browser/firefoxview/recentlyclosed.mjs", - "chrome/browser/content/browser/firefoxview/search-helpers.mjs", - "chrome/browser/content/browser/firefoxview/synced-tabs-empty.svg", - "chrome/browser/content/browser/firefoxview/synced-tabs-error.svg", - "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.css", - "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.mjs", - "chrome/browser/content/browser/firefoxview/syncedtabs.mjs", - "chrome/browser/content/browser/firefoxview/view-chats.svg", - "chrome/browser/content/browser/firefoxview/view-history.svg", - "chrome/browser/content/browser/firefoxview/view-opentabs.css", - "chrome/browser/content/browser/firefoxview/view-opentabs.svg", - "chrome/browser/content/browser/firefoxview/view-recentbrowsing.svg", - "chrome/browser/content/browser/firefoxview/view-recentlyclosed.svg", - "chrome/browser/content/browser/firefoxview/view-syncedtabs.css", - "chrome/browser/content/browser/firefoxview/view-syncedtabs.svg", - "chrome/browser/content/browser/firefoxview/viewpage.mjs", - "chrome/browser/content/browser/genai/assets/brands/chatgpt.svg", - "chrome/browser/content/browser/genai/assets/brands/claude.svg", - "chrome/browser/content/browser/genai/assets/brands/copilot.svg", - "chrome/browser/content/browser/genai/assets/brands/gemini.svg", - "chrome/browser/content/browser/genai/assets/brands/huggingchat.svg", - "chrome/browser/content/browser/genai/assets/brands/lechat.svg", - "chrome/browser/content/browser/genai/assets/onboarding-link-preview-image-longpress.svg", - "chrome/browser/content/browser/genai/chat.css", - "chrome/browser/content/browser/genai/chat.html", - "chrome/browser/content/browser/genai/chat.js", - "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.css", - "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.mjs", - "chrome/browser/content/browser/genai/content/link-preview-card.css", - "chrome/browser/content/browser/genai/content/link-preview-card.mjs", - "chrome/browser/content/browser/genai/content/model-optin.css", - "chrome/browser/content/browser/genai/content/model-optin.mjs", - "chrome/browser/content/browser/genai/content/page-assist.css", - "chrome/browser/content/browser/genai/content/page-assist.mjs", - "chrome/browser/content/browser/genai/pageAssist.html", - "chrome/browser/content/browser/global-scripts.js", - "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-dark.svg", - "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-light.svg", - "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-dark.svg", - "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-light.svg", - "chrome/browser/content/browser/ipprotection/assets/ipprotection-unauthenticated.svg", - "chrome/browser/content/browser/ipprotection/assets/mozilla-vpn-promo.svg", - "chrome/browser/content/browser/ipprotection/assets/shield-vpn-exceptions.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-error.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-excluded.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-info.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-loading.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-off.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-on.svg", - "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-paused.svg", - "chrome/browser/content/browser/ipprotection/assets/vpn-settings-get-started.svg", - "chrome/browser/content/browser/ipprotection/bandwidth-usage.css", - "chrome/browser/content/browser/ipprotection/bandwidth-usage.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-constants.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-content.css", - "chrome/browser/content/browser/ipprotection/ipprotection-content.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-customelements.js", - "chrome/browser/content/browser/ipprotection/ipprotection-locations.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-message-bar.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-status-box.css", - "chrome/browser/content/browser/ipprotection/ipprotection-status-box.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-status-card.css", - "chrome/browser/content/browser/ipprotection/ipprotection-status-card.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-unauthenticated.mjs", - "chrome/browser/content/browser/ipprotection/ipprotection-utils.mjs", - "chrome/browser/content/browser/ipprotection/locations-list.mjs", - "chrome/browser/content/browser/ipprotection/locations-subview.css", - "chrome/browser/content/browser/license.html", - "chrome/browser/content/browser/lockwise-card.mjs", - "chrome/browser/content/browser/logos/etp-mobile.svg", - "chrome/browser/content/browser/logos/fxa-logo.svg", - "chrome/browser/content/browser/logos/ipprotection-error.svg", - "chrome/browser/content/browser/logos/ipprotection-excluded.svg", - "chrome/browser/content/browser/logos/ipprotection-info.svg", - "chrome/browser/content/browser/logos/ipprotection-off.svg", - "chrome/browser/content/browser/logos/ipprotection-on.svg", - "chrome/browser/content/browser/logos/ipprotection-paused.svg", - "chrome/browser/content/browser/logos/lockwise.svg", - "chrome/browser/content/browser/logos/monitor.svg", - "chrome/browser/content/browser/logos/passkey.svg", - "chrome/browser/content/browser/logos/relay.svg", - "chrome/browser/content/browser/logos/send.svg", - "chrome/browser/content/browser/logos/tracking-protection-dark-theme.svg", - "chrome/browser/content/browser/logos/tracking-protection.svg", - "chrome/browser/content/browser/logos/vpn-promo-logo.svg", - "chrome/browser/content/browser/logos/vpn.svg", - "chrome/browser/content/browser/main-popupset.js", - "chrome/browser/content/browser/messagepreview/limelight.svg", - "chrome/browser/content/browser/messagepreview/messagepreview.css", - "chrome/browser/content/browser/messagepreview/messagepreview.html", - "chrome/browser/content/browser/messagepreview/messagepreview.js", - "chrome/browser/content/browser/messagepreview/switch.svg", - "chrome/browser/content/browser/migration/brands/brave.png", - "chrome/browser/content/browser/migration/brands/chrome.png", - "chrome/browser/content/browser/migration/brands/chromium.png", - "chrome/browser/content/browser/migration/brands/opera.png", - "chrome/browser/content/browser/migration/brands/operagx.png", - "chrome/browser/content/browser/migration/brands/vivaldi.png", - "chrome/browser/content/browser/migration/migration-dialog-window.html", - "chrome/browser/content/browser/migration/migration-dialog-window.js", - "chrome/browser/content/browser/migration/migration-wizard-constants.mjs", - "chrome/browser/content/browser/migration/migration-wizard.mjs", - "chrome/browser/content/browser/monitor-card.mjs", - "chrome/browser/content/browser/multilineeditor/multiline-editor.css", - "chrome/browser/content/browser/multilineeditor/multiline-editor.mjs", - "chrome/browser/content/browser/multilineeditor/plugins/MentionsPlugin.mjs", - "chrome/browser/content/browser/multilineeditor/prosemirror.bundle.mjs", - "chrome/browser/content/browser/multilineeditor/prosemirror.css", - "chrome/browser/content/browser/navigator-toolbox.js", - "chrome/browser/content/browser/nsContextMenu.sys.mjs", - "chrome/browser/content/browser/pagedata/schemas/article.schema.json", - "chrome/browser/content/browser/pagedata/schemas/audio.schema.json", - "chrome/browser/content/browser/pagedata/schemas/document.schema.json", - "chrome/browser/content/browser/pagedata/schemas/general.schema.json", - "chrome/browser/content/browser/pagedata/schemas/product.schema.json", - "chrome/browser/content/browser/pagedata/schemas/video.schema.json", - "chrome/browser/content/browser/pageinfo/pageInfo.css", - "chrome/browser/content/browser/pageinfo/pageInfo.js", - "chrome/browser/content/browser/pageinfo/pageInfo.xhtml", - "chrome/browser/content/browser/pageinfo/permissions.js", - "chrome/browser/content/browser/pageinfo/security.js", - "chrome/browser/content/browser/parent/ext-bookmarks.js", - "chrome/browser/content/browser/parent/ext-browser.js", - "chrome/browser/content/browser/parent/ext-browserAction.js", - "chrome/browser/content/browser/parent/ext-chrome-settings-overrides.js", - "chrome/browser/content/browser/parent/ext-commands.js", - "chrome/browser/content/browser/parent/ext-devtools-inspectedWindow.js", - "chrome/browser/content/browser/parent/ext-devtools-network.js", - "chrome/browser/content/browser/parent/ext-devtools-panels.js", - "chrome/browser/content/browser/parent/ext-devtools.js", - "chrome/browser/content/browser/parent/ext-find.js", - "chrome/browser/content/browser/parent/ext-history.js", - "chrome/browser/content/browser/parent/ext-menus.js", - "chrome/browser/content/browser/parent/ext-normandyAddonStudy.js", - "chrome/browser/content/browser/parent/ext-omnibox.js", - "chrome/browser/content/browser/parent/ext-pageAction.js", - "chrome/browser/content/browser/parent/ext-pkcs11.js", - "chrome/browser/content/browser/parent/ext-search.js", - "chrome/browser/content/browser/parent/ext-sessions.js", - "chrome/browser/content/browser/parent/ext-sidebarAction.js", - "chrome/browser/content/browser/parent/ext-tabGroups.js", - "chrome/browser/content/browser/parent/ext-tabs.js", - "chrome/browser/content/browser/parent/ext-topSites.js", - "chrome/browser/content/browser/parent/ext-url-overrides.js", - "chrome/browser/content/browser/parent/ext-windows.js", - "chrome/browser/content/browser/places/bookmarkProperties.js", - "chrome/browser/content/browser/places/bookmarkProperties.xhtml", - "chrome/browser/content/browser/places/bookmarksSidebar.js", - "chrome/browser/content/browser/places/bookmarksSidebar.xhtml", - "chrome/browser/content/browser/places/browserPlacesViews.js", - "chrome/browser/content/browser/places/clearDataForSite.css", - "chrome/browser/content/browser/places/clearDataForSite.js", - "chrome/browser/content/browser/places/clearDataForSite.xhtml", - "chrome/browser/content/browser/places/controller.js", - "chrome/browser/content/browser/places/editBookmark.js", - "chrome/browser/content/browser/places/historySidebar.js", - "chrome/browser/content/browser/places/historySidebar.xhtml", - "chrome/browser/content/browser/places/interactionsViewer.css", - "chrome/browser/content/browser/places/interactionsViewer.html", - "chrome/browser/content/browser/places/interactionsViewer.js", - "chrome/browser/content/browser/places/places-commands.js", - "chrome/browser/content/browser/places/places-menupopup.js", - "chrome/browser/content/browser/places/places-tree.js", - "chrome/browser/content/browser/places/places.css", - "chrome/browser/content/browser/places/places.js", - "chrome/browser/content/browser/places/places.xhtml", - "chrome/browser/content/browser/places/placesContextMenu.js", - "chrome/browser/content/browser/places/treeView.js", - "chrome/browser/content/browser/policies/aboutPolicies.css", - "chrome/browser/content/browser/policies/aboutPolicies.html", - "chrome/browser/content/browser/policies/aboutPolicies.js", - "chrome/browser/content/browser/policies/policies-active.svg", - "chrome/browser/content/browser/policies/policies-documentation.svg", - "chrome/browser/content/browser/policies/policies-error.svg", - "chrome/browser/content/browser/preferences/OnDeviceModelManager.mjs", - "chrome/browser/content/browser/preferences/browser-layout-horizontal.svg", - "chrome/browser/content/browser/preferences/browser-layout-vertical.svg", - "chrome/browser/content/browser/preferences/config/LegacyPaneMappings.mjs", - "chrome/browser/content/browser/preferences/config/SettingGroupManager.mjs", - "chrome/browser/content/browser/preferences/config/SettingPaneManager.mjs", - "chrome/browser/content/browser/preferences/config/about-firefox.mjs", - "chrome/browser/content/browser/preferences/config/accessibility.mjs", - "chrome/browser/content/browser/preferences/config/account-sync.mjs", - "chrome/browser/content/browser/preferences/config/aiFeatures.mjs", - "chrome/browser/content/browser/preferences/config/appearance.mjs", - "chrome/browser/content/browser/preferences/config/block-ai-confirmation-dialog.css", - "chrome/browser/content/browser/preferences/config/downloads.mjs", - "chrome/browser/content/browser/preferences/config/firefoxLabs.mjs", - "chrome/browser/content/browser/preferences/config/home-startup.mjs", - "chrome/browser/content/browser/preferences/config/languages.mjs", - "chrome/browser/content/browser/preferences/config/moreFromMozilla.mjs", - "chrome/browser/content/browser/preferences/config/passwords-autofill.mjs", - "chrome/browser/content/browser/preferences/config/permissions-data.mjs", - "chrome/browser/content/browser/preferences/config/privacy.mjs", - "chrome/browser/content/browser/preferences/config/search.mjs", - "chrome/browser/content/browser/preferences/config/tabs-browsing.mjs", - "chrome/browser/content/browser/preferences/config/translations.mjs", - "chrome/browser/content/browser/preferences/containers.js", - "chrome/browser/content/browser/preferences/dialogs/applicationManager.js", - "chrome/browser/content/browser/preferences/dialogs/applicationManager.xhtml", - "chrome/browser/content/browser/preferences/dialogs/browserLanguages.js", - "chrome/browser/content/browser/preferences/dialogs/browserLanguages.xhtml", - "chrome/browser/content/browser/preferences/dialogs/colors.css", - "chrome/browser/content/browser/preferences/dialogs/colors.js", - "chrome/browser/content/browser/preferences/dialogs/colors.xhtml", - "chrome/browser/content/browser/preferences/dialogs/connection.js", - "chrome/browser/content/browser/preferences/dialogs/connection.xhtml", - "chrome/browser/content/browser/preferences/dialogs/containers.js", - "chrome/browser/content/browser/preferences/dialogs/containers.xhtml", - "chrome/browser/content/browser/preferences/dialogs/dohExceptions.js", - "chrome/browser/content/browser/preferences/dialogs/dohExceptions.xhtml", - "chrome/browser/content/browser/preferences/dialogs/fonts.js", - "chrome/browser/content/browser/preferences/dialogs/fonts.xhtml", - "chrome/browser/content/browser/preferences/dialogs/handlers.css", - "chrome/browser/content/browser/preferences/dialogs/languages.js", - "chrome/browser/content/browser/preferences/dialogs/languages.xhtml", - "chrome/browser/content/browser/preferences/dialogs/permissions.js", - "chrome/browser/content/browser/preferences/dialogs/permissions.xhtml", - "chrome/browser/content/browser/preferences/dialogs/selectBookmark.js", - "chrome/browser/content/browser/preferences/dialogs/selectBookmark.xhtml", - "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.js", - "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.xhtml", - "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.js", - "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.xhtml", - "chrome/browser/content/browser/preferences/dialogs/sitePermissions.css", - "chrome/browser/content/browser/preferences/dialogs/sitePermissions.js", - "chrome/browser/content/browser/preferences/dialogs/sitePermissions.xhtml", - "chrome/browser/content/browser/preferences/dialogs/syncChooseWhatToSync.js", - "chrome/browser/content/browser/preferences/dialogs/syncChooseWhatToSync.xhtml", - "chrome/browser/content/browser/preferences/dialogs/translations.xhtml", - "chrome/browser/content/browser/preferences/etp-advanced-banner.svg", - "chrome/browser/content/browser/preferences/etp-toggle-promo.svg", - "chrome/browser/content/browser/preferences/extensionControlled.js", - "chrome/browser/content/browser/preferences/findInPage.js", - "chrome/browser/content/browser/preferences/fxaPairDevice.js", - "chrome/browser/content/browser/preferences/fxaPairDevice.xhtml", - "chrome/browser/content/browser/preferences/home.js", - "chrome/browser/content/browser/preferences/main.js", - "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg", - "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple.svg", - "chrome/browser/content/browser/preferences/moreFromMozilla.js", - "chrome/browser/content/browser/preferences/preferences.js", - "chrome/browser/content/browser/preferences/preferences.xhtml", - "chrome/browser/content/browser/preferences/privacy.js", - "chrome/browser/content/browser/preferences/search.js", - "chrome/browser/content/browser/preferences/spell-check-promo.svg", - "chrome/browser/content/browser/preferences/sync.js", - "chrome/browser/content/browser/preferences/translations.js", - "chrome/browser/content/browser/preferences/web-appearance-dark.svg", - "chrome/browser/content/browser/preferences/web-appearance-light.svg", - "chrome/browser/content/browser/preferences/widgets/browser-language-restart-message.css", - "chrome/browser/content/browser/preferences/widgets/browser-language-restart-message.mjs", - "chrome/browser/content/browser/preferences/widgets/dialog-button.mjs", - "chrome/browser/content/browser/preferences/widgets/nav-notice.css", - "chrome/browser/content/browser/preferences/widgets/nav-notice.mjs", - "chrome/browser/content/browser/preferences/widgets/placeholder-message.css", - "chrome/browser/content/browser/preferences/widgets/placeholder-message.mjs", - "chrome/browser/content/browser/preferences/widgets/security-privacy-card.css", - "chrome/browser/content/browser/preferences/widgets/security-privacy-card.mjs", - "chrome/browser/content/browser/preferences/widgets/setting-control.css", - "chrome/browser/content/browser/preferences/widgets/setting-control.mjs", - "chrome/browser/content/browser/preferences/widgets/setting-element.mjs", - "chrome/browser/content/browser/preferences/widgets/setting-group.css", - "chrome/browser/content/browser/preferences/widgets/setting-group.mjs", - "chrome/browser/content/browser/preferences/widgets/setting-pane.css", - "chrome/browser/content/browser/preferences/widgets/setting-pane.mjs", - "chrome/browser/content/browser/preferences/widgets/sync-device-name.mjs", - "chrome/browser/content/browser/preferences/widgets/sync-engines-list.css", - "chrome/browser/content/browser/preferences/widgets/sync-engines-list.mjs", - "chrome/browser/content/browser/preferences/widgets/update-information.css", - "chrome/browser/content/browser/preferences/widgets/update-information.mjs", - "chrome/browser/content/browser/preferences/widgets/update-state.css", - "chrome/browser/content/browser/preferences/widgets/update-state.mjs", - "chrome/browser/content/browser/privacy-metrics-card.css", - "chrome/browser/content/browser/privacy-metrics-card.mjs", - "chrome/browser/content/browser/profiles/assets/16_barbell.svg", - "chrome/browser/content/browser/profiles/assets/16_bike.svg", - "chrome/browser/content/browser/profiles/assets/16_book.svg", - "chrome/browser/content/browser/profiles/assets/16_briefcase.svg", - "chrome/browser/content/browser/profiles/assets/16_canvas.svg", - "chrome/browser/content/browser/profiles/assets/16_craft.svg", - "chrome/browser/content/browser/profiles/assets/16_default-favicon.svg", - "chrome/browser/content/browser/profiles/assets/16_diamond.svg", - "chrome/browser/content/browser/profiles/assets/16_flower.svg", - "chrome/browser/content/browser/profiles/assets/16_folder.svg", - "chrome/browser/content/browser/profiles/assets/16_hammer.svg", - "chrome/browser/content/browser/profiles/assets/16_heart-rate.svg", - "chrome/browser/content/browser/profiles/assets/16_heart.svg", - "chrome/browser/content/browser/profiles/assets/16_history.svg", - "chrome/browser/content/browser/profiles/assets/16_leaf.svg", - "chrome/browser/content/browser/profiles/assets/16_lightbulb.svg", - "chrome/browser/content/browser/profiles/assets/16_makeup.svg", - "chrome/browser/content/browser/profiles/assets/16_message.svg", - "chrome/browser/content/browser/profiles/assets/16_musical-note.svg", - "chrome/browser/content/browser/profiles/assets/16_palette.svg", - "chrome/browser/content/browser/profiles/assets/16_paw-print.svg", - "chrome/browser/content/browser/profiles/assets/16_plane.svg", - "chrome/browser/content/browser/profiles/assets/16_present.svg", - "chrome/browser/content/browser/profiles/assets/16_shopping.svg", - "chrome/browser/content/browser/profiles/assets/16_soccer.svg", - "chrome/browser/content/browser/profiles/assets/16_sparkle-single.svg", - "chrome/browser/content/browser/profiles/assets/16_star.svg", - "chrome/browser/content/browser/profiles/assets/16_video-game-controller.svg", - "chrome/browser/content/browser/profiles/assets/20_barbell.svg", - "chrome/browser/content/browser/profiles/assets/20_bike.svg", - "chrome/browser/content/browser/profiles/assets/20_book.svg", - "chrome/browser/content/browser/profiles/assets/20_briefcase.svg", - "chrome/browser/content/browser/profiles/assets/20_canvas.svg", - "chrome/browser/content/browser/profiles/assets/20_craft.svg", - "chrome/browser/content/browser/profiles/assets/20_default-favicon.svg", - "chrome/browser/content/browser/profiles/assets/20_diamond.svg", - "chrome/browser/content/browser/profiles/assets/20_flower.svg", - "chrome/browser/content/browser/profiles/assets/20_folder.svg", - "chrome/browser/content/browser/profiles/assets/20_hammer.svg", - "chrome/browser/content/browser/profiles/assets/20_heart-rate.svg", - "chrome/browser/content/browser/profiles/assets/20_heart.svg", - "chrome/browser/content/browser/profiles/assets/20_history.svg", - "chrome/browser/content/browser/profiles/assets/20_leaf.svg", - "chrome/browser/content/browser/profiles/assets/20_lightbulb.svg", - "chrome/browser/content/browser/profiles/assets/20_makeup.svg", - "chrome/browser/content/browser/profiles/assets/20_message.svg", - "chrome/browser/content/browser/profiles/assets/20_musical-note.svg", - "chrome/browser/content/browser/profiles/assets/20_palette.svg", - "chrome/browser/content/browser/profiles/assets/20_paw-print.svg", - "chrome/browser/content/browser/profiles/assets/20_plane.svg", - "chrome/browser/content/browser/profiles/assets/20_present.svg", - "chrome/browser/content/browser/profiles/assets/20_shopping.svg", - "chrome/browser/content/browser/profiles/assets/20_soccer.svg", - "chrome/browser/content/browser/profiles/assets/20_sparkle-single.svg", - "chrome/browser/content/browser/profiles/assets/20_star.svg", - "chrome/browser/content/browser/profiles/assets/20_video-game-controller.svg", - "chrome/browser/content/browser/profiles/assets/24_book.svg", - "chrome/browser/content/browser/profiles/assets/24_briefcase.svg", - "chrome/browser/content/browser/profiles/assets/24_flower.svg", - "chrome/browser/content/browser/profiles/assets/24_heart.svg", - "chrome/browser/content/browser/profiles/assets/24_shopping.svg", - "chrome/browser/content/browser/profiles/assets/24_star.svg", - "chrome/browser/content/browser/profiles/assets/48_barbell.svg", - "chrome/browser/content/browser/profiles/assets/48_bike.svg", - "chrome/browser/content/browser/profiles/assets/48_book.svg", - "chrome/browser/content/browser/profiles/assets/48_briefcase.svg", - "chrome/browser/content/browser/profiles/assets/48_canvas.svg", - "chrome/browser/content/browser/profiles/assets/48_craft.svg", - "chrome/browser/content/browser/profiles/assets/48_default-favicon.svg", - "chrome/browser/content/browser/profiles/assets/48_diamond.svg", - "chrome/browser/content/browser/profiles/assets/48_flower.svg", - "chrome/browser/content/browser/profiles/assets/48_folder.svg", - "chrome/browser/content/browser/profiles/assets/48_hammer.svg", - "chrome/browser/content/browser/profiles/assets/48_heart-rate.svg", - "chrome/browser/content/browser/profiles/assets/48_heart.svg", - "chrome/browser/content/browser/profiles/assets/48_history.svg", - "chrome/browser/content/browser/profiles/assets/48_leaf.svg", - "chrome/browser/content/browser/profiles/assets/48_lightbulb.svg", - "chrome/browser/content/browser/profiles/assets/48_makeup.svg", - "chrome/browser/content/browser/profiles/assets/48_message.svg", - "chrome/browser/content/browser/profiles/assets/48_musical-note.svg", - "chrome/browser/content/browser/profiles/assets/48_palette.svg", - "chrome/browser/content/browser/profiles/assets/48_paw-print.svg", - "chrome/browser/content/browser/profiles/assets/48_plane.svg", - "chrome/browser/content/browser/profiles/assets/48_present.svg", - "chrome/browser/content/browser/profiles/assets/48_shopping.svg", - "chrome/browser/content/browser/profiles/assets/48_soccer.svg", - "chrome/browser/content/browser/profiles/assets/48_sparkle-single.svg", - "chrome/browser/content/browser/profiles/assets/48_star.svg", - "chrome/browser/content/browser/profiles/assets/48_video-game-controller.svg", - "chrome/browser/content/browser/profiles/assets/60_book.svg", - "chrome/browser/content/browser/profiles/assets/60_briefcase.svg", - "chrome/browser/content/browser/profiles/assets/60_flower.svg", - "chrome/browser/content/browser/profiles/assets/60_heart.svg", - "chrome/browser/content/browser/profiles/assets/60_shopping.svg", - "chrome/browser/content/browser/profiles/assets/60_star.svg", - "chrome/browser/content/browser/profiles/assets/80_barbell.svg", - "chrome/browser/content/browser/profiles/assets/80_bike.svg", - "chrome/browser/content/browser/profiles/assets/80_book.svg", - "chrome/browser/content/browser/profiles/assets/80_briefcase.svg", - "chrome/browser/content/browser/profiles/assets/80_canvas.svg", - "chrome/browser/content/browser/profiles/assets/80_craft.svg", - "chrome/browser/content/browser/profiles/assets/80_default-favicon.svg", - "chrome/browser/content/browser/profiles/assets/80_diamond.svg", - "chrome/browser/content/browser/profiles/assets/80_flower.svg", - "chrome/browser/content/browser/profiles/assets/80_folder.svg", - "chrome/browser/content/browser/profiles/assets/80_hammer.svg", - "chrome/browser/content/browser/profiles/assets/80_heart-rate.svg", - "chrome/browser/content/browser/profiles/assets/80_heart.svg", - "chrome/browser/content/browser/profiles/assets/80_history.svg", - "chrome/browser/content/browser/profiles/assets/80_leaf.svg", - "chrome/browser/content/browser/profiles/assets/80_lightbulb.svg", - "chrome/browser/content/browser/profiles/assets/80_makeup.svg", - "chrome/browser/content/browser/profiles/assets/80_message.svg", - "chrome/browser/content/browser/profiles/assets/80_musical-note.svg", - "chrome/browser/content/browser/profiles/assets/80_palette.svg", - "chrome/browser/content/browser/profiles/assets/80_paw-print.svg", - "chrome/browser/content/browser/profiles/assets/80_plane.svg", - "chrome/browser/content/browser/profiles/assets/80_present.svg", - "chrome/browser/content/browser/profiles/assets/80_shopping.svg", - "chrome/browser/content/browser/profiles/assets/80_soccer.svg", - "chrome/browser/content/browser/profiles/assets/80_sparkle-single.svg", - "chrome/browser/content/browser/profiles/assets/80_star.svg", - "chrome/browser/content/browser/profiles/assets/80_video-game-controller.svg", - "chrome/browser/content/browser/profiles/assets/plus.svg", - "chrome/browser/content/browser/profiles/assets/profilesBackground0.svg", - "chrome/browser/content/browser/profiles/assets/profilesBackground1.svg", - "chrome/browser/content/browser/profiles/assets/profilesBackground2.svg", - "chrome/browser/content/browser/profiles/assets/profilesBackground3.svg", - "chrome/browser/content/browser/profiles/assets/profilesBackground4.svg", - "chrome/browser/content/browser/profiles/assets/system-theme-background.svg", - "chrome/browser/content/browser/profiles/assets/theme-selector-background.svg", - "chrome/browser/content/browser/profiles/avatar.css", - "chrome/browser/content/browser/profiles/avatar.mjs", - "chrome/browser/content/browser/profiles/avatarSelectionHelpers.mjs", - "chrome/browser/content/browser/profiles/delete-profile-card.css", - "chrome/browser/content/browser/profiles/delete-profile-card.mjs", - "chrome/browser/content/browser/profiles/delete-profile.html", - "chrome/browser/content/browser/profiles/edit-profile-card.css", - "chrome/browser/content/browser/profiles/edit-profile-card.mjs", - "chrome/browser/content/browser/profiles/edit-profile.html", - "chrome/browser/content/browser/profiles/new-profile-card.mjs", - "chrome/browser/content/browser/profiles/new-profile.html", - "chrome/browser/content/browser/profiles/profile-avatar-selector.css", - "chrome/browser/content/browser/profiles/profile-avatar-selector.mjs", - "chrome/browser/content/browser/profiles/profile-card.css", - "chrome/browser/content/browser/profiles/profile-card.mjs", - "chrome/browser/content/browser/profiles/profile-selector.css", - "chrome/browser/content/browser/profiles/profile-selector.mjs", - "chrome/browser/content/browser/profiles/profiles-pages.css", - "chrome/browser/content/browser/profiles/profiles-theme-card.css", - "chrome/browser/content/browser/profiles/profiles-theme-card.mjs", - "chrome/browser/content/browser/profiles/profiles.html", - "chrome/browser/content/browser/protections.css", - "chrome/browser/content/browser/protections.html", - "chrome/browser/content/browser/protections.mjs", - "chrome/browser/content/browser/qrcode/QRCodeWorker.worker.mjs", - "chrome/browser/content/browser/qrcode/qrcode-dialog.css", - "chrome/browser/content/browser/qrcode/qrcode-dialog.html", - "chrome/browser/content/browser/qrcode/qrcode-dialog.js", - "chrome/browser/content/browser/reportbrokensite/components/register.js", - "chrome/browser/content/browser/reportbrokensite/components/url-input.css", - "chrome/browser/content/browser/reportbrokensite/components/url-input.mjs", - "chrome/browser/content/browser/robot.ico", - "chrome/browser/content/browser/safeMode.css", - "chrome/browser/content/browser/safeMode.js", - "chrome/browser/content/browser/safeMode.xhtml", - "chrome/browser/content/browser/sanitizeDialog.js", - "chrome/browser/content/browser/sanitize_v2.xhtml", - "chrome/browser/content/browser/schemas/bookmarks.json", - "chrome/browser/content/browser/schemas/chrome_settings_overrides.json", - "chrome/browser/content/browser/schemas/commands.json", - "chrome/browser/content/browser/schemas/devtools.json", - "chrome/browser/content/browser/schemas/devtools_inspected_window.json", - "chrome/browser/content/browser/schemas/devtools_network.json", - "chrome/browser/content/browser/schemas/devtools_panels.json", - "chrome/browser/content/browser/schemas/find.json", - "chrome/browser/content/browser/schemas/history.json", - "chrome/browser/content/browser/schemas/menus.json", - "chrome/browser/content/browser/schemas/menus_child.json", - "chrome/browser/content/browser/schemas/normandyAddonStudy.json", - "chrome/browser/content/browser/schemas/omnibox.json", - "chrome/browser/content/browser/schemas/pkcs11.json", - "chrome/browser/content/browser/schemas/search.json", - "chrome/browser/content/browser/schemas/sessions.json", - "chrome/browser/content/browser/schemas/sidebar_action.json", - "chrome/browser/content/browser/schemas/tabGroups.json", - "chrome/browser/content/browser/schemas/tabs.json", - "chrome/browser/content/browser/schemas/top_sites.json", - "chrome/browser/content/browser/schemas/url_overrides.json", - "chrome/browser/content/browser/schemas/windows.json", - "chrome/browser/content/browser/screenshots/copied-notification.svg", - "chrome/browser/content/browser/screenshots/fileHelpers.mjs", - "chrome/browser/content/browser/screenshots/menu-fullpage.svg", - "chrome/browser/content/browser/screenshots/menu-visible.svg", - "chrome/browser/content/browser/screenshots/overlay/overlay.css", - "chrome/browser/content/browser/screenshots/overlayHelpers.mjs", - "chrome/browser/content/browser/screenshots/screenshots-buttons.css", - "chrome/browser/content/browser/screenshots/screenshots-buttons.js", - "chrome/browser/content/browser/screenshots/screenshots-preview.css", - "chrome/browser/content/browser/screenshots/screenshots-preview.html", - "chrome/browser/content/browser/screenshots/screenshots-preview.mjs", - "chrome/browser/content/browser/search/addEngine.css", - "chrome/browser/content/browser/search/addEngine.js", - "chrome/browser/content/browser/search/addEngine.xhtml", - "chrome/browser/content/browser/search/autocomplete-popup.js", - "chrome/browser/content/browser/search/searchbar.js", - "chrome/browser/content/browser/security/unexpectedScriptLoad.css", - "chrome/browser/content/browser/security/unexpectedScriptLoad.js", - "chrome/browser/content/browser/security/unexpectedScriptLoad.xhtml", - "chrome/browser/content/browser/setDesktopBackground.js", - "chrome/browser/content/browser/setDesktopBackground.xhtml", - "chrome/browser/content/browser/sidebar/browser-sidebar.js", - "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.css", - "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.mjs", - "chrome/browser/content/browser/sidebar/sidebar-bookmarks.html", - "chrome/browser/content/browser/sidebar/sidebar-bookmarks.mjs", - "chrome/browser/content/browser/sidebar/sidebar-customize.css", - "chrome/browser/content/browser/sidebar/sidebar-customize.html", - "chrome/browser/content/browser/sidebar/sidebar-customize.mjs", - "chrome/browser/content/browser/sidebar/sidebar-history.css", - "chrome/browser/content/browser/sidebar/sidebar-history.html", - "chrome/browser/content/browser/sidebar/sidebar-history.mjs", - "chrome/browser/content/browser/sidebar/sidebar-main.css", - "chrome/browser/content/browser/sidebar/sidebar-main.mjs", - "chrome/browser/content/browser/sidebar/sidebar-page.mjs", - "chrome/browser/content/browser/sidebar/sidebar-panel-header.css", - "chrome/browser/content/browser/sidebar/sidebar-panel-header.mjs", - "chrome/browser/content/browser/sidebar/sidebar-permissions-ui.mjs", - "chrome/browser/content/browser/sidebar/sidebar-permissions.mjs", - "chrome/browser/content/browser/sidebar/sidebar-pins-promo.css", - "chrome/browser/content/browser/sidebar/sidebar-pins-promo.mjs", - "chrome/browser/content/browser/sidebar/sidebar-syncedtabs.html", - "chrome/browser/content/browser/sidebar/sidebar-syncedtabs.mjs", - "chrome/browser/content/browser/sidebar/sidebar-tab-list.css", - "chrome/browser/content/browser/sidebar/sidebar-tab-list.mjs", - "chrome/browser/content/browser/sidebar/sidebar-tab-row.css", - "chrome/browser/content/browser/sidebar/sidebar.css", - "chrome/browser/content/browser/spotlight.html", - "chrome/browser/content/browser/spotlight.js", - "chrome/browser/content/browser/static-robot.png", - "chrome/browser/content/browser/syncedtabs/sidebar.js", - "chrome/browser/content/browser/syncedtabs/sidebar.xhtml", - "chrome/browser/content/browser/tabbrowser/browser-allTabsMenu.js", - "chrome/browser/content/browser/tabbrowser/browser-ctrlTab.js", - "chrome/browser/content/browser/tabbrowser/browser-fullZoom.js", - "chrome/browser/content/browser/tabbrowser/drag-and-drop.js", - "chrome/browser/content/browser/tabbrowser/opentabs-splitview.css", - "chrome/browser/content/browser/tabbrowser/opentabs-splitview.mjs", - "chrome/browser/content/browser/tabbrowser/opentabs.css", - "chrome/browser/content/browser/tabbrowser/opentabs.html", - "chrome/browser/content/browser/tabbrowser/split-view-footer.js", - "chrome/browser/content/browser/tabbrowser/tab-groups-list.mjs", - "chrome/browser/content/browser/tabbrowser/tab-hover-preview.mjs", - "chrome/browser/content/browser/tabbrowser/tab.js", - "chrome/browser/content/browser/tabbrowser/tabbrowser.js", - "chrome/browser/content/browser/tabbrowser/tabgroup-menu.js", - "chrome/browser/content/browser/tabbrowser/tabgroup.js", - "chrome/browser/content/browser/tabbrowser/tabnote-menu.js", - "chrome/browser/content/browser/tabbrowser/tabs.js", - "chrome/browser/content/browser/tabbrowser/tabsplitview.js", - "chrome/browser/content/browser/tabunloader/aboutUnloads.css", - "chrome/browser/content/browser/tabunloader/aboutUnloads.html", - "chrome/browser/content/browser/tabunloader/aboutUnloads.js", - "chrome/browser/content/browser/taskbartabs/TaskbarTabs.1.schema.json", - "chrome/browser/content/browser/textrecognition/textrecognition.css", - "chrome/browser/content/browser/textrecognition/textrecognition.html", - "chrome/browser/content/browser/textrecognition/textrecognition.mjs", - "chrome/browser/content/browser/translations/TranslationsPanelShared.sys.mjs", - "chrome/browser/content/browser/translations/fullPageTranslationsPanel.js", - "chrome/browser/content/browser/translations/selectTranslationsPanel.js", - "chrome/browser/content/browser/urlbar/SearchModeSwitcher.mjs", - "chrome/browser/content/browser/urlbar/SmartbarInput.mjs", - "chrome/browser/content/browser/urlbar/SmartbarInputController.mjs", - "chrome/browser/content/browser/urlbar/SmartbarInputUtils.mjs", - "chrome/browser/content/browser/urlbar/UrlbarInput.mjs", - "chrome/browser/content/browser/usercontext/usercontext.css", - "chrome/browser/content/browser/utilityOverlay.js", - "chrome/browser/content/browser/vpn-card.mjs", - "chrome/browser/content/browser/webext-panels.css", - "chrome/browser/content/browser/webext-panels.js", - "chrome/browser/content/browser/webext-panels.xhtml", - "chrome/browser/content/browser/webrtc/webrtc-preview.css", - "chrome/browser/content/browser/webrtc/webrtc-preview.mjs", - "chrome/browser/content/browser/webrtcIndicator.js", - "chrome/browser/content/browser/webrtcIndicator.xhtml", - "chrome/browser/content/builtin-themes/aiwindow/aiwindow-theme.css", - "chrome/browser/content/builtin-themes/aiwindow/manifest.json", - "chrome/browser/content/builtin-themes/alpenglow/background-gradient-dark.svg", - "chrome/browser/content/builtin-themes/alpenglow/background-gradient.svg", - "chrome/browser/content/builtin-themes/alpenglow/background-noodles-left-dark.svg", - "chrome/browser/content/builtin-themes/alpenglow/background-noodles-left.svg", - "chrome/browser/content/builtin-themes/alpenglow/background-noodles-right-dark.svg", - "chrome/browser/content/builtin-themes/alpenglow/background-noodles-right.svg", - "chrome/browser/content/builtin-themes/alpenglow/icon.svg", - "chrome/browser/content/builtin-themes/alpenglow/manifest.json", - "chrome/browser/content/builtin-themes/alpenglow/preview.svg", - "chrome/browser/content/builtin-themes/dark/icon.svg", - "chrome/browser/content/builtin-themes/dark/manifest.json", - "chrome/browser/content/builtin-themes/dark/preview.svg", - "chrome/browser/content/builtin-themes/light/icon.svg", - "chrome/browser/content/builtin-themes/light/manifest.json", - "chrome/browser/content/builtin-themes/light/preview.svg", - "chrome/browser/content/cart.svg", - "chrome/browser/content/chill.svg", - "chrome/browser/content/circle.svg", - "chrome/browser/content/dollar.svg", - "chrome/browser/content/fence.svg", - "chrome/browser/content/fingerprint.svg", - "chrome/browser/content/food.svg", - "chrome/browser/content/fruit.svg", - "chrome/browser/content/gift.svg", - "chrome/browser/content/pet.svg", - "chrome/browser/content/tree.svg", - "chrome/browser/content/vacation.svg" + "chrome/browser/content/usercontext/briefcase.svg", + "chrome/browser/content/usercontext/cart.svg", + "chrome/browser/content/usercontext/chill.svg", + "chrome/browser/content/usercontext/circle.svg", + "chrome/browser/content/usercontext/dollar.svg", + "chrome/browser/content/usercontext/fence.svg", + "chrome/browser/content/usercontext/fingerprint.svg", + "chrome/browser/content/usercontext/food.svg", + "chrome/browser/content/usercontext/fruit.svg", + "chrome/browser/content/usercontext/gift.svg", + "chrome/browser/content/usercontext/pet.svg", + "chrome/browser/content/usercontext/tree.svg", + "chrome/browser/content/usercontext/vacation.svg" ], "prefixes": [ - "chrome/browser/content/" + "chrome/browser/content/usercontext/" ] }, "omni.ja|content|global": { @@ -3065,6 +2221,9 @@ "chrome/toolkit/content/global/aboutNetErrorHelpers.mjs", "chrome/toolkit/content/global/aboutNetworking.html", "chrome/toolkit/content/global/aboutNetworking.js", + "chrome/toolkit/content/global/aboutPDF.css", + "chrome/toolkit/content/global/aboutPDF.html", + "chrome/toolkit/content/global/aboutPDF.mjs", "chrome/toolkit/content/global/aboutProcesses.css", "chrome/toolkit/content/global/aboutProcesses.html", "chrome/toolkit/content/global/aboutProcesses.js", @@ -3077,6 +2236,9 @@ "chrome/toolkit/content/global/aboutServiceWorkers.xhtml", "chrome/toolkit/content/global/aboutSupport.js", "chrome/toolkit/content/global/aboutSupport.xhtml", + "chrome/toolkit/content/global/aboutSyncLog.css", + "chrome/toolkit/content/global/aboutSyncLog.html", + "chrome/toolkit/content/global/aboutSyncLog.mjs", "chrome/toolkit/content/global/aboutTelemetry.css", "chrome/toolkit/content/global/aboutTelemetry.js", "chrome/toolkit/content/global/aboutTelemetry.xhtml", @@ -3149,7 +2311,6 @@ "chrome/toolkit/content/global/commonDialog.js", "chrome/toolkit/content/global/commonDialog.xhtml", "chrome/toolkit/content/global/contentAreaUtils.js", - "chrome/toolkit/content/global/cookiebanners/CookieBannerRule.schema.json", "chrome/toolkit/content/global/crashes.css", "chrome/toolkit/content/global/crashes.html", "chrome/toolkit/content/global/crashes.js", @@ -3206,6 +2367,7 @@ "chrome/toolkit/content/global/elements/moz-input-box.js", "chrome/toolkit/content/global/elements/moz-input-color.css", "chrome/toolkit/content/global/elements/moz-input-color.mjs", + "chrome/toolkit/content/global/elements/moz-input-color.tokens.css", "chrome/toolkit/content/global/elements/moz-input-common.css", "chrome/toolkit/content/global/elements/moz-input-email.mjs", "chrome/toolkit/content/global/elements/moz-input-folder.css", @@ -3235,10 +2397,15 @@ "chrome/toolkit/content/global/elements/moz-reorderable-list.css", "chrome/toolkit/content/global/elements/moz-reorderable-list.mjs", "chrome/toolkit/content/global/elements/moz-reorderable-list.tokens.css", + "chrome/toolkit/content/global/elements/moz-segmented-control.css", + "chrome/toolkit/content/global/elements/moz-segmented-control.mjs", + "chrome/toolkit/content/global/elements/moz-segmented-control.tokens.css", "chrome/toolkit/content/global/elements/moz-select.css", "chrome/toolkit/content/global/elements/moz-select.mjs", "chrome/toolkit/content/global/elements/moz-select.tokens.css", "chrome/toolkit/content/global/elements/moz-support-link.mjs", + "chrome/toolkit/content/global/elements/moz-textarea.css", + "chrome/toolkit/content/global/elements/moz-textarea.mjs", "chrome/toolkit/content/global/elements/moz-toggle.css", "chrome/toolkit/content/global/elements/moz-toggle.mjs", "chrome/toolkit/content/global/elements/moz-toggle.tokens.css", @@ -3248,9 +2415,10 @@ "chrome/toolkit/content/global/elements/named-deck.js", "chrome/toolkit/content/global/elements/notificationbox.js", "chrome/toolkit/content/global/elements/panel-item.css", + "chrome/toolkit/content/global/elements/panel-item.tokens.css", "chrome/toolkit/content/global/elements/panel-list.css", - "chrome/toolkit/content/global/elements/panel-list.js", "chrome/toolkit/content/global/elements/panel-list.mjs", + "chrome/toolkit/content/global/elements/panel-list.tokens.css", "chrome/toolkit/content/global/elements/panel.js", "chrome/toolkit/content/global/elements/popupnotification.js", "chrome/toolkit/content/global/elements/radio.js", @@ -3258,7 +2426,11 @@ "chrome/toolkit/content/global/elements/stringbundle.js", "chrome/toolkit/content/global/elements/tabbox.js", "chrome/toolkit/content/global/elements/text.js", - "chrome/toolkit/content/global/elements/textrecognition.js", + "chrome/toolkit/content/global/elements/theme-picker-direct-controller.mjs", + "chrome/toolkit/content/global/elements/theme-picker-remote-controller.mjs", + "chrome/toolkit/content/global/elements/theme-picker-storybook-controller.mjs", + "chrome/toolkit/content/global/elements/theme-picker.css", + "chrome/toolkit/content/global/elements/theme-picker.mjs", "chrome/toolkit/content/global/elements/toolbarbutton.js", "chrome/toolkit/content/global/elements/tree.js", "chrome/toolkit/content/global/elements/videocontrols.js", @@ -3291,6 +2463,7 @@ "chrome/toolkit/content/global/megalist/components/password-card/password-card.mjs", "chrome/toolkit/content/global/megalist/components/virtual-passwords-list/virtual-passwords-list.mjs", "chrome/toolkit/content/global/megalist/icons/cpm-fox-illustration.svg", + "chrome/toolkit/content/global/megalist/megalist-agent.css", "chrome/toolkit/content/global/megalist/megalist.css", "chrome/toolkit/content/global/megalist/megalist.html", "chrome/toolkit/content/global/ml/AIFeature.sys.mjs", @@ -3307,7 +2480,6 @@ "chrome/toolkit/content/global/ml/ThomSample.mjs", "chrome/toolkit/content/global/ml/Utils.sys.mjs", "chrome/toolkit/content/global/ml/backends/LlamaCppPipeline.mjs", - "chrome/toolkit/content/global/ml/backends/LlamaPipeline.mjs", "chrome/toolkit/content/global/ml/backends/ONNXPipeline.mjs", "chrome/toolkit/content/global/ml/backends/OpenAIPipeline.mjs", "chrome/toolkit/content/global/ml/backends/Pipeline.mjs", @@ -3324,7 +2496,6 @@ "chrome/toolkit/content/global/ml/security/SecurityUtils.sys.mjs", "chrome/toolkit/content/global/ml/security/policies/tool-execution-policies.json", "chrome/toolkit/content/global/ml/transformers.js", - "chrome/toolkit/content/global/ml/wllama-module.mjs", "chrome/toolkit/content/global/mozilla.html", "chrome/toolkit/content/global/net-error-card.mjs", "chrome/toolkit/content/global/neterror/aboutNetErrorCodes.js", @@ -3359,7 +2530,6 @@ "chrome/toolkit/content/global/simplifyMode.css", "chrome/toolkit/content/global/third_party/cfworker/json-schema.js", "chrome/toolkit/content/global/third_party/d3/d3.js", - "chrome/toolkit/content/global/toggle-group.css", "chrome/toolkit/content/global/translations/TranslationsFeature.sys.mjs", "chrome/toolkit/content/global/translations/TranslationsTelemetry.sys.mjs", "chrome/toolkit/content/global/translations/TranslationsUtils.mjs", diff --git a/scripts/package.py b/scripts/package.py index 4011402df..833939572 100644 --- a/scripts/package.py +++ b/scripts/package.py @@ -12,13 +12,14 @@ from _mixin import find_src_dir, get_moz_target, list_files, run, temp_cd -# glxtest and vaapitest are NOT here: Firefox runs them at startup to learn what -# the GPU and the video stack can do, and without them nsIGfxInfo has no data, -# so the driver blocklist refuses every WebGL context ("WebglAllowWindowsNativeGl: +# The GPU probe is NOT here (gfxtest; glxtest and vaapitest before Firefox 156): +# Firefox runs it at startup to learn what the GPU and the video stack can do, +# and without it nsIGfxInfo has no data, so the driver blocklist refuses every +# WebGL context ("WebglAllowWindowsNativeGl: # false restricts context creation on this system ... Exhausted GL driver # options", measured 2026-09-18 against stock 152.0.4 on the same machine, which # returned a full WebGL 2.0 context from the real GPU). The launcher papers over -# it with webgl.force-enabled; shipping the two probes is what makes the browser +# it with webgl.force-enabled; shipping the probe is what makes the browser # decide the way stock does in the first place. ~50 KB. UNNEEDED_PATHS = {'uninstall', 'pingsender.exe', 'pingsender'} diff --git a/tests/patches/gfx-probes-packaged.py b/tests/patches/gfx-probes-packaged.py index 6ed69e0df..87b6b41f0 100644 --- a/tests/patches/gfx-probes-packaged.py +++ b/tests/patches/gfx-probes-packaged.py @@ -1,10 +1,11 @@ r""" The GPU probes ship, so the browser decides about graphics the way stock does. -Firefox runs two small helper binaries at startup -- `glxtest` (GL/EGL) and -`vaapitest` (video decode) -- and feeds what they report into nsIGfxInfo. Without -them gfxInfo has nothing, and the driver blocklist refuses **every** WebGL -context: +Firefox runs a small helper binary at startup -- `gfxtest`, which probes GL/EGL +(its glxtest mode) and video decode (its vaapitest mode); before Firefox 156 these +were two binaries, `glxtest` and `vaapitest` -- and feeds what it reports into +nsIGfxInfo. Without it gfxInfo has nothing, and the driver blocklist refuses +**every** WebGL context: WebGL creation failed: * WebglAllowWindowsNativeGl:false restricts context creation on this system. @@ -38,7 +39,7 @@ from helpers import resolve_binary # noqa: E402 REPO_ROOT = Path(__file__).resolve().parents[2] -PROBES = ("glxtest", "vaapitest") +PROBES = ("gfxtest",) LOAD_TIMEOUT_S = 90 ATTEMPTS = 2 @@ -171,7 +172,7 @@ def main() -> int: print(f"FAIL: {failure}") if failures: return 1 - print("PASS: glxtest and vaapitest ship, and WebGL works without a pref forcing it") + print("PASS: gfxtest ships, and WebGL works without a pref forcing it") return 0 diff --git a/upstream.sh b/upstream.sh index c3382e74b..919672aa7 100644 --- a/upstream.sh +++ b/upstream.sh @@ -1,2 +1,2 @@ -version=152.0.4 -release=beta.31 +version=156.0.1 +release=beta.32