/* 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/. */

#include "nsISupports.idl"
interface nsIFile;
interface mozIStorageConnection;

/**
 * The nsIFormHistory object is a service which holds a set of name/value
 * pairs.  The names correspond to form field names, and the values correspond
 * to values the user has submitted.  So, several values may exist for a single
 * name.
 *
 * Note: this interface provides no means to access stored values.
 * Stored values are used by the FormFillController to generate
 * autocomplete matches.
 */

[scriptable, uuid(5d7d84d1-9798-4016-bf61-a32acf09b29d)]
interface nsIFormHistory2 : nsISupports
{
  /**
   * Returns true if the form history has any entries.
   */
  readonly attribute boolean hasEntries;

  /**
   * Adds a name and value pair to the form history.
   */
  void addEntry(in AString name, in AString value);

  /**
   * Removes a name and value pair from the form history.
   */
  void removeEntry(in AString name, in AString value);

  /**
   * Removes all entries that are paired with a name.
   */
  void removeEntriesForName(in AString name);

  /**
   * Removes all entries in the entire form history.
   */
  void removeAllEntries();

  /**
   * Returns true if there is no entry that is paired with a name.
   */
  boolean nameExists(in AString name);

  /**
   * Gets whether a name and value pair exists in the form history.
   */
  boolean entryExists(in AString name, in AString value);

  /**
   * Removes entries that were created between the specified times.
   *
   * @param aBeginTime
   *        The beginning of the timeframe, in microseconds
   * @param aEndTime
   *        The end of the timeframe, in microseconds
   */
  void removeEntriesByTimeframe(in long long aBeginTime, in long long aEndTime);

  /**
   * Returns the underlying DB connection the form history module is using.
   */
  readonly attribute mozIStorageConnection DBConnection;
};
