summaryrefslogtreecommitdiffstats
path: root/browser/components/migration/content/migration-dialog-window.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/migration/content/migration-dialog-window.js')
-rw-r--r--browser/components/migration/content/migration-dialog-window.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/browser/components/migration/content/migration-dialog-window.js b/browser/components/migration/content/migration-dialog-window.js
new file mode 100644
index 0000000000..b16a348a35
--- /dev/null
+++ b/browser/components/migration/content/migration-dialog-window.js
@@ -0,0 +1,116 @@
+/* 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/. */
+
+"use strict";
+
+const lazy = {};
+
+ChromeUtils.defineESModuleGetters(lazy, {
+ MigrationUtils: "resource:///modules/MigrationUtils.sys.mjs",
+ MigrationWizardConstants:
+ "chrome://browser/content/migration/migration-wizard-constants.mjs",
+});
+
+/**
+ * This file manages a MigrationWizard embedded in a dialog that runs
+ * in a top-level dialog window. It's main responsibility is to listen
+ * for dialog-specific events from the embedded MigrationWizard and to
+ * respond appropriately to them.
+ *
+ * A single object argument is expected to be passed when opening
+ * this dialog.
+ *
+ * @param {object} window.arguments.0
+ * @param {object} window.arguments.0.options
+ * A series of options for configuring the dialog. See
+ * MigrationUtils.showMigrationWizard for a description of this
+ * object.
+ */
+
+const MigrationDialog = {
+ _wiz: null,
+
+ init() {
+ addEventListener("load", this);
+ },
+
+ onLoad() {
+ this._wiz = document.getElementById("wizard");
+ this._wiz.addEventListener("MigrationWizard:Close", this);
+ document.addEventListener("keypress", this);
+
+ let args = window.arguments[0];
+ // When opened via nsIWindowWatcher.openWindow, the arguments are
+ // passed through C++, and they arrive to us wrapped as an XPCOM
+ // object. We use wrappedJSObject to get at the underlying JS
+ // object.
+ if (args instanceof Ci.nsISupports) {
+ args = args.wrappedJSObject;
+ }
+
+ let observer = new ResizeObserver(() => {
+ window.sizeToContent();
+ });
+ observer.observe(this._wiz);
+
+ customElements.whenDefined("migration-wizard").then(() => {
+ if (args.options?.skipSourceSelection) {
+ // This is an automigration for a profile refresh, so begin migration
+ // automatically once ready.
+ this.doProfileRefresh(
+ args.options.migratorKey,
+ args.options.migrator,
+ args.options.profileId
+ );
+ } else {
+ this._wiz.requestState();
+ }
+ });
+ },
+
+ handleEvent(event) {
+ switch (event.type) {
+ case "load": {
+ this.onLoad();
+ break;
+ }
+ case "keypress": {
+ if (event.keyCode == KeyEvent.DOM_VK_ESCAPE) {
+ window.close();
+ }
+ break;
+ }
+ case "MigrationWizard:Close": {
+ window.close();
+ break;
+ }
+ }
+ },
+
+ async doProfileRefresh(migratorKey, migrator, profileId) {
+ let profile = { id: profileId };
+ let resourceTypeData = await migrator.getMigrateData(profile);
+ let resourceTypeStrs = [];
+ for (let type in lazy.MigrationWizardConstants.DISPLAYED_RESOURCE_TYPES) {
+ if (resourceTypeData & lazy.MigrationUtils.resourceTypes[type]) {
+ resourceTypeStrs.push(
+ lazy.MigrationWizardConstants.DISPLAYED_RESOURCE_TYPES[type]
+ );
+ }
+ }
+
+ this._wiz.doAutoImport(migratorKey, profile, resourceTypeStrs);
+ this._wiz.addEventListener(
+ "MigrationWizard:DoneMigration",
+ () => {
+ setTimeout(() => {
+ window.close();
+ }, 5000);
+ },
+ { once: true }
+ );
+ },
+};
+
+MigrationDialog.init();