forked from mirrors/gecko-dev
		
	 9ef1c3a9cb
			
		
	
	
		9ef1c3a9cb
		
	
	
	
	
		
			
			The enrollmentHelper was much more complicated than it needed to be. The internal asynchrony that required awaiting an additional promise was fixed in bug 1773583. The returned cleanup function is no longer async, so unnecessary awaits have been removed. This also applies to enrollWithFeatureConfig, as it is a wrapper around enrollmentHelper. Differential Revision: https://phabricator.services.mozilla.com/D212318
		
			
				
	
	
		
			281 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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.enrollWithFeatureConfig(
 | |
|     {
 | |
|       featureId: NimbusFeatures.shellService.featureId,
 | |
|       value: {
 | |
|         setDefaultBrowserUserChoice: true,
 | |
|         setDefaultPDFHandlerOnlyReplaceBrowsers: false,
 | |
|         setDefaultPDFHandler: true,
 | |
|         enabled: true,
 | |
|       },
 | |
|     },
 | |
|     { isRollout: 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"],
 | |
|   ]);
 | |
| 
 | |
|   doCleanup();
 | |
| });
 | |
| 
 | |
| add_task(async function remoteEnableWithPDF_testOnlyReplaceBrowsers() {
 | |
|   let doCleanup = await ExperimentFakes.enrollWithFeatureConfig(
 | |
|     {
 | |
|       featureId: NimbusFeatures.shellService.featureId,
 | |
|       value: {
 | |
|         setDefaultBrowserUserChoice: true,
 | |
|         setDefaultPDFHandlerOnlyReplaceBrowsers: true,
 | |
|         setDefaultPDFHandler: true,
 | |
|         enabled: true,
 | |
|       },
 | |
|     },
 | |
|     { isRollout: 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`
 | |
|   );
 | |
| 
 | |
|   doCleanup();
 | |
| });
 | |
| 
 | |
| add_task(async function remoteEnableWithoutPDF() {
 | |
|   let doCleanup = await ExperimentFakes.enrollWithFeatureConfig(
 | |
|     {
 | |
|       featureId: NimbusFeatures.shellService.featureId,
 | |
|       value: {
 | |
|         setDefaultBrowserUserChoice: true,
 | |
|         setDefaultPDFHandler: false,
 | |
|         enabled: true,
 | |
|       },
 | |
|     },
 | |
|     { isRollout: 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, []]);
 | |
| 
 | |
|   doCleanup();
 | |
| });
 | |
| 
 | |
| add_task(async function remoteDisable() {
 | |
|   let doCleanup = await ExperimentFakes.enrollWithFeatureConfig(
 | |
|     {
 | |
|       featureId: NimbusFeatures.shellService.featureId,
 | |
|       value: {
 | |
|         setDefaultBrowserUserChoice: false,
 | |
|         setDefaultPDFHandler: true,
 | |
|         enabled: false,
 | |
|       },
 | |
|     },
 | |
|     { isRollout: true }
 | |
|   );
 | |
| 
 | |
|   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);
 | |
| 
 | |
|   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();
 | |
|   }
 | |
| });
 |