gecko-dev/toolkit/components/formautofill/content/requestAutocomplete.js

86 lines
2.4 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/. */
/*
* Implementation of "requestAutocomplete.xhtml".
*/
"use strict";
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");
const RequestAutocompleteDialog = {
resolveFn: null,
autofillData: null,
onLoad: function () {
Task.spawn(function* () {
let args = window.arguments[0].wrappedJSObject;
this.resolveFn = args.resolveFn;
this.autofillData = args.autofillData;
window.sizeToContent();
Services.obs.notifyObservers(window,
"formautofill-window-initialized", "");
}.bind(this)).catch(Cu.reportError);
},
onAccept: function () {
// TODO: Replace with autofill storage module (bug 1018304).
const dummyDB = {
"": {
"name": "Mozzy La",
"street-address": "331 E Evelyn Ave",
"address-level2": "Mountain View",
"address-level1": "CA",
"country": "US",
"postal-code": "94041",
"email": "email@example.org",
}
};
let result = { fields: [] };
for (let section of this.autofillData.sections) {
for (let addressSection of section.addressSections) {
let addressType = addressSection.addressType;
if (!(addressType in dummyDB)) {
continue;
}
for (let field of addressSection.fields) {
let fieldName = field.fieldName;
if (!(fieldName in dummyDB[addressType])) {
continue;
}
result.fields.push({
section: section.name,
addressType: addressType,
contactType: field.contactType,
fieldName: field.fieldName,
value: dummyDB[addressType][fieldName],
});
}
}
}
window.close();
this.resolveFn(result);
},
onCancel: function () {
window.close();
this.resolveFn({ canceled: true });
},
};