Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
IPProtectionService:
"resource:///modules/ipprotection/IPProtectionService.sys.mjs",
});
/**
* This class monitors the Sign-In state and triggers the update of the service
* if needed.
*/
class IPPSignInWatcherSingleton {
#signedIn = false;
get isSignedIn() {
return this.#signedIn;
}
set isSignedIn(signedIn) {
this.#signedIn = signedIn;
}
init() {
this.#signedIn = Services.prefs.prefHasUserValue("services.sync.username");
}
/**
* Adds an observer for the FxA sign-in state, only when the browser is fully started.
*/
async initOnStartupCompleted() {
this.fxaObserver = {
QueryInterface: ChromeUtils.generateQI([
Ci.nsIObserver,
Ci.nsISupportsWeakReference,
]),
observe() {
let { status } = lazy.UIState.get();
let signedIn = status == lazy.UIState.STATUS_SIGNED_IN;
if (signedIn !== IPPSignInWatcher.isSignedIn) {
IPPSignInWatcher.isSignedIn = signedIn;
lazy.IPProtectionService.updateState();
}
},
};
Services.obs.addObserver(this.fxaObserver, lazy.UIState.ON_UPDATE);
}
/**
* Removes the FxA sign-in state observer
*/
uninit() {
if (this.fxaObserver) {
Services.obs.removeObserver(this.fxaObserver, lazy.UIState.ON_UPDATE);
this.fxaObserver = null;
}
}
}
const IPPSignInWatcher = new IPPSignInWatcherSingleton();
export { IPPSignInWatcher };