1/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7#include "nsISupports.idl"
8
9interface mozIStorageConnection;
10
11/**
12 * This interface contains the information that the Storage service needs to
13 * vacuum a database.  This interface is created as a service through the
14 * category manager with the category "vacuum-participant".
15 * Please see https://developer.mozilla.org/en/mozIStorageVacuumParticipant for
16 * more information.
17 */
18[scriptable, uuid(8f367508-1d9a-4d3f-be0c-ac11b6dd7dbf)]
19interface mozIStorageVacuumParticipant : nsISupports {
20  /**
21   * The expected page size in bytes for the database.  The vacuum manager will
22   * try to correct the page size during idle based on this value.
23   *
24   * @note If the database is using the WAL journal mode, the page size won't
25  *        be changed to the requested value.  See bug 634374.
26   * @note Valid page size values are powers of 2 between 512 and 65536.
27   *       The suggested value is mozIStorageConnection::defaultPageSize.
28   */
29  readonly attribute long expectedDatabasePageSize;
30
31  /**
32   * Connection to the database file to be vacuumed.
33   */
34  readonly attribute mozIStorageConnection databaseConnection;
35
36  /**
37   * Notifies when a vacuum operation begins.  Listeners should avoid using the
38   * database till onEndVacuum is received.
39   *
40   * @return true to proceed with the vacuum, false if the participant wants to
41   *         opt-out for now, it will be retried later.  Useful when participant
42   *         is running some other heavy operation that can't be interrupted.
43   *
44   * @note When a vacuum operation starts or ends it will also dispatch a global
45   *       "heavy-io-task" notification through the observer service with the
46   *       data argument being either "vacuum-begin" or "vacuum-end".
47   */
48  boolean onBeginVacuum();
49
50  /**
51   * Notifies when a vacuum operation ends.
52   *
53   * @param aSucceeded
54   *        reports if the vacuum succeeded or failed.
55   */
56  void onEndVacuum(in boolean aSucceeded);
57};
58