mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 584241 - Disable trackers when client isn't configured [r=mconnor]
This commit is contained in:
parent
905ac1573e
commit
57c4f23de7
@ -54,7 +54,6 @@ catch(ex) {
|
||||
}
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://services-sync/engines.js");
|
||||
Cu.import("resource://services-sync/ext/Observers.js");
|
||||
Cu.import("resource://services-sync/stores.js");
|
||||
Cu.import("resource://services-sync/trackers.js");
|
||||
Cu.import("resource://services-sync/type_records/bookmark.js");
|
||||
@ -115,12 +114,12 @@ BookmarksEngine.prototype = {
|
||||
_trackerObj: BookmarksTracker,
|
||||
|
||||
_handleImport: function _handleImport() {
|
||||
Observers.add("bookmarks-restore-begin", function() {
|
||||
Svc.Obs.add("bookmarks-restore-begin", function() {
|
||||
this._log.debug("Ignoring changes from importing bookmarks");
|
||||
this._tracker.ignoreAll = true;
|
||||
}, this);
|
||||
|
||||
Observers.add("bookmarks-restore-success", function() {
|
||||
Svc.Obs.add("bookmarks-restore-success", function() {
|
||||
this._log.debug("Tracking all items on successful import");
|
||||
this._tracker.ignoreAll = false;
|
||||
|
||||
@ -129,7 +128,7 @@ BookmarksEngine.prototype = {
|
||||
this._tracker.addChangedID(id);
|
||||
}, this);
|
||||
|
||||
Observers.add("bookmarks-restore-failed", function() {
|
||||
Svc.Obs.add("bookmarks-restore-failed", function() {
|
||||
this._tracker.ignoreAll = false;
|
||||
}, this);
|
||||
},
|
||||
@ -251,7 +250,7 @@ function BookmarksStore(name) {
|
||||
Store.call(this, name);
|
||||
|
||||
// Explicitly nullify our references to our cached services so we don't leak
|
||||
Observers.add("places-shutdown", function() {
|
||||
Svc.Obs.add("places-shutdown", function() {
|
||||
this.__bms = null;
|
||||
this.__hsvc = null;
|
||||
this.__ls = null;
|
||||
@ -1001,17 +1000,37 @@ function BookmarksTracker(name) {
|
||||
for (let guid in kSpecialIds)
|
||||
this.ignoreID(guid);
|
||||
|
||||
Svc.Bookmark.addObserver(this, true);
|
||||
|
||||
// Explicitly nullify our references to our cached services so we don't leak
|
||||
Observers.add("places-shutdown", function() {
|
||||
this.__ls = null;
|
||||
this.__bms = null;
|
||||
}, this);
|
||||
Svc.Obs.add("places-shutdown", this);
|
||||
Svc.Obs.add("weave:engine:start-tracking", this);
|
||||
Svc.Obs.add("weave:engine:stop-tracking", this);
|
||||
}
|
||||
BookmarksTracker.prototype = {
|
||||
__proto__: Tracker.prototype,
|
||||
|
||||
_enabled: false,
|
||||
observe: function observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "weave:engine:start-tracking":
|
||||
if (!this._enabled) {
|
||||
Svc.Bookmark.addObserver(this, true);
|
||||
this._enabled = true;
|
||||
}
|
||||
break;
|
||||
case "weave:engine:stop-tracking":
|
||||
if (this._enabled) {
|
||||
Svc.Bookmark.removeObserver(this);
|
||||
this._enabled = false;
|
||||
}
|
||||
// Fall through to clean up.
|
||||
case "places-shutdown":
|
||||
// Explicitly nullify our references to our cached services so
|
||||
// we don't leak
|
||||
this.__ls = null;
|
||||
this.__bms = null;
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
__bms: null,
|
||||
get _bms() {
|
||||
if (!this.__bms)
|
||||
|
@ -202,12 +202,8 @@ FormStore.prototype = {
|
||||
|
||||
function FormTracker(name) {
|
||||
Tracker.call(this, name);
|
||||
Svc.Obs.add("form-notifier", this);
|
||||
|
||||
// nsHTMLFormElement doesn't use the normal observer/observe pattern and looks
|
||||
// up nsIFormSubmitObservers to .notify() them so add manually to observers
|
||||
Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService).
|
||||
addObserver(this, "earlyformsubmit", true);
|
||||
Svc.Obs.add("weave:engine:start-tracking", this);
|
||||
Svc.Obs.add("weave:engine:stop-tracking", this);
|
||||
}
|
||||
FormTracker.prototype = {
|
||||
__proto__: Tracker.prototype,
|
||||
@ -222,7 +218,37 @@ FormTracker.prototype = {
|
||||
this.score += 10;
|
||||
},
|
||||
|
||||
_enabled: false,
|
||||
observe: function observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "weave:engine:start-tracking":
|
||||
if (!this._enabled) {
|
||||
Svc.Obs.add("form-notifier", this);
|
||||
// nsHTMLFormElement doesn't use the normal observer/observe
|
||||
// pattern and looks up nsIFormSubmitObservers to .notify()
|
||||
// them so add manually to observers
|
||||
Cc["@mozilla.org/observer-service;1"]
|
||||
.getService(Ci.nsIObserverService)
|
||||
.addObserver(this, "earlyformsubmit", true);
|
||||
this._enabled = true;
|
||||
}
|
||||
break;
|
||||
case "weave:engine:stop-tracking":
|
||||
if (this._enabled) {
|
||||
Svc.Obs.remove("form-notifier", this);
|
||||
Cc["@mozilla.org/observer-service;1"]
|
||||
.getService(Ci.nsIObserverService)
|
||||
.removeObserver(this, "earlyformsubmit");
|
||||
this._enabled = false;
|
||||
}
|
||||
break;
|
||||
case "form-notifier":
|
||||
this.onFormNotifier(data);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onFormNotifier: function onFormNotifier(data) {
|
||||
let name, value;
|
||||
|
||||
// Figure out if it's a function that we care about tracking
|
||||
|
@ -257,11 +257,30 @@ HistoryStore.prototype = {
|
||||
|
||||
function HistoryTracker(name) {
|
||||
Tracker.call(this, name);
|
||||
Svc.History.addObserver(this, true);
|
||||
Svc.Obs.add("weave:engine:start-tracking", this);
|
||||
Svc.Obs.add("weave:engine:stop-tracking", this);
|
||||
}
|
||||
HistoryTracker.prototype = {
|
||||
__proto__: Tracker.prototype,
|
||||
|
||||
_enabled: false,
|
||||
observe: function observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "weave:engine:start-tracking":
|
||||
if (!this._enabled) {
|
||||
Svc.History.addObserver(this, true);
|
||||
this._enabled = true;
|
||||
}
|
||||
break;
|
||||
case "weave:engine:stop-tracking":
|
||||
if (this._enabled) {
|
||||
Svc.History.removeObserver(this);
|
||||
this._enabled = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([
|
||||
Ci.nsINavHistoryObserver,
|
||||
Ci.nsINavHistoryObserver_MOZILLA_1_9_1_ADDITIONS,
|
||||
|
@ -44,7 +44,6 @@ const Ci = Components.interfaces;
|
||||
Cu.import("resource://services-sync/base_records/collection.js");
|
||||
Cu.import("resource://services-sync/constants.js");
|
||||
Cu.import("resource://services-sync/engines.js");
|
||||
Cu.import("resource://services-sync/ext/Observers.js");
|
||||
Cu.import("resource://services-sync/stores.js");
|
||||
Cu.import("resource://services-sync/trackers.js");
|
||||
Cu.import("resource://services-sync/type_records/passwords.js");
|
||||
@ -224,16 +223,33 @@ PasswordStore.prototype = {
|
||||
|
||||
function PasswordTracker(name) {
|
||||
Tracker.call(this, name);
|
||||
Observers.add("passwordmgr-storage-changed", this);
|
||||
Svc.Obs.add("weave:engine:start-tracking", this);
|
||||
Svc.Obs.add("weave:engine:stop-tracking", this);
|
||||
}
|
||||
PasswordTracker.prototype = {
|
||||
__proto__: Tracker.prototype,
|
||||
|
||||
/* A single add, remove or change is 15 points, all items removed is 50 */
|
||||
_enabled: false,
|
||||
observe: function PasswordTracker_observe(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "weave:engine:start-tracking":
|
||||
if (!this._enabled) {
|
||||
Svc.Obs.add("passwordmgr-storage-changed", this);
|
||||
this._enabled = true;
|
||||
}
|
||||
return;
|
||||
case "weave:engine:stop-tracking":
|
||||
if (this._enabled) {
|
||||
Svc.Obs.remove("passwordmgr-storage-changed", this);
|
||||
this._enabled = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.ignoreAll)
|
||||
return;
|
||||
|
||||
// A single add, remove or change is 15 points, all items removed is 50
|
||||
switch (aData) {
|
||||
case 'modifyLogin':
|
||||
aSubject = aSubject.QueryInterface(Ci.nsIArray).
|
||||
|
@ -231,8 +231,9 @@ PrefStore.prototype = {
|
||||
|
||||
function PrefTracker(name) {
|
||||
Tracker.call(this, name);
|
||||
this._prefs.addObserver("", this, false);
|
||||
Svc.Obs.add("profile-before-change", this);
|
||||
Svc.Obs.add("weave:engine:start-tracking", this);
|
||||
Svc.Obs.add("weave:engine:stop-tracking", this);
|
||||
}
|
||||
PrefTracker.prototype = {
|
||||
__proto__: Tracker.prototype,
|
||||
@ -255,8 +256,21 @@ PrefTracker.prototype = {
|
||||
return this.__syncPrefs;
|
||||
},
|
||||
|
||||
_enabled: false,
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "weave:engine:start-tracking":
|
||||
if (!this._enabled) {
|
||||
this._prefs.addObserver("", this, false);
|
||||
this._enabled = true;
|
||||
}
|
||||
break;
|
||||
case "weave:engine:stop-tracking":
|
||||
if (this._enabled) {
|
||||
this._prefs.removeObserver("", this);
|
||||
this._enabled = false;
|
||||
}
|
||||
// Fall through to clean up.
|
||||
case "profile-before-change":
|
||||
this.__prefs = null;
|
||||
this.__syncPrefs = null;
|
||||
|
@ -225,53 +225,75 @@ TabStore.prototype = {
|
||||
|
||||
function TabTracker(name) {
|
||||
Tracker.call(this, name);
|
||||
|
||||
Svc.Obs.add("private-browsing", this);
|
||||
Svc.Obs.add("weave:engine:start-tracking", this);
|
||||
Svc.Obs.add("weave:engine:stop-tracking", this);
|
||||
|
||||
// Make sure "this" pointer is always set correctly for event listeners
|
||||
this.onTab = Utils.bind2(this, this.onTab);
|
||||
|
||||
// Register as an observer so we can catch windows opening and closing:
|
||||
Svc.Obs.add("domwindowopened", this);
|
||||
|
||||
// Also register listeners on already open windows
|
||||
let wins = Svc.WinMediator.getEnumerator("navigator:browser");
|
||||
while (wins.hasMoreElements())
|
||||
this._registerListenersForWindow(wins.getNext());
|
||||
this._unregisterListeners = Utils.bind2(this, this._unregisterListeners);
|
||||
}
|
||||
TabTracker.prototype = {
|
||||
__proto__: Tracker.prototype,
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
|
||||
|
||||
_registerListenersForWindow: function TabTracker__registerListen(window) {
|
||||
this._log.trace("Registering tab listeners in new window");
|
||||
|
||||
// For each topic, add or remove onTab as the listener
|
||||
let topics = ["pageshow", "TabOpen", "TabClose", "TabSelect"];
|
||||
let onTab = this.onTab;
|
||||
let addRem = function(add) topics.forEach(function(topic) {
|
||||
window[(add ? "add" : "remove") + "EventListener"](topic, onTab, false);
|
||||
});
|
||||
|
||||
// Add the listeners now and remove them on unload
|
||||
addRem(true);
|
||||
window.addEventListener("unload", function() addRem(false), false);
|
||||
_topics: ["pageshow", "TabOpen", "TabClose", "TabSelect"],
|
||||
_registerListenersForWindow: function registerListenersFW(window) {
|
||||
this._log.trace("Registering tab listeners in window");
|
||||
for each (let topic in this._topics) {
|
||||
window.addEventListener(topic, this.onTab, false);
|
||||
}
|
||||
window.addEventListener("unload", this._unregisterListeners, false);
|
||||
},
|
||||
|
||||
observe: function TabTracker_observe(aSubject, aTopic, aData) {
|
||||
// Add tab listeners now that a window has opened
|
||||
if (aTopic == "domwindowopened") {
|
||||
let self = this;
|
||||
aSubject.addEventListener("load", function onLoad(event) {
|
||||
aSubject.removeEventListener("load", onLoad, false);
|
||||
// Only register after the window is done loading to avoid unloads
|
||||
self._registerListenersForWindow(aSubject);
|
||||
}, false);
|
||||
_unregisterListeners: function unregisterListeners(event) {
|
||||
this._unregisterListenersForWindow(event.target);
|
||||
},
|
||||
|
||||
_unregisterListenersForWindow: function unregisterListenersFW(window) {
|
||||
this._log.trace("Removing tab listeners in window");
|
||||
window.removeEventListener("unload", this._unregisterListeners, false);
|
||||
for each (let topic in this._topics) {
|
||||
window.removeEventListener(topic, this.onTab, false);
|
||||
}
|
||||
},
|
||||
|
||||
_enabled: false,
|
||||
observe: function TabTracker_observe(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "weave:engine:start-tracking":
|
||||
if (!this._enabled) {
|
||||
Svc.Obs.add("private-browsing", this);
|
||||
Svc.Obs.add("domwindowopened", this);
|
||||
let wins = Svc.WinMediator.getEnumerator("navigator:browser");
|
||||
while (wins.hasMoreElements())
|
||||
this._registerListenersForWindow(wins.getNext());
|
||||
this._enabled = true;
|
||||
}
|
||||
break;
|
||||
case "weave:engine:stop-tracking":
|
||||
if (this._enabled) {
|
||||
Svc.Obs.remove("private-browsing", this);
|
||||
Svc.Obs.remove("domwindowopened", this);
|
||||
let wins = Svc.WinMediator.getEnumerator("navigator:browser");
|
||||
while (wins.hasMoreElements())
|
||||
this._unregisterListenersForWindow(wins.getNext());
|
||||
this._enabled = false;
|
||||
}
|
||||
return;
|
||||
case "domwindowopened":
|
||||
// Add tab listeners now that a window has opened
|
||||
let self = this;
|
||||
aSubject.addEventListener("load", function onLoad(event) {
|
||||
aSubject.removeEventListener("load", onLoad, false);
|
||||
// Only register after the window is done loading to avoid unloads
|
||||
self._registerListenersForWindow(aSubject);
|
||||
}, false);
|
||||
break;
|
||||
case "private-browsing":
|
||||
if (aData == "enter" && !PBPrefs.get("autostart"))
|
||||
this.clearChangedIDs();
|
||||
}
|
||||
else if (aTopic == "private-browsing" && aData == "enter"
|
||||
&& !PBPrefs.get("autostart"))
|
||||
this.clearChangedIDs();
|
||||
},
|
||||
|
||||
onTab: function onTab(event) {
|
||||
|
@ -273,6 +273,7 @@ WeaveSvc.prototype = {
|
||||
"Weave, since it will not work correctly.");
|
||||
}
|
||||
|
||||
Svc.Obs.add("weave:service:setup-complete", this);
|
||||
Svc.Obs.add("network:offline-status-changed", this);
|
||||
Svc.Obs.add("weave:service:sync:finish", this);
|
||||
Svc.Obs.add("weave:service:sync:error", this);
|
||||
@ -292,6 +293,10 @@ WeaveSvc.prototype = {
|
||||
|
||||
this._updateCachedURLs();
|
||||
|
||||
let status = this._checkSetup();
|
||||
if (status != STATUS_DISABLED && status != CLIENT_NOT_CONFIGURED)
|
||||
Svc.Obs.notify("weave:engine:start-tracking");
|
||||
|
||||
// Applications can specify this preference if they want autoconnect
|
||||
// to happen after a fixed delay.
|
||||
let delay = Svc.Prefs.get("autoconnectDelay");
|
||||
@ -306,7 +311,10 @@ WeaveSvc.prototype = {
|
||||
},
|
||||
|
||||
_checkSetup: function WeaveSvc__checkSetup() {
|
||||
if (!this.username) {
|
||||
if (!this.enabled) {
|
||||
Status.service = STATUS_DISABLED;
|
||||
}
|
||||
else if (!this.username) {
|
||||
this._log.debug("checkSetup: no username set");
|
||||
Status.login = LOGIN_FAILED_NO_USERNAME;
|
||||
}
|
||||
@ -404,6 +412,11 @@ WeaveSvc.prototype = {
|
||||
|
||||
observe: function WeaveSvc__observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "weave:service:setup-complete":
|
||||
let status = this._checkSetup();
|
||||
if (status != STATUS_DISABLED && status != CLIENT_NOT_CONFIGURED)
|
||||
Svc.Obs.notify("weave:engine:start-tracking");
|
||||
break;
|
||||
case "network:offline-status-changed":
|
||||
// Whether online or offline, we'll reschedule syncs
|
||||
this._log.trace("Network offline status change: " + data);
|
||||
@ -704,6 +717,7 @@ WeaveSvc.prototype = {
|
||||
Svc.Login.removeLogin(login);
|
||||
});
|
||||
Svc.Obs.notify("weave:service:start-over");
|
||||
Svc.Obs.notify("weave:engine:stop-tracking");
|
||||
},
|
||||
|
||||
delayedAutoConnect: function delayedAutoConnect(delay) {
|
||||
|
Loading…
Reference in New Issue
Block a user