forked from mirrors/gecko-dev
		
	This involves opening the shadow root of the migration wizard, as the panel-list really isn't designed to handle being embedded within a closed shadow root. Differential Revision: https://phabricator.services.mozilla.com/D182484
		
			
				
	
	
		
			116 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* 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();
 |