mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2.5 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/. */
 | 
						|
 | 
						|
const lazy = {};
 | 
						|
 | 
						|
ChromeUtils.defineESModuleGetters(lazy, {
 | 
						|
  FormHistory: "resource://gre/modules/FormHistory.sys.mjs",
 | 
						|
});
 | 
						|
 | 
						|
export class FormHistoryStartup {
 | 
						|
  classID = Components.ID("{3A0012EB-007F-4BB8-AA81-A07385F77A25}");
 | 
						|
 | 
						|
  QueryInterface = ChromeUtils.generateQI([
 | 
						|
    "nsIObserver",
 | 
						|
    "nsISupportsWeakReference",
 | 
						|
  ]);
 | 
						|
 | 
						|
  observe(_subject, topic, _data) {
 | 
						|
    switch (topic) {
 | 
						|
      case "idle-daily":
 | 
						|
      case "formhistory-expire-now":
 | 
						|
        lazy.FormHistory.expireOldEntries().catch(console.error);
 | 
						|
        break;
 | 
						|
      case "profile-after-change":
 | 
						|
        this.init();
 | 
						|
        break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  init() {
 | 
						|
    if (this.inited) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this.inited = true;
 | 
						|
 | 
						|
    // triggers needed service cleanup and db shutdown
 | 
						|
    Services.obs.addObserver(this, "idle-daily", true);
 | 
						|
    Services.obs.addObserver(this, "formhistory-expire-now", true);
 | 
						|
 | 
						|
    Services.ppmm.addMessageListener(
 | 
						|
      "FormHistory:AutoCompleteSearchAsync",
 | 
						|
      this
 | 
						|
    );
 | 
						|
    Services.ppmm.addMessageListener("FormHistory:RemoveEntry", this);
 | 
						|
  }
 | 
						|
 | 
						|
  receiveMessage(message) {
 | 
						|
    switch (message.name) {
 | 
						|
      case "FormHistory:AutoCompleteSearchAsync":
 | 
						|
        this.#onFormHistoryAutoCompleteSearchAsync({
 | 
						|
          ...message.data,
 | 
						|
          target: message.target,
 | 
						|
        });
 | 
						|
        break;
 | 
						|
 | 
						|
      case "FormHistory:RemoveEntry":
 | 
						|
        this.#onFormHistoryRemoveEntry(message.data);
 | 
						|
        break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  async #onFormHistoryAutoCompleteSearchAsync({
 | 
						|
    id,
 | 
						|
    searchString,
 | 
						|
    params,
 | 
						|
    target,
 | 
						|
  }) {
 | 
						|
    // This case is only used for the search field. There is a
 | 
						|
    // similar algorithm in FormHistoryParent.sys.mjs that uses
 | 
						|
    // sendQuery for other form fields.
 | 
						|
 | 
						|
    const instance = (this._queryInstance = {});
 | 
						|
    const formHistoryEntries = await lazy.FormHistory.getAutoCompleteResults(
 | 
						|
      searchString,
 | 
						|
      params,
 | 
						|
      () => this._queryInstance != instance
 | 
						|
    );
 | 
						|
 | 
						|
    if (this._queryInstance == instance) {
 | 
						|
      target.sendAsyncMessage("FormHistory:AutoCompleteSearchResults", {
 | 
						|
        id,
 | 
						|
        results: {
 | 
						|
          formHistoryEntries,
 | 
						|
          externalEntries: [],
 | 
						|
        },
 | 
						|
      });
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  #onFormHistoryRemoveEntry({ inputName, value, guid }) {
 | 
						|
    lazy.FormHistory.update({
 | 
						|
      op: "remove",
 | 
						|
      fieldname: inputName,
 | 
						|
      value,
 | 
						|
      guid,
 | 
						|
    });
 | 
						|
  }
 | 
						|
}
 |