Bug 1609037 - DoH Rollout Extension: Wait until a top-level location change to show the doorhanger. r=johannh

Differential Revision: https://phabricator.services.mozilla.com/D59833

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Nihanth Subramanya 2020-01-17 14:58:52 +00:00
Родитель 2a5d7c0fe8
Коммит 73ad962480
5 изменённых файлов: 47 добавлений и 1 удалений

Просмотреть файл

@ -8,6 +8,7 @@
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;
const {
@ -121,7 +122,41 @@ this.doorhanger = class doorhanger extends ExtensionAPI {
return false;
}
await doorhangerEventEmitter.emitShow(properties);
// 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({

Просмотреть файл

@ -13,6 +13,7 @@ add_task(async function testCleanFlow() {
});
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
let tab = BrowserTestUtils.addTab(gBrowser, EXAMPLE_URL);
let panel = await promise;
is(
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
@ -48,6 +49,8 @@ add_task(async function testCleanFlow() {
"Breadcrumb not cleared."
);
BrowserTestUtils.removeTab(tab);
// Change the environment to failing and simulate a network change.
setFailingHeuristics();
simulateNetworkChange();

Просмотреть файл

@ -13,6 +13,7 @@ add_task(async function testDoorhangerUserReject() {
});
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
let tab = BrowserTestUtils.addTab(gBrowser, EXAMPLE_URL);
let panel = await promise;
is(
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
@ -49,6 +50,8 @@ add_task(async function testDoorhangerUserReject() {
"Breadcrumb cleared."
);
BrowserTestUtils.removeTab(tab);
await ensureTRRMode(5);
checkHeuristicsTelemetry("disable_doh", "doorhangerDecline");

Просмотреть файл

@ -13,6 +13,7 @@ add_task(async function testUserInterference() {
});
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
let tab = BrowserTestUtils.addTab(gBrowser, EXAMPLE_URL);
let panel = await promise;
is(
Preferences.get(prefs.DOH_DOORHANGER_SHOWN_PREF),
@ -41,6 +42,8 @@ add_task(async function testUserInterference() {
"Doorhanger decision saved."
);
BrowserTestUtils.removeTab(tab);
await ensureTRRMode(2);
checkHeuristicsTelemetry("enable_doh", "startup");

Просмотреть файл

@ -18,6 +18,8 @@ const { CommonUtils } = ChromeUtils.import(
const ADDON_ID = "doh-rollout@mozilla.org";
const EXAMPLE_URL = "https://example.com/";
const prefs = {
DOH_ENABLED_PREF: "doh-rollout.enabled",
TRR_MODE_PREF: "network.trr.mode",