commit 145c03dc3b3228b262bc666e3e321a4a51233aaa parent 6bdbcbc6a323f866cda64a6a84b18a1732d759f7 Author: Daisuke Akatsuka <daisuke@birchill.co.jp> Date: Fri, 19 Dec 2025 01:41:39 +0000 Bug 2002936: Stop any processing after activating global action r=daleharvey Differential Revision: https://phabricator.services.mozilla.com/D276402 Diffstat:
5 files changed, 16 insertions(+), 24 deletions(-)
diff --git a/browser/components/urlbar/UrlbarProviderGlobalActions.sys.mjs b/browser/components/urlbar/UrlbarProviderGlobalActions.sys.mjs @@ -74,17 +74,10 @@ export class UrlbarProviderGlobalActions extends UrlbarProvider { */ async startQuery(queryContext, addCallback) { let actionsResults = []; - let searchModeEngine = ""; for (let provider of globalActionsProviders) { if (provider.isActive(queryContext)) { for (let action of (await provider.queryActions(queryContext)) || []) { - if (action.engine && !searchModeEngine) { - searchModeEngine = action.engine; - } else if (action.engine) { - // We only allow one action that provides an engine search mode. - continue; - } action.providerName = provider.name; actionsResults.push(action); } @@ -116,11 +109,6 @@ export class UrlbarProviderGlobalActions extends UrlbarProvider { query, }; - if (searchModeEngine) { - payload.providesSearchMode = true; - payload.engine = searchModeEngine; - } - let result = new lazy.UrlbarResult({ type: UrlbarUtils.RESULT_TYPE.DYNAMIC, source: UrlbarUtils.RESULT_SOURCE.ACTIONS, @@ -200,6 +188,7 @@ export class UrlbarProviderGlobalActions extends UrlbarProvider { if (action.dataset?.providesSearchMode) { btn.attributes["data-provides-searchmode"] = "true"; + btn.attributes["data-engine"] = action.engine; } return btn; diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs @@ -4231,7 +4231,11 @@ export class UrlbarInput extends HTMLElement { */ _searchModeForResult(result, entry = null) { // Search mode is determined by the result's keyword or engine. - if (!result.payload.keyword && !result.payload.engine) { + if ( + !result.payload.keyword && + !result.payload.engine && + !this.view.selectedElement.dataset?.engine + ) { return null; } @@ -4245,6 +4249,8 @@ export class UrlbarInput extends HTMLElement { result.payload.engine == result.payload.originalEngine) ) { searchMode = { engineName: result.payload.engine }; + } else if (this.view.selectedElement?.dataset.engine) { + searchMode = { engineName: this.view.selectedElement.dataset.engine }; } if (searchMode) { diff --git a/browser/components/urlbar/tests/browser/browser_contextualsearch.js b/browser/components/urlbar/tests/browser/browser_contextualsearch.js @@ -149,6 +149,14 @@ add_task(async function test_actions() { Assert.equal(testActionCalled, 1, "Test action was called"); + info("Check whether the URI on the original tab is not changed"); + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await new Promise(r => setTimeout(r, 100)); + Assert.equal( + gBrowser.selectedBrowser.currentURI.spec, + "https://example.net/" + ); + ActionsProviderQuickActions.removeAction("testaction"); }); diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js @@ -1509,7 +1509,6 @@ add_task(async function globalAction() { }, { skipUnload: true } ); - let engine = Services.search.getEngineByName("Amp"); await PlacesTestUtils.addVisits(engineURL); @@ -1534,8 +1533,6 @@ add_task(async function globalAction() { providerName: "ActionsProviderContextualSearch", }, ], - providesSearchMode: true, - engine: engine.name, query: "", input: "", inputLength: context.searchString.length, diff --git a/browser/components/urlbar/tests/unit/head.js b/browser/components/urlbar/tests/unit/head.js @@ -980,10 +980,6 @@ function makeCalculatorResult(queryContext, { value }) { * Original input length. * @param {boolean} [options.showOnboardingLabel] * Whether the “press Tab” hint should appear. - * @param {boolean} [options.providesSearchMode] - * Whether selecting an action enters a search mode. - * @param {string | null} [options.engine] - * The engine name, if providesSearchMode is true. * @returns {UrlbarResult} */ function makeGlobalActionsResult({ @@ -991,8 +987,6 @@ function makeGlobalActionsResult({ query, inputLength, showOnboardingLabel = false, - providesSearchMode = false, - engine, }) { const payload = { actionsResults, @@ -1001,8 +995,6 @@ function makeGlobalActionsResult({ input: query, inputLength, showOnboardingLabel, - providesSearchMode, - engine, }; return new UrlbarResult({