gecko-dev/toolkit/components/formautofill/content/RequestAutocompleteUI.jsm

59 lines
1.8 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/. */
/*
* Handles the requestAutocomplete user interface.
*/
"use strict";
this.EXPORTED_SYMBOLS = [
"RequestAutocompleteUI",
];
const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Promise",
"resource://gre/modules/Promise.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Task",
"resource://gre/modules/Task.jsm");
/**
* Handles the requestAutocomplete user interface.
*/
this.RequestAutocompleteUI = function (aAutofillData) {
this._autofillData = aAutofillData;
}
this.RequestAutocompleteUI.prototype = {
_autofillData: null,
show: Task.async(function* () {
// Create a new promise and store the function that will resolve it. This
// will be called by the UI once the selection has been made.
let resolveFn;
let uiPromise = new Promise(resolve => resolveFn = resolve);
// Wrap the callback function so that it survives XPCOM.
let args = {
resolveFn: resolveFn,
autofillData: this._autofillData,
};
args.wrappedJSObject = args;
// Open the window providing the function to call when it closes.
Services.ww.openWindow(null,
"chrome://formautofill/content/requestAutocomplete.xhtml",
"Toolkit:RequestAutocomplete",
"chrome,dialog=no,resizable",
args);
// Wait for the window to be closed and the operation confirmed.
return yield uiPromise;
}),
};