Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const ENABLED_ON_PROFILES_PREF = "browser.backup.enabled_on.profiles";
const UPLOAD_ENABLED_PREF = "datareporting.healthreport.uploadEnabled";
let SelectableProfileService;
let originalCurrentProfileDescriptor;
function mockCurrentProfile(id) {
if (!SelectableProfileService) {
({ SelectableProfileService } = ChromeUtils.importESModule(
"resource:///modules/profiles/SelectableProfileService.sys.mjs"
));
originalCurrentProfileDescriptor =
Object.getOwnPropertyDescriptor(
SelectableProfileService.__proto__,
"currentProfile"
) ||
Object.getOwnPropertyDescriptor(
SelectableProfileService,
"currentProfile"
);
}
Object.defineProperty(SelectableProfileService, "currentProfile", {
get: () => ({ id }),
configurable: true,
});
}
function restoreCurrentProfile() {
if (!SelectableProfileService) {
return;
}
if (originalCurrentProfileDescriptor) {
Object.defineProperty(
SelectableProfileService,
"currentProfile",
originalCurrentProfileDescriptor
);
} else {
delete SelectableProfileService.currentProfile;
}
}
registerCleanupFunction(restoreCurrentProfile);
add_task(async function test_banner_visible_when_other_profiles_have_backup() {
if (!AppConstants.MOZ_TELEMETRY_REPORTING) {
ok(true, "Skipping test because telemetry reporting is disabled");
return;
}
mockCurrentProfile("my-profile");
await SpecialPowers.pushPrefEnv({
set: [
[ENABLED_ON_PROFILES_PREF, JSON.stringify({ other: true })],
[UPLOAD_ENABLED_PREF, true],
],
});
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
let doc = gBrowser.contentDocument;
let banner = doc.getElementById("backup-multi-profile-warning-message-bar");
let bannerShown = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributeFilter: ["hidden"] },
() => !banner.hidden
);
await SpecialPowers.pushPrefEnv({
set: [[UPLOAD_ENABLED_PREF, false]],
});
await bannerShown;
ok(
!banner.hidden,
"Banner should be visible when other profiles have backup and a pref changed"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
await SpecialPowers.popPrefEnv();
restoreCurrentProfile();
});
add_task(
async function test_banner_hidden_when_only_current_profile_has_backup() {
mockCurrentProfile("my-profile");
await SpecialPowers.pushPrefEnv({
set: [[ENABLED_ON_PROFILES_PREF, JSON.stringify({ "my-profile": true })]],
});
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
let doc = gBrowser.contentDocument;
let win = gBrowser.contentWindow;
let banner = doc.getElementById("backup-multi-profile-warning-message-bar");
win.gPrivacyPane.updateBackupBannerVisibility();
ok(
banner.hidden,
"Banner should be hidden when only current profile has backup"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
restoreCurrentProfile();
}
);
add_task(async function test_banner_hidden_when_no_profiles_enabled() {
mockCurrentProfile("my-profile");
await SpecialPowers.pushPrefEnv({
set: [[ENABLED_ON_PROFILES_PREF, "{}"]],
});
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
let doc = gBrowser.contentDocument;
let win = gBrowser.contentWindow;
let banner = doc.getElementById("backup-multi-profile-warning-message-bar");
win.gPrivacyPane.updateBackupBannerVisibility();
ok(banner.hidden, "Banner should be hidden when no profiles have backup");
BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
restoreCurrentProfile();
});
add_task(async function test_banner_shows_on_data_collection_pref_change() {
if (!AppConstants.MOZ_TELEMETRY_REPORTING) {
ok(true, "Skipping test because telemetry reporting is disabled");
return;
}
mockCurrentProfile("my-profile");
await SpecialPowers.pushPrefEnv({
set: [
[
ENABLED_ON_PROFILES_PREF,
JSON.stringify({ "my-profile": true, other: true }),
],
[UPLOAD_ENABLED_PREF, true],
],
});
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
let doc = gBrowser.contentDocument;
let banner = doc.getElementById("backup-multi-profile-warning-message-bar");
ok(banner.hidden, "Banner should start hidden before any pref change");
let bannerShown = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributeFilter: ["hidden"] },
() => !banner.hidden
);
await SpecialPowers.pushPrefEnv({
set: [[UPLOAD_ENABLED_PREF, false]],
});
await bannerShown;
ok(
!banner.hidden,
"Banner should be visible after data collection pref change"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
await SpecialPowers.popPrefEnv();
restoreCurrentProfile();
});
add_task(
async function test_banner_hides_when_pref_reverted_to_original_value() {
if (!AppConstants.MOZ_TELEMETRY_REPORTING) {
ok(true, "Skipping test because telemetry reporting is disabled");
return;
}
mockCurrentProfile("my-profile");
await SpecialPowers.pushPrefEnv({
set: [
[
ENABLED_ON_PROFILES_PREF,
JSON.stringify({ "my-profile": true, other: true }),
],
[UPLOAD_ENABLED_PREF, true],
],
});
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
let doc = gBrowser.contentDocument;
let banner = doc.getElementById("backup-multi-profile-warning-message-bar");
ok(banner.hidden, "Banner should start hidden before any pref change");
let bannerShown = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributeFilter: ["hidden"] },
() => !banner.hidden
);
await SpecialPowers.pushPrefEnv({
set: [[UPLOAD_ENABLED_PREF, false]],
});
await bannerShown;
ok(!banner.hidden, "Banner should be visible after pref change");
let bannerHidden = BrowserTestUtils.waitForMutationCondition(
banner,
{ attributeFilter: ["hidden"] },
() => banner.hidden
);
await SpecialPowers.popPrefEnv();
await bannerHidden;
ok(
banner.hidden,
"Banner should be hidden after pref is reverted to original value"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
restoreCurrentProfile();
}
);