diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index e9bc72688dde..7c699a3b16dc 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -456,14 +456,12 @@ let JSWINDOWACTORS = {
esModuleURI: "resource:///actors/BackupUIChild.sys.mjs",
events: {
"BackupUI:InitWidget": { wantUntrusted: true },
- "BackupUI:EnableScheduledBackups": { wantUntrusted: true },
- "BackupUI:DisableScheduledBackups": { wantUntrusted: true },
+ "BackupUI:ToggleScheduledBackups": { wantUntrusted: true },
"BackupUI:ShowFilepicker": { wantUntrusted: true },
"BackupUI:GetBackupFileInfo": { wantUntrusted: true },
"BackupUI:RestoreFromBackupFile": { wantUntrusted: true },
"BackupUI:RestoreFromBackupChooseFile": { wantUntrusted: true },
- "BackupUI:EnableEncryption": { wantUntrusted: true },
- "BackupUI:DisableEncryption": { wantUntrusted: true },
+ "BackupUI:ToggleEncryption": { wantUntrusted: true },
"BackupUI:RerunEncryption": { wantUntrusted: true },
"BackupUI:ShowBackupLocation": { wantUntrusted: true },
"BackupUI:EditBackupLocation": { wantUntrusted: true },
diff --git a/browser/components/backup/BackupService.sys.mjs b/browser/components/backup/BackupService.sys.mjs
index e096b5c9aafb..40d5c0e7b483 100644
--- a/browser/components/backup/BackupService.sys.mjs
+++ b/browser/components/backup/BackupService.sys.mjs
@@ -2753,7 +2753,6 @@ export class BackupService extends EventTarget {
lazy.logConsole.error(
`Failed to set parent directory ${parentDirPath}. ${e}`
);
- throw e;
}
}
diff --git a/browser/components/backup/actors/BackupUIChild.sys.mjs b/browser/components/backup/actors/BackupUIChild.sys.mjs
index 632bb653a7c4..6fb760496a65 100644
--- a/browser/components/backup/actors/BackupUIChild.sys.mjs
+++ b/browser/components/backup/actors/BackupUIChild.sys.mjs
@@ -29,28 +29,8 @@ export class BackupUIChild extends JSWindowActorChild {
if (event.type == "BackupUI:InitWidget") {
this.#inittedWidgets.add(event.target);
this.sendAsyncMessage("RequestState");
- } else if (event.type == "BackupUI:EnableScheduledBackups") {
- /** @type {import("../content/turn-on-scheduled-backups.mjs").default} */
- const target = event.target;
-
- const result = await this.sendQuery(
- "EnableScheduledBackups",
- event.detail
- );
- if (result.success) {
- target.close();
- } else {
- target.enableBackupErrorCode = result.errorCode;
- }
- } else if (event.type == "BackupUI:DisableScheduledBackups") {
- /** @type {import("../content/turn-off-scheduled-backups.mjs").default} */
- const target = event.target;
-
- this.sendAsyncMessage("DisableScheduledBackups", event.detail);
- // backups will always end up disabled even if there was an error
- // with other bookkeeping related to turning off backups
-
- target.close();
+ } else if (event.type == "BackupUI:ToggleScheduledBackups") {
+ this.sendAsyncMessage("ToggleScheduledBackups", event.detail);
} else if (event.type == "BackupUI:ShowFilepicker") {
let targetNodeName = event.target.nodeName;
let { path, filename, iconURL } = await this.sendQuery("ShowFilepicker", {
@@ -99,36 +79,10 @@ export class BackupUIChild extends JSWindowActorChild {
}
} else if (event.type == "BackupUI:RestoreFromBackupChooseFile") {
this.sendAsyncMessage("RestoreFromBackupChooseFile");
- } else if (event.type == "BackupUI:EnableEncryption") {
- /** @type {import("../content/enable-backup-encryption.mjs").default} */
- const target = event.target;
-
- const result = await this.sendQuery("EnableEncryption", event.detail);
- if (result.success) {
- target.close();
- } else {
- target.enableEncryptionErrorCode = result.errorCode;
- }
- } else if (event.type == "BackupUI:DisableEncryption") {
- /** @type {import("../content/disable-backup-encryption.mjs").default} */
- const target = event.target;
-
- const result = await this.sendQuery("DisableEncryption", event.detail);
- if (result.success) {
- target.close();
- } else {
- target.disableEncryptionErrorCode = result.errorCode;
- }
+ } else if (event.type == "BackupUI:ToggleEncryption") {
+ this.sendAsyncMessage("ToggleEncryption", event.detail);
} else if (event.type == "BackupUI:RerunEncryption") {
- /** @type {import("../content/enable-backup-encryption.mjs").default} */
- const target = event.target;
-
- const result = await this.sendQuery("RerunEncryption", event.detail);
- if (result.success) {
- target.close();
- } else {
- target.rerunEncryptionErrorCode = result.errorCode;
- }
+ this.sendAsyncMessage("RerunEncryption", event.detail);
} else if (event.type == "BackupUI:ShowBackupLocation") {
this.sendAsyncMessage("ShowBackupLocation");
} else if (event.type == "BackupUI:EditBackupLocation") {
diff --git a/browser/components/backup/actors/BackupUIParent.sys.mjs b/browser/components/backup/actors/BackupUIParent.sys.mjs
index 571a94d457fd..8389602f9f0f 100644
--- a/browser/components/backup/actors/BackupUIParent.sys.mjs
+++ b/browser/components/backup/actors/BackupUIParent.sys.mjs
@@ -82,37 +82,50 @@ export class BackupUIParent extends JSWindowActorParent {
async receiveMessage(message) {
if (message.name == "RequestState") {
this.sendState();
- } else if (message.name == "EnableScheduledBackups") {
- try {
- let { parentDirPath, password } = message.data;
+ } else if (message.name == "ToggleScheduledBackups") {
+ let { isScheduledBackupsEnabled, parentDirPath, password } = message.data;
+
+ if (isScheduledBackupsEnabled) {
if (parentDirPath) {
this.#bs.setParentDirPath(parentDirPath);
+ /**
+ * TODO: display an error and do not attempt to toggle scheduled backups if there
+ * is a problem with setting the parent directory (bug 1901308).
+ */
}
+
if (password) {
- await this.#bs.enableEncryption(password);
+ try {
+ await this.#bs.enableEncryption(password);
+ } catch (e) {
+ /**
+ * TODO: display en error and do not attempt to toggle scheduled backups if there is a
+ * problem with enabling encryption (bug 1901308)
+ */
+ return null;
+ }
+ }
+ } else {
+ try {
+ if (this.#bs.state.encryptionEnabled) {
+ await this.#bs.disableEncryption();
+ }
+ await this.#bs.deleteLastBackup();
+ } catch (e) {
+ // no-op so that scheduled backups can still be turned off
}
- this.#bs.setScheduledBackups(true);
- } catch (e) {
- lazy.logConsole.error(`Failed to enable scheduled backups`, e);
- return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
}
+
+ this.#bs.setScheduledBackups(isScheduledBackupsEnabled);
+
+ return true;
+
/**
* TODO: (Bug 1900125) we should create a backup at the specified dir path once we turn on
* scheduled backups. The backup folder in the chosen directory should contain
* the archive file, which we create using BackupService.createArchive implemented in
* Bug 1897498.
*/
- return { success: true };
- } else if (message.name == "DisableScheduledBackups") {
- try {
- if (this.#bs.state.encryptionEnabled) {
- await this.#bs.disableEncryption();
- }
- await this.#bs.deleteLastBackup();
- } catch (e) {
- // no-op so that scheduled backups can still be turned off
- }
- this.#bs.setScheduledBackups(false);
} else if (message.name == "ShowFilepicker") {
let { win, filter, displayDirectoryPath } = message.data;
@@ -178,45 +191,52 @@ export class BackupUIParent extends JSWindowActorParent {
return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
}
return { success: true };
- } else if (message.name == "EnableEncryption") {
- try {
- await this.#bs.enableEncryption(message.data.password);
- } catch (e) {
- lazy.logConsole.error(`Failed to enable encryption`, e);
- return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
- }
- /**
- * TODO: (Bug 1901640) after enabling encryption, recreate the backup,
- * this time with sensitive data.
- */
- return { success: true };
- } else if (message.name == "DisableEncryption") {
- try {
- await this.#bs.disableEncryption();
- } catch (e) {
- lazy.logConsole.error(`Failed to disable encryption`, e);
- return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
- }
- /**
- * TODO: (Bug 1901640) after disabling encryption, recreate the backup,
- * this time without sensitive data.
- */
- return { success: true };
- } else if (message.name == "RerunEncryption") {
- try {
- let { password } = message.data;
+ } else if (message.name == "ToggleEncryption") {
+ let { isEncryptionEnabled, password } = message.data;
+ if (!isEncryptionEnabled) {
+ try {
+ await this.#bs.disableEncryption();
+ /**
+ * TODO: (Bug 1901640) after disabling encryption, recreate the backup,
+ * this time without sensitive data.
+ */
+ } catch (e) {
+ /**
+ * TODO: (Bug 1901308) maybe display an error if there is a problem with
+ * disabling encryption.
+ */
+ }
+ } else {
+ try {
+ await this.#bs.enableEncryption(password);
+ /**
+ * TODO: (Bug 1901640) after enabling encryption, recreate the backup,
+ * this time with sensitive data.
+ */
+ } catch (e) {
+ /**
+ * TODO: (Bug 1901308) maybe display an error if there is a problem with
+ * enabling encryption.
+ */
+ }
+ }
+ } else if (message.name == "RerunEncryption") {
+ let { password } = message.data;
+
+ try {
await this.#bs.disableEncryption();
await this.#bs.enableEncryption(password);
+ /**
+ * TODO: (Bug 1901640) after enabling encryption, recreate the backup,
+ * this time with the new password.
+ */
} catch (e) {
- lazy.logConsole.error(`Failed to rerun encryption`, e);
- return { success: false, errorCode: e.cause || lazy.ERRORS.UNKNOWN };
+ /**
+ * TODO: (Bug 1901308) maybe display an error if there is a problem with
+ * re-encryption.
+ */
}
- /**
- * TODO: (Bug 1901640) after enabling encryption, recreate the backup,
- * this time with the new password.
- */
- return { success: true };
} else if (message.name == "ShowBackupLocation") {
this.#bs.showBackupLocation();
} else if (message.name == "EditBackupLocation") {
diff --git a/browser/components/backup/content/backup-settings.mjs b/browser/components/backup/content/backup-settings.mjs
index 211ab25bbb08..79c0f437e8fb 100644
--- a/browser/components/backup/content/backup-settings.mjs
+++ b/browser/components/backup/content/backup-settings.mjs
@@ -93,14 +93,44 @@ export default class BackupSettings extends MozLitElement {
new CustomEvent("BackupUI:InitWidget", { bubbles: true })
);
+ this.addEventListener("turnOnScheduledBackups", this);
+ this.addEventListener("turnOffScheduledBackups", this);
this.addEventListener("dialogCancel", this);
this.addEventListener("getBackupFileInfo", this);
+ this.addEventListener("enableEncryption", this);
+ this.addEventListener("rerunEncryption", this);
+ this.addEventListener("disableEncryption", this);
this.addEventListener("restoreFromBackupConfirm", this);
this.addEventListener("restoreFromBackupChooseFile", this);
}
handleEvent(event) {
switch (event.type) {
+ case "turnOnScheduledBackups":
+ this.turnOnScheduledBackupsDialogEl.close();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:ToggleScheduledBackups", {
+ bubbles: true,
+ composed: true,
+ detail: {
+ ...event.detail,
+ isScheduledBackupsEnabled: true,
+ },
+ })
+ );
+ break;
+ case "turnOffScheduledBackups":
+ this.turnOffScheduledBackupsDialogEl.close();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:ToggleScheduledBackups", {
+ bubbles: true,
+ composed: true,
+ detail: {
+ isScheduledBackupsEnabled: false,
+ },
+ })
+ );
+ break;
case "dialogCancel":
if (this.turnOnScheduledBackupsDialogEl.open) {
this.turnOnScheduledBackupsDialogEl.close();
@@ -145,6 +175,43 @@ export default class BackupSettings extends MozLitElement {
})
);
break;
+ case "enableEncryption":
+ this.enableBackupEncryptionDialogEl.close();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:ToggleEncryption", {
+ bubbles: true,
+ composed: true,
+ detail: {
+ ...event.detail,
+ isEncryptionEnabled: true,
+ },
+ })
+ );
+ break;
+ case "rerunEncryption":
+ this.enableBackupEncryptionDialogEl.close();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:RerunEncryption", {
+ bubbles: true,
+ composed: true,
+ detail: {
+ ...event.detail,
+ },
+ })
+ );
+ break;
+ case "disableEncryption":
+ this.disableBackupEncryptionDialogEl.close();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:ToggleEncryption", {
+ bubbles: true,
+ composed: true,
+ detail: {
+ isEncryptionEnabled: false,
+ },
+ })
+ );
+ break;
}
}
diff --git a/browser/components/backup/content/disable-backup-encryption.mjs b/browser/components/backup/content/disable-backup-encryption.mjs
index bbf8e844976c..fe4e1e4eaa89 100644
--- a/browser/components/backup/content/disable-backup-encryption.mjs
+++ b/browser/components/backup/content/disable-backup-encryption.mjs
@@ -5,66 +5,47 @@
import { html } from "chrome://global/content/vendor/lit.all.mjs";
import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
-// eslint-disable-next-line import/no-unassigned-import
-import "chrome://global/content/elements/moz-message-bar.mjs";
-
-const ERROR_L10N_ID = "backup-error-retry";
-
/**
* The widget for disabling password protection if the backup is already
* encrypted.
*/
export default class DisableBackupEncryption extends MozLitElement {
- static properties = {
- // managed by BackupUIChild
- disableEncryptionErrorCode: { type: Number },
- };
-
static get queries() {
return {
cancelButtonEl: "#backup-disable-encryption-cancel-button",
confirmButtonEl: "#backup-disable-encryption-confirm-button",
- errorEl: "#disable-backup-encryption-error",
};
}
- constructor() {
- super();
- this.disableEncryptionErrorCode = 0;
+ /**
+ * Dispatches the BackupUI:InitWidget custom event upon being attached to the
+ * DOM, which registers with BackupUIChild for BackupService state updates.
+ */
+ connectedCallback() {
+ super.connectedCallback();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:InitWidget", { bubbles: true })
+ );
}
- close() {
+ handleCancel() {
this.dispatchEvent(
new CustomEvent("dialogCancel", {
bubbles: true,
composed: true,
})
);
- this.reset();
- }
-
- reset() {
- this.disableEncryptionErrorCode = 0;
}
handleConfirm() {
this.dispatchEvent(
- new CustomEvent("BackupUI:DisableEncryption", {
+ new CustomEvent("disableEncryption", {
bubbles: true,
+ composed: true,
})
);
}
- errorTemplate() {
- return html`
-
- `;
- }
-
contentTemplate() {
return html`
- ${this.disableEncryptionErrorCode ? this.errorTemplate() : null}
html`
+const Template = () => html`
-
+
`;
export const Default = Template.bind({});
-
-export const DisableError = Template.bind({});
-DisableError.args = {
- disableEncryptionErrorCode: ERRORS.UNKNOWN,
-};
diff --git a/browser/components/backup/content/enable-backup-encryption.mjs b/browser/components/backup/content/enable-backup-encryption.mjs
index 8e868434b2d5..66f7b3942e6b 100644
--- a/browser/components/backup/content/enable-backup-encryption.mjs
+++ b/browser/components/backup/content/enable-backup-encryption.mjs
@@ -5,13 +5,9 @@
import { html, ifDefined } from "chrome://global/content/vendor/lit.all.mjs";
import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
-// eslint-disable-next-line import/no-unassigned-import
-import "chrome://global/content/elements/moz-message-bar.mjs";
// eslint-disable-next-line import/no-unassigned-import
import "chrome://browser/content/backup/password-validation-inputs.mjs";
-import { ERRORS } from "chrome://browser/content/backup/backup-constants.mjs";
-
/**
* Valid attributes for the enable-backup-encryption dialog type.
*
@@ -27,30 +23,14 @@ const VALID_L10N_IDS = new Map([
[VALID_TYPES.CHANGE_PASSWORD, "change-backup-encryption-header"],
]);
-const ERROR_L10N_IDS = Object.freeze({
- [ERRORS.INVALID_PASSWORD]: "backup-error-password-requirements",
- [ERRORS.UNKNOWN]: "backup-error-retry",
-});
-
-/**
- * @param {number} errorCode Error code from backup-constants.mjs
- * @returns {string} Localization ID for error message
- */
-function getErrorL10nId(errorCode) {
- return ERROR_L10N_IDS[errorCode] ?? ERROR_L10N_IDS[ERRORS.UNKNOWN];
-}
-
/**
* The widget for enabling password protection if the backup is not yet
* encrypted.
*/
export default class EnableBackupEncryption extends MozLitElement {
static properties = {
- // internal state
_inputPassValue: { type: String, state: true },
_passwordsMatch: { type: Boolean, state: true },
-
- // passed from parents
supportBaseLink: { type: String },
/**
* The "type" attribute changes the layout.
@@ -58,10 +38,6 @@ export default class EnableBackupEncryption extends MozLitElement {
* @see VALID_TYPES
*/
type: { type: String, reflect: true },
-
- // managed by BackupUIChild
- enableEncryptionErrorCode: { type: Number },
- rerunEncryptionErrorCode: { type: Number },
};
static get queries() {
@@ -72,7 +48,6 @@ export default class EnableBackupEncryption extends MozLitElement {
textHeaderEl: "#backup-enable-encryption-header",
textDescriptionEl: "#backup-enable-encryption-description",
passwordInputsEl: "#backup-enable-encryption-password-inputs",
- errorEl: "#enable-backup-encryption-error",
};
}
@@ -82,13 +57,18 @@ export default class EnableBackupEncryption extends MozLitElement {
this.type = VALID_TYPES.SET_PASSWORD;
this._inputPassValue = "";
this._passwordsMatch = false;
- this.enableEncryptionErrorCode = 0;
- this.rerunEncryptionErrorCode = 0;
}
+ /**
+ * Dispatches the BackupUI:InitWidget custom event upon being attached to the
+ * DOM, which registers with BackupUIChild for BackupService state updates.
+ */
connectedCallback() {
super.connectedCallback();
- // Listening to events from child
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:InitWidget", { bubbles: true })
+ );
+
this.addEventListener("ValidPasswordsDetected", this);
this.addEventListener("InvalidPasswordsDetected", this);
}
@@ -104,29 +84,23 @@ export default class EnableBackupEncryption extends MozLitElement {
}
}
- close() {
+ handleCancel() {
this.dispatchEvent(
new CustomEvent("dialogCancel", {
bubbles: true,
composed: true,
})
);
- this.reset();
- }
-
- reset() {
- this._inputPassValue = "";
- this._passwordsMatch = false;
- this.passwordInputsEl.reset();
- this.enableEncryptionErrorCode = 0;
+ this.resetChanges();
}
handleConfirm() {
switch (this.type) {
case VALID_TYPES.SET_PASSWORD:
this.dispatchEvent(
- new CustomEvent("BackupUI:EnableEncryption", {
+ new CustomEvent("enableEncryption", {
bubbles: true,
+ composed: true,
detail: {
password: this._inputPassValue,
},
@@ -135,8 +109,9 @@ export default class EnableBackupEncryption extends MozLitElement {
break;
case VALID_TYPES.CHANGE_PASSWORD:
this.dispatchEvent(
- new CustomEvent("BackupUI:RerunEncryption", {
+ new CustomEvent("rerunEncryption", {
bubbles: true,
+ composed: true,
detail: {
password: this._inputPassValue,
},
@@ -144,6 +119,16 @@ export default class EnableBackupEncryption extends MozLitElement {
);
break;
}
+ this.resetChanges();
+ }
+
+ resetChanges() {
+ this._inputPassValue = "";
+ this._passwordsMatch = false;
+
+ this.passwordInputsEl.dispatchEvent(
+ new CustomEvent("resetInputs", { bubbles: true, composed: true })
+ );
}
descriptionTemplate() {
@@ -170,7 +155,7 @@ export default class EnableBackupEncryption extends MozLitElement {
- `;
- }
-
contentTemplate() {
return html`
-
- ${this.enableEncryptionErrorCode || this.rerunEncryptionErrorCode
- ? this.errorTemplate()
- : null}
${this.buttonGroupTemplate()}
diff --git a/browser/components/backup/content/enable-backup-encryption.stories.mjs b/browser/components/backup/content/enable-backup-encryption.stories.mjs
index 3fc697d0904d..e892d0380cab 100644
--- a/browser/components/backup/content/enable-backup-encryption.stories.mjs
+++ b/browser/components/backup/content/enable-backup-encryption.stories.mjs
@@ -5,17 +5,11 @@
// eslint-disable-next-line import/no-unresolved
import { html } from "lit.all.mjs";
import "chrome://global/content/elements/moz-card.mjs";
-import { ERRORS } from "chrome://browser/content/backup/backup-constants.mjs";
import "./enable-backup-encryption.mjs";
window.MozXULElement.insertFTLIfNeeded("locales-preview/backupSettings.ftl");
window.MozXULElement.insertFTLIfNeeded("branding/brand.ftl");
-const SELECTABLE_ERRORS = {
- "(none)": 0,
- ...ERRORS,
-};
-
export default {
title: "Domain-specific UI Widgets/Backup/Enable Encryption",
component: "enable-backup-encryption",
@@ -24,30 +18,12 @@ export default {
control: { type: "select" },
options: ["set-password", "change-password"],
},
- enableEncryptionErrorCode: {
- options: Object.keys(SELECTABLE_ERRORS),
- mapping: SELECTABLE_ERRORS,
- control: { type: "select" },
- },
- rerunEncryptionErrorCode: {
- options: Object.keys(SELECTABLE_ERRORS),
- mapping: SELECTABLE_ERRORS,
- control: { type: "select" },
- },
},
};
-const Template = ({
- type,
- enableEncryptionErrorCode,
- rerunEncryptionErrorCode,
-}) => html`
+const Template = ({ type }) => html`
-
+
`;
@@ -60,15 +36,3 @@ export const ChangePassword = Template.bind({});
ChangePassword.args = {
type: "change-password",
};
-
-export const SetPasswordError = Template.bind({});
-SetPasswordError.args = {
- type: "set-password",
- enableEncryptionErrorCode: ERRORS.INVALID_PASSWORD,
-};
-
-export const ChangePasswordError = Template.bind({});
-ChangePasswordError.args = {
- type: "change-password",
- rerunEncryptionErrorCode: ERRORS.INVALID_PASSWORD,
-};
diff --git a/browser/components/backup/content/password-validation-inputs.mjs b/browser/components/backup/content/password-validation-inputs.mjs
index 46628c97ab35..4f7171e91b66 100644
--- a/browser/components/backup/content/password-validation-inputs.mjs
+++ b/browser/components/backup/content/password-validation-inputs.mjs
@@ -48,7 +48,17 @@ export default class PasswordValidationInputs extends MozLitElement {
this._tooltipFocus = false;
}
- reset() {
+ connectedCallback() {
+ super.connectedCallback();
+ this.addEventListener("resetInputs", this.handleReset);
+ }
+
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ this.removeEventListener("resetInputs", this.handleReset);
+ }
+
+ handleReset() {
this.formEl.reset();
this._showRules = false;
this._hasCommon = false;
diff --git a/browser/components/backup/content/turn-off-scheduled-backups.mjs b/browser/components/backup/content/turn-off-scheduled-backups.mjs
index c48323b835d9..d6731fc69530 100644
--- a/browser/components/backup/content/turn-off-scheduled-backups.mjs
+++ b/browser/components/backup/content/turn-off-scheduled-backups.mjs
@@ -17,7 +17,18 @@ export default class TurnOffScheduledBackups extends MozLitElement {
};
}
- close() {
+ /**
+ * Dispatches the BackupUI:InitWidget custom event upon being attached to the
+ * DOM, which registers with BackupUIChild for BackupService state updates.
+ */
+ connectedCallback() {
+ super.connectedCallback();
+ this.dispatchEvent(
+ new CustomEvent("BackupUI:InitWidget", { bubbles: true })
+ );
+ }
+
+ handleCancel() {
this.dispatchEvent(
new CustomEvent("dialogCancel", {
bubbles: true,
@@ -28,8 +39,9 @@ export default class TurnOffScheduledBackups extends MozLitElement {
handleConfirm() {
this.dispatchEvent(
- new CustomEvent("BackupUI:DisableScheduledBackups", {
+ new CustomEvent("turnOffScheduledBackups", {
bubbles: true,
+ composed: true,
})
);
}
@@ -65,7 +77,7 @@ export default class TurnOffScheduledBackups extends MozLitElement {
this.addEventListener("ValidPasswordsDetected", this);
this.addEventListener("InvalidPasswordsDetected", this);
}
@@ -121,14 +94,14 @@ export default class TurnOnScheduledBackups extends MozLitElement {
);
}
- close() {
+ handleCancel() {
this.dispatchEvent(
new CustomEvent("dialogCancel", {
bubbles: true,
composed: true,
})
);
- this.reset();
+ this.resetChanges();
}
handleConfirm() {
@@ -141,11 +114,13 @@ export default class TurnOnScheduledBackups extends MozLitElement {
}
this.dispatchEvent(
- new CustomEvent("BackupUI:EnableScheduledBackups", {
+ new CustomEvent("turnOnScheduledBackups", {
bubbles: true,
+ composed: true,
detail,
})
);
+ this.resetChanges();
}
handleTogglePasswordOptions() {
@@ -153,7 +128,7 @@ export default class TurnOnScheduledBackups extends MozLitElement {
this._passwordsMatch = false;
}
- reset() {
+ resetChanges() {
this._newPath = "";
this._newIconURL = "";
this._newLabel = "";
@@ -161,12 +136,11 @@ export default class TurnOnScheduledBackups extends MozLitElement {
this.passwordOptionsCheckboxEl.checked = false;
this._passwordsMatch = false;
this._inputPassValue = "";
- this.enableBackupErrorCode = 0;
if (this.passwordOptionsExpandedEl) {
- /** @type {import("./password-validation-inputs.mjs").default} */
- const passwordElement = this.passwordOptionsExpandedEl;
- passwordElement.reset();
+ this.passwordOptionsExpandedEl.dispatchEvent(
+ new CustomEvent("resetInputs", { bubbles: true, composed: true })
+ );
}
}
@@ -206,16 +180,6 @@ export default class TurnOnScheduledBackups extends MozLitElement {
`;
}
- errorTemplate() {
- return html`
-
- `;
- }
-
allOptionsTemplate() {
return html`