Bug 1288584 - don't allow prefs to specify a sync interval that's less than 60 seconds. r=rnewman
MozReview-Commit-ID: CHdBsC6cdOE
--- a/services/sync/modules/policies.js
+++ b/services/sync/modules/policies.js
@@ -16,16 +16,23 @@ Cu.import("resource://services-sync/util
Cu.import("resource://services-common/logmanager.js");
Cu.import("resource://services-common/async.js");
XPCOMUtils.defineLazyModuleGetter(this, "Status",
"resource://services-sync/status.js");
XPCOMUtils.defineLazyModuleGetter(this, "AddonManager",
"resource://gre/modules/AddonManager.jsm");
+// Get the value for an interval that's stored in preferences. To save users
+// from themselves (and us from them!) the minimum time they can specify
+// is 60s.
+function getThrottledIntervalPreference(prefName) {
+ return Math.max(Svc.Prefs.get(prefName), 60) * 1000;
+}
+
this.SyncScheduler = function SyncScheduler(service) {
this.service = service;
this.init();
}
SyncScheduler.prototype = {
_log: Log.repository.getLogger("Sync.SyncScheduler"),
_fatalLoginStatus: [LOGIN_FAILED_NO_USERNAME,
@@ -43,22 +50,22 @@ SyncScheduler.prototype = {
this._log.trace("Setting SyncScheduler policy values to defaults.");
let service = Cc["@mozilla.org/weave/service;1"]
.getService(Ci.nsISupports)
.wrappedJSObject;
let part = service.fxAccountsEnabled ? "fxa" : "sync11";
let prefSDInterval = "scheduler." + part + ".singleDeviceInterval";
- this.singleDeviceInterval = Svc.Prefs.get(prefSDInterval) * 1000;
+ this.singleDeviceInterval = getThrottledIntervalPreference(prefSDInterval);
- this.idleInterval = Svc.Prefs.get("scheduler.idleInterval") * 1000;
- this.activeInterval = Svc.Prefs.get("scheduler.activeInterval") * 1000;
- this.immediateInterval = Svc.Prefs.get("scheduler.immediateInterval") * 1000;
- this.eolInterval = Svc.Prefs.get("scheduler.eolInterval") * 1000;
+ this.idleInterval = getThrottledIntervalPreference("scheduler.idleInterval");
+ this.activeInterval = getThrottledIntervalPreference("scheduler.activeInterval");
+ this.immediateInterval = getThrottledIntervalPreference("scheduler.immediateInterval");
+ this.eolInterval = getThrottledIntervalPreference("scheduler.eolInterval");
// A user is non-idle on startup by default.
this.idle = false;
this.hasIncomingItems = false;
this.clearSyncTriggers();
},
--- a/services/sync/tests/unit/test_syncscheduler.js
+++ b/services/sync/tests/unit/test_syncscheduler.js
@@ -143,26 +143,37 @@ add_test(function test_prefAttributes()
do_check_eq(scheduler.idleInterval,
Svc.Prefs.get("scheduler.idleInterval") * 1000);
do_check_eq(scheduler.activeInterval,
Svc.Prefs.get("scheduler.activeInterval") * 1000);
do_check_eq(scheduler.immediateInterval,
Svc.Prefs.get("scheduler.immediateInterval") * 1000);
_("Custom values for prefs will take effect after a restart.");
- Svc.Prefs.set("scheduler.sync11.singleDeviceInterval", 42);
- Svc.Prefs.set("scheduler.idleInterval", 23);
- Svc.Prefs.set("scheduler.activeInterval", 18);
+ Svc.Prefs.set("scheduler.sync11.singleDeviceInterval", 420);
+ Svc.Prefs.set("scheduler.idleInterval", 230);
+ Svc.Prefs.set("scheduler.activeInterval", 180);
Svc.Prefs.set("scheduler.immediateInterval", 31415);
scheduler.setDefaults();
- do_check_eq(scheduler.idleInterval, 23000);
- do_check_eq(scheduler.singleDeviceInterval, 42000);
- do_check_eq(scheduler.activeInterval, 18000);
+ do_check_eq(scheduler.idleInterval, 230000);
+ do_check_eq(scheduler.singleDeviceInterval, 420000);
+ do_check_eq(scheduler.activeInterval, 180000);
do_check_eq(scheduler.immediateInterval, 31415000);
+ _("Custom values for interval prefs can't be less than 60 seconds.");
+ Svc.Prefs.set("scheduler.sync11.singleDeviceInterval", 42);
+ Svc.Prefs.set("scheduler.idleInterval", 50);
+ Svc.Prefs.set("scheduler.activeInterval", 50);
+ Svc.Prefs.set("scheduler.immediateInterval", 10);
+ scheduler.setDefaults();
+ do_check_eq(scheduler.idleInterval, 60000);
+ do_check_eq(scheduler.singleDeviceInterval, 60000);
+ do_check_eq(scheduler.activeInterval, 60000);
+ do_check_eq(scheduler.immediateInterval, 60000);
+
Svc.Prefs.resetBranch("");
scheduler.setDefaults();
run_next_test();
});
add_identity_test(this, function* test_updateClientMode() {
_("Test updateClientMode adjusts scheduling attributes based on # of clients appropriately");
do_check_eq(scheduler.syncThreshold, SINGLE_USER_THRESHOLD);