From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../shell/test/browser_setDefaultPDFHandler.js | 269 +++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 browser/components/shell/test/browser_setDefaultPDFHandler.js (limited to 'browser/components/shell/test/browser_setDefaultPDFHandler.js') diff --git a/browser/components/shell/test/browser_setDefaultPDFHandler.js b/browser/components/shell/test/browser_setDefaultPDFHandler.js new file mode 100644 index 0000000000..cfe7a580a1 --- /dev/null +++ b/browser/components/shell/test/browser_setDefaultPDFHandler.js @@ -0,0 +1,269 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +ChromeUtils.defineESModuleGetters(this, { + ExperimentAPI: "resource://nimbus/ExperimentAPI.sys.mjs", + ExperimentFakes: "resource://testing-common/NimbusTestUtils.sys.mjs", + NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs", + sinon: "resource://testing-common/Sinon.sys.mjs", +}); + +const setDefaultBrowserUserChoiceStub = sinon.stub(); +const setDefaultExtensionHandlersUserChoiceStub = sinon + .stub() + .callsFake(() => Promise.resolve()); + +const defaultAgentStub = sinon.stub(ShellService, "defaultAgent").value({ + setDefaultBrowserUserChoiceAsync: setDefaultBrowserUserChoiceStub, + setDefaultExtensionHandlersUserChoice: + setDefaultExtensionHandlersUserChoiceStub, +}); + +XPCOMUtils.defineLazyServiceGetter( + this, + "XreDirProvider", + "@mozilla.org/xre/directory-provider;1", + "nsIXREDirProvider" +); + +const _userChoiceImpossibleTelemetryResultStub = sinon + .stub(ShellService, "_userChoiceImpossibleTelemetryResult") + .callsFake(() => null); + +// Ensure we don't fall back to a real implementation. +const setDefaultStub = sinon.stub(); +// We'll dynamically update this as needed during the tests. +const queryCurrentDefaultHandlerForStub = sinon.stub(); +const shellStub = sinon.stub(ShellService, "shellService").value({ + setDefaultBrowser: setDefaultStub, + queryCurrentDefaultHandlerFor: queryCurrentDefaultHandlerForStub, +}); + +registerCleanupFunction(() => { + defaultAgentStub.restore(); + _userChoiceImpossibleTelemetryResultStub.restore(); + shellStub.restore(); + + ExperimentAPI._store._deleteForTests("shellService"); +}); + +add_task(async function ready() { + await ExperimentAPI.ready(); +}); + +// Everything here is Windows. +Assert.ok(AppConstants.platform == "win", "Platform is Windows"); + +add_task(async function remoteEnableWithPDF() { + let doCleanup = await ExperimentFakes.enrollWithRollout({ + featureId: NimbusFeatures.shellService.featureId, + value: { + setDefaultBrowserUserChoice: true, + setDefaultPDFHandlerOnlyReplaceBrowsers: false, + setDefaultPDFHandler: true, + enabled: true, + }, + }); + + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultBrowserUserChoice"), + true + ); + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultPDFHandler"), + true + ); + + setDefaultBrowserUserChoiceStub.resetHistory(); + await ShellService.setDefaultBrowser(); + + const aumi = XreDirProvider.getInstallHash(); + Assert.ok(setDefaultBrowserUserChoiceStub.called); + Assert.deepEqual(setDefaultBrowserUserChoiceStub.firstCall.args, [ + aumi, + [".pdf", "FirefoxPDF"], + ]); + + await doCleanup(); +}); + +add_task(async function remoteEnableWithPDF_testOnlyReplaceBrowsers() { + let doCleanup = await ExperimentFakes.enrollWithRollout({ + featureId: NimbusFeatures.shellService.featureId, + value: { + setDefaultBrowserUserChoice: true, + setDefaultPDFHandlerOnlyReplaceBrowsers: true, + setDefaultPDFHandler: true, + enabled: true, + }, + }); + + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultBrowserUserChoice"), + true + ); + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultPDFHandler"), + true + ); + Assert.equal( + NimbusFeatures.shellService.getVariable( + "setDefaultPDFHandlerOnlyReplaceBrowsers" + ), + true + ); + + const aumi = XreDirProvider.getInstallHash(); + + // We'll take the default from a missing association or a known browser. + for (let progId of ["", "MSEdgePDF"]) { + queryCurrentDefaultHandlerForStub.callsFake(() => progId); + + setDefaultBrowserUserChoiceStub.resetHistory(); + await ShellService.setDefaultBrowser(); + + Assert.ok(setDefaultBrowserUserChoiceStub.called); + Assert.deepEqual( + setDefaultBrowserUserChoiceStub.firstCall.args, + [aumi, [".pdf", "FirefoxPDF"]], + `Will take default from missing association or known browser with ProgID '${progId}'` + ); + } + + // But not from a non-browser. + queryCurrentDefaultHandlerForStub.callsFake(() => "Acrobat.Document.DC"); + + setDefaultBrowserUserChoiceStub.resetHistory(); + await ShellService.setDefaultBrowser(); + + Assert.ok(setDefaultBrowserUserChoiceStub.called); + Assert.deepEqual( + setDefaultBrowserUserChoiceStub.firstCall.args, + [aumi, []], + `Will not take default from non-browser` + ); + + await doCleanup(); +}); + +add_task(async function remoteEnableWithoutPDF() { + let doCleanup = await ExperimentFakes.enrollWithRollout({ + featureId: NimbusFeatures.shellService.featureId, + value: { + setDefaultBrowserUserChoice: true, + setDefaultPDFHandler: false, + enabled: true, + }, + }); + + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultBrowserUserChoice"), + true + ); + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultPDFHandler"), + false + ); + + setDefaultBrowserUserChoiceStub.resetHistory(); + await ShellService.setDefaultBrowser(); + + const aumi = XreDirProvider.getInstallHash(); + Assert.ok(setDefaultBrowserUserChoiceStub.called); + Assert.deepEqual(setDefaultBrowserUserChoiceStub.firstCall.args, [aumi, []]); + + await doCleanup(); +}); + +add_task(async function remoteDisable() { + let doCleanup = await ExperimentFakes.enrollWithRollout({ + featureId: NimbusFeatures.shellService.featureId, + value: { + setDefaultBrowserUserChoice: false, + setDefaultPDFHandler: true, + enabled: false, + }, + }); + + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultBrowserUserChoice"), + false + ); + Assert.equal( + NimbusFeatures.shellService.getVariable("setDefaultPDFHandler"), + true + ); + + setDefaultBrowserUserChoiceStub.resetHistory(); + await ShellService.setDefaultBrowser(); + + Assert.ok(setDefaultBrowserUserChoiceStub.notCalled); + Assert.ok(setDefaultStub.called); + + await doCleanup(); +}); + +add_task(async function test_setAsDefaultPDFHandler_knownBrowser() { + const sandbox = sinon.createSandbox(); + + const aumi = XreDirProvider.getInstallHash(); + const expectedArguments = [aumi, [".pdf", "FirefoxPDF"]]; + + try { + const pdfHandlerResult = { registered: true, knownBrowser: true }; + sandbox + .stub(ShellService, "getDefaultPDFHandler") + .returns(pdfHandlerResult); + + info("Testing setAsDefaultPDFHandler(true) when knownBrowser = true"); + ShellService.setAsDefaultPDFHandler(true); + Assert.ok( + setDefaultExtensionHandlersUserChoiceStub.called, + "Called default browser agent" + ); + Assert.deepEqual( + setDefaultExtensionHandlersUserChoiceStub.firstCall.args, + expectedArguments, + "Called default browser agent with expected arguments" + ); + setDefaultExtensionHandlersUserChoiceStub.resetHistory(); + + info("Testing setAsDefaultPDFHandler(false) when knownBrowser = true"); + ShellService.setAsDefaultPDFHandler(false); + Assert.ok( + setDefaultExtensionHandlersUserChoiceStub.called, + "Called default browser agent" + ); + Assert.deepEqual( + setDefaultExtensionHandlersUserChoiceStub.firstCall.args, + expectedArguments, + "Called default browser agent with expected arguments" + ); + setDefaultExtensionHandlersUserChoiceStub.resetHistory(); + + pdfHandlerResult.knownBrowser = false; + + info("Testing setAsDefaultPDFHandler(true) when knownBrowser = false"); + ShellService.setAsDefaultPDFHandler(true); + Assert.ok( + setDefaultExtensionHandlersUserChoiceStub.notCalled, + "Did not call default browser agent" + ); + setDefaultExtensionHandlersUserChoiceStub.resetHistory(); + + info("Testing setAsDefaultPDFHandler(false) when knownBrowser = false"); + ShellService.setAsDefaultPDFHandler(false); + Assert.ok( + setDefaultExtensionHandlersUserChoiceStub.called, + "Called default browser agent" + ); + Assert.deepEqual( + setDefaultExtensionHandlersUserChoiceStub.firstCall.args, + expectedArguments, + "Called default browser agent with expected arguments" + ); + setDefaultExtensionHandlersUserChoiceStub.resetHistory(); + } finally { + sandbox.restore(); + } +}); -- cgit v1.2.3