Bug 1897278 - Add methods to BackupService to enable / disable encryption. r=backup-reviewers,kpatenio

Differential Revision: https://phabricator.services.mozilla.com/D211438
This commit is contained in:
Mike Conley
2024-06-05 13:49:29 +00:00
parent 361e271c49
commit 8348a05e60
8 changed files with 584 additions and 12 deletions

View File

@@ -31,6 +31,9 @@
preference="browser.backup.log"
/>BackupService debug logging enabled
</li>
<li>
<input id="encryption-enabled" type="checkbox" />Encryption enabled
</li>
</ol>
</section>
<section id="controls">

View File

@@ -17,12 +17,39 @@ let DebugUI = {
init() {
let controls = document.querySelector("#controls");
controls.addEventListener("click", this);
let encryptionEnabled = document.querySelector("#encryption-enabled");
encryptionEnabled.addEventListener("click", this);
// We use `init` instead of `get` here, since this page might load before
// the BackupService has had a chance to initialize itself.
let service = BackupService.init();
service.addEventListener("BackupService:StateUpdate", this);
this.onStateUpdate();
// Kick-off reading any pre-existing encryption state off of the disk.
service.loadEncryptionState();
},
handleEvent(event) {
let target = event.target;
if (HTMLButtonElement.isInstance(event.target)) {
this.onButtonClick(target);
switch (event.type) {
case "BackupService:StateUpdate": {
this.onStateUpdate();
break;
}
case "click": {
let target = event.target;
if (HTMLButtonElement.isInstance(event.target)) {
this.onButtonClick(target);
} else if (
HTMLInputElement.isInstance(event.target) &&
event.target.type == "checkbox"
) {
event.preventDefault();
this.onCheckboxClick(target);
}
break;
}
}
},
@@ -111,9 +138,50 @@ let DebugUI = {
);
throw e;
}
break;
}
}
},
async onCheckboxClick(checkbox) {
if (checkbox.id == "encryption-enabled") {
let service = BackupService.get();
if (checkbox.checked) {
let password = prompt("What's the encryption password? (8 char min)");
if (password != null) {
try {
await service.enableEncryption(password);
} catch (e) {
console.error(e);
}
}
} else if (confirm("Disable encryption?")) {
try {
await service.disableEncryption();
} catch (e) {
console.error(e);
}
}
}
},
onStateUpdate() {
let service = BackupService.get();
let state = service.state;
let encryptionEnabled = document.querySelector("#encryption-enabled");
encryptionEnabled.checked = state.encryptionEnabled;
},
};
DebugUI.init();
// Wait until the load event fires before setting up any listeners or updating
// any of the state of the page. We do this in order to avoid having any of
// our control states overwritten by SessionStore after a restoration, as
// restoration of form state occurs _prior_ to the load event firing.
addEventListener(
"load",
() => {
DebugUI.init();
},
{ once: true }
);