michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: michael@0: Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); michael@0: Components.utils.import("resource://gre/modules/Services.jsm"); michael@0: michael@0: XPCOMUtils.defineLazyModuleGetter(this, "FormHistory", michael@0: "resource://gre/modules/FormHistory.jsm"); michael@0: michael@0: XPCOMUtils.defineLazyModuleGetter(this, "AutoCompleteE10S", michael@0: "resource://gre/modules/AutoCompleteE10S.jsm"); michael@0: michael@0: function FormHistoryStartup() { } michael@0: michael@0: FormHistoryStartup.prototype = { michael@0: classID: Components.ID("{3A0012EB-007F-4BB8-AA81-A07385F77A25}"), michael@0: michael@0: QueryInterface: XPCOMUtils.generateQI([ michael@0: Ci.nsIObserver, michael@0: Ci.nsISupportsWeakReference, michael@0: Ci.nsIFrameMessageListener michael@0: ]), michael@0: michael@0: observe: function(subject, topic, data) { michael@0: switch (topic) { michael@0: case "nsPref:changed": michael@0: FormHistory.updatePrefs(); michael@0: break; michael@0: case "idle-daily": michael@0: case "formhistory-expire-now": michael@0: FormHistory.expireOldEntries(); michael@0: break; michael@0: case "profile-before-change": michael@0: FormHistory.shutdown(); michael@0: break; michael@0: case "profile-after-change": michael@0: this.init(); michael@0: default: michael@0: break; michael@0: } michael@0: }, michael@0: michael@0: inited: false, michael@0: michael@0: init: function() michael@0: { michael@0: if (this.inited) michael@0: return; michael@0: this.inited = true; michael@0: michael@0: Services.prefs.addObserver("browser.formfill.", this, true); michael@0: michael@0: // triggers needed service cleanup and db shutdown michael@0: Services.obs.addObserver(this, "profile-before-change", true); michael@0: Services.obs.addObserver(this, "formhistory-expire-now", true); michael@0: michael@0: let messageManager = Cc["@mozilla.org/globalmessagemanager;1"]. michael@0: getService(Ci.nsIMessageListenerManager); michael@0: messageManager.loadFrameScript("chrome://satchel/content/formSubmitListener.js", true); michael@0: messageManager.addMessageListener("FormHistory:FormSubmitEntries", this); michael@0: messageManager.addMessageListener("FormHistory:AutoCompleteSearchAsync", this); michael@0: }, michael@0: michael@0: receiveMessage: function(message) { michael@0: switch (message.name) { michael@0: case "FormHistory:FormSubmitEntries": { michael@0: let entries = message.data; michael@0: let changes = entries.map(function(entry) { michael@0: return { michael@0: op : "bump", michael@0: fieldname : entry.name, michael@0: value : entry.value, michael@0: } michael@0: }); michael@0: michael@0: FormHistory.update(changes); michael@0: break; michael@0: } michael@0: michael@0: case "FormHistory:AutoCompleteSearchAsync": { michael@0: AutoCompleteE10S.search(message); michael@0: break; michael@0: } michael@0: } michael@0: } michael@0: }; michael@0: michael@0: this.NSGetFactory = XPCOMUtils.generateNSGetFactory([FormHistoryStartup]);