diff --git a/additions/juggler/TargetRegistry.js b/additions/juggler/TargetRegistry.js index 70b12160..766228d7 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 edc38d40..0fe97afc 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 ecc24881..5f20e628 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 2eb21d7d..88a3879c 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 63f613e0..e096a6fe 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 971cac9c..8cbc83ad 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 13ae5844..8c64410d 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 5bbe305c..dd1f42e5 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 e9940d06..c51daa8c 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 13526b9e..8699bfd9 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 a4cdcc74..90c48931 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 bc5aa2da..4a2c299c 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 3d669510..8bfeccfe 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 72e5c2d3..4a39d384 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 b845aad2..2059ab52 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 685ffd4f..5536f9d9 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 d727661b..394362f9 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 fd371055..cb7a2be3 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 69039896..f0258511 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 61f647db..3ef12b63 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 a461da77..cebded79 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 49ab278c..bb0e233e 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 3662bc81..9d5e557a 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 19847b6a..7d21b3bb 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 8d3f3675..01252d61 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 e7183ab6..55778b06 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 bb09186b..51af7c5f 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 2d27cda7..5300208e 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 ba8147d7..05517a87 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 cc540502..9db8a08b 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 4011402d..83393957 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 6ed69e0d..87b6b41f 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 c3382e74..919672aa 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