{
  "commits": {
    "054675d1c263": {
      "author": "Atila Butkovits",
      "avatar": "https://www.gravatar.com/avatar/d57dec63a56cf8f6739509d2a319c6ee?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 36f82312429430111f52ceaf041101de012e05e5.",
      "email": "abutkovits@mozilla.com",
      "hash": "054675d1c2635c2ef7ea338b2e5f9a70ef7345d2",
      "subject": "Revert \"Bug 2052296 - add a pref and enterprise policy for CNSA2.0 key agreement. r=keeler,fluent-reviewers,mkaply,flod\" for causing failures at test_sorted_alphabetically.js."
    },
    "4418cb57584f": {
      "author": "iulian moraru",
      "avatar": "https://www.gravatar.com/avatar/348b805af88f773829064778b66be468?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 53c1d9a7959fe5bed67947eb4e1b6fab33c490f5.\n\nRevert \"Bug 2047140 [Linux] Keep D\u0026D source GtkWidget live until D\u0026D operations is finished r=emilio\"\n\nThis reverts commit 255dd3fb623e644f06393bfe3b93634fbf9b0f9e.\n\nRevert \"Bug 2047140 [Linux] Move source side of D\u0026D operation to extra class nsDragSessionSource r=emilio\"\n\nThis reverts commit 287187569ba7e18e495a066ffaf3729de021b097.",
      "email": "imoraru@mozilla.com",
      "hash": "4418cb57584fe05999cb640372630c48504dca3b",
      "subject": "Revert \"Bug 2047140: apply code formatting via Lando\" for causing build bustages on nsDragService.cpp."
    },
    "4a5c1d78b7ca": {
      "author": "Atila Butkovits",
      "avatar": "https://www.gravatar.com/avatar/d57dec63a56cf8f6739509d2a319c6ee?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 3a31bc0f90b1ac0a4b0124f1b29071c62b2326c6.\n\nRevert \"Bug 2051701 - Add prefs for referral feature r=niklas\"\n\nThis reverts commit 75ef1ad4417e72cd51e26e2af2bb240ea7bc1ee9.",
      "email": "abutkovits@mozilla.com",
      "hash": "4a5c1d78b7ca92690a42e5a71093dc4a7bfe4817",
      "subject": "Revert \"Bug 2051706, Bug 2051701 - Generate and store referral code r=niklas\" for causing failures at browser_all_files_referenced.js."
    },
    "53c1d9a7959f": {
      "author": "Lando",
      "avatar": "https://www.gravatar.com/avatar/e3fc5c639ea50123800e4b7471f88787?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "# ignore-this-changeset",
      "email": "lando@lando.moz.tools",
      "hash": "53c1d9a7959fe5bed67947eb4e1b6fab33c490f5",
      "subject": "Bug 2047140: apply code formatting via Lando"
    },
    "542f8f61bd4d": {
      "author": "Cristian Tuns",
      "avatar": "https://www.gravatar.com/avatar/bf43f0be3f88260acd3090c7be8bebe7?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit f5903c5a28dbe51820d2dd3861f4f71ca1eba80a.",
      "email": "ctuns@mozilla.com",
      "hash": "542f8f61bd4d999cedd4089b7b31f0523aceaa8c",
      "subject": "Revert \"Bug 2054585 - Fix vertical tabs container slowly shrinking when opening a sidebar panel r=nsharpley\" for causing bc failures in browser_sidebar_prefs.js"
    },
    "5678940daf10": {
      "author": "Lando",
      "avatar": "https://www.gravatar.com/avatar/e3fc5c639ea50123800e4b7471f88787?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "# ignore-this-changeset",
      "email": "lando@lando.moz.tools",
      "hash": "5678940daf107a3b9c764859e334be98f8bdd464",
      "subject": "Bug 2047140: apply code formatting via Lando"
    },
    "57cd3e3663d2": {
      "author": "Atila Butkovits",
      "avatar": "https://www.gravatar.com/avatar/d57dec63a56cf8f6739509d2a319c6ee?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit ed5c8b843371c87ccf0320881526963c20062107.",
      "email": "abutkovits@mozilla.com",
      "hash": "57cd3e3663d250c5115a14485241f15a7b888ef1",
      "subject": "Revert \"Bug 2054742 - Fix some incremental table layout issues during printing. r=TYLin,layout-reviewers,dshin\" for causing failures at table-container-query-crash-print.html."
    },
    "7061a6d010e9": {
      "author": "Alexandru Marc",
      "avatar": "https://www.gravatar.com/avatar/f90e8bfbc9c1383d73053a8809b77e48?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 5678940daf107a3b9c764859e334be98f8bdd464.\n\nRevert \"Bug 2047140 [Linux] Keep D\u0026D source GtkWidget live until D\u0026D operations is finished r=emilio\"\n\nThis reverts commit f3ab8173ae6d66d495804e100c436ef398d5ae63.\n\nRevert \"Bug 2047140 [Linux] Move source side of D\u0026D operation to extra class nsDragSessionSource r=emilio\"\n\nThis reverts commit 89d2da4b0db10670c9f462a56c366d13d0b34b6a.",
      "email": "amarc@mozilla.com",
      "hash": "7061a6d010e959aa80ab642492a3f4cc2f28c4e7",
      "subject": "Revert \"Bug 2047140: apply code formatting via Lando\" for causing build bustages @ nsDragService"
    },
    "71329aca5b15": {
      "author": "Alexandru Marc",
      "avatar": "https://www.gravatar.com/avatar/f90e8bfbc9c1383d73053a8809b77e48?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 4fd92e7ad15a4971203853f10d984d3359a0d958.",
      "email": "amarc@mozilla.com",
      "hash": "71329aca5b158e5e04d1840809e0b4c302518c87",
      "subject": "Revert \"Bug 1729711 - Fix __FILE__ path separator handling in QuotaCommon on Windows. r=dom-storage-reviewers,asuth\" for causing test failure"
    },
    "7336b7a931f4": {
      "author": "Atila Butkovits",
      "avatar": "https://www.gravatar.com/avatar/d57dec63a56cf8f6739509d2a319c6ee?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 3d2c6ed74d7243566a300867b231a7d910ff70a2.",
      "email": "abutkovits@mozilla.com",
      "hash": "7336b7a931f43921858bd103866ec2d52b3e7d14",
      "subject": "Revert \"Bug 2050289 - Show remote tabs for single-device users in top history menu r=sync-reviewers,fluent-reviewers,places-reviewers,akulyk,flod,mak\" for causing failures at browser_title_case_menus.js."
    },
    "D304430": {
      "author": "Jari Jalkanen",
      "avatar": "https://www.gravatar.com/avatar/2b84b1a415615d22d7afc6554020d164?d=identicon\u0026s=64",
      "cl": "D304430",
      "clUrl": "https://phabricator.services.mozilla.com/D304430",
      "description": "On Windows, FILE can produce paths with backslashes, but the\nquota manager's error logging compares against hardcoded forward-slash\nsuffixes. This causes an assertion failure in GetTreeBase.\n\nAdditionally, when the objdir is under the source tree, the source\ntree base is a prefix of the objdir base, so exported headers\nincorrectly match the source tree check first.\n\nFix both by adding a constexpr NormalizedSourcePath template that\nnormalizes backslashes to forward slashes at compile time, used in the\nQM_HANDLE_ERROR macros and in GetSourceTreeBase/GetObjdirDistInclude-\nTreeBase. Also reorder the objdir check before the source tree check\nin MakeSourceFileRelativePath.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D304430",
      "email": "jjalkanen@mozilla.com",
      "hash": "4fd92e7ad15a4971203853f10d984d3359a0d958",
      "subject": "Bug 1729711 - Fix __FILE__ path separator handling in QuotaCommon on Windows. r=dom-storage-reviewers,asuth"
    },
    "D307024": {
      "author": "Stephen A Pohl",
      "avatar": "https://www.gravatar.com/avatar/ceeb157ce698ad8c3e5be7c1317498bf?d=identicon\u0026s=64",
      "cl": "D307024",
      "clUrl": "https://phabricator.services.mozilla.com/D307024",
      "description": "A native file picker now ignores a confirmation that arrives within security.notification_enable_delay (default 500) of the picker being shown, keeping the picker open instead of accepting the selection. This reuses the existing anti-clickjacking delay already applied to security-sensitive notifications rather than adding a dedicated pref.\n\nThe shared timing lives in nsBaseFilePicker: RecordLastShownTime records when the picker is shown, IsPickerInputProtected says whether the time range is still active, and IsWithinInputProtectionTimeRange holds the timing check so it can be unit-tested. Each platform ignores an early confirmation in its native confirm path: macOS via an NSOpenSavePanelDelegate returning NO from panel:validateURL:error:, Windows via IFileDialogEvents::OnFileOk returning S_FALSE, and GTK by ignoring an early response from the non-portal file chooser. The GTK portal path returns only a final result and is left unchanged.\n\nA gtest covers the shared timing check.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D307024",
      "email": "spohl@mozilla.com",
      "hash": "603fac07c5a7f2d3d2534da9660dce724ea31878",
      "subject": "Bug 2036097: Ignore native file picker confirmations that arrive too soon after the picker is shown. r=Thinker,win-reviewers,gstoll,mac-reviewers,bradwerth,Gijs"
    },
    "D309170": {
      "author": "Sammy Khamis",
      "avatar": "https://www.gravatar.com/avatar/8fe753dbe031a3e6a198606619cb5201?d=identicon\u0026s=64",
      "cl": "D309170",
      "clUrl": "https://phabricator.services.mozilla.com/D309170",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D309170",
      "email": "skhamis@mozilla.com",
      "hash": "f58cf540d59fdfb790fcb94fa72fe47764b79d7e",
      "subject": "Bug 2050289 - Show remote tabs for single-device users in top history menu r=sync-reviewers,fluent-reviewers,places-reviewers,akulyk,flod,mak"
    },
    "D309256": {
      "author": "Benjamin Beurdouche",
      "avatar": "https://www.gravatar.com/avatar/38f561698d679a724938d4600c0f8b52?d=identicon\u0026s=64",
      "cl": "D309256",
      "clUrl": "https://phabricator.services.mozilla.com/D309256",
      "description": "The unlock-KEK timeout and the createKek cache timeout crossed the\nIDL / C++ / FFI boundary as uint32_t milliseconds, capping the maximum\nwindow at U32_MAX ms (~49 days). Widen timeoutMs / cacheTimeoutMs to\nuint64_t across nsILockstore, LockstoreService and the keystore FFI; the\nRust core already used std::time::Duration, so no core type changed.\n\nAdd an unlock_deadline() helper that clamps the requested window to a\n~10-year maximum and computes the deadline with Instant::checked_add, so\na large u64 timeout cannot overflow the monotonic clock and panic. It is\nused at all three KEK-cache insertion sites.\n\nxpcshell tests cover a timeout of 2**32 ms (which truncates to 0 under\nuint32_t, leaving the KEK locked) for both unlockKek and createKek, plus\na Number.MAX_SAFE_INTEGER timeout that would overflow Instant + Duration\nwithout the clamp. A Rust unit test exercises unlock_deadline directly.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309256",
      "email": "bbeurdouche@mozilla.com",
      "hash": "c0e676765e81169bdf0436fffb0b9d8b8e863aa8",
      "subject": "Bug 2051136 - Extend the Lockstore unlock/cache timeout range to 64-bit milliseconds r=simonf"
    },
    "D309257": {
      "author": "Benjamin Beurdouche",
      "avatar": "https://www.gravatar.com/avatar/38f561698d679a724938d4600c0f8b52?d=identicon\u0026s=64",
      "cl": "D309257",
      "clUrl": "https://phabricator.services.mozilla.com/D309257",
      "description": "Replace the ad-hoc in-memory zeroization with RAII from the zeroize crate\nacross the Rust core and the C++ service.\n\nRust (lockstore_rs / lockstore_ffi):\n  - crypto::generate_random_key, decrypt_with_symkey, decrypt_with_key and\n    pbkdf2::derive_kek now return Zeroizing\u003cVec\u003cu8\u003e\u003e, with the PBKDF2 HMAC\n    intermediates held in Zeroizing too.\n  - CachedKek holds a Zeroizing\u003cVec\u003cu8\u003e\u003e and its hand-written Drop is\n    removed; every manual .zeroize() call (wrapping keys, DEK/KEK\n    plaintexts) is gone -- the values wipe on drop.\n  - get_dek_internal / get_dek / decrypt return Zeroizing; LocalKekRecord\n    (the one at-rest record holding a plaintext KEK) derives ZeroizeOnDrop;\n    the FFI copies secrets into Zeroizing buffers.\n  - The persisted-row scrub crypto::zeroize is renamed zeroize_on_disk to\n    make clear it is an at-rest concern, distinct from the crate.\n\nC++ (LockstoreService):\n  - ZeroizingCString / ZeroizingByteArray RAII wrappers memset their\n    backing store on destruction and wrap the password/PIN and imported-DEK\n    copies that ImplXpcomMethod carries across the dispatch lambda (the\n    longest-lived C++ copies).\n\nNo production JS consumer holds Lockstore secrets (only the xpcshell test),\nso nothing to scrub there.\n\nVerified behaviour-preserving by the existing lockstore xpcshell suite (151\nsubtests) and gtests (87), which exercise the create/unlock/get_dek/encrypt/\ndecrypt/import paths end to end.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309257",
      "email": "bbeurdouche@mozilla.com",
      "hash": "27acec9a7e93ee687b548e3a13920cda0de4a95e",
      "subject": "Bug 2039825 - Zeroize Lockstore sensitive buffers via the zeroize crate r=simonf"
    },
    "D309264": {
      "author": "Benjamin Beurdouche",
      "avatar": "https://www.gravatar.com/avatar/38f561698d679a724938d4600c0f8b52?d=identicon\u0026s=64",
      "cl": "D309264",
      "clUrl": "https://phabricator.services.mozilla.com/D309264",
      "description": "The lockstore_rs integration tests under tests/ had drifted and no\nlonger compiled against the current API. Repair them so they build and\npass under `cargo test -p lockstore_rs`:\n\n- create_dek / create_dek_with_cipher gained a key_size parameter\n  (bug 1996558)\n- several crypto and keystore methods now return Zeroizing\u003cVec\u003cu8\u003e\u003e\n  (bug 2039825); Zeroizing only derives PartialEq against another\n  Zeroizing, so decrypted secrets are compared as slices\n- LockstoreDatastore::new now borrows its directory (\u0026Path)\n- crypto::zeroize was renamed zeroize_on_disk\n\nThese suites are not wired into CI: lockstore_rs would be the first\nnss-rs-dependent crate in RUST_TESTS, and the tools/rusttests build does\nnot produce the NSS shared libraries its standalone test binary needs to\nlink. The equivalent functionality is covered by the C++ gtests.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309264",
      "email": "bbeurdouche@mozilla.com",
      "hash": "c5b47b4471e5ec05af8561ce6f55a2ef0056d132",
      "subject": "Bug 2055631 - Fix the stale lockstore_rs cargo-test suites r=nwipper"
    },
    "D309265": {
      "author": "Benjamin Beurdouche",
      "avatar": "https://www.gravatar.com/avatar/38f561698d679a724938d4600c0f8b52?d=identicon\u0026s=64",
      "cl": "D309265",
      "clUrl": "https://phabricator.services.mozilla.com/D309265",
      "description": "Resolve the clippy lints flagged across security/lockstore by the warn\nconfiguration (all, cargo, pedantic, use_self, needless_return):\n\n- inline variables into format! / log! strings (uninlined_format_args)\n  throughout the FFI and core crates\n- use Self in inherent impls and From conversions (use_self)\n- merge identical match arms in error_to_nsresult (match_same_arms)\n- take \u0026LockstoreError and \u0026Path instead of by value, dropping a clone\n  at the create-datastore call site (needless_pass_by_value)\n- drop the unnecessary Result wrap on LockstoreDatastore::init\n  (unnecessary_wraps)\n- convert a match to let-else, swap a negated if/else, iterate by\n  reference, and elide an impl lifetime\n\nWrappedDek.wrapped_dek keeps its name (it is the documented on-disk JSON\nkey) with a scoped allow. The remaining redundant_feature_names warnings\noriginate in dependency manifests (kvstore, nss-rs), not Lockstore.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309265",
      "email": "bbeurdouche@mozilla.com",
      "hash": "343b7ad0dd09c5297dce6cc9ea8bc76203ebe561",
      "subject": "Bug 2055631 - Fix clippy warnings in Lockstore r=nwipper"
    },
    "D309377": {
      "author": "andra",
      "avatar": "https://www.gravatar.com/avatar/ccaee13aece847ca000772a7506b8f8f?d=identicon\u0026s=64",
      "cl": "D309377",
      "clUrl": "https://phabricator.services.mozilla.com/D309377",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D309377",
      "email": "andra.patrascanu@yahoo.com",
      "hash": "72da8d1e912dd3bc9c654fe115dee3ad1eac0c72",
      "subject": "Bug 2022992 - Unify GetOrCreateASRForFrame and GetOrCreateASRForStickyFrame using extra ASRKind parameter r=botond"
    },
    "D309537": {
      "author": "Benjamin Beurdouche",
      "avatar": "https://www.gravatar.com/avatar/38f561698d679a724938d4600c0f8b52?d=identicon\u0026s=64",
      "cl": "D309537",
      "clUrl": "https://phabricator.services.mozilla.com/D309537",
      "description": "Per review, drop the \"collection\" terminology and talk about DEKs\ndirectly: a DEK is identified by a name, so \"collection\" /\n\"collection_name\" becomes \"dekName\" / \"dek_name\" across the public IDL,\nthe C++ LockstoreService, the Rust core + FFI, the gtests, the xpcshell\ntest and the cargo-test suites.\n\nPure rename with no behaviour change: the runtime DEK-name values, the\non-disk row keys and the per-DEK data namespace are all unchanged; only\nidentifiers and doc wording move from \"collection\" to \"DEK name\".\nVerified by the lockstore gtest, xpcshell and cargo-test suites.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309537",
      "email": "bbeurdouche@mozilla.com",
      "hash": "d9677d8635bdf7abcce22b4acdba5f41b5f50673",
      "subject": "Bug 2055631 - Rename the \"collection\" terminology to DEK name in Lockstore r=simonf"
    },
    "D309538": {
      "author": "Benjamin Beurdouche",
      "avatar": "https://www.gravatar.com/avatar/38f561698d679a724938d4600c0f8b52?d=identicon\u0026s=64",
      "cl": "D309538",
      "clUrl": "https://phabricator.services.mozilla.com/D309538",
      "description": "The lockstore_rs cargo-test suites cannot run in CI (the tools/rusttests\nbuild does not provide linkable NSS for a standalone test binary), so the\nC++ gtests are the CI guard for the keystore and datastore. Extend them\nto cover functionality the cargo-tests exercised but the gtests did not:\n\nTestLockstoreKeystore:\n- deleteKek: unreferenced (succeeds), in-use (rejects), unknown ref,\n  invalid ref format, empty ref\n- switchKek happy path: the DEK bytes and ciphertexts at rest are\n  preserved, the new KEK can read it, the old KEK no longer wraps it\n- addKek happy path: a second KEK wrapping the same DEK decrypts\n  ciphertext produced under the first\n- Password KEK: a correct unlock enables DEK ops, a wrong secret is\n  rejected without caching, and lockKek clears the cached secret\n- createKek identifier: deterministic/idempotent, and non-base64url\n  identifiers are rejected\n\nTestLockstoreDatastore:\n- two DEK-named datastores keep independent data namespaces\n- a datastore reached via a second KEK wrapping the same DEK reads the\n  same data (the namespace is keyed by the DEK, not the KEK)\n\nVerified with `mach gtest 'Lockstore*'` (101 tests, all passing).\n\nDifferential Revision: https://phabricator.services.mozilla.com/D309538",
      "email": "bbeurdouche@mozilla.com",
      "hash": "4e301d21d2c701a5e5cd0d624d2bb8896f2414fe",
      "subject": "Bug 2055631 - Extend the Lockstore gtests to cover the cargo-test functionality r=simonf"
    },
    "D309750": {
      "author": "Drew Willcoxon",
      "avatar": "https://www.gravatar.com/avatar/fa60148022a230fe1bacc441549b1c66?d=identicon\u0026s=64",
      "cl": "D309750",
      "clUrl": "https://phabricator.services.mozilla.com/D309750",
      "description": "The search bar's clear button is inside the `.urlbar-input-box` but the go\nbutton is outside it. Adding `margin-inline-end` to `.urlbar-input-box` creates\nthe space between the two buttons. So, add it to the urlbar's input box but not\nthe search bar's.\n\nThere are a couple drawbacks with this simple fix but they're fine IMO:\n\n* The purpose of the `margin-inline-end` is to add space between long search\n  strings and the buttons (bug 2052029, [1]). This patch doesn't address that\n  w/r/t the search bar, but that's the status quo right now anyway.\n\n* Hypothetically if we show the clear button in the urlbar too, then this patch\n  wouldn't be right, but I don't think we need to worry about that now.\n\n[1] https://phabricator.services.mozilla.com/D309750#inline-1672872\n\nDepends on D312197\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312204",
      "email": "adw@mozilla.com",
      "hash": "ef08941cee38e7664d42e41e6e5acbd43acab700",
      "subject": "Bug 2055109 - Remove extra space between the clear and go buttons in the search bar. r=dao,desktop-theme-reviewers,urlbar-reviewers"
    },
    "D310120": {
      "author": "John M. Schanck",
      "avatar": "https://www.gravatar.com/avatar/291ff310b7805a4159d7f46af196813e?d=identicon\u0026s=64",
      "cl": "D310120",
      "clUrl": "https://phabricator.services.mozilla.com/D310120",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D310120",
      "email": "jschanck@mozilla.com",
      "hash": "46272f7868ed2177fdc7c914ae99f576ac21b4a1",
      "subject": "Bug 2052296 - add a pref and enterprise policy for CNSA2.0 key agreement. r=keeler,fluent-reviewers,mkaply,flod"
    },
    "D310662": {
      "author": "Emma Zuehlcke",
      "avatar": "https://www.gravatar.com/avatar/46f58cc04758e80835820f0f1d5646bb?d=identicon\u0026s=64",
      "cl": "D310662",
      "clUrl": "https://phabricator.services.mozilla.com/D310662",
      "description": "The chrome-level --tabpanel-background-color stayed the legacy purple gradient with nova enabled, flashing behind the \u003cbrowser\u003e on window open, navigation, and fullscreen top-bar focus. Override it to the nova canvas for private windows.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D310662",
      "email": "emz@mozilla.com",
      "hash": "6e886f6a04baf7c3444af704b2a886eea20b1643",
      "subject": "Bug 2049373 - Fix nova PBM purple content-area backdrop flicker. r=desktop-theme-reviewers,sfoster"
    },
    "D310871": {
      "author": "Nathan Barrett",
      "avatar": "https://www.gravatar.com/avatar/fd7ea2d387f4c5d34b811080963a74fa?d=identicon\u0026s=64",
      "cl": "D310871",
      "clUrl": "https://phabricator.services.mozilla.com/D310871",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D310871",
      "email": "nbarrett@mozilla.com",
      "hash": "75ef1ad4417e72cd51e26e2af2bb240ea7bc1ee9",
      "subject": "Bug 2051701 - Add prefs for referral feature r=niklas"
    },
    "D310935": {
      "author": "Nathan Barrett",
      "avatar": "https://www.gravatar.com/avatar/fd7ea2d387f4c5d34b811080963a74fa?d=identicon\u0026s=64",
      "cl": "D310935",
      "clUrl": "https://phabricator.services.mozilla.com/D310935",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D310935",
      "email": "nbarrett@mozilla.com",
      "hash": "3a31bc0f90b1ac0a4b0124f1b29071c62b2326c6",
      "subject": "Bug 2051706 - Generate and store referral code r=niklas"
    },
    "D311079": {
      "author": "Paul Adenot",
      "avatar": "https://www.gravatar.com/avatar/56566788314477c51b94743ea7f68494?d=identicon\u0026s=64",
      "cl": "D311079",
      "clUrl": "https://phabricator.services.mozilla.com/D311079",
      "description": "about:logging picks a profiler preset via the same\ndevtools.performance.recording.* prefs used by the profiler popup and\nabout:profiling, so starting a logging session permanently overwrites\nwhatever preset/settings were configured for normal profiling.\n\nGive about:logging its own .aboutlogging postfix, following the existing\npattern used for remote profiling (.remote).\n\nBug: https://bugzilla.mozilla.org/show_bug.cgi?id=2053423\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311079",
      "email": "paul@paul.cx",
      "hash": "c0a9a668f67ea0c9c49894387968cc65e470b202",
      "subject": "Bug 2053423 - Give about:logging its own recording prefs, separate from the profiler popup. r=profiler-reviewers,canova"
    },
    "D311240": {
      "author": "Drew Willcoxon",
      "avatar": "https://www.gravatar.com/avatar/fa60148022a230fe1bacc441549b1c66?d=identicon\u0026s=64",
      "cl": "D311240",
      "clUrl": "https://phabricator.services.mozilla.com/D311240",
      "description": "The simplest fix would be to give the background some inset when the view is\nclosed so that it's drawn completely under the input outline. But that won't\nlook good for themes where the outline is semi-transparent.\n\nThis does the next simplest thing that should look good everywhere: When the\nview is closed, draw the input outline as a `border` on the background rather\nthan an `outline` on the input-container. When the view is open (and the\nbreakout is active), switch to drawing it as an `outline` on the\ninput-container, as we do today.\n\nI added some variables for this. There are so many now I'm not sure it's better\nthan just having a bunch of inline `@media` queries for Nova and non-Nova. I\nthink so but maybe not.\n\nDepends on D312204\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311240",
      "email": "adw@mozilla.com",
      "hash": "d4bae8b01713b44e87351832823e5a2c90b8297a",
      "subject": "Bug 2053381 - [Nova] Fix urlbar background leaking outside the input outline. r=dao,desktop-theme-reviewers,urlbar-reviewers"
    },
    "D311271": {
      "author": "Jens Stutte",
      "avatar": "https://www.gravatar.com/avatar/9dcff4a8838b41f34d204c2f4cadbcc4?d=identicon\u0026s=64",
      "cl": "D311271",
      "clUrl": "https://phabricator.services.mozilla.com/D311271",
      "description": "Serving a frozen cached idle value makes nsUserIdleService interpret the\nnon-monotonic reading as a return from idle and re-arm its timer at the 10ms\nfloor in a tight loop, which regressed ve-vp8-rt-cam cpuTime. Advance the\ncached value by the time elapsed since it was sampled so the reported idle\ntime stays monotonic between real polls.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311271",
      "email": "jstutte@mozilla.com",
      "hash": "e8f6490dc21699ff0c702def21f8aae231d2bbda",
      "subject": "Bug 2053041 - Advance the cached idle time by elapsed wall-clock in UserIdleServiceMutter::PollIdleTime r=Thinker"
    },
    "D311278": {
      "author": "fatadel",
      "avatar": "https://www.gravatar.com/avatar/c0edefdbf070cda026f3c90628df02b8?d=identicon\u0026s=64",
      "cl": "D311278",
      "clUrl": "https://phabricator.services.mozilla.com/D311278",
      "description": "Closing DevTools while the profiler was active issued a fire-and-forget\nstopProfilerAndDiscardProfile() request from ProfilerEventHandling's\ncomponentWillUnmount, racing the toolbox connection teardown and surfacing\nas an uncaught \"Connection closed\" exception. It also tried to stop\nrecordings that DevTools did not start.\n\nMove the responsibility to the perf actor: track whether the running\nprofiler was started from the panel, and on destroy stop it only in that\ncase, leaving recordings started elsewhere (the profiler toolbar popup,\nMOZ_PROFILER_STARTUP) running.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311278",
      "email": "afatkhutdinov@mozilla.com",
      "hash": "7f94689f2c228a96f6c271e30880e72778b7ab15",
      "subject": "Bug 2044383 - Stop the profiler from the perf actor on destroy instead of from the panel on close. r=canova,devtools-reviewers,profiler-reviewers,ochameau"
    },
    "D311649": {
      "author": "Anna Kulyk",
      "avatar": "https://www.gravatar.com/avatar/2c28c953ecebb4b478e4cd8e21ab56ff?d=identicon\u0026s=64",
      "cl": "D311649",
      "clUrl": "https://phabricator.services.mozilla.com/D311649",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D311649",
      "email": "akulyk@mozilla.com",
      "hash": "8b1ecf2d2bf5ea6155975d988bb7e9a4af0ea32d",
      "subject": "Bug 2049709 - Make visual updates to the create/edit profile page to match Nova specs r=fluent-reviewers,desktop-theme-reviewers,mstriemer,jhirsch,flod"
    },
    "D311671": {
      "author": "Anna Kulyk",
      "avatar": "https://www.gravatar.com/avatar/2c28c953ecebb4b478e4cd8e21ab56ff?d=identicon\u0026s=64",
      "cl": "D311671",
      "clUrl": "https://phabricator.services.mozilla.com/D311671",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D311671",
      "email": "akulyk@mozilla.com",
      "hash": "b6e106070050178ce18b730d71b2cb2986d4a9f8",
      "subject": "Bug 2050154 - Replace the custom segmented button in about:editprofile with moz-segmented-control r=desktop-theme-reviewers,jhirsch,tgiles"
    },
    "D311764": {
      "author": "Masayuki Nakano",
      "avatar": "https://www.gravatar.com/avatar/900caab146bc7a489b3854cf10acf93f?d=identicon\u0026s=64",
      "cl": "D311764",
      "clUrl": "https://phabricator.services.mozilla.com/D311764",
      "description": "Currently, we allow users to edit content in a nested editing host in\na focused editing host. In this case,\n`mRootEditableNodeOrTextControlElement` is the focused editing host and\n`mRootElement` is the nested editing host and `IMEContentObserver` sent\n`IME_NOTIFY_IME_OF_FOCUS` as in `mRootElement`.\n\nWhen the nested editing host is moved outside the focused editing host,\nthe DOM focus is not changed. Therefore, `IMEContentObserver` needs to\nobserve the focused editing host. So, from IME point of view, IME focus\nis now changed. I.e., `IMEContentObserver` should be recreated to notify\nIME of a `blur` and `focus`.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311764",
      "email": "masayuki@d-toybox.com",
      "hash": "deee912d7631332d8fd73d5fc14fa81206553ade",
      "subject": "Bug 2053867 - Do not reuse `IMEContentObserver` instance if observing editing host is changed r=jjaschke"
    },
    "D311768": {
      "author": "Masayuki Nakano",
      "avatar": "https://www.gravatar.com/avatar/900caab146bc7a489b3854cf10acf93f?d=identicon\u0026s=64",
      "cl": "D311768",
      "clUrl": "https://phabricator.services.mozilla.com/D311768",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D311768",
      "email": "masayuki@d-toybox.com",
      "hash": "6eb085bd2e423bba102cfa6f242caea7e4109386",
      "subject": "Bug 2039689 - Add the reported testcase r=jjaschke"
    },
    "D311781": {
      "author": "Jan de Mooij",
      "avatar": "https://www.gravatar.com/avatar/709c5feed942bf99f098bb24aa1cc86f?d=identicon\u0026s=64",
      "cl": "D311781",
      "clUrl": "https://phabricator.services.mozilla.com/D311781",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D311781",
      "email": "jdemooij@mozilla.com",
      "hash": "dac6e262dea3a4c845f6212f2162376f87fd80ba",
      "subject": "Bug 2052021 - Mark JetStream 3 subtests WSL-MainRun and WSL-Stdlib as lower-is-better. r=kshampur,perftest-reviewers"
    },
    "D311923": {
      "author": "Glenn Watson",
      "avatar": "https://www.gravatar.com/avatar/3d823baa293744dbe3cbe8ce33d77065?d=identicon\u0026s=64",
      "cl": "D311923",
      "clUrl": "https://phabricator.services.mozilla.com/D311923",
      "description": "Move the scene builder's zero-blur box-shadow fast path into the\nwebrender_api DisplayListBuilder, mirroring the text-shadow desugar.\npush_box_shadow now detects blur_radius == 0 and emits a plain rectangle\nshaped by a rounded-rect ClipOut/Clip pair (the same geometry the scene\nbuilder used to synthesize as extra clips), instead of a BoxShadow item.\nBox-shadows with a real blur still emit a BoxShadow item and use the\nquad/blur-cache path unchanged.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311923",
      "email": "git@chillybin.org",
      "hash": "440050b9a2b1fb5357f9926a3e5bdf60fe82f4e7",
      "subject": "Bug 2054575 - Pt 1 - Desugar zero-blur box-shadows into a rect + clips in the DL builder r=gfx-reviewers,nical"
    },
    "D311924": {
      "author": "Glenn Watson",
      "avatar": "https://www.gravatar.com/avatar/3d823baa293744dbe3cbe8ce33d77065?d=identicon\u0026s=64",
      "cl": "D311924",
      "clUrl": "https://phabricator.services.mozilla.com/D311924",
      "description": "With zero-blur box-shadows desugared in the DisplayListBuilder, nothing\npasses a non-empty per-primitive clip set any more. Drop the clip_items\nparameter from SceneBuilder::add_primitive and the extra_clips (and now\ndead interners) parameter from ClipTreeBuilder::build_for_prim, which now\nalways builds the leaf from the item's own clip node. Delete the\nClipItemEntry struct that only existed to carry those clips.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D311924",
      "email": "git@chillybin.org",
      "hash": "751ae3a46d73fddefb63f95d331fd6375154418e",
      "subject": "Bug 2054575 - Pt 2 - Remove now-unused extra_clips support from the scene builder r=gfx-reviewers,nical"
    },
    "D311930": {
      "author": "Anna Kulyk",
      "avatar": "https://www.gravatar.com/avatar/2c28c953ecebb4b478e4cd8e21ab56ff?d=identicon\u0026s=64",
      "cl": "D311930",
      "clUrl": "https://phabricator.services.mozilla.com/D311930",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D311930",
      "email": "akulyk@mozilla.com",
      "hash": "735b59c37558a5f1efd20e874b7d0e4035098f59",
      "subject": "Bug 2053307 - Fix visual issues with the profiles icon picker r=desktop-theme-reviewers,jhirsch,tgiles"
    },
    "D311986": {
      "author": "Harveer Singh",
      "avatar": "https://www.gravatar.com/avatar/53a89b8d24636f7d6172eefd328684dc?d=identicon\u0026s=64",
      "cl": "D311986",
      "clUrl": "https://phabricator.services.mozilla.com/D311986",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D311986",
      "email": "hsingh@mozilla.com",
      "hash": "657c280dd7bccba3c19b0535a3b9733c64da6587",
      "subject": "Bug 2047853: Persisting response credential type in cache entries table.r=dom-storage-reviewers,dom-worker-reviewers,asuth"
    },
    "D312056": {
      "author": "stransky",
      "avatar": "https://www.gravatar.com/avatar/1ad575baf124ff5058f4d44d5b066a29?d=identicon\u0026s=64",
      "cl": "D312056",
      "clUrl": "https://phabricator.services.mozilla.com/D312056",
      "description": "No code changes, only extract source D\u0026D part to a new class.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312056",
      "email": "stransky@redhat.com",
      "hash": "287187569ba7e18e495a066ffaf3729de021b097",
      "subject": "Bug 2047140 [Linux] Move source side of D\u0026D operation to extra class nsDragSessionSource r=emilio"
    },
    "D312096": {
      "author": "Emilio Cobos Álvarez",
      "avatar": "https://www.gravatar.com/avatar/1d91d22a4892f16f744b31fd4286144e?d=identicon\u0026s=64",
      "cl": "D312096",
      "clUrl": "https://phabricator.services.mozilla.com/D312096",
      "description": "Container queries can cause some incremental changes which weren't\ncorrectly accounted for.\n\nRight now we don't allow fragmenting tables for multicol but maybe we\ncan after these changes.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312096",
      "email": "emilio@crisal.io",
      "hash": "ed5c8b843371c87ccf0320881526963c20062107",
      "subject": "Bug 2054742 - Fix some incremental table layout issues during printing. r=TYLin,layout-reviewers,dshin"
    },
    "D312097": {
      "author": "Anna Kulyk",
      "avatar": "https://www.gravatar.com/avatar/2c28c953ecebb4b478e4cd8e21ab56ff?d=identicon\u0026s=64",
      "cl": "D312097",
      "clUrl": "https://phabricator.services.mozilla.com/D312097",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312097",
      "email": "akulyk@mozilla.com",
      "hash": "97e482994f98a8f9c0d05a4d7d279794bc8728ba",
      "subject": "Bug 2054224 - Make visual updates to the delete profile page to match Nova specs r=mstriemer,jhirsch"
    },
    "D312098": {
      "author": "Jonathan Sudiaman",
      "avatar": "https://www.gravatar.com/avatar/3ca705cbbd73ca8d2880c319b1d053a0?d=identicon\u0026s=64",
      "cl": "D312098",
      "clUrl": "https://phabricator.services.mozilla.com/D312098",
      "description": "The `panelWidth` setter in `SidebarState` caps max width of `#sidebar-container`, not `#sidebar-main`. Thus, the resize observer should be instrumenting and basing max width calculations on the size of `#sidebar-container`.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312098",
      "email": "jsudiaman@mozilla.com",
      "hash": "f5903c5a28dbe51820d2dd3861f4f71ca1eba80a",
      "subject": "Bug 2054585 - Fix vertical tabs container slowly shrinking when opening a sidebar panel r=nsharpley"
    },
    "D312117": {
      "author": "unifolia",
      "avatar": "https://www.gravatar.com/avatar/4694b477c490cf60cd24b4c7467bcce3?d=identicon\u0026s=64",
      "cl": "D312117",
      "clUrl": "https://phabricator.services.mozilla.com/D312117",
      "description": "https://fxsw.netlify.app/smart-grouping-levels/grouping-testing/smart-grouping-v1\n\nAdd AutoTabGroupingSuggestions, a DOM-free module that selects candidate\ntabs (ungrouped, non-pinned, visible HTTP/HTTPS tabs), clusters them via\nSmartTabGroupingManager, and turns the top clusters into display data\n(label, group color, and per-tab tile info). Gated behind a new default-off\npref alongside its tuning prefs (max groups, min tabs per group, min\ncandidate tabs). Covered by xpcshell unit tests.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312117",
      "email": "jlewis@mozilla.com",
      "hash": "95220c315c025d41cd513f9319a9f279e7ab3060",
      "subject": "Bug 2054500 - Add on-device tab grouping suggestion engine for Smart Window r=gcardieri"
    },
    "D312118": {
      "author": "unifolia",
      "avatar": "https://www.gravatar.com/avatar/4694b477c490cf60cd24b4c7467bcce3?d=identicon\u0026s=64",
      "cl": "D312118",
      "clUrl": "https://phabricator.services.mozilla.com/D312118",
      "description": "Reference: https://fxsw.netlify.app/smart-grouping-levels/grouping-testing/smart-grouping-v1\nThis is a pref-gated 'v0' - work is largely exploratory, with designs and UX subject to change. Target for v0 is next Fx release, with refinements deferred to v1.\n\n browser.smartwindow.autoTabGrouping.enabled\n SmartTabGroupingManager.isEnabled\n\nPatch: Add AutoTabGrouping, the panel orchestrator that renders the suggestions\nproduced by AutoTabGroupingSuggestions. It builds a chromeless XUL panel\nhosting an HTML card that lists suggested groups with tile previews, a\n\"Create all suggested groups\" action, and a hover flyout showing the tabs\nin each group, then creates the tab groups on demand. Styling lives in the\nnew smartwindowGroupTabs.css. Not yet wired to any entry point.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312118",
      "email": "jlewis@mozilla.com",
      "hash": "61fd38f5525f02a467e0e3212016b96680a5d221",
      "subject": "Bug 2054500 - Add \"Group my tabs\" suggestion panel UI for Smart Window r=desktop-theme-reviewers,gcardieri,dao"
    },
    "D312119": {
      "author": "unifolia",
      "avatar": "https://www.gravatar.com/avatar/4694b477c490cf60cd24b4c7467bcce3?d=identicon\u0026s=64",
      "cl": "D312119",
      "clUrl": "https://phabricator.services.mozilla.com/D312119",
      "description": "Reference: https://fxsw.netlify.app/smart-grouping-levels/grouping-testing/smart-grouping-v1\nThis is a pref-gated 'v0' - work is largely exploratory, with designs and UX subject to change. Target for v0 is next Fx release, with refinements deferred to v1.\n\n browser.smartwindow.autoTabGrouping.enabled\n SmartTabGroupingManager.isEnabled\n\nPatch: Add the toolbar button that opens the \"Group my tabs\" panel, shown only in\nthe Smart Window when the feature pref is enabled and hidden in immersive\nview like the neighbouring Ask button. Wire up click and keyboard handling,\ndelegate to AutoTabGrouping through AIWindowUI, add the button styling and\nFluent strings, and cover the flow with a browser-chrome test.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312119",
      "email": "jlewis@mozilla.com",
      "hash": "7bf7a74fda3992f532b079d58697a3e40f539fbc",
      "subject": "Bug 2054500 - Add \"Group my tabs\" toolbar button to the Smart Window r=desktop-theme-reviewers,fluent-reviewers,gcardieri,flod,dao"
    },
    "D312134": {
      "author": "Jason Prickett",
      "avatar": "https://www.gravatar.com/avatar/8876321caaf40c0c1e320cd5bb49f325?d=identicon\u0026s=64",
      "cl": "D312134",
      "clUrl": "https://phabricator.services.mozilla.com/D312134",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312134",
      "email": "jprickett@mozilla.com",
      "hash": "e33551479ab5648a42d2b03b96f16e4c431f455d",
      "subject": "Bug 2055031 - Add space-small inline-end padding to arrow in import dropdown r=mconley"
    },
    "D312196": {
      "author": "canalun",
      "avatar": "https://www.gravatar.com/avatar/ec346a3c1f6f34eb6e81ba7af9cb0b45?d=identicon\u0026s=64",
      "cl": "D312196",
      "clUrl": "https://phabricator.services.mozilla.com/D312196",
      "description": "Bug 1611949 added coverage for swipe-to-navigation when a scroll container is\nrotated with a CSS transform, but only within a single process.\n\nThis adds an out-of-process variant: the parent rotates the iframe by 90deg and\nthe OOPIF rotates its own vertically-scrollable container by 270deg. The two\nrotations cancel out, so on screen the scroller scrolls vertically. A horizontal\npan is therefore not along the scroller's scroll axis, so it isn't consumed by\nthe OOPIF and trigger swipe-to-navigation.\n\nThe OOPIF's content process cannot tell that the iframe itself is rotated, while\nAPZ accounts for the full cross-process transform chain. This test guards\nagainst regressions in that behavior.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312196",
      "email": "i.am.kanaru.sato@gmail.com",
      "hash": "0a988fc84ebf49080aa3b32d4d835b8e1bb91c9a",
      "subject": "Bug 2054395 - Add OOPIF test coverage for swipe-to-navigation with cross-process transforms. r=hiro"
    },
    "D312197": {
      "author": "Drew Willcoxon",
      "avatar": "https://www.gravatar.com/avatar/fa60148022a230fe1bacc441549b1c66?d=identicon\u0026s=64",
      "cl": "D312197",
      "clUrl": "https://phabricator.services.mozilla.com/D312197",
      "description": "There's some discussion in the bug about a graphics issue, but the likeliest\nexplanation is that this is a front-end problem. This patch makes a couple of\nchanges that might fix it, but I can't say for sure since I can't reproduce it.\n\nEverything in the urlbar has a height that stretches the entire visual height of\nthe input except for `.urlbar-input-box`. It's noticeably smaller. Setting\n`height: 100%` fixes that.\n\nAlso, `.urlbar-input-container` has block padding that isn't necessary. The\nheight of all the non-input children is set with `--urlbar-basic-component-size`\n[1]. The block padding prevents `.urlbar-input-box` from taking up the full\nvisual height of the input, so I removed it.\n\nI tested this on all three platforms and didn't see any regressions.\n\n[1] https://searchfox.org/firefox-main/search?q=--urlbar-basic-component-size\u0026case=false\u0026regexp=false\u0026path=\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312197",
      "email": "adw@mozilla.com",
      "hash": "d1ad3aceadb04eab86eb52bba8e5acd6e30b9857",
      "subject": "Bug 2050821 - Make the urlbar input stretch its full visual height. r=dao,desktop-theme-reviewers,urlbar-reviewers"
    },
    "D312214": {
      "author": "John M. Schanck",
      "avatar": "https://www.gravatar.com/avatar/291ff310b7805a4159d7f46af196813e?d=identicon\u0026s=64",
      "cl": "D312214",
      "clUrl": "https://phabricator.services.mozilla.com/D312214",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312214",
      "email": "jschanck@mozilla.com",
      "hash": "0203f4f04b6a6e70b59d127502f8845e105bca40",
      "subject": "Bug 2055123 - avoid short-circuiting test suite evaluation in rungtests.py. r=ahal"
    },
    "D312259": {
      "author": "stransky",
      "avatar": "https://www.gravatar.com/avatar/1ad575baf124ff5058f4d44d5b066a29?d=identicon\u0026s=64",
      "cl": "D312259",
      "clUrl": "https://phabricator.services.mozilla.com/D312259",
      "description": "Recently we delete source GtkWidget while the D\u0026D is still live. That may lead to various issues/crashes as\nGtk still renders and uses the widget surface etc.\n\nThe early delete was introduced as a hack for mem leak in Bug 219521. Let's fix that better.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312259",
      "email": "stransky@redhat.com",
      "hash": "255dd3fb623e644f06393bfe3b93634fbf9b0f9e",
      "subject": "Bug 2047140 [Linux] Keep D\u0026D source GtkWidget live until D\u0026D operations is finished r=emilio"
    },
    "D312272": {
      "author": "Antonio Borondo",
      "avatar": "https://www.gravatar.com/avatar/9e13743768b6d0c3767465e00941f79e?d=identicon\u0026s=64",
      "cl": "D312272",
      "clUrl": "https://phabricator.services.mozilla.com/D312272",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312272",
      "email": "aborondo@mozilla.com",
      "hash": "46f5359556c94c1f218ef8ca6b97b70a3132e334",
      "subject": "Bug 2055216 - Call NS_GetSpecialDirectory from the main thread r=nrishel"
    },
    "D312290": {
      "author": "Devota Aabel",
      "avatar": "https://www.gravatar.com/avatar/0f72093e2bea38e3029d5e63d9982537?d=identicon\u0026s=64",
      "cl": "D312290",
      "clUrl": "https://phabricator.services.mozilla.com/D312290",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312290",
      "email": "daabel@mozilla.com",
      "hash": "0b80466cc0cac818d715d6a8036923611b41c350",
      "subject": "Bug 2054118 : Part 1 - Fold homepage section visibility booleans into their nullable data fields. r=gl,android-reviewers"
    },
    "D312292": {
      "author": "Devota Aabel",
      "avatar": "https://www.gravatar.com/avatar/0f72093e2bea38e3029d5e63d9982537?d=identicon\u0026s=64",
      "cl": "D312292",
      "clUrl": "https://phabricator.services.mozilla.com/D312292",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312292",
      "email": "daabel@mozilla.com",
      "hash": "3503742086c21b933bb4c0de9dda04803f099af0",
      "subject": "Bug 2054118 : Part 2 - Update RecentSyncedTabs to a sealed class to represent the different possible states and to allow getting rid of the visibility boolean. r=gl,android-reviewers"
    },
    "D312293": {
      "author": "Devota Aabel",
      "avatar": "https://www.gravatar.com/avatar/0f72093e2bea38e3029d5e63d9982537?d=identicon\u0026s=64",
      "cl": "D312293",
      "clUrl": "https://phabricator.services.mozilla.com/D312293",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312293",
      "email": "daabel@mozilla.com",
      "hash": "4cc95b23d5aee1e30d7e0dd2217ee788eca95d47",
      "subject": "Bug 2054118 : Part 3 - Create MiddleSearchState to combine middle search properties. r=gl,android-reviewers"
    },
    "D312294": {
      "author": "Devota Aabel",
      "avatar": "https://www.gravatar.com/avatar/0f72093e2bea38e3029d5e63d9982537?d=identicon\u0026s=64",
      "cl": "D312294",
      "clUrl": "https://phabricator.services.mozilla.com/D312294",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312294",
      "email": "daabel@mozilla.com",
      "hash": "b9a1fbf2682c33c12f35e3d6fdf53ea3fb5863e6",
      "subject": "Bug 2054118 : Part 4 - Create TopSitesState to encapsulate state related to top sites. r=gl,android-reviewers"
    },
    "D312327": {
      "author": "Matthew Gaudet",
      "avatar": "https://www.gravatar.com/avatar/0c4c6c72545e010e29e8da0e3bb229ee?d=identicon\u0026s=64",
      "cl": "D312327",
      "clUrl": "https://phabricator.services.mozilla.com/D312327",
      "description": "To be correct, `isClosedOver` cannot assume that the last scope (.back())\nis the only relevant scope. All scopes need to be considered.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312327",
      "email": "mgaudet@mozilla.com",
      "hash": "e3f16d6cf612e2e313a65c9d6622ef3afd623beb",
      "subject": "Bug 2053659 - Correct implementation of isClosedOver r=arai"
    },
    "D312328": {
      "author": "Matthew Gaudet",
      "avatar": "https://www.gravatar.com/avatar/0c4c6c72545e010e29e8da0e3bb229ee?d=identicon\u0026s=64",
      "cl": "D312328",
      "clUrl": "https://phabricator.services.mozilla.com/D312328",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312328",
      "email": "mgaudet@mozilla.com",
      "hash": "54b755f7708204891ddc98bb0f2966e3b59e4e75",
      "subject": "Bug 2053659 - Stop ArgumentsLength from being confused with an optimizable PropertyAccess node r=arai"
    },
    "D312351": {
      "author": "Maxx Crawford",
      "avatar": "https://www.gravatar.com/avatar/362d6fa2232df934b7129870b2726186?d=identicon\u0026s=64",
      "cl": "D312351",
      "clUrl": "https://phabricator.services.mozilla.com/D312351",
      "description": "Adds a \"Widgets\" section to the DiscoveryStreamAdmin devtools panel so widget system prefs can be flipped without hand-editing about:config:\n\n- A toggle for widgets.system.enabled.\n- A per-widget toggle for each widget's widgets.system.\u003cname\u003e.enabled, driven off WIDGET_REGISTRY, labelled from the widget id, and disabled while the main pref is off.\n- An \"Enable all\" / \"Disable all\" button that flips the system pref and every widget's system pref in a single SetMultiplePrefs transaction.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312351",
      "email": "mcrawford@mozilla.com",
      "hash": "bb911f540b66dc7d2889de838e9bcc6395a0d9f0",
      "subject": "Bug 2051313 - Add a Widgets section to the New Tab admin devtools"
    },
    "D312352": {
      "author": "Maxx Crawford",
      "avatar": "https://www.gravatar.com/avatar/362d6fa2232df934b7129870b2726186?d=identicon\u0026s=64",
      "cl": "D312352",
      "clUrl": "https://phabricator.services.mozilla.com/D312352",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312352",
      "email": "mcrawford@mozilla.com",
      "hash": "fa2c9a509a465a4b34ed27e761930b6bf7ac9f35",
      "subject": "Bug 2055304 - Migrate DiscoveryStreamAdmin buttons to moz-button r=nina-py"
    },
    "D312353": {
      "author": "Maxx Crawford",
      "avatar": "https://www.gravatar.com/avatar/362d6fa2232df934b7129870b2726186?d=identicon\u0026s=64",
      "cl": "D312353",
      "clUrl": "https://phabricator.services.mozilla.com/D312353",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312353",
      "email": "mcrawford@mozilla.com",
      "hash": "d10470b61e5aaf462800df748d7ab726323c25af",
      "subject": "Bug 2055307 - Migrate DiscoveryStreamAdmin tests from Karma to Jest r=nina-py"
    },
    "D312354": {
      "author": "Maxx Crawford",
      "avatar": "https://www.gravatar.com/avatar/362d6fa2232df934b7129870b2726186?d=identicon\u0026s=64",
      "cl": "D312354",
      "clUrl": "https://phabricator.services.mozilla.com/D312354",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312354",
      "email": "mcrawford@mozilla.com",
      "hash": "744c12b404408e845e6b65607e398ece4ef9ad1f",
      "subject": "Bug 2055306 - Add widget reset and per-widget feature controls to the New Tab admin devtools r=nina-py"
    },
    "D312355": {
      "author": "Maxx Crawford",
      "avatar": "https://www.gravatar.com/avatar/362d6fa2232df934b7129870b2726186?d=identicon\u0026s=64",
      "cl": "D312355",
      "clUrl": "https://phabricator.services.mozilla.com/D312355",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312355",
      "email": "mcrawford@mozilla.com",
      "hash": "7bc2191aedd0321319d3cb03f48776dd5c3c5959",
      "subject": "Bug 2055312 - Migrate the New Tab admin devtools wrench toggle to a moz-button icon button under Nova r=nina-py"
    },
    "D312356": {
      "author": "Maxx Crawford",
      "avatar": "https://www.gravatar.com/avatar/362d6fa2232df934b7129870b2726186?d=identicon\u0026s=64",
      "cl": "D312356",
      "clUrl": "https://phabricator.services.mozilla.com/D312356",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312356",
      "email": "mcrawford@mozilla.com",
      "hash": "fb04eae10883b62a4f9ea95f5f584f3ddda12016",
      "subject": "Bug 2055314 - Add a dismiss control to the New Tab Discovery Stream Admin panel r=nina-py"
    },
    "D312414": {
      "author": "Glenn Watson",
      "avatar": "https://www.gravatar.com/avatar/3d823baa293744dbe3cbe8ce33d77065?d=identicon\u0026s=64",
      "cl": "D312414",
      "clUrl": "https://phabricator.services.mozilla.com/D312414",
      "description": "A device-space text run's clip was left exact/unsnapped (bug 2050692). Because\nthe glyph is snapped to the device grid on its non-sub-pixel axis, an exact\nfractional clip edge there shaves a whole glyph row - e.g. cropped g/y\ndescenders in the address bar. Round the clip out on the non-sub-pixel axis\nwhile keeping the sub-pixel axis exact, so glyph rows are never shaved and the\nsub-pixel axis stays identical to the bug 2050692 behavior.\n\nThe rounding is scoped to text-run clips alone. A prim's device-grid snap\npolicy is a SnapPolicy { rect, clip }: the bounding rect rounds independently of\nthe clips, and the clip rounding is an exhaustive ClipSnap - Nearest for\nsnapping prims, Exact for surfaces and any other device-space non-text prim\n(their clips stay exact, as before), and Text(..) for a text run (round out on\nthe non-sub-pixel axis). set_active_clips consumes the ClipSnap directly; the\ntile-cache caller derives its own (never a text run, so Nearest or Exact).\n\nAdds a wrench reftest (bug2055145) and a space.rs unit test for the per-axis\nsnap policy.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312414",
      "email": "git@chillybin.org",
      "hash": "ab90048d5830385bcc4f57701ba095a78d437739",
      "subject": "Bug 2055145 - Round out device-space text-run clips on the non-sub-pixel axis. r=gfx-reviewers,lsalzman"
    },
    "D312433": {
      "author": "Karl Tomlinson",
      "avatar": "https://www.gravatar.com/avatar/3646e8b4ac97898b1b389b12bda9d6ed?d=identicon\u0026s=64",
      "cl": "D312433",
      "clUrl": "https://phabricator.services.mozilla.com/D312433",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312433",
      "email": "karlt+@karlt.net",
      "hash": "6de11474d5d912128ec0fd6c9aa5397e013ba37d",
      "subject": "Bug 2053262 handle iterationStartTimeStamp \u003c mTargetIterationTimeStamp r=padenot"
    },
    "D312450": {
      "author": "Marco Bonardo",
      "avatar": "https://www.gravatar.com/avatar/06a01db28e1c2c2e9d5cd9dd5c4110d8?d=identicon\u0026s=64",
      "cl": "D312450",
      "clUrl": "https://phabricator.services.mozilla.com/D312450",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312450",
      "email": "mbonardo@mozilla.com",
      "hash": "d7a7f9f0226e59c3aa462f51391a27b72a799281",
      "subject": "Bug 2054782 - fix browser_bookmarks_toolbar_drag_with_chevron.js to work with nova rounded elements. r=adw,places-reviewers"
    },
    "D312461": {
      "author": "Martin Stransky",
      "avatar": "https://www.gravatar.com/avatar/1ad575baf124ff5058f4d44d5b066a29?d=identicon\u0026s=64",
      "cl": "D312461",
      "clUrl": "https://phabricator.services.mozilla.com/D312461",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312461",
      "email": "stransky@redhat.com",
      "hash": "0f3afe733e4b9a3a3d81ee615390fb00fb53a7bb",
      "subject": "Bug 2046712 [Wayland] Use FEATURE_VIDEO_HDR/FEATURE_WEBRENDER_COMPOSITOR to configure HDR r=emilio"
    },
    "D312494": {
      "author": "Dão Gottwald",
      "avatar": "https://www.gravatar.com/avatar/45dfe136efbb8e5f89eb0b21775ab195?d=identicon\u0026s=64",
      "cl": "D312494",
      "clUrl": "https://phabricator.services.mozilla.com/D312494",
      "description": "UrlbarInput, SmartbarInput, UrlbarView, and UrlbarResult compared plain data with\nObjectUtils.deepEqual, a system module a content-web realm can't import. Add a\ncontent-safe UrlbarShared.deepEqual (plain JSON-like data only -- arrays, objects,\nprimitives) and route the eight call sites through it, dropping the ObjectUtils\nimports.\n\nThe compared data is all plain (search modes, engine-title lists, view\nbuttons/templates, row labels, highlight tokens), so ObjectUtils's Map/Set/Date\nhandling isn't needed. deepEqual is pure, so unlike whereToOpenLink/getFixupInfo it\nneeds no UrlbarChild round-trip -- and routing it through the controller would break\nthe search-mode and engine-list comparisons, which run before the controller\nexists. Behavior-neutral.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312494",
      "email": "dao@mozilla.com",
      "hash": "e9ed7fae6f3cc50263aeae29ab50a495a8385443",
      "subject": "Bug 2055474 - Use a content-safe deepEqual in urlbar content modules instead of ObjectUtils. r=mbeier"
    },
    "D312521": {
      "author": "Jamie Nicol",
      "avatar": "https://www.gravatar.com/avatar/8dd660b6c636b9880700591432e5eb21?d=identicon\u0026s=64",
      "cl": "D312521",
      "clUrl": "https://phabricator.services.mozilla.com/D312521",
      "description": "Selects libEGL as the target for macOS, rather than the\ntranslator. This automatically also pulls in both libGLESv2 and the\ntranslator.\n\nAdd `-Wno-unguarded-availability` to `mozilla_flags`, allowing ANGLE's\nMetal backend to compile despite using APIs too recent for Firefox's\nminimum macOS version without guards.\n\nNote that this does not set the flag for all ANGLE targets, only those\nwhose definition in ANGLE's GN build scripts include the flag, which\nin practice is only `angle_metal_backend`. This is important, as it\nmeans we can be confident that the translator, which we use on all\nmacOS versions, is safe to use. libEGL/libGLESv2 on the other hand,\nmust not be used on older macOS versions. We already ensure this is\nthe case by blocklisting Metal ANGLE on these macOS versions.\n\nLastly, add an additional vendor step to ensure we only build the\nlibEGL targets for macOS, and on iOS only build the translator. This\nis required because gn_processor.py does not distinguish between macOS\nand iOS configurations and will therefore attempt to build the same\ntargets for both. Since we know the top-level generated moz.build file\nsimply selects which targets are built, we can replace the emitted\niOS-inclusive conditions with macOS-specific ones. This is a kludge\nand we should find a better solution. See bug 2047963.\n\nfixup only build libEGL on macOS not iOS?\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312521",
      "email": "jnicol@mozilla.com",
      "hash": "840f89767ff3b1ec3e1f97237cc507c1f4b78832",
      "subject": "Bug 2055532 - Update ANGLE's GN config to enable Metal backend on macOS. r=gfx-reviewers,bradwerth"
    },
    "D312522": {
      "author": "Jamie Nicol",
      "avatar": "https://www.gravatar.com/avatar/8dd660b6c636b9880700591432e5eb21?d=identicon\u0026s=64",
      "cl": "D312522",
      "clUrl": "https://phabricator.services.mozilla.com/D312522",
      "description": "This contains:\n\n- A patch to allow *building* ANGLE's Metal backend for a minimum\n  macOS version of 10.15. Note that it currently will only work at\n  runtime on macOS 12 onwards, so Firefox must ensure it does not\n  attempt to use ANGLE's Metal backend on older macOS versions.\n\n- A simple copy-paste error bug fix. This has been submitted upstream,\n  but at time of writing has not yet been merged.\n\n- A patch to disable compiling ANGLE's internal shaders at build-time,\n  which cannot currently be supported by our build system. They will\n  instead be compiled at runtime.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312522",
      "email": "jnicol@mozilla.com",
      "hash": "9674b022da52ba3e5606ba407baf6e21abf72f71",
      "subject": "Bug 2055532 - Add ANGLE patches required for ANGLE's Metal backend. r=gfx-reviewers,bradwerth"
    },
    "D312524": {
      "author": "Jamie Nicol",
      "avatar": "https://www.gravatar.com/avatar/8dd660b6c636b9880700591432e5eb21?d=identicon\u0026s=64",
      "cl": "D312524",
      "clUrl": "https://phabricator.services.mozilla.com/D312524",
      "description": "Stay on the same base revision, but additionally pull in the required\nfiles for the Metal backend.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312524",
      "email": "jnicol@mozilla.com",
      "hash": "cfb1a61e762ced3e517f669657fab58b955e0abb",
      "subject": "Bug 2055532 - Re-vendor ANGLE with Metal backend. r=gfx-reviewers,bradwerth"
    },
    "D312525": {
      "author": "Jamie Nicol",
      "avatar": "https://www.gravatar.com/avatar/8dd660b6c636b9880700591432e5eb21?d=identicon\u0026s=64",
      "cl": "D312525",
      "clUrl": "https://phabricator.services.mozilla.com/D312525",
      "description": "Ensure ANGLE's libEGL and libGLESv2 are packaged on macOS as well as\nWindows.\n\nAdditionally update some stale comments: we've long since used ANGLE\nfor webrender in addition to WebGL, and as of this change it's no\nlonger only the D3D backend that is used.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312525",
      "email": "jnicol@mozilla.com",
      "hash": "f3a33f555fe88139fa979d54e12ac73504012a96",
      "subject": "Bug 2055532 - Package ANGLE libraries on macOS. r=gfx-reviewers,bradwerth"
    },
    "D312526": {
      "author": "Jamie Nicol",
      "avatar": "https://www.gravatar.com/avatar/8dd660b6c636b9880700591432e5eb21?d=identicon\u0026s=64",
      "cl": "D312526",
      "clUrl": "https://phabricator.services.mozilla.com/D312526",
      "description": "Now that Metal ANGLE is built and packaged on macOS, we can unblock\nit. Note that it is still disabled by default, but can be enabled by\nsetting the pref `webgl.disable-angle` to `false`.\n\nIt remains blocked for macOS versions prior to 12 and on devices with\nmultiple GPUs for the time being.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312526",
      "email": "jnicol@mozilla.com",
      "hash": "c188454c6b984b7744899e9f971ac02604133908",
      "subject": "Bug 2055532 - Unblock WebGL on Metal ANGLE. r=gfx-reviewers,bradwerth"
    },
    "D312545": {
      "author": "Julien Cristau",
      "avatar": "https://www.gravatar.com/avatar/15b9b3783e4671cd882bff1316df14c9?d=identicon\u0026s=64",
      "cl": "D312545",
      "clUrl": "https://phabricator.services.mozilla.com/D312545",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312545",
      "email": "jcristau@mozilla.com",
      "hash": "fb05a45a6c4cd04a5f5583cd4bead5b0737b720a",
      "subject": "Bug 2046483 - enable periodic-update and pinning-update cron jobs on esr153. r=releng-reviewers,bhearsum DONTBUILD"
    },
    "D312575": {
      "author": "Nika Layzell",
      "avatar": "https://www.gravatar.com/avatar/fcf93a5a624020bf2256443c69e08b51?d=identicon\u0026s=64",
      "cl": "D312575",
      "clUrl": "https://phabricator.services.mozilla.com/D312575",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312575",
      "email": "nika@thelayzells.com",
      "hash": "0e45421efe5a61877b1ab89544409d9c6721b834",
      "subject": "Bug 2055635 - Fix ChannelMach::IsValidHandle variant casts, r=ipc-reviewers,jld"
    },
    "D312586": {
      "author": "Gabriel Luong",
      "avatar": "https://www.gravatar.com/avatar/8d4b3dd6d3dd0178956876e108d984c6?d=identicon\u0026s=64",
      "cl": "D312586",
      "clUrl": "https://phabricator.services.mozilla.com/D312586",
      "description": "- Closing a tab in the tabs tray can select an adjacent about:home tab.\n- AboutHomeBinding observes the selected tab and navigates to the homepage when its URL is about:home, which dismissed the tabs tray.\n- Add the tabs tray destination to the AboutHomeBinding exclusion list so that closing a tab keeps the tray open.\n- Selecting an about:home tab still opens the homepage since that is handled explicitly by the tabs tray controller.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312586",
      "email": "gabriel.luong@gmail.com",
      "hash": "c627be1ae3ef5093ad7c0e5fbf676408ad682df3",
      "subject": "Bug 2003489 - Keep the tabs tray open when closing a tab reselects an about:home tab r=android-reviewers,devota"
    },
    "D312621": {
      "author": "Glenn Watson",
      "avatar": "https://www.gravatar.com/avatar/3d823baa293744dbe3cbe8ce33d77065?d=identicon\u0026s=64",
      "cl": "D312621",
      "clUrl": "https://phabricator.services.mozilla.com/D312621",
      "description": "A backdrop-filter resolve target can establish a different raster root\nthan the parent surface it reads back from (for example when it promotes\nto a root-snapping raster root inside a scrolled subtree). handle_resolve\nintersected the dest and src content rects as if they shared a space,\noffsetting the backdrop readback by the scroll amount. Store the\ndest-\u003esrc raster mapping on the ResolveOp and apply it so we read back\nthe region the backdrop actually covers. The mapping is the identity when\nthe raster roots match, so the common case is unchanged.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312621",
      "email": "git@chillybin.org",
      "hash": "cf9aa2b437a34722432eafb229c56cf07fd58753",
      "subject": "Bug 2055555 - Map the backdrop readback into the parent surface's raster space r=gfx-reviewers,nical"
    },
    "D312636": {
      "author": "Reem H",
      "avatar": "https://www.gravatar.com/avatar/6ff5d1766c0abbbc7f56fb248b548de3?d=identicon\u0026s=64",
      "cl": "D312636",
      "clUrl": "https://phabricator.services.mozilla.com/D312636",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312636",
      "email": "42309026+reemhamz@users.noreply.github.com",
      "hash": "1fdc3caf0e1d6fdfbfdf26b525e7584499d30304",
      "subject": "Bug 2055369 - Update Picture of the Day link to be anchor instead of button. r=nina-py"
    },
    "D312641": {
      "author": "Sotaro Ikeda",
      "avatar": "https://www.gravatar.com/avatar/a0c6bcb88fdc08a4e55f4fcf65cf0428?d=identicon\u0026s=64",
      "cl": "D312641",
      "clUrl": "https://phabricator.services.mozilla.com/D312641",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312641",
      "email": "sotaro.ikeda.g@gmail.com",
      "hash": "bb9b97a24ebdac2c559a3fdfd46bf9ee14c91aa4",
      "subject": "Bug 2055748 - Mark ReadPixelsResultIpc to [MoveOnly] r=gfx-reviewers,nical"
    },
    "D312678": {
      "author": "Jackie Johnson",
      "avatar": "https://www.gravatar.com/avatar/679ab5b029ef3ae60883ec8b488cd982?d=identicon\u0026s=64",
      "cl": "D312678",
      "clUrl": "https://phabricator.services.mozilla.com/D312678",
      "description": "Pure deletion, no logic changes. Removes 19 files from the ui/efficiency\nUI-test-generation framework that predate the current navigation/-based\ngeneration core and are no longer reachable from it:\n\n- navigation/behavior/ContextApplicability.kt: dead duplicate of\n  BehaviorContextApplicationMode, the version actually used.\n- factory/factories/{Presence,Interaction,Behavior}Factory.kt,\n  factory/feature/*, factory/steps/* (all but StepResult.kt),\n  factory/debug/*, factory/logging/ScreenshotTaker.kt: legacy factory\n  tier, confirmed zero imports from navigation/ via repo-wide grep, and\n  no remaining callers once this diff lands together.\n- features/privatebrowsing/PrivateBrowsingSpec.kt: self-documented as\n  non-production.\n- examples/FactoryDryRunTestExample.kt,\n  examples/PrivateBrowsingFactoryTestExample.kt: demo-only, exercise\n  only the legacy tier above.\n\nKept: factory/steps/StepResult.kt (live dependency of LoggerFactory/\nStepLogger), the four generator dev-tools and their example callers\n(intentional tooling, being consolidated separately), docs/*.md\n(pending a follow-up pass), and the orphaned pageObjects/selectors\n(separate decision, tracked as MTE-5669).\n\nVerified safe: no file under navigation/ imports anything from\nfactory/; every deleted file's only referencing files are also deleted\nin this diff.\n\nDifferential Revision: https://phabricator.services.mozilla.com/D312678",
      "email": "jajohnson@mozilla.com",
      "hash": "6265b1be8cef899e39b6cf46ca7b0c6a82b60a0a",
      "subject": "Bug 2055779 - Remove dead legacy factory/ tier from ui/efficiency r=isabel_rios"
    },
    "D312687": {
      "author": "Timothy Nikkel",
      "avatar": "https://www.gravatar.com/avatar/0646a42110a02dd585f200f270716852?d=identicon\u0026s=64",
      "cl": "D312687",
      "clUrl": "https://phabricator.services.mozilla.com/D312687",
      "description": "Differential Revision: https://phabricator.services.mozilla.com/D312687",
      "email": "tnikkel@gmail.com",
      "hash": "6f76998ef61c9f428465b37c3603cc09d973b5f2",
      "subject": "Bug 2055791. Route web-platform gif tests to Graphics: ImageLib. r=gfx-reviewers,nical"
    },
    "bf5192278429": {
      "author": "Emilio Cobos Álvarez",
      "avatar": "https://www.gravatar.com/avatar/1d91d22a4892f16f744b31fd4286144e?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "See referenced bug for it.",
      "email": "emilio@crisal.io",
      "hash": "bf5192278429e54a327b6102f27f0bcaa3c07ab9",
      "subject": "Bug 2054742 - Annotate crashtest for now."
    },
    "c94f974c15d6": {
      "author": "Alexandru Marc",
      "avatar": "https://www.gravatar.com/avatar/f90e8bfbc9c1383d73053a8809b77e48?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "",
      "email": "amarc@mozilla.com",
      "hash": "c94f974c15d6fd2ce5234839687e4caeb1c618f2",
      "subject": "Bug 2048729 - mark picker-icon-animation.html as failing/passing on mac"
    },
    "dc7f8a547186": {
      "author": "Cristian Tuns",
      "avatar": "https://www.gravatar.com/avatar/bf43f0be3f88260acd3090c7be8bebe7?d=identicon\u0026s=64",
      "cl": "",
      "clUrl": "",
      "description": "This reverts commit 603fac07c5a7f2d3d2534da9660dce724ea31878.",
      "email": "ctuns@mozilla.com",
      "hash": "dc7f8a5471860dbb42a465b0d03b0c752643149d",
      "subject": "Revert \"Bug 2036097: Ignore native file picker confirmations that arrive too soon after the picker is shown. r=Thinker,win-reviewers,gstoll,mac-reviewers,bradwerth,Gijs\" for causing build bustages in nsBaseFilePicker.cpp"
    }
  },
  "date": "2026-07-17",
  "days": 1,
  "generatedAt": "2026-07-17T22:06:11Z",
  "markdown": "## Highlights\n- **GPU** Firefox wired up ANGLE's Metal backend on macOS, packaged the libraries, and unblocked WebGL on top of it, moving Mac graphics closer to a modern native stack. [Phab D312526](https://phabricator.services.mozilla.com/D312526)\n- **UI** Smart Window gained on-device tab grouping plus a suggestion panel and toolbar entry, pushing more local tab organization into the browser chrome. [Phab D312117](https://phabricator.services.mozilla.com/D312117)\n- **Privacy** Firefox added a pref and enterprise policy surface for CNSA 2.0 key agreement, giving admins explicit control over post-quantum adjacent crypto rollout. [Phab D310120](https://phabricator.services.mozilla.com/D310120)\n- **Rendering** Printing got a targeted fix for incremental table layout bugs, improving correctness on a class of hard layout edge cases even though the patch was later backed out for follow-up. [Phab D312096](https://phabricator.services.mozilla.com/D312096)\n- **DevTools** The profiler lifetime is now owned by the perf actor on destroy instead of the panel on close, tightening cleanup semantics and reducing tool-state footguns. [Phab D311278](https://phabricator.services.mozilla.com/D311278)\n- **UI** The Profiles flow got a broad Nova refresh across create, edit, delete, and icon picker screens, continuing the visual overhaul of account-adjacent browser UI. [Phab D311649](https://phabricator.services.mozilla.com/D311649)\n- **A11y** Lockstore now zeroizes sensitive buffers with the zeroize crate and expanded its timeout range, strengthening memory hygiene in security-sensitive storage code. [Phab D309257](https://phabricator.services.mozilla.com/D309257)\n- **Rendering** WebRender cleaned up clip handling and box-shadow desugaring, while text-run clipping and backdrop readback math were tightened for better raster correctness. [Phab D311923](https://phabricator.services.mozilla.com/D311923)\n- **Mobile** Firefox for Android refactored homepage state into stronger typed containers and fixed tabs-tray behavior when closing back to about:home, reducing UI state complexity. [Phab D312290](https://phabricator.services.mozilla.com/D312290)\n\n## What landed by area\n\n### Graphics and rendering\n- **GPU** Re-vendored ANGLE with the Metal backend for macOS. [Phab D312524](https://phabricator.services.mozilla.com/D312524)\n- **GPU** Enabled ANGLE's Metal backend in the GN config on macOS. [Phab D312521](https://phabricator.services.mozilla.com/D312521)\n- **GPU** Added the ANGLE-side patches needed to bring up Metal. [Phab D312522](https://phabricator.services.mozilla.com/D312522)\n- **GPU** Packaged ANGLE libraries on macOS so the new backend can actually ship in builds. [Phab D312525](https://phabricator.services.mozilla.com/D312525)\n- **Rendering** Mapped backdrop readback into the parent surface's raster space, fixing coordinate handling in compositing. [Phab D312621](https://phabricator.services.mozilla.com/D312621)\n- **Rendering** Rounded device-space text-run clips on the non-sub-pixel axis for cleaner clip math. [Phab D312414](https://phabricator.services.mozilla.com/D312414)\n- **Rendering** Desugared zero-blur box-shadows into a rect plus clips in the display list builder. [Phab D311923](https://phabricator.services.mozilla.com/D311923)\n- **Refactor** Removed now-unused extra_clips support from the scene builder after the box-shadow simplification. [Phab D311924](https://phabricator.services.mozilla.com/D311924)\n- **Rendering** Unified GetOrCreateASRForFrame and GetOrCreateASRForStickyFrame behind an extra ASRKind parameter. [Phab D309377](https://phabricator.services.mozilla.com/D309377)\n- **Rendering** Added OOPIF test coverage for swipe-to-navigation with cross-process transforms. [Phab D312196](https://phabricator.services.mozilla.com/D312196)\n- **Rendering** Fixed incremental table layout issues during printing. [Phab D312096](https://phabricator.services.mozilla.com/D312096)\n- **Rendering** Annotated the related crashtest while the printing fix settles. [bug 2054742](https://bugzilla.mozilla.org/show_bug.cgi?id=2054742)\n\n### Desktop UI and Nova polish\n- **UI** Fixed PBM purple content-area backdrop flicker in Nova. [Phab D310662](https://phabricator.services.mozilla.com/D310662)\n- **UI** Fixed the urlbar background leaking outside the input outline. [Phab D311240](https://phabricator.services.mozilla.com/D311240)\n- **UI** Made the urlbar input stretch to its full visual height. [Phab D312197](https://phabricator.services.mozilla.com/D312197)\n- **UI** Removed extra space between the clear and go buttons in the search bar. [Phab D309750](https://phabricator.services.mozilla.com/D309750)\n- **UI** Fixed bookmarks toolbar drag tests to work with Nova rounded elements. [Phab D312450](https://phabricator.services.mozilla.com/D312450)\n- **UI** Fixed vertical tabs slowly shrinking when opening a sidebar panel. [Phab D312098](https://phabricator.services.mozilla.com/D312098)\n- **UI** Added space-small inline-end padding to the arrow in the import dropdown. [Phab D312134](https://phabricator.services.mozilla.com/D312134)\n- **UI** Updated Picture of the Day to use an anchor instead of a button. [Phab D312636](https://phabricator.services.mozilla.com/D312636)\n- **UI** Marked picker-icon-animation.html as failing or passing on mac to stabilize expectations. [bug 2048729](https://bugzilla.mozilla.org/show_bug.cgi?id=2048729)\n\n### Profiles, tabs, and browser surfaces\n- **UI** Updated the create and edit profile page visuals to match Nova specs. [Phab D311649](https://phabricator.services.mozilla.com/D311649)\n- **UI** Replaced the custom segmented button in about:editprofile with moz-segmented-control. [Phab D311671](https://phabricator.services.mozilla.com/D311671)\n- **UI** Fixed visual issues in the profiles icon picker. [Phab D311930](https://phabricator.services.mozilla.com/D311930)\n- **UI** Updated the delete profile page to match Nova specs. [Phab D312097](https://phabricator.services.mozilla.com/D312097)\n- **UI** Added the \"Group my tabs\" toolbar button to Smart Window. [Phab D312119](https://phabricator.services.mozilla.com/D312119)\n- **UI** Added the Smart Window suggestion panel UI for tab grouping. [Phab D312118](https://phabricator.services.mozilla.com/D312118)\n- **Privacy** Added on-device tab grouping suggestions for Smart Window, keeping grouping logic local. [Phab D312117](https://phabricator.services.mozilla.com/D312117)\n- **UI** Showed remote tabs for single-device users in the top History menu. [Phab D309170](https://phabricator.services.mozilla.com/D309170)\n- **Refactor** Generated and stored a referral code for referral flows. [Phab D310935](https://phabricator.services.mozilla.com/D310935)\n- **Refactor** Added prefs for the referral feature. [Phab D310871](https://phabricator.services.mozilla.com/D310871)\n\n### DevTools, profiler, and new tab tooling\n- **DevTools** Stopped the profiler from the perf actor on destroy instead of from the panel on close. [Phab D311278](https://phabricator.services.mozilla.com/D311278)\n- **DevTools** Gave about:logging its own recording prefs instead of sharing with the profiler popup. [Phab D311079](https://phabricator.services.mozilla.com/D311079)\n- **DevTools** Added a Widgets section to the New Tab admin devtools. [Phab D312351](https://phabricator.services.mozilla.com/D312351)\n- **DevTools** Migrated DiscoveryStreamAdmin buttons to moz-button. [Phab D312352](https://phabricator.services.mozilla.com/D312352)\n- **DevTools** Migrated the New Tab admin devtools wrench toggle to a moz-button icon button under Nova. [Phab D312355](https://phabricator.services.mozilla.com/D312355)\n- **DevTools** Added widget reset and per-widget feature controls to the New Tab admin devtools. [Phab D312354](https://phabricator.services.mozilla.com/D312354)\n- **DevTools** Added a dismiss control to the New Tab Discovery Stream Admin panel. [Phab D312356](https://phabricator.services.mozilla.com/D312356)\n- **Build** Migrated DiscoveryStreamAdmin tests from Karma to Jest. [Phab D312353](https://phabricator.services.mozilla.com/D312353)\n\n### Platform, DOM, input, and storage\n- **Web Platform** Persisted response credential type in cache entries tables, improving cache metadata fidelity. [Phab D311986](https://phabricator.services.mozilla.com/D311986)\n- **Web Platform** Fixed __FILE__ path separator handling in QuotaCommon on Windows. [Phab D304430](https://phabricator.services.mozilla.com/D304430)\n- **UI** Ignored native file picker confirmations that arrive too soon after the picker is shown. [Phab D307024](https://phabricator.services.mozilla.com/D307024)\n- **Refactor** Called NS_GetSpecialDirectory from the main thread to respect thread-affinity expectations. [Phab D312272](https://phabricator.services.mozilla.com/D312272)\n- **A11y** Stopped reusing IMEContentObserver when the observed editing host changes, fixing editor focus and input edge cases. [Phab D311764](https://phabricator.services.mozilla.com/D311764)\n- **Web Platform** Added the reported testcase for [bug 2039689](https://bugzilla.mozilla.org/show_bug.cgi?id=2039689). [Phab D311768](https://phabricator.services.mozilla.com/D311768)\n- **Refactor** Used a content-safe deepEqual in urlbar content modules instead of ObjectUtils. [Phab D312494](https://phabricator.services.mozilla.com/D312494)\n\n### Security, crypto, and IPC\n- **Privacy** Added a pref and enterprise policy for CNSA 2.0 key agreement. [Phab D310120](https://phabricator.services.mozilla.com/D310120)\n- **Security** Zeroized Lockstore sensitive buffers with the zeroize crate. [Phab D309257](https://phabricator.services.mozilla.com/D309257)\n- **Security** Extended Lockstore unlock and cache timeout range to 64-bit milliseconds. [Phab D309256](https://phabricator.services.mozilla.com/D309256)\n- **Refactor** Renamed Lockstore \"collection\" terminology to DEK name. [Phab D309537](https://phabricator.services.mozilla.com/D309537)\n- **Build** Fixed stale lockstore_rs cargo-test suites. [Phab D309264](https://phabricator.services.mozilla.com/D309264)\n- **Build** Fixed clippy warnings in Lockstore. [Phab D309265](https://phabricator.services.mozilla.com/D309265)\n- **Testing** Extended Lockstore gtests to cover cargo-test functionality. [Phab D309538](https://phabricator.services.mozilla.com/D309538)\n- **Security** Fixed ChannelMach::IsValidHandle variant casts in IPC code. [Phab D312575](https://phabricator.services.mozilla.com/D312575)\n\n### JavaScript, performance, and test infra\n- **V8** Corrected the implementation of isClosedOver in SpiderMonkey optimization logic. [Phab D312327](https://phabricator.services.mozilla.com/D312327)\n- **V8** Stopped ArgumentsLength from being confused with an optimizable PropertyAccess node. [Phab D312328](https://phabricator.services.mozilla.com/D312328)\n- **Perf** Marked JetStream 3 subtests WSL-MainRun and WSL-Stdlib as lower-is-better. [Phab D311781](https://phabricator.services.mozilla.com/D311781)\n- **Media** Handled iterationStartTimeStamp being less than mTargetIterationTimeStamp in timing code. [Phab D312433](https://phabricator.services.mozilla.com/D312433)\n- **Build** Avoided short-circuiting test suite evaluation in rungtests.py. [Phab D312214](https://phabricator.services.mozilla.com/D312214)\n- **Perf** Advanced cached idle time by elapsed wall-clock in UserIdleServiceMutter::PollIdleTime. [Phab D311271](https://phabricator.services.mozilla.com/D311271)\n- **Build** Enabled periodic-update and pinning-update cron jobs on esr153. [Phab D312545](https://phabricator.services.mozilla.com/D312545)\n- **Refactor** Removed a dead legacy factory tier from ui/efficiency. [Phab D312678](https://phabricator.services.mozilla.com/D312678)\n\n### Linux, Wayland, and platform graphics\n- **UI** Moved the source side of Linux drag and drop into a dedicated nsDragSessionSource class. [Phab D312056](https://phabricator.services.mozilla.com/D312056)\n- **UI** Kept the Linux drag source GtkWidget alive until the drag and drop operation finishes. [Phab D312259](https://phabricator.services.mozilla.com/D312259)\n- **GPU** Used FEATURE_VIDEO_HDR and FEATURE_WEBRENDER_COMPOSITOR to configure HDR on Wayland. [Phab D312461](https://phabricator.services.mozilla.com/D312461)\n- **GPU** Marked ReadPixelsResultIpc as [MoveOnly], tightening IPC ownership semantics in graphics code. [Phab D312641](https://phabricator.services.mozilla.com/D312641)\n- **Media** Routed web-platform GIF tests to Graphics: ImageLib for better ownership of image test fallout. [Phab D312687](https://phabricator.services.mozilla.com/D312687)\n\n### Android\n- **Mobile** Folded homepage section visibility booleans into nullable data fields. [Phab D312290](https://phabricator.services.mozilla.com/D312290)\n- **Mobile** Turned RecentSyncedTabs into a sealed class and removed the extra visibility boolean. [Phab D312292](https://phabricator.services.mozilla.com/D312292)\n- **Mobile** Created MiddleSearchState to combine middle-search properties. [Phab D312293](https://phabricator.services.mozilla.com/D312293)\n- **Mobile** Created TopSitesState to encapsulate top-sites state. [Phab D312294](https://phabricator.services.mozilla.com/D312294)\n- **Mobile** Kept the tabs tray open when closing a tab reselects an about:home tab. [Phab D312586](https://phabricator.services.mozilla.com/D312586)\n\n## Reverts \u0026 Reapplies\n- **Build** Reverted formatting-only changes from [bug 2047140](https://bugzilla.mozilla.org/show_bug.cgi?id=2047140) after build bustage in nsDragService. \n- **Build** Reverted formatting-only changes from [bug 2047140](https://bugzilla.mozilla.org/show_bug.cgi?id=2047140) again after bustage in nsDragService.cpp.\n- **UI** Reverted the vertical tabs shrink fix from [bug 2054585](https://bugzilla.mozilla.org/show_bug.cgi?id=2054585) after browser_sidebar_prefs.js failures.\n- **Refactor** Reverted referral code generation from [bug 2051706](https://bugzilla.mozilla.org/show_bug.cgi?id=2051706) after browser_all_files_referenced.js failures.\n- **Rendering** Reverted the printing table layout fix from [bug 2054742](https://bugzilla.mozilla.org/show_bug.cgi?id=2054742) after table-container-query-crash-print.html failures.\n- **Web Platform** Reverted the QuotaCommon Windows path separator fix from [bug 1729711](https://bugzilla.mozilla.org/show_bug.cgi?id=1729711) after test failures.\n- **UI** Reverted the native file picker confirmation timing change from [bug 2036097](https://bugzilla.mozilla.org/show_bug.cgi?id=2036097) after build bustage in nsBaseFilePicker.cpp.\n- **UI** Reverted the single-device remote tabs History menu change from [bug 2050289](https://bugzilla.mozilla.org/show_bug.cgi?id=2050289) after browser_title_case_menus.js failures.\n- **Privacy** Reverted the CNSA 2.0 policy and pref patch from [bug 2052296](https://bugzilla.mozilla.org/show_bug.cgi?id=2052296) after test_sorted_alphabetically.js failures.",
  "repo": "firefox",
  "repoDisplay": "Firefox",
  "rollGroups": [
    {
      "name": "No",
      "count": 4
    },
    {
      "name": "Merge",
      "count": 2
    }
  ],
  "since": "2026-07-17",
  "totals": {
    "commits": 93,
    "features": 87,
    "rolls": 6
  },
  "until": "2026-07-17"
}