зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 2 changesets (bug 1609037, bug 1608320) for bc failures on browser_cleanFlow.js . CLOSED TREE
Backed out changeset 44539f8e0cea (bug 1609037) Backed out changeset 3dddea4c5d73 (bug 1608320)
This commit is contained in:
Родитель
e693e42a59
Коммит
a024104573
|
@ -1825,12 +1825,6 @@ pref("extensions.screenshots.disabled", false);
|
||||||
// disable uploading to the server.
|
// disable uploading to the server.
|
||||||
pref("extensions.screenshots.upload-disabled", false);
|
pref("extensions.screenshots.upload-disabled", false);
|
||||||
|
|
||||||
// DoH Rollout: the earliest date of profile creation for which we don't need
|
|
||||||
// to show the doorhanger. This is when the version of the privacy statement
|
|
||||||
// that includes DoH went live - Oct 31, 2019. This has to be a string because
|
|
||||||
// the number is outside the signed 32-bit integer range.
|
|
||||||
pref("doh-rollout.profileCreationThreshold", "1572476400000");
|
|
||||||
|
|
||||||
// URL for Learn More link for browser error logging in preferences
|
// URL for Learn More link for browser error logging in preferences
|
||||||
pref("browser.chrome.errorReporter.infoURL",
|
pref("browser.chrome.errorReporter.infoURL",
|
||||||
"https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/nightly-error-collection");
|
"https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/nightly-error-collection");
|
||||||
|
|
|
@ -190,9 +190,15 @@ const stateManager = {
|
||||||
},
|
},
|
||||||
|
|
||||||
async showDoorhanger() {
|
async showDoorhanger() {
|
||||||
rollout.addDoorhangerListeners();
|
browser.experiments.doorhanger.onDoorhangerAccept.addListener(
|
||||||
|
rollout.doorhangerAcceptListener
|
||||||
|
);
|
||||||
|
|
||||||
let doorhangerShown = await browser.experiments.doorhanger.show({
|
browser.experiments.doorhanger.onDoorhangerDecline.addListener(
|
||||||
|
rollout.doorhangerDeclineListener
|
||||||
|
);
|
||||||
|
|
||||||
|
await browser.experiments.doorhanger.show({
|
||||||
name: browser.i18n.getMessage("doorhangerName"),
|
name: browser.i18n.getMessage("doorhangerName"),
|
||||||
text: "<> " + browser.i18n.getMessage("doorhangerBody"),
|
text: "<> " + browser.i18n.getMessage("doorhangerBody"),
|
||||||
okLabel: browser.i18n.getMessage("doorhangerButtonOk"),
|
okLabel: browser.i18n.getMessage("doorhangerButtonOk"),
|
||||||
|
@ -202,16 +208,6 @@ const stateManager = {
|
||||||
"doorhangerButtonCancelAccessKey"
|
"doorhangerButtonCancelAccessKey"
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!doorhangerShown) {
|
|
||||||
// The profile was created after the go-live date of the privacy statement
|
|
||||||
// that included DoH. Treat it as accepted.
|
|
||||||
log("Profile is new, doorhanger not shown.");
|
|
||||||
await stateManager.setState("UIOk");
|
|
||||||
await stateManager.rememberDoorhangerDecision("NewProfile");
|
|
||||||
await stateManager.rememberDoorhangerShown();
|
|
||||||
rollout.removeDoorhangerListeners();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -227,32 +223,11 @@ const rollout = {
|
||||||
return this._isTesting;
|
return this._isTesting;
|
||||||
},
|
},
|
||||||
|
|
||||||
addDoorhangerListeners() {
|
|
||||||
browser.experiments.doorhanger.onDoorhangerAccept.addListener(
|
|
||||||
rollout.doorhangerAcceptListener
|
|
||||||
);
|
|
||||||
|
|
||||||
browser.experiments.doorhanger.onDoorhangerDecline.addListener(
|
|
||||||
rollout.doorhangerDeclineListener
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
removeDoorhangerListeners() {
|
|
||||||
browser.experiments.doorhanger.onDoorhangerAccept.removeListener(
|
|
||||||
rollout.doorhangerAcceptListener
|
|
||||||
);
|
|
||||||
|
|
||||||
browser.experiments.doorhanger.onDoorhangerDecline.removeListener(
|
|
||||||
rollout.doorhangerDeclineListener
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
async doorhangerAcceptListener(tabId) {
|
async doorhangerAcceptListener(tabId) {
|
||||||
log("Doorhanger accepted on tab", tabId);
|
log("Doorhanger accepted on tab", tabId);
|
||||||
await stateManager.setState("UIOk");
|
await stateManager.setState("UIOk");
|
||||||
await stateManager.rememberDoorhangerDecision("UIOk");
|
await stateManager.rememberDoorhangerDecision("UIOk");
|
||||||
await stateManager.rememberDoorhangerShown();
|
await stateManager.rememberDoorhangerShown();
|
||||||
rollout.removeDoorhangerListeners();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
async doorhangerDeclineListener(tabId) {
|
async doorhangerDeclineListener(tabId) {
|
||||||
|
@ -264,7 +239,6 @@ const rollout = {
|
||||||
browser.experiments.heuristics.sendHeuristicsPing("disable_doh", results);
|
browser.experiments.heuristics.sendHeuristicsPing("disable_doh", results);
|
||||||
await stateManager.rememberDisableHeuristics();
|
await stateManager.rememberDisableHeuristics();
|
||||||
await stateManager.rememberDoorhangerShown();
|
await stateManager.rememberDoorhangerShown();
|
||||||
rollout.removeDoorhangerListeners();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
async heuristics(evaluateReason) {
|
async heuristics(evaluateReason) {
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
/* global BrowserWindowTracker, ExtensionCommon, ExtensionAPI */
|
/* global BrowserWindowTracker, ExtensionCommon, ExtensionAPI */
|
||||||
|
|
||||||
ChromeUtils.import("resource://gre/modules/Services.jsm", this);
|
ChromeUtils.import("resource://gre/modules/Services.jsm", this);
|
||||||
ChromeUtils.import("resource://gre/modules/Preferences.jsm", this);
|
|
||||||
ChromeUtils.import("resource:///modules/EveryWindow.jsm", this);
|
|
||||||
|
|
||||||
var { EventManager, EventEmitter } = ExtensionCommon;
|
var { EventManager, EventEmitter } = ExtensionCommon;
|
||||||
const {
|
const {
|
||||||
|
@ -99,65 +97,7 @@ this.doorhanger = class doorhanger extends ExtensionAPI {
|
||||||
experiments: {
|
experiments: {
|
||||||
doorhanger: {
|
doorhanger: {
|
||||||
async show(properties) {
|
async show(properties) {
|
||||||
let profileAge = await ChromeUtils.import(
|
await doorhangerEventEmitter.emitShow(properties);
|
||||||
"resource://gre/modules/ProfileAge.jsm",
|
|
||||||
{}
|
|
||||||
).ProfileAge();
|
|
||||||
|
|
||||||
let creationDate = await profileAge.created;
|
|
||||||
let firstUse = await profileAge.firstUse;
|
|
||||||
let resetDate = await profileAge.reset;
|
|
||||||
let profileDate = resetDate || firstUse || creationDate;
|
|
||||||
|
|
||||||
// We only need to show the doorhanger to users who have not been
|
|
||||||
// shown a version of the privacy statement that includes DoH at
|
|
||||||
// first-run.
|
|
||||||
let profileCreationThreshold = parseInt(
|
|
||||||
Preferences.get("doh-rollout.profileCreationThreshold")
|
|
||||||
);
|
|
||||||
if (
|
|
||||||
!isNaN(profileCreationThreshold) &&
|
|
||||||
profileDate > profileCreationThreshold
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show the doorhanger next time there's a top-level location change.
|
|
||||||
let tabsProgressListener = {
|
|
||||||
onLocationChange(
|
|
||||||
aBrowser,
|
|
||||||
aWebProgress,
|
|
||||||
aRequest,
|
|
||||||
aLocationURI,
|
|
||||||
aFlags
|
|
||||||
) {
|
|
||||||
let topWindow = getMostRecentBrowserWindow();
|
|
||||||
// Filter out history.push/pop and subframes.
|
|
||||||
if (
|
|
||||||
aBrowser != topWindow.gBrowser.selectedBrowser ||
|
|
||||||
aFlags &
|
|
||||||
Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT ||
|
|
||||||
!aWebProgress.isTopLevel
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
doorhangerEventEmitter.emitShow(properties);
|
|
||||||
EveryWindow.unregisterCallback("doh-rollout");
|
|
||||||
},
|
|
||||||
};
|
|
||||||
EveryWindow.registerCallback(
|
|
||||||
"doh-rollout",
|
|
||||||
win => {
|
|
||||||
win.gBrowser.addTabsProgressListener(tabsProgressListener);
|
|
||||||
},
|
|
||||||
(win, closing) => {
|
|
||||||
if (closing) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
win.gBrowser.removeTabsProgressListener(tabsProgressListener);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return true;
|
|
||||||
},
|
},
|
||||||
onDoorhangerAccept: new EventManager({
|
onDoorhangerAccept: new EventManager({
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -5,7 +5,6 @@ skip-if = debug # Bug 1548006 - reloading an addon upsets the leak checker.
|
||||||
[browser_cleanFlow.js]
|
[browser_cleanFlow.js]
|
||||||
[browser_dirtyEnable.js]
|
[browser_dirtyEnable.js]
|
||||||
[browser_doorhangerUserReject.js]
|
[browser_doorhangerUserReject.js]
|
||||||
[browser_doorhanger_newProfile.js]
|
|
||||||
[browser_policyOverride.js]
|
[browser_policyOverride.js]
|
||||||
skip-if = (!debug && bits == 64) #Bug 1605297
|
skip-if = (!debug && bits == 64) #Bug 1605297
|
||||||
[browser_userInterference.js]
|
[browser_userInterference.js]
|
||||||
|
|
|
@ -13,7 +13,6 @@ add_task(async function testCleanFlow() {
|
||||||
});
|
});
|
||||||
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
||||||
|
|
||||||
let tab = BrowserTestUtils.addTab(gBrowser, EXAMPLE_URL);
|
|
||||||
let panel = await promise;
|
let panel = await promise;
|
||||||
is(
|
is(
|
||||||
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
||||||
|
@ -49,8 +48,6 @@ add_task(async function testCleanFlow() {
|
||||||
"Breadcrumb not cleared."
|
"Breadcrumb not cleared."
|
||||||
);
|
);
|
||||||
|
|
||||||
BrowserTestUtils.removeTab(tab);
|
|
||||||
|
|
||||||
// Change the environment to failing and simulate a network change.
|
// Change the environment to failing and simulate a network change.
|
||||||
setFailingHeuristics();
|
setFailingHeuristics();
|
||||||
simulateNetworkChange();
|
simulateNetworkChange();
|
||||||
|
|
|
@ -13,7 +13,6 @@ add_task(async function testDoorhangerUserReject() {
|
||||||
});
|
});
|
||||||
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
||||||
|
|
||||||
let tab = BrowserTestUtils.addTab(gBrowser, EXAMPLE_URL);
|
|
||||||
let panel = await promise;
|
let panel = await promise;
|
||||||
is(
|
is(
|
||||||
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
||||||
|
@ -50,8 +49,6 @@ add_task(async function testDoorhangerUserReject() {
|
||||||
"Breadcrumb cleared."
|
"Breadcrumb cleared."
|
||||||
);
|
);
|
||||||
|
|
||||||
BrowserTestUtils.removeTab(tab);
|
|
||||||
|
|
||||||
await ensureTRRMode(5);
|
await ensureTRRMode(5);
|
||||||
checkHeuristicsTelemetry("disable_doh", "doorhangerDecline");
|
checkHeuristicsTelemetry("disable_doh", "doorhangerDecline");
|
||||||
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
add_task(setup);
|
|
||||||
|
|
||||||
add_task(async function testDoorhanger() {
|
|
||||||
Preferences.reset(prefs.PROFILE_CREATION_THRESHOLD_PREF);
|
|
||||||
// Set up a passing environment and enable DoH.
|
|
||||||
setPassingHeuristics();
|
|
||||||
Preferences.set(prefs.DOH_ENABLED_PREF, true);
|
|
||||||
|
|
||||||
await BrowserTestUtils.waitForCondition(() => {
|
|
||||||
return Preferences.get(prefs.DOH_SELF_ENABLED_PREF);
|
|
||||||
});
|
|
||||||
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
|
||||||
|
|
||||||
await BrowserTestUtils.waitForCondition(() => {
|
|
||||||
return Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF);
|
|
||||||
});
|
|
||||||
is(
|
|
||||||
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
|
||||||
true,
|
|
||||||
"Doorhanger shown pref saved."
|
|
||||||
);
|
|
||||||
is(
|
|
||||||
Preferences.get(prefs.DOH_DOORHANGER_USER_DECISION_PREF),
|
|
||||||
"NewProfile",
|
|
||||||
"Doorhanger decision saved."
|
|
||||||
);
|
|
||||||
is(
|
|
||||||
Preferences.get(prefs.DOH_SELF_ENABLED_PREF),
|
|
||||||
true,
|
|
||||||
"Breadcrumb not cleared."
|
|
||||||
);
|
|
||||||
});
|
|
|
@ -13,7 +13,6 @@ add_task(async function testUserInterference() {
|
||||||
});
|
});
|
||||||
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
|
||||||
|
|
||||||
let tab = BrowserTestUtils.addTab(gBrowser, EXAMPLE_URL);
|
|
||||||
let panel = await promise;
|
let panel = await promise;
|
||||||
is(
|
is(
|
||||||
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
|
||||||
|
@ -42,8 +41,6 @@ add_task(async function testUserInterference() {
|
||||||
"Doorhanger decision saved."
|
"Doorhanger decision saved."
|
||||||
);
|
);
|
||||||
|
|
||||||
BrowserTestUtils.removeTab(tab);
|
|
||||||
|
|
||||||
await ensureTRRMode(2);
|
await ensureTRRMode(2);
|
||||||
checkHeuristicsTelemetry("enable_doh", "startup");
|
checkHeuristicsTelemetry("enable_doh", "startup");
|
||||||
|
|
||||||
|
|
|
@ -12,14 +12,8 @@ ChromeUtils.defineModuleGetter(
|
||||||
"resource://gre/modules/Preferences.jsm"
|
"resource://gre/modules/Preferences.jsm"
|
||||||
);
|
);
|
||||||
|
|
||||||
const { CommonUtils } = ChromeUtils.import(
|
|
||||||
"resource://services-common/utils.js"
|
|
||||||
);
|
|
||||||
|
|
||||||
const ADDON_ID = "doh-rollout@mozilla.org";
|
const ADDON_ID = "doh-rollout@mozilla.org";
|
||||||
|
|
||||||
const EXAMPLE_URL = "https://example.com/";
|
|
||||||
|
|
||||||
const prefs = {
|
const prefs = {
|
||||||
DOH_ENABLED_PREF: "doh-rollout.enabled",
|
DOH_ENABLED_PREF: "doh-rollout.enabled",
|
||||||
TRR_MODE_PREF: "network.trr.mode",
|
TRR_MODE_PREF: "network.trr.mode",
|
||||||
|
@ -33,7 +27,6 @@ const prefs = {
|
||||||
DOH_BALROG_MIGRATION_PREF: "doh-rollout.balrog-migration-done",
|
DOH_BALROG_MIGRATION_PREF: "doh-rollout.balrog-migration-done",
|
||||||
DOH_DEBUG_PREF: "doh-rollout.debug",
|
DOH_DEBUG_PREF: "doh-rollout.debug",
|
||||||
MOCK_HEURISTICS_PREF: "doh-rollout.heuristics.mockValues",
|
MOCK_HEURISTICS_PREF: "doh-rollout.heuristics.mockValues",
|
||||||
PROFILE_CREATION_THRESHOLD_PREF: "doh-rollout.profileCreationThreshold",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const fakePassingHeuristics = JSON.stringify({
|
const fakePassingHeuristics = JSON.stringify({
|
||||||
|
@ -66,11 +59,6 @@ async function setup() {
|
||||||
Services.telemetry.canRecordExtended = true;
|
Services.telemetry.canRecordExtended = true;
|
||||||
Services.telemetry.clearEvents();
|
Services.telemetry.clearEvents();
|
||||||
|
|
||||||
// Set the profile creation threshold to very far in the future by defualt,
|
|
||||||
// so that we can test the doorhanger. browser_doorhanger_newProfile.js
|
|
||||||
// overrides this.
|
|
||||||
Preferences.set(prefs.PROFILE_CREATION_THRESHOLD_PREF, "99999999999999");
|
|
||||||
|
|
||||||
registerCleanupFunction(async () => {
|
registerCleanupFunction(async () => {
|
||||||
Services.telemetry.canRecordExtended = oldCanRecord;
|
Services.telemetry.canRecordExtended = oldCanRecord;
|
||||||
Services.telemetry.clearEvents();
|
Services.telemetry.clearEvents();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче