storage/mozIStorageVacuumParticipant.idl
author Emilio Cobos Álvarez <emilio@crisal.io>
Fri, 08 Dec 2017 19:42:45 +0100
changeset 447630 b6f1a44cf6830e2068332794b100c35a6552dcdf
parent 275452 ad01543457e739b4eee7a245e16734a3ecfd10ad
permissions -rw-r--r--
Bug 1424257: Check-in .arcconfig. r=dkl Summary: I always need to remember to exclude it from my patches, and it's the main reason I don't use phabricator. It is harmless to anything other than arcanist, so there's no reason to not check it in, I'd say. Reviewers: dkl Reviewed By: dkl Bug #: 1424257 Differential Revision: https://phabricator.services.mozilla.com/D330 MozReview-Commit-ID: 8uE9ac3uS4y

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
 * 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 mozIStorageConnection;

/**
 * This interface contains the information that the Storage service needs to
 * vacuum a database.  This interface is created as a service through the
 * category manager with the category "vacuum-participant".
 * Please see https://developer.mozilla.org/en/mozIStorageVacuumParticipant for
 * more information.
 */
[scriptable, uuid(8f367508-1d9a-4d3f-be0c-ac11b6dd7dbf)]
interface mozIStorageVacuumParticipant : nsISupports {
  /**
   * The expected page size in bytes for the database.  The vacuum manager will
   * try to correct the page size during idle based on this value.
   *
   * @note If the database is using the WAL journal mode, the page size won't
  *        be changed to the requested value.  See bug 634374.
   * @note Valid page size values are powers of 2 between 512 and 65536.
   *       The suggested value is mozIStorageConnection::defaultPageSize.
   */
  readonly attribute long expectedDatabasePageSize;

  /**
   * Connection to the database file to be vacuumed.
   */
  readonly attribute mozIStorageConnection databaseConnection;

  /**
   * Notifies when a vacuum operation begins.  Listeners should avoid using the
   * database till onEndVacuum is received.
   *
   * @return true to proceed with the vacuum, false if the participant wants to
   *         opt-out for now, it will be retried later.  Useful when participant
   *         is running some other heavy operation that can't be interrupted.
   *
   * @note When a vacuum operation starts or ends it will also dispatch a global
   *       "heavy-io-task" notification through the observer service with the
   *       data argument being either "vacuum-begin" or "vacuum-end".
   */
  boolean onBeginVacuum();

  /**
   * Notifies when a vacuum operation ends.
   *
   * @param aSucceeded
   *        reports if the vacuum succeeded or failed.
   */
  void onEndVacuum(in boolean aSucceeded);
};