Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
f093388
Bug 1665637 - Remove the 'saved-session' ping r=fluent-reviewers,tool…
tqpcharlie Feb 3, 2026
3f25d13
Bug 2013335: Allow useless array copies. r=rhunt,jonco
bvisness Feb 3, 2026
71e4ebe
Bug 2013393 - Implement search handoff with run_search tool ? r=ai-fr…
azg-mozilla Feb 3, 2026
512c1fc
Bug 2013315 - Add missing right arrow VPN button in toolbar overflow …
Feb 3, 2026
fcb51ef
Bug 2013972 - Add a Nimbus flag to control homepage opening screen de…
rhodwell Feb 3, 2026
8a3a3c4
Bug 2005867: Rename the canvas metrics r=timhuang
tomrittervg Feb 3, 2026
f512af0
Bug 2005867: Add the metrics for raw canvas data collection r=timhuang
tomrittervg Feb 3, 2026
dc394cd
Bug 2005867: Collect the raw pixel data for all canvas metrics (for n…
tomrittervg Feb 3, 2026
6c3e474
Bug 2005867: Add logic for deciding which raw data we keep r=timhuang
tomrittervg Feb 3, 2026
2bd5576
Bug 2005867: Add a test for the raw data filtering r=tschuster
tomrittervg Feb 3, 2026
254078d
Bug 2011018: Do not wait excessively if we're going to time out r=tsc…
tomrittervg Feb 3, 2026
ca970cd
Bug 2010671: Collect the CSS Colors as seen from the web r=timhuang
tomrittervg Feb 3, 2026
dc0130e
Bug 2006432 - Add delay after shutting down android apps during video…
Andrej1198 Feb 3, 2026
79122b5
Revert "Bug 1665637 - Remove the 'saved-session' ping r=fluent-review…
Feb 3, 2026
93f1c1f
Revert "Bug 2013393 - Implement search handoff with run_search tool ?…
IulianMoraru Feb 3, 2026
83e130e
Bug 2011705 - Fix beta perma fail in browser_bug680727.js. r=jbrown,m…
Feb 3, 2026
317453b
Bug 1977924 - Part 1: Introduce Login.hint to concept-storage r=gmale…
jonalmeida Feb 3, 2026
f2f6a39
Bug 1977924 - Part 2: Re-work logins in PromptFeature r=gmalekpour,an…
jonalmeida Feb 3, 2026
576b7d9
Bug 2006901 - Partial revert of D272921 to fix streaming regression r…
tshasan Feb 3, 2026
688ee55
Bug 2012195 - Update IPProtection fluent strings to use variables for…
Feb 3, 2026
b42402e
Bug 2006251 - Assistant Conversation Starters - r=Mardak,desktop-them…
mailelucks Feb 3, 2026
19767f4
Bug 2013396 - Do not include geo.provider.network.* prefs in Android …
saschanaz Feb 3, 2026
16f364b
Bug 2013467 - Do not include MOZ_GOOGLE_LOCATION_SERVICE_API_KEY in A…
saschanaz Feb 3, 2026
7a5216c
Bug 2013396, 2013467: apply code formatting via Lando
Feb 3, 2026
a1a8b2a
Revert "Bug 2012195 - Update IPProtection fluent strings to use varia…
Feb 3, 2026
fba7176
Revert "Bug 1977924 - Part 2: Re-work logins in PromptFeature r=gmale…
Feb 3, 2026
0c46139
Bug 2007061 - Hide split view wrapper when dragging a tab group with …
kcochrane-mozilla Feb 3, 2026
f839efe
Bug 2014176 - Add checks for empty Maybe<TimeUnit> in MediaDecoder::C…
aosmond Feb 3, 2026
e181f4c
Bug 2008277 - Part 1: Add tests for pointer boundary events when movi…
EdgarChen Feb 3, 2026
62427a0
Bug 2008277 - Part 2: Generate pointer boundary event when mouse move…
EdgarChen Feb 3, 2026
26b89e9
Bug 2008277 - Part 3: Store pointer location when receiving the eMous…
EdgarChen Feb 3, 2026
79d0fcd
Bug 2005428: Document WebGPU cycle collection macros. r=webgpu-review…
jimblandy Feb 3, 2026
9a0cd66
Bug 1995062 - Part 1: render backup-settings via config r=fluent-revi…
hannajones Feb 3, 2026
9f688bc
Bug 1995062 - Part 2: convert backup-settings to match new settings U…
hannajones Feb 3, 2026
93c2ac4
Bug 1995062 - Part 3: fix backup-settings tests r=cdupuis,akulyk
hannajones Feb 3, 2026
d3b65ef
Bug 1995062 - Part 4: add tests and stories for new component functio…
hannajones Feb 3, 2026
8504125
Bug 1972071 - Add custom search shortcut modal and add engine functi…
Feb 3, 2026
91588e2
Bug 2013097 - Implement labeled counter telemetry for split view URI …
sfoster Feb 3, 2026
cf78bd0
Bug 2013390: Test file extension before testing zip and tarfiles.r=ahal
Feb 3, 2026
d055c8f
Bug 2013358: Drop Python <3.13 requirement from manifestparser.r=ahal
Feb 3, 2026
965e4f3
Bug 1966773: Pre-tenure constructors r=jonco
iainireland Feb 3, 2026
734b279
Bug 1966773: Rename MetaScriptedThisShape to MetaCreateThis r=jonco
iainireland Feb 3, 2026
1e02d1b
Bug 1966773: Inline CreateThis in baseline IC code r=jonco
iainireland Feb 3, 2026
685230b
Bug 2013543: Add MDefinition::dominates r=jandem
iainireland Feb 3, 2026
bf98f12
Bug 2013543: Strengthen dominance check r=jandem
iainireland Feb 3, 2026
39ed1f1
Bug 2013543: apply code formatting via Lando
Feb 3, 2026
2545b79
Bug 2012866 - remove unused functions nr_reg_compute_type and nr_stre…
mfromanmoz Feb 3, 2026
d0c4594
Bug 2012866 - cast all the void* cb_arg assignments. r=dbaker
mfromanmoz Feb 3, 2026
79533fb
Bug 2012866 - const char* fixes for nr_reg_type_name and nr_reg_actio…
mfromanmoz Feb 3, 2026
9f0b5ad
Bug 2012866 - const char* fixes for nrappkit's r_errors.* r=bwc
mfromanmoz Feb 3, 2026
3cfd35f
Bug 2012866 - const char* fixes in nrappkit's util directory. r=dbaker
mfromanmoz Feb 3, 2026
cc183fc
Bug 2012866 - const char* fixes in nrappkit's log and registry direct…
mfromanmoz Feb 3, 2026
f671d7e
Bug 2012866 - make passing NR_registry pointers const char* r=bwc
mfromanmoz Feb 3, 2026
f949774
Bug 2012866 - const char* fixes in nICEr. r=dbaker
mfromanmoz Feb 3, 2026
151e073
Bug 2012866 - casting fixes in nrappkit and nICEr. r=dbaker
mfromanmoz Feb 3, 2026
c6a7e43
Bug 2013339 - improve RCALLOC ergonomics by adding type casting where…
mfromanmoz Feb 3, 2026
7cf9081
Bug 2013368 - add fallthrough annotations to nICEr. r=dbaker
mfromanmoz Feb 3, 2026
d60e495
Bug 2013368 - make sure all vars are initialized before potential ABO…
mfromanmoz Feb 3, 2026
3bad44a
Bug 2013368 - don't use 'class' for variable name. r=dbaker
mfromanmoz Feb 3, 2026
d250a93
Bug 2013368 - fixes to satisfy stringop-truncation warnings. r=bwc
mfromanmoz Feb 3, 2026
37ef48b
Bug 1920926 - Fix intermittent issues in browser_426329. r=mbeier
Standard8 Feb 3, 2026
5c21743
Bug 2010200 - Add default `distribution.ini` for official Linux build…
ahochheiden Feb 3, 2026
8289157
Bug 2008471 - Ensure media.ffvpx-hw.enabled is honoured for video dec…
aosmond Feb 3, 2026
563493d
Revert "Bug 1995062 - Part 4: add tests and stories for new component…
Feb 3, 2026
69774b1
Bug 2012528 - Sanitize `SHELLOPTS` for `bash` subprocess calls r=fire…
ahochheiden Feb 3, 2026
3f1cbaa
Revert "Bug 2006251 - Assistant Conversation Starters - r=Mardak,desk…
Feb 3, 2026
ba24021
Revert "Bug 2010200 - Add default `distribution.ini` for official Lin…
Feb 3, 2026
747a163
Bug 1894013 - Pin New Tab add shortcut button to the end of the short…
Feb 3, 2026
6685f28
Bug 2013639 - Suggest UI standardization fixes and cleanup. r=daisuke
0c0w3 Feb 3, 2026
4999c58
Bug 2013894 - Check didDestroy in GenAIChild.sys.mjs r=gregtatum
nordzilla Feb 3, 2026
3923f4f
Bug 2014166 - Revert temporary change and make `terser` only minify `…
ahochheiden Feb 3, 2026
53da5c9
Bug 2006251 - Assistant Conversation Starters - r=Mardak,desktop-them…
mailelucks Feb 3, 2026
6ac5b65
Bug 2005290 - [SmartWindow] Update FXA scope for chat authentication …
Feb 3, 2026
e5754d5
Bug 2012633 - Add arrow keydown handling to xul:splitter and hook up …
sfoster Feb 3, 2026
4d2e5b1
Bug 2014294 - Avoid crashing in TexUnpackSurface::TexOrSubImage when …
aosmond Feb 3, 2026
a6af814
Bug 2001025 - Prevent windows-link using raw-dylibs. r=supply-chain-r…
glandium Feb 4, 2026
474efbf
No Bug - Import translations from https://github.com/mozilla-l10n/and…
Feb 4, 2026
e50d800
Revert "Bug 2006251 - Assistant Conversation Starters - r=Mardak,desk…
Feb 4, 2026
4960eb2
Revert "Bug 1972071 - Add custom search shortcut modal and add engine…
IulianMoraru Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@ mozilla-central-workspace-hack = { path = "build/workspace-hack" }
# crate, which we don't really need as we require MSVC anyways.
windows-targets = { path = "build/rust/windows-targets" }

# windows-link replacement that doesn't use raw-dylibs, which have problems on
# the i686-pc-windows-gnu target.
windows-link = { path = "build/rust/windows-link" }

# Patch windows to use a non-vendored local copy of the crate.
windows = { path = "build/rust/windows" }

Expand Down
6 changes: 3 additions & 3 deletions browser/components/aiwindow/models/Utils.sys.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ import { createEngine } from "chrome://global/content/ml/EngineProcess.sys.mjs";
import { getFxAccountsSingleton } from "resource://gre/modules/FxAccounts.sys.mjs";
import {
OAUTH_CLIENT_ID,
SCOPE_PROFILE,
SCOPE_PROFILE_UID,
SCOPE_SMART_WINDOW,
} from "resource://gre/modules/FxAccountsCommon.sys.mjs";
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";

Expand Down Expand Up @@ -624,8 +625,7 @@ export class openAIEngine {
try {
const fxAccounts = getFxAccountsSingleton();
return await fxAccounts.getOAuthToken({
// Scope needs to be updated in accordance with https://bugzilla.mozilla.org/show_bug.cgi?id=2005290
scope: SCOPE_PROFILE,
scope: [SCOPE_SMART_WINDOW, SCOPE_PROFILE_UID],
client_id: OAUTH_CLIENT_ID,
});
} catch (error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ prefs = [
["browser_getCurrentTabMetadata.js"]
["browser_get_page_content.js"]
["browser_title_generation.js"]
["browser_utils_fxAccount.js"]
["browser_utils_loadConfig.js"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const { openAIEngine } = ChromeUtils.importESModule(
"moz-src:///browser/components/aiwindow/models/Utils.sys.mjs"
);

const { OAUTH_CLIENT_ID, SCOPE_PROFILE_UID, SCOPE_SMART_WINDOW } =
ChromeUtils.importESModule("resource://gre/modules/FxAccountsCommon.sys.mjs");

const { getFxAccountsSingleton } = ChromeUtils.importESModule(
"resource://gre/modules/FxAccounts.sys.mjs"
);

const { sinon } = ChromeUtils.importESModule(
"resource://testing-common/Sinon.sys.mjs"
);

add_task(async function test_getFxAccountToken_passes_correct_scope() {
const fakeToken = "fake-oauth-token";
const fxAccounts = getFxAccountsSingleton();

const getOAuthTokenStub = sinon
.stub(fxAccounts, "getOAuthToken")
.resolves(fakeToken);

try {
const token = await openAIEngine.getFxAccountToken();

Assert.ok(
getOAuthTokenStub.calledOnce,
"getOAuthToken should be called once"
);

const callArgs = getOAuthTokenStub.getCall(0).args[0];
Assert.ok(callArgs, "getOAuthToken should be called with arguments");
Assert.deepEqual(
callArgs.scope,
[SCOPE_SMART_WINDOW, SCOPE_PROFILE_UID],
"getOAuthToken should be called with correct scope array"
);
Assert.equal(
callArgs.client_id,
OAUTH_CLIENT_ID,
"getOAuthToken should be called with correct client_id"
);
Assert.equal(
token,
fakeToken,
"getFxAccountToken should return the token from getOAuthToken"
);
} finally {
getOAuthTokenStub.restore();
}
});

add_task(async function test_getFxAccountToken_returns_null_on_error() {
const fxAccounts = getFxAccountsSingleton();

const getOAuthTokenStub = sinon
.stub(fxAccounts, "getOAuthToken")
.rejects(new Error("FxA authentication failed"));

try {
const token = await openAIEngine.getFxAccountToken();

Assert.ok(
getOAuthTokenStub.calledOnce,
"getOAuthToken should be called once"
);
Assert.equal(
token,
null,
"getFxAccountToken should return null when getOAuthToken throws an error"
);
} finally {
getOAuthTokenStub.restore();
}
});
13 changes: 13 additions & 0 deletions browser/components/genai/GenAIChild.sys.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ export class GenAIChild extends JSWindowActorChild {
debounceDelay = 200;
pendingHide = false;

/**
* A flag that gets set when this actor is destroyed.
*/
#isDestroyed = false;

registerHideEvents() {
this.document.addEventListener("selectionchange", this);
HIDE_EVENTS.forEach(ev =>
Expand Down Expand Up @@ -79,6 +84,10 @@ export class GenAIChild extends JSWindowActorChild {
const { screenX, screenY } = event;

this.mouseUpTimeout = this.contentWindow.setTimeout(() => {
if (this.#isDestroyed) {
return;
}

const selectionInfo = this.getSelectionInfo();
const delay = event.timeStamp - this.downTimeStamp;

Expand Down Expand Up @@ -277,4 +286,8 @@ export class GenAIChild extends JSWindowActorChild {
.replace(/(\s*\n\s*)|\s{2,}/g, (_, newline) => (newline ? "\n" : " ")),
};
}

didDestroy() {
this.#isDestroyed = true;
}
}
4 changes: 4 additions & 0 deletions browser/components/search/test/browser/browser.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ prefs = ["browser.search.widget.new=false"]

["browser_426329.js"]
support-files = ["test.html", "discovery.html", "426329.xml"]
skip-if = [
"os == 'win' && os_version == '11.26100' && arch == 'x86_64' && debug", # Bug 1920926 and being removed in bug 2012951
"os == 'win' && os_version == '11.26100' && arch == 'x86_64' && asan", # Bug 1920926 and being removed in bug 2012951
]

["browser_addSearchEngineFromForm.js"]
support-files = ["test.html", "test_windows1252.html"]
Expand Down
69 changes: 58 additions & 11 deletions browser/components/search/test/browser/browser_426329.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ add_task(async function testShiftReturn() {
});

add_task(async function testAltReturn() {
// Ensure the history has been updated so that it is complete when we
// get to the clear history test.
let historyUpdated = TestUtils.topicObserved("satchel-storage-changed");

await prepareTest("testAltReturn");
await BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
EventUtils.synthesizeKey("KEY_Enter", { altKey: true });
Expand All @@ -173,6 +177,8 @@ add_task(async function testAltReturn() {
expectedURL(searchBar.value),
"testAltReturn opened correct search page"
);

await historyUpdated;
});

add_task(async function testAltReturnEmpty() {
Expand All @@ -187,6 +193,10 @@ add_task(async function testAltReturnEmpty() {
});

add_task(async function testAltGrReturn() {
// Ensure the history has been updated so that it is complete when we
// get to the clear history test.
let historyUpdated = TestUtils.topicObserved("satchel-storage-changed");

await prepareTest("testAltGrReturn");
await BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
EventUtils.synthesizeKey("KEY_Enter", { altGraphKey: true });
Expand All @@ -198,6 +208,8 @@ add_task(async function testAltGrReturn() {
expectedURL(searchBar.value),
"testAltGrReturn opened correct search page"
);

await historyUpdated;
});

add_task(async function testAltGrReturnEmpty() {
Expand Down Expand Up @@ -229,6 +241,10 @@ add_task(async function testShiftAltReturnEmpty() {
});

add_task(async function testLeftClick() {
// Ensure the history has been updated so that it is complete when we
// get to the clear history test.
let historyUpdated = TestUtils.topicObserved("satchel-storage-changed");

await prepareTest("testLeftClick");
simulateClick({ button: 0 }, searchButton);
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
Expand All @@ -238,9 +254,15 @@ add_task(async function testLeftClick() {
expectedURL(searchBar.value),
"testLeftClick opened correct search page"
);

await historyUpdated;
});

add_task(async function testMiddleClick() {
// Ensure the history has been updated so that it is complete when we
// get to the clear history test.
let historyUpdated = TestUtils.topicObserved("satchel-storage-changed");

await prepareTest("testMiddleClick");
await BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
simulateClick({ button: 1 }, searchButton);
Expand All @@ -251,9 +273,15 @@ add_task(async function testMiddleClick() {
expectedURL(searchBar.value),
"testMiddleClick opened correct search page"
);

await historyUpdated;
});

add_task(async function testShiftMiddleClick() {
// Ensure the history has been updated so that it is complete when we
// get to the clear history test.
let historyUpdated = TestUtils.topicObserved("satchel-storage-changed");

await prepareTest("testShiftMiddleClick");

let url = expectedURL(searchBar.value);
Expand All @@ -268,6 +296,8 @@ add_task(async function testShiftMiddleClick() {
url,
"testShiftMiddleClick opened correct search page"
);

await historyUpdated;
});

add_task(async function testRightClick() {
Expand All @@ -291,7 +321,12 @@ add_task(async function testRightClick() {
});
// The click in the searchbox focuses it, which opens the suggestion
// panel. Clean up after ourselves.
searchBar.textbox.popup.hidePopup();
let popupHiddenPromise = BrowserTestUtils.waitForPopupEvent(
searchBar.textbox.popup,
"hidden"
);
searchBar.textbox.closePopup();
await popupHiddenPromise;
});

add_task(async function testSearchHistory() {
Expand All @@ -311,37 +346,49 @@ add_task(async function testSearchHistory() {

add_task(async function testAutocomplete() {
let popup = searchBar.textbox.popup;
let popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
let popupShownPromise = BrowserTestUtils.waitForPopupEvent(popup, "shown");
searchBar.textbox.showHistoryPopup();
await popupShownPromise;

checkMenuEntries(searchEntries);

let popupHiddenPromise = BrowserTestUtils.waitForPopupEvent(popup, "hidden");
searchBar.textbox.closePopup();
await popupHiddenPromise;
});

add_task(async function testClearHistory() {
// Open the textbox context menu to trigger controller attachment.
let textbox = searchBar.textbox;
let popupShownPromise = BrowserTestUtils.waitForEvent(
window,
"popupshown",
false,
event => event.target.classList.contains("textbox-contextmenu")

// If the menu hasn't been built yet, then force it to be built.
if (!searchBar._menupopup) {
searchBar._buildContextMenu();
}
let popupShownPromise = BrowserTestUtils.waitForPopupEvent(
searchBar._menupopup,
"shown"
);
EventUtils.synthesizeMouseAtCenter(textbox, {
type: "contextmenu",
button: 2,
});
await popupShownPromise;
// Close the context menu.
let contextMenu = document.querySelector(".textbox-contextmenu");
contextMenu.hidePopup();

let menuitem = searchBar._menupopup.querySelector(".searchbar-clear-history");
ok(!menuitem.disabled, "Clear history menuitem enabled");

let historyCleared = promiseObserver("satchel-storage-changed");
searchBar._menupopup.activateItem(menuitem);
await historyCleared;

// Close the context menu.
let popupHiddenPromise = BrowserTestUtils.waitForPopupEvent(
searchBar._menupopup,
"hidden"
);
searchBar._menupopup.hidePopup();
await popupHiddenPromise;

let count = await FormHistoryTestUtils.count(
textbox.getAttribute("autocompletesearchparam")
);
Expand Down
9 changes: 8 additions & 1 deletion browser/components/tabbrowser/content/tabbrowser.js
Original file line number Diff line number Diff line change
Expand Up @@ -3471,7 +3471,7 @@
for (const tab of tabs) {
this.tabpanels.setSplitViewPanelActive(isActive, tab.linkedPanel);
}
this.tabpanels.isSplitViewActive = gBrowser.selectedTab.splitview;
this.tabpanels.setSplitViewActive(!!gBrowser.selectedTab.splitview);
}

/**
Expand Down Expand Up @@ -9338,6 +9338,13 @@
PrivateBrowsingUtils.isWindowPrivate(window)
);
this.mBrowser.registeredOpenURI = aLocation;

// Record telemetry for URI loads in split view
if (this.mTab.splitview && aLocation.spec !== "about:opentabs") {
const index = this.mTab.splitview.tabs.indexOf(this.mTab);
const label = String(index + 1); // 0 -> "1" (LTR left), 1 -> "2" (LTR right)
Glean.splitview.uriCount[label].add(1);
}
}

if (this.mTab != gBrowser.selectedTab) {
Expand Down
12 changes: 12 additions & 0 deletions browser/components/tabbrowser/content/tabsplitview.js
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,18 @@

this.#activate();
gBrowser.setIsSplitViewActive(this.hasActiveTab, this.#tabs);

// Attempt to update uriCount metric using the resulting tabs collection,
// as tabs may not be added to the splitview if they are pinned etc.
for (let tab of this.tabs) {
let tabURI = tab.linkedBrowser.currentURI.spec;
if (!isBlankPageURL(tabURI) && tabURI !== "about:opentabs") {
// Add to the counter which tracks the number of URIs loaded into splitview tabs
const index = tabs.indexOf(tab);
const label = String(index + 1); // 0 -> "1" (LTR left), 1 -> "2" (LTR right)
Glean.splitview.uriCount[label].add(1);
}
}
}

/**
Expand Down
Loading
Loading