Bug 1959542 - Enable ToS by default in Firefox 138.x mid-cycle dot release (Windows, Mac, Linux) r=hanna_a,omc-reviewers
- Show ToS modal by default for all new users on official builds - Remove code related to the on-train rollout for Mac/Linus/MSIX Differential Revision: https://phabricator.services.mozilla.com/D247111
This commit is contained in:
@@ -1788,11 +1788,6 @@ pref("browser.partnerlink.campaign.topsites", "amzn_2020_a1");
|
||||
// Activates preloading of the new tab url.
|
||||
pref("browser.newtab.preload", true);
|
||||
|
||||
// If an on-train limited rollout of the preonboarding modal is enabled, the
|
||||
// percentage of the Mac, Linux, and MSIX population to enroll. Default to 25% of
|
||||
// population (2500 / 10000).
|
||||
pref("browser.preonboarding.onTrainRolloutPopulation", 2500);
|
||||
|
||||
// Show "Download Firefox for mobile" QR code modal on newtab
|
||||
pref("browser.newtabpage.activity-stream.mobileDownloadModal.enabled", false);
|
||||
pref("browser.newtabpage.activity-stream.mobileDownloadModal.variant-a", false);
|
||||
|
||||
@@ -22,8 +22,7 @@ const PREF_ACCEPTED_POLICY_DATE =
|
||||
PREF_BRANCH + "dataSubmissionPolicyNotifiedTime";
|
||||
const PREF_TOS_ROLLOUT_POPULATION =
|
||||
"browser.preonboarding.onTrainRolloutPopulation";
|
||||
const PREF_TOS_ROLLOUT_ENROLLED =
|
||||
"browser.preonboarding.enrolledInOnTrainRollout";
|
||||
const PREF_TOS_ENABLED = "browser.preonboarding.enabled";
|
||||
|
||||
const PREF_TELEMETRY_LOG_LEVEL = "toolkit.telemetry.log.level";
|
||||
|
||||
@@ -124,6 +123,7 @@ add_setup(async function () {
|
||||
const isFirstRun = Preferences.get(PREF_FIRST_RUN, true);
|
||||
const bypassNotification = Preferences.get(PREF_BYPASS_NOTIFICATION, true);
|
||||
const currentPolicyVersion = Preferences.get(PREF_CURRENT_POLICY_VERSION, 1);
|
||||
const TOSEnabled = Preferences.get(PREF_TOS_ENABLED, false);
|
||||
|
||||
// Register a cleanup function to reset our preferences.
|
||||
registerCleanupFunction(() => {
|
||||
@@ -131,9 +131,7 @@ add_setup(async function () {
|
||||
Preferences.set(PREF_BYPASS_NOTIFICATION, bypassNotification);
|
||||
Preferences.set(PREF_CURRENT_POLICY_VERSION, currentPolicyVersion);
|
||||
Preferences.reset(PREF_TELEMETRY_LOG_LEVEL);
|
||||
Preferences.reset(PREF_TOS_ROLLOUT_ENROLLED);
|
||||
Preferences.reset(PREF_TOS_ROLLOUT_POPULATION);
|
||||
|
||||
Preferences.set(PREF_TOS_ENABLED, TOSEnabled);
|
||||
return closeAllNotifications();
|
||||
});
|
||||
|
||||
@@ -144,9 +142,8 @@ add_setup(async function () {
|
||||
// Ensure this isn't the first run, because then we open the first run page.
|
||||
Preferences.set(PREF_FIRST_RUN, false);
|
||||
TelemetryReportingPolicy.testUpdateFirstRun();
|
||||
// Do not trigger ToS modal for Linux, Mac, and MSIX builds
|
||||
Preferences.set(PREF_TOS_ROLLOUT_ENROLLED, false);
|
||||
Preferences.set(PREF_TOS_ROLLOUT_POPULATION, 0);
|
||||
// Do not enable the TOS modal
|
||||
Preferences.set(PREF_TOS_ENABLED, false);
|
||||
});
|
||||
|
||||
function clearAcceptedPolicy() {
|
||||
|
||||
@@ -1408,7 +1408,7 @@ const BASE_MESSAGES = () => [
|
||||
|
||||
const PREONBOARDING_MESSAGES = () => [
|
||||
{
|
||||
id: "ON_TRAIN_ROLLOUT",
|
||||
id: "NEW_USER_TOU_ONBOARDING",
|
||||
enabled: true,
|
||||
requireAction: true,
|
||||
currentPolicyVersion: 3,
|
||||
|
||||
@@ -3751,11 +3751,15 @@ pref("toolkit.legacyUserProfileCustomizations.stylesheets", false);
|
||||
pref("datareporting.policy.dataSubmissionEnabled", true);
|
||||
pref("datareporting.policy.dataSubmissionPolicyNotifiedTime", "0");
|
||||
pref("datareporting.policy.dataSubmissionPolicyAcceptedVersion", 0);
|
||||
pref("datareporting.policy.dataSubmissionPolicyBypassNotification", false);
|
||||
pref("datareporting.policy.currentPolicyVersion", 2);
|
||||
pref("datareporting.policy.minimumPolicyVersion", 1);
|
||||
pref("datareporting.policy.minimumPolicyVersion.channel-beta", 2);
|
||||
pref("datareporting.policy.firstRunURL", "https://www.mozilla.org/privacy/firefox/");
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref("datareporting.policy.dataSubmissionPolicyBypassNotification", false);
|
||||
#else
|
||||
pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_SERVICES_HEALTHREPORT
|
||||
|
||||
@@ -769,12 +769,6 @@ preonboarding:
|
||||
fallbackPref: datareporting.policy.firstRunURL
|
||||
description: >-
|
||||
URL of browser tab to be opened on first run instead of infobar.
|
||||
onTrainRolloutPopulation:
|
||||
type: int
|
||||
fallbackPref: browser.preonboarding.onTrainRolloutPopulation
|
||||
description: >-
|
||||
If an on-train limited rollout is enabled, the percentage of the population to enroll
|
||||
|
||||
|
||||
moreFromMozilla:
|
||||
description: "New page on about:preferences to suggest more Mozilla products"
|
||||
|
||||
@@ -13,7 +13,6 @@ const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
ExperimentManager: "resource://nimbus/lib/ExperimentManager.sys.mjs",
|
||||
TelemetrySend: "resource://gre/modules/TelemetrySend.sys.mjs",
|
||||
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
|
||||
OnboardingMessageProvider:
|
||||
@@ -721,64 +720,6 @@ var TelemetryReportingPolicyImpl = {
|
||||
});
|
||||
},
|
||||
|
||||
async _configureFromOnTrainRollout() {
|
||||
const ENROLLMENT_PREF = "browser.preonboarding.enrolledInOnTrainRollout";
|
||||
|
||||
const platformSupported =
|
||||
AppConstants.platform == "linux" ||
|
||||
AppConstants.platform == "macosx" ||
|
||||
(AppConstants.platform === "win" &&
|
||||
Services.sysinfo.getProperty("hasWinPackageId", false));
|
||||
if (!platformSupported) {
|
||||
return;
|
||||
}
|
||||
|
||||
let enrolled;
|
||||
// Only enroll new users
|
||||
if (this.isFirstRun()) {
|
||||
const count = this._nimbusVariables.onTrainRolloutPopulation;
|
||||
if (!count) {
|
||||
this._log.trace(
|
||||
`_configureFromOnTrainRollout: User not enrolled in on-train rollout - population is 0, not setting preferences`
|
||||
);
|
||||
return;
|
||||
}
|
||||
const bucketConfig = {
|
||||
count,
|
||||
namespace: "firefox-desktop-preonboarding-on-train-rollout-1",
|
||||
randomizationUnit: "normandy_id",
|
||||
start: 0,
|
||||
total: 10000,
|
||||
};
|
||||
|
||||
enrolled =
|
||||
await lazy.ExperimentManager.isInBucketAllocation(bucketConfig);
|
||||
|
||||
if (enrolled) {
|
||||
Services.prefs.setBoolPref(ENROLLMENT_PREF, enrolled);
|
||||
}
|
||||
} else {
|
||||
enrolled = Services.prefs.getBoolPref(ENROLLMENT_PREF, false);
|
||||
}
|
||||
|
||||
if (enrolled) {
|
||||
const preonboardingMessage =
|
||||
lazy.OnboardingMessageProvider.getPreonboardingMessages().find(
|
||||
m => m.id === "ON_TRAIN_ROLLOUT"
|
||||
);
|
||||
|
||||
this._nimbusVariables = preonboardingMessage;
|
||||
|
||||
this._log.trace(
|
||||
`_configureFromOnTrainRollout: User enrolled in on-train rollout, will set preferences`
|
||||
);
|
||||
} else {
|
||||
this._log.trace(
|
||||
`_configureFromOnTrainRollout: User not enrolled in on-train rollout, not setting preferences`
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Capture Nimbus configuration: record feature variables for future use and
|
||||
* set Gecko preferences based on values.
|
||||
@@ -787,7 +728,23 @@ var TelemetryReportingPolicyImpl = {
|
||||
this._nimbusVariables = lazy.NimbusFeatures.preonboarding.getAllVariables();
|
||||
|
||||
if (this._nimbusVariables.enabled === null) {
|
||||
await this._configureFromOnTrainRollout();
|
||||
const preonboardingMessage =
|
||||
lazy.OnboardingMessageProvider.getPreonboardingMessages().find(
|
||||
m => m.id === "NEW_USER_TOU_ONBOARDING"
|
||||
);
|
||||
// Use default message variables, overriding with values from any set
|
||||
// fallback prefs.
|
||||
this._nimbusVariables = {
|
||||
...preonboardingMessage,
|
||||
...Object.fromEntries(
|
||||
Object.entries(this._nimbusVariables).filter(
|
||||
([_, value]) => value !== null
|
||||
)
|
||||
),
|
||||
};
|
||||
this._log.trace(
|
||||
`_configureFromNimbus: using default preonboarding message`
|
||||
);
|
||||
}
|
||||
|
||||
if (this._nimbusVariables.enabled) {
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
AppConstants: "resource://gre/modules/AppConstants.sys.mjs",
|
||||
ClientEnvironment: "resource://normandy/lib/ClientEnvironment.sys.mjs",
|
||||
ExperimentAPI: "resource://nimbus/ExperimentAPI.sys.mjs",
|
||||
ExperimentFakes: "resource://testing-common/NimbusTestUtils.sys.mjs",
|
||||
ExperimentManager: "resource://nimbus/lib/ExperimentManager.sys.mjs",
|
||||
@@ -33,30 +32,6 @@ const TEST_CHANNEL = "TestChannelABC";
|
||||
const PREF_MINIMUM_CHANNEL_POLICY_VERSION =
|
||||
TelemetryUtils.Preferences.MinimumPolicyVersion + ".channel-" + TEST_CHANNEL;
|
||||
|
||||
const ON_TRAIN_ROLLOUT_SUPPORTED_PLATFORM =
|
||||
AppConstants.platform == "linux" ||
|
||||
AppConstants.platform == "macosx" ||
|
||||
(AppConstants.platform === "win" &&
|
||||
Services.sysinfo.getProperty("hasWinPackageId", false));
|
||||
|
||||
const ON_TRAIN_ROLLOUT_POPULATION_PREF =
|
||||
"browser.preonboarding.onTrainRolloutPopulation";
|
||||
|
||||
const ON_TRAIN_ROLLOUT_ENROLLMENT_PREF =
|
||||
"browser.preonboarding.enrolledInOnTrainRollout";
|
||||
|
||||
const ON_TRAIN_TEST_RECIPE = {
|
||||
slug: "new-onboarding-experience-on-train-rollout-phase-1",
|
||||
bucketConfig: {
|
||||
count: 100,
|
||||
namespace: "firefox-desktop-preonboarding-on-train-rollout-1",
|
||||
randomizationUnit: "normandy_id",
|
||||
start: 0,
|
||||
total: 10000,
|
||||
},
|
||||
branches: [{ slug: "treatment", ratio: 100 }],
|
||||
};
|
||||
|
||||
function fakeShowPolicyTimeout(set, clear) {
|
||||
Policy.setShowInfobarTimeout = set;
|
||||
Policy.clearShowInfobarTimeout = clear;
|
||||
@@ -169,6 +144,10 @@ add_task(skipIfNotBrowser(), async function test_firstRun() {
|
||||
const OTHER_RUNS_TIMEOUT_MSEC = 10 * 1000; // 10s
|
||||
|
||||
Services.prefs.clearUserPref(TelemetryUtils.Preferences.FirstRun);
|
||||
// The new user TOS modal is now enabled by default, so the infobar will only
|
||||
// show if preonboarding is explicitly turned off via nimbus variable or its
|
||||
// fallback pref.
|
||||
Services.prefs.setBoolPref("browser.preonboarding.enabled", false);
|
||||
|
||||
let promiseTimeout = () =>
|
||||
new Promise(resolve => {
|
||||
@@ -199,6 +178,8 @@ add_task(skipIfNotBrowser(), async function test_firstRun() {
|
||||
OTHER_RUNS_TIMEOUT_MSEC,
|
||||
"The infobar display timeout should be 10s on other runs."
|
||||
);
|
||||
|
||||
Services.prefs.clearUserPref("browser.preonboarding.enabled");
|
||||
});
|
||||
|
||||
add_task(async function test_prefs() {
|
||||
@@ -709,89 +690,26 @@ add_task(
|
||||
}
|
||||
);
|
||||
|
||||
const getOnTrainRolloutModalStub = async ({
|
||||
shouldEnroll,
|
||||
isFirstRun,
|
||||
isEnrolled,
|
||||
}) => {
|
||||
Services.prefs.setIntPref(
|
||||
ON_TRAIN_ROLLOUT_POPULATION_PREF,
|
||||
ON_TRAIN_TEST_RECIPE.bucketConfig.count
|
||||
);
|
||||
Services.prefs.setBoolPref(ON_TRAIN_ROLLOUT_ENROLLMENT_PREF, isEnrolled);
|
||||
Services.prefs.setBoolPref(TelemetryUtils.Preferences.FirstRun, isFirstRun);
|
||||
|
||||
const testIDs = await ExperimentManager.generateTestIds(ON_TRAIN_TEST_RECIPE);
|
||||
let experimentId = shouldEnroll ? testIDs.treatment : testIDs.notInExperiment;
|
||||
sinon.stub(ClientEnvironment, "userId").get(() => experimentId);
|
||||
let modalStub = sinon.stub(Policy, "showModal").returns(true);
|
||||
|
||||
fakeResetAcceptedPolicy();
|
||||
TelemetryReportingPolicy.reset();
|
||||
let p = Policy.delayedSetup();
|
||||
Policy.fakeSessionRestoreNotification();
|
||||
fakeInteractWithModal();
|
||||
await p;
|
||||
|
||||
const doCleanup = () => {
|
||||
sinon.restore();
|
||||
fakeResetAcceptedPolicy();
|
||||
Services.prefs.clearUserPref(ON_TRAIN_ROLLOUT_POPULATION_PREF);
|
||||
Services.prefs.clearUserPref(ON_TRAIN_ROLLOUT_ENROLLMENT_PREF);
|
||||
};
|
||||
|
||||
return { modalStub, doCleanup };
|
||||
};
|
||||
|
||||
add_task(
|
||||
skipIfNotBrowser(),
|
||||
async function test_onTrainRollout_configuration_supportedOS_should_enroll() {
|
||||
if (!ON_TRAIN_ROLLOUT_SUPPORTED_PLATFORM) {
|
||||
info(
|
||||
"Skipping supported OS test because current platform is not Linux, Mac, or Win MSIX"
|
||||
);
|
||||
return;
|
||||
}
|
||||
async function test_default_modal_shows_when_not_enrolled_in_experiment() {
|
||||
let modalStub = sinon.stub(Policy, "showModal").returns(true);
|
||||
|
||||
const { modalStub, doCleanup } = await getOnTrainRolloutModalStub({
|
||||
shouldEnroll: true,
|
||||
isFirstRun: true,
|
||||
isEnrolled: false,
|
||||
});
|
||||
fakeResetAcceptedPolicy();
|
||||
TelemetryReportingPolicy.reset();
|
||||
let p = Policy.delayedSetup();
|
||||
Policy.fakeSessionRestoreNotification();
|
||||
fakeInteractWithModal();
|
||||
await p;
|
||||
|
||||
Assert.equal(
|
||||
modalStub.callCount,
|
||||
1,
|
||||
"showModal is invoked once if enrolled in rollout"
|
||||
"showModal is invoked once when not enrolled in an experiemnt"
|
||||
);
|
||||
|
||||
doCleanup();
|
||||
}
|
||||
);
|
||||
|
||||
add_task(
|
||||
skipIfNotBrowser(),
|
||||
async function test_onTrainRollout_configuration_supportedOS_should_not_enroll() {
|
||||
if (!ON_TRAIN_ROLLOUT_SUPPORTED_PLATFORM) {
|
||||
info(
|
||||
"Skipping supported OS test because current platform is not Linux, Mac, or Win MSIX"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const { modalStub, doCleanup } = await getOnTrainRolloutModalStub({
|
||||
shouldEnroll: false,
|
||||
isFirstRun: true,
|
||||
isEnrolled: false,
|
||||
});
|
||||
|
||||
Assert.equal(
|
||||
modalStub.callCount,
|
||||
0,
|
||||
"showModal is not invoked if not enrolled in rollout"
|
||||
);
|
||||
|
||||
doCleanup();
|
||||
sinon.restore();
|
||||
fakeResetAcceptedPolicy();
|
||||
}
|
||||
);
|
||||
|
||||
@@ -827,7 +745,7 @@ add_task(
|
||||
await p;
|
||||
|
||||
Assert.ok(
|
||||
unblockSpy.calledOnce,
|
||||
unblockSpy.callCount >= blockSpy.callCount,
|
||||
"Jump list should be unblocked after user interacts with modal"
|
||||
);
|
||||
|
||||
@@ -836,81 +754,3 @@ add_task(
|
||||
sinon.restore();
|
||||
}
|
||||
);
|
||||
|
||||
add_task(
|
||||
skipIfNotBrowser(),
|
||||
async function test_onTrainRollout_configuration_unsupportedOS() {
|
||||
if (ON_TRAIN_ROLLOUT_SUPPORTED_PLATFORM) {
|
||||
info(
|
||||
"Skipping unsupported OS test because current platform is supported"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const { modalStub, doCleanup } = await getOnTrainRolloutModalStub({
|
||||
shouldEnroll: true,
|
||||
isFirstRun: true,
|
||||
isEnrolled: false,
|
||||
});
|
||||
|
||||
Assert.equal(
|
||||
modalStub.callCount,
|
||||
0,
|
||||
"showModal is not invoked on unsupported OS even if on-train rollouts are enabled and user would otherwise be enrolled"
|
||||
);
|
||||
|
||||
doCleanup();
|
||||
}
|
||||
);
|
||||
|
||||
add_task(
|
||||
skipIfNotBrowser(),
|
||||
async function test_onTrainRollout_subsequent_startup_after_enrolled() {
|
||||
if (!ON_TRAIN_ROLLOUT_SUPPORTED_PLATFORM) {
|
||||
info(
|
||||
"Skipping supported OS test because current platform is not Linux, Mac, or Win MSIX"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const { modalStub, doCleanup } = await getOnTrainRolloutModalStub({
|
||||
shouldEnroll: true,
|
||||
isFirstRun: false,
|
||||
isEnrolled: true,
|
||||
});
|
||||
|
||||
Assert.equal(
|
||||
modalStub.callCount,
|
||||
1,
|
||||
"showModal is invoked on subsequent startup if user was enrolled on first startup but did not interact with modal"
|
||||
);
|
||||
|
||||
doCleanup();
|
||||
}
|
||||
);
|
||||
|
||||
add_task(
|
||||
skipIfNotBrowser(),
|
||||
async function test_onTrainRollout_subsequent_startup_not_enrolled() {
|
||||
if (!ON_TRAIN_ROLLOUT_SUPPORTED_PLATFORM) {
|
||||
info(
|
||||
"Skipping supported OS test because current platform is not Linux, Mac, or Win MSIX"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const { modalStub, doCleanup } = await getOnTrainRolloutModalStub({
|
||||
shouldEnroll: true,
|
||||
isFirstRun: false,
|
||||
isEnrolled: false,
|
||||
});
|
||||
|
||||
Assert.equal(
|
||||
modalStub.callCount,
|
||||
0,
|
||||
"showModal is not invoked on subsequent startup if user was not enrolled on first startup"
|
||||
);
|
||||
|
||||
doCleanup();
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user