Bug 1131414 (part 2) - add the reading-list engine to Sync prefs. r=adw

This commit is contained in:
Mark Hammond 2015-03-20 11:08:51 -07:00
parent 7fd14d5025
commit d429535c22
8 changed files with 106 additions and 3 deletions

View File

@ -1879,5 +1879,7 @@ pref("dom.ipc.reportProcessHangs", true);
pref("reader.parse-on-load.enabled", false);
#endif
// Disable ReadingList by default.
// Disable ReadingList browser UI by default.
pref("browser.readinglist.enabled", false);
// Enable the readinglist engine by default.
pref("readinglist.scheduler.enabled", true);

View File

@ -4,8 +4,31 @@
"use strict";
Components.utils.import("resource://gre/modules/Services.jsm");
addEventListener("load", function () {
// unhide the reading-list engine if readinglist is enabled (note this
// dialog is only used with FxA sync, so no special action is needed
// for legacy sync.)
if (Services.prefs.getBoolPref("browser.readinglist.enabled")) {
document.getElementById("readinglist-engine").removeAttribute("hidden");
}
});
addEventListener("dialogaccept", function () {
let pane = document.getElementById("sync-customize-pane");
// First determine what the preference for the "global" sync enabled pref
// should be based on the engines selected.
let prefElts = pane.querySelectorAll("preferences > preference");
let syncEnabled = false;
for (let elt of prefElts) {
if (elt.name.startsWith("services.sync.") && elt.value) {
syncEnabled = true;
break;
}
}
Services.prefs.setBoolPref("services.sync.enabled", syncEnabled);
// and write the individual prefs.
pane.writePreferences(true);
window.arguments[0].accepted = true;
});

View File

@ -27,6 +27,8 @@
<preference id="engine.passwords" name="services.sync.engine.passwords" type="bool"/>
<preference id="engine.addons" name="services.sync.engine.addons" type="bool"/>
<preference id="engine.prefs" name="services.sync.engine.prefs" type="bool"/>
<!-- non Sync-Engine engines -->
<preference id="engine.readinglist" name="readinglist.scheduler.enabled" type="bool"/>
</preferences>
<label id="sync-customize-title" value="&syncCustomize.title;"/>
@ -51,6 +53,11 @@
<checkbox label="&engine.history.label;"
accesskey="&engine.history.accesskey;"
preference="engine.history"/>
<checkbox id="readinglist-engine"
label="&engine.readinglist.label;"
accesskey="&engine.readinglist.accesskey;"
preference="engine.readinglist"
hidden="true"/>
<checkbox label="&engine.addons.label;"
accesskey="&engine.addons.accesskey;"
preference="engine.addons"/>

View File

@ -237,6 +237,11 @@ let gSyncPane = {
// service.fxAccountsEnabled is false iff sync is already configured for
// the legacy provider.
if (service.fxAccountsEnabled) {
// unhide the reading-list engine if readinglist is enabled (note we do
// it here as it must remain disabled for legacy sync users)
if (Services.prefs.getBoolPref("browser.readinglist.enabled")) {
document.getElementById("readinglist-engine").removeAttribute("hidden");
}
// determine the fxa status...
this.page = PAGE_PLEASE_WAIT;
fxAccounts.getSignedInUser().then(data => {
@ -372,6 +377,19 @@ let gSyncPane = {
document.getElementById("sync-migration-deck").selectedIndex = selIndex;
},
// Called whenever one of the sync engine preferences is changed.
onPreferenceChanged: function() {
let prefElts = document.querySelectorAll("#syncEnginePrefs > preference");
let syncEnabled = false;
for (let elt of prefElts) {
if (elt.name.startsWith("services.sync.") && elt.value) {
syncEnabled = true;
break;
}
}
Services.prefs.setBoolPref("services.sync.enabled", syncEnabled);
},
startOver: function (showDialog) {
if (showDialog) {
let flags = Services.prompt.BUTTON_POS_0 * Services.prompt.BUTTON_TITLE_IS_STRING +

View File

@ -4,7 +4,8 @@
<!-- Sync panel -->
<preferences hidden="true" data-category="paneSync">
<preferences id="syncEnginePrefs" hidden="true" data-category="paneSync"
onchange="gSyncPane.onPreferenceChanged();">
<preference id="engine.addons"
name="services.sync.engine.addons"
type="bool"/>
@ -23,6 +24,10 @@
<preference id="engine.passwords"
name="services.sync.engine.passwords"
type="bool"/>
<!-- non Sync-Engine engines -->
<preference id="engine.readinglist"
name="readinglist.scheduler.enabled"
type="bool"/>
</preferences>
<script type="application/javascript"
@ -290,6 +295,11 @@
<checkbox label="&engine.history.label;"
accesskey="&engine.history.accesskey;"
preference="engine.history"/>
<checkbox id="readinglist-engine"
label="&engine.readinglist.label;"
accesskey="&engine.readinglist.accesskey;"
preference="engine.readinglist"
hidden="true"/>
<checkbox label="&engine.addons.label;"
accesskey="&engine.addons.accesskey;"
preference="engine.addons"/>

View File

@ -54,6 +54,26 @@ let gSyncPane = {
},
init: function () {
// We use a preference observer to notice changes to the Sync engines
// enabled state - other techniques are problematic due to the window
// being instant-apply on Mac etc but modal on Windows.
let prefObserver = () => {
// If all our Sync engines are disabled we flip the "master" Sync-enabled pref.
let prefElts = document.querySelectorAll("#syncEnginePrefs > preference");
let syncEnabled = false;
for (let elt of prefElts) {
if (elt.name.startsWith("services.sync.") && elt.value) {
syncEnabled = true;
break;
}
}
Services.prefs.setBoolPref("services.sync.enabled", syncEnabled);
}
Services.prefs.addObserver("services.sync.engine.", prefObserver, false);
window.addEventListener("unload", () => {
Services.prefs.removeObserver("services.sync.engine.", prefObserver);
}, false);
// If the Service hasn't finished initializing, wait for it.
let xps = Components.classes["@mozilla.org/weave/service;1"]
.getService(Components.interfaces.nsISupports)
@ -136,6 +156,11 @@ let gSyncPane = {
// service.fxAccountsEnabled is false iff sync is already configured for
// the legacy provider.
if (service.fxAccountsEnabled) {
// unhide the reading-list engine if readinglist is enabled (note we do
// it here as it must remain disabled for legacy sync users)
if (Services.prefs.getBoolPref("browser.readinglist.enabled")) {
document.getElementById("readinglist-engine").removeAttribute("hidden");
}
// determine the fxa status...
this.page = PAGE_PLEASE_WAIT;
fxAccounts.getSignedInUser().then(data => {

View File

@ -21,13 +21,15 @@
helpTopic="prefs-weave"
onpaneload="gSyncPane.init()">
<preferences>
<preferences id="syncEnginePrefs">
<preference id="engine.addons" name="services.sync.engine.addons" type="bool"/>
<preference id="engine.bookmarks" name="services.sync.engine.bookmarks" type="bool"/>
<preference id="engine.history" name="services.sync.engine.history" type="bool"/>
<preference id="engine.tabs" name="services.sync.engine.tabs" type="bool"/>
<preference id="engine.prefs" name="services.sync.engine.prefs" type="bool"/>
<preference id="engine.passwords" name="services.sync.engine.passwords" type="bool"/>
<!-- non Sync-Engine engines -->
<preference id="engine.readinglist" name="readinglist.scheduler.enabled" type="bool"/>
</preferences>
@ -285,21 +287,33 @@
<vbox>
<checkbox label="&engine.tabs.label;"
accesskey="&engine.tabs.accesskey;"
onsynctopreference="gSyncPane.onPreferenceChanged();"
preference="engine.tabs"/>
<checkbox label="&engine.bookmarks.label;"
accesskey="&engine.bookmarks.accesskey;"
onsynctopreference="gSyncPane.onPreferenceChanged();"
preference="engine.bookmarks"/>
<checkbox label="&engine.passwords.label;"
accesskey="&engine.passwords.accesskey;"
onsynctopreference="gSyncPane.onPreferenceChanged();"
preference="engine.passwords"/>
<checkbox label="&engine.history.label;"
accesskey="&engine.history.accesskey;"
onsynctopreference="gSyncPane.onPreferenceChanged(this);"
preference="engine.history"/>
<!-- onpreferencechanged not needed for the readinglist engine -->
<checkbox id="readinglist-engine"
label="&engine.readinglist.label;"
accesskey="&engine.readinglist.accesskey;"
preference="engine.readinglist"
hidden="true"/>
<checkbox label="&engine.addons.label;"
accesskey="&engine.addons.accesskey;"
onsynctopreference="gSyncPane.onPreferenceChanged();"
preference="engine.addons"/>
<checkbox label="&engine.prefs.label;"
accesskey="&engine.prefs.accesskey;"
onsynctopreference="gSyncPane.onPreferenceChanged();"
preference="engine.prefs"/>
</vbox>
<spacer/>

View File

@ -172,6 +172,10 @@ InternalScheduler.prototype = {
// canSync indicates if we can currently sync.
_canSync(ignoreBlockingErrors = false) {
if (!prefs.get("enabled")) {
this.log.info("canSync=false - syncing is disabled");
return false;
}
if (Services.io.offline) {
this.log.info("canSync=false - we are offline");
return false;