forked from mirrors/gecko-dev
This does two things. First, it expects the special FirefoxPDF-... ProgID to be available for UserChoice. We could manage without it for a while, but eventually we expect set-to-default to include PDFs. When that is the case, if it doesn't exist, something has gone very wrong, and we'd like to find that out (via our existing telemetry, which reports "missing" ProgIDs). Second, it arranges to use the new FirefoxPDF-... ProgID when setting-to-default. Differential Revision: https://phabricator.services.mozilla.com/D142303
221 lines
6 KiB
JavaScript
221 lines
6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
XPCOMUtils.defineLazyModuleGetters(this, {
|
|
ExperimentAPI: "resource://nimbus/ExperimentAPI.jsm",
|
|
ExperimentFakes: "resource://testing-common/NimbusTestUtils.jsm",
|
|
NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm",
|
|
sinon: "resource://testing-common/Sinon.jsm",
|
|
});
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(
|
|
this,
|
|
"XreDirProvider",
|
|
"@mozilla.org/xre/directory-provider;1",
|
|
"nsIXREDirProvider"
|
|
);
|
|
|
|
const _callExternalDefaultBrowserAgentStub = sinon
|
|
.stub(ShellService, "_callExternalDefaultBrowserAgent")
|
|
.callsFake(async () => ({
|
|
async wait() {
|
|
return { exitCode: 0 };
|
|
},
|
|
}));
|
|
|
|
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(() => {
|
|
_callExternalDefaultBrowserAgentStub.restore();
|
|
_userChoiceImpossibleTelemetryResultStub.restore();
|
|
shellStub.restore();
|
|
|
|
ExperimentAPI._store._deleteForTests("shellService");
|
|
});
|
|
|
|
add_task(async function ready() {
|
|
await ExperimentAPI.ready();
|
|
});
|
|
|
|
// Everything here is Windows 10+.
|
|
Assert.ok(
|
|
AppConstants.isPlatformAndVersionAtLeast("win", "10"),
|
|
"Windows version 10+"
|
|
);
|
|
|
|
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
|
|
);
|
|
|
|
_callExternalDefaultBrowserAgentStub.resetHistory();
|
|
ShellService.setDefaultBrowser();
|
|
|
|
const aumi = XreDirProvider.getInstallHash();
|
|
Assert.ok(_callExternalDefaultBrowserAgentStub.called);
|
|
Assert.deepEqual(_callExternalDefaultBrowserAgentStub.firstCall.args, [
|
|
{
|
|
arguments: [
|
|
"set-default-browser-user-choice",
|
|
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);
|
|
|
|
_callExternalDefaultBrowserAgentStub.resetHistory();
|
|
ShellService.setDefaultBrowser();
|
|
|
|
Assert.ok(_callExternalDefaultBrowserAgentStub.called);
|
|
Assert.deepEqual(
|
|
_callExternalDefaultBrowserAgentStub.firstCall.args,
|
|
[
|
|
{
|
|
arguments: [
|
|
"set-default-browser-user-choice",
|
|
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");
|
|
|
|
_callExternalDefaultBrowserAgentStub.resetHistory();
|
|
ShellService.setDefaultBrowser();
|
|
|
|
Assert.ok(_callExternalDefaultBrowserAgentStub.called);
|
|
Assert.deepEqual(
|
|
_callExternalDefaultBrowserAgentStub.firstCall.args,
|
|
[{ arguments: ["set-default-browser-user-choice", 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
|
|
);
|
|
|
|
_callExternalDefaultBrowserAgentStub.resetHistory();
|
|
ShellService.setDefaultBrowser();
|
|
|
|
const aumi = XreDirProvider.getInstallHash();
|
|
Assert.ok(_callExternalDefaultBrowserAgentStub.called);
|
|
Assert.deepEqual(_callExternalDefaultBrowserAgentStub.firstCall.args, [
|
|
{ arguments: ["set-default-browser-user-choice", 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
|
|
);
|
|
|
|
_callExternalDefaultBrowserAgentStub.resetHistory();
|
|
ShellService.setDefaultBrowser();
|
|
|
|
Assert.ok(_callExternalDefaultBrowserAgentStub.notCalled);
|
|
Assert.ok(setDefaultStub.called);
|
|
|
|
await doCleanup();
|
|
});
|