116 lines
4.1 KiB
JavaScript
116 lines
4.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* import-globals-from /toolkit/content/preferencesBindings.js */
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineLazyGetter(lazy, "fxAccounts", () => {
|
|
return ChromeUtils.importESModule(
|
|
"resource://gre/modules/FxAccounts.sys.mjs"
|
|
).getFxAccountsSingleton();
|
|
});
|
|
|
|
Preferences.addAll([
|
|
{ id: "services.sync.engine.addons", type: "bool" },
|
|
{ id: "services.sync.engine.bookmarks", type: "bool" },
|
|
{ id: "services.sync.engine.history", type: "bool" },
|
|
{ id: "services.sync.engine.tabs", type: "bool" },
|
|
{ id: "services.sync.engine.prefs", type: "bool" },
|
|
{ id: "services.sync.engine.passwords", type: "bool" },
|
|
{ id: "services.sync.engine.addresses", type: "bool" },
|
|
{ id: "services.sync.engine.creditcards", type: "bool" },
|
|
]);
|
|
|
|
let gSyncChooseWhatToSync = {
|
|
init() {
|
|
this._setupEventListeners();
|
|
this._adjustForPrefs();
|
|
let options = window.arguments[0];
|
|
if (options.disconnectFun) {
|
|
// Offer 'Disconnect' functionality if it was provided
|
|
document.addEventListener("dialogextra2", function () {
|
|
options.disconnectFun().then(disconnected => {
|
|
if (disconnected) {
|
|
window.close();
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
// Hide the 'Disconnect' button if not applicable
|
|
document.getElementById("syncChooseOptions").getButton("extra2").hidden =
|
|
true;
|
|
}
|
|
},
|
|
|
|
// make whatever tweaks we need based on preferences.
|
|
_adjustForPrefs() {
|
|
// These 2 engines are unique in that there are prefs that make the
|
|
// entire engine unavailable (which is distinct from "disabled").
|
|
let enginePrefs = [
|
|
["services.sync.engine.addresses", ".sync-engine-addresses"],
|
|
["services.sync.engine.creditcards", ".sync-engine-creditcards"],
|
|
];
|
|
for (let [enabledPref, className] of enginePrefs) {
|
|
let availablePref = enabledPref + ".available";
|
|
// If the engine is enabled we force it to be available, otherwise we see
|
|
// spooky things happen (like it magically re-appear later)
|
|
if (Services.prefs.getBoolPref(enabledPref, false)) {
|
|
Services.prefs.setBoolPref(availablePref, true);
|
|
}
|
|
if (!Services.prefs.getBoolPref(availablePref)) {
|
|
let elt = document.querySelector(className);
|
|
elt.hidden = true;
|
|
}
|
|
}
|
|
},
|
|
_setupEventListeners() {
|
|
document.addEventListener("dialogaccept", () => {
|
|
// Record when the user saves sync settings.
|
|
let settings = this._getSyncEngineEnablementChanges();
|
|
lazy.fxAccounts.telemetry.recordSaveSyncSettings(settings).catch(err => {
|
|
console.error("Failed to record save sync settings event", err);
|
|
});
|
|
});
|
|
},
|
|
_getSyncEngineEnablementChanges() {
|
|
let engines = [
|
|
"addons",
|
|
"bookmarks",
|
|
"history",
|
|
"tabs",
|
|
"prefs",
|
|
"passwords",
|
|
"addresses",
|
|
"creditcards",
|
|
];
|
|
let settings = {
|
|
enabledEngines: [],
|
|
disabledEngines: [],
|
|
};
|
|
|
|
for (let engine of engines) {
|
|
let enabledPref = "services.sync.engine." + engine;
|
|
let checkboxId = "syncEngine" + engine[0].toUpperCase() + engine.slice(1);
|
|
let checkboxValue = document.getElementById(checkboxId).checked;
|
|
|
|
// Check if the engine's stored pref value is the same as the engine's
|
|
// checkbox value in the choose what to sync menu. If they aren't equal
|
|
// and the checkbox is checked, we add the engine to the enabled list; if
|
|
// the checkbox isn't checked we add the engine to the disabled list. If
|
|
// the pref and the checkbox value are equal we do nothing as nothing was
|
|
// changed.
|
|
if (Services.prefs.getBoolPref(enabledPref, false) !== checkboxValue) {
|
|
if (checkboxValue === true) {
|
|
settings.enabledEngines.push(engine);
|
|
} else if (checkboxValue === false) {
|
|
settings.disabledEngines.push(engine);
|
|
}
|
|
}
|
|
}
|
|
return settings;
|
|
},
|
|
};
|
|
|
|
window.addEventListener("load", () => gSyncChooseWhatToSync.init());
|