/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* 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 nsIPrincipal; interface nsIQuotaRequest; interface nsIQuotaCallback; interface nsIQuotaUsageCallback; interface nsIQuotaUsageRequest; [scriptable, builtinclass, uuid(1b3d0a38-8151-4cf9-89fa-4f92c2ef0e7e)] interface nsIQuotaManagerService : nsISupports { /** * Asynchronously retrieves storage name and returns it as a plain string. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest storageName(); /** * Check if storage is initialized. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest storageInitialized(); /** * Check if persistent storage is initialized. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest persistentStorageInitialized(); /** * Check if temporary storage is initialized. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest temporaryStorageInitialized(); /** * Check if temporary group is initialized. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest temporaryGroupInitialized(in nsIPrincipal aPrincipal); /** * Check if persistent origin is initialized. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPrincipal * A principal for the persistent origin whose state is to be checked. */ [must_use] nsIQuotaRequest persistentOriginInitialized(in nsIPrincipal aPrincipal); /** * Check if temporary origin is initialized. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPersistenceType * A string that tells what persistence type will be checked (either * "temporary" or "default"). * @param aPrincipal * A principal for the temporary origin whose state is to be checked. */ [must_use] nsIQuotaRequest temporaryOriginInitialized(in ACString aPersistenceType, in nsIPrincipal aPrincipal); /** * Initializes storage directory. This can be used in tests to verify * upgrade methods. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest init(); /** * Initializes persistent storage. This can be used in tests to verify * persistent storage initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest initializePersistentStorage(); /** * Initializes temporary storage. This can be used in tests to verify * temporary storage initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest initTemporaryStorage(); /** * Initializes all temporary origins. Only used in tests to verify the * initialization of all temporary origins. * * Calling this method only makes sense when lazy origin initialization is * enabled, as initTemporaryStorage does not initialize origins in that case. * * If the dom.quotaManager.testing preference is not set to true, this call * will be a no-op. */ [must_use] nsIQuotaRequest initializeAllTemporaryOrigins(); /** * Initializes temporary origin directories for the given group. This can be * used in tests to verify group initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPrincipal * A principal for the group whose origin directories are to be * initialized. */ [must_use] nsIQuotaRequest initializeTemporaryGroup(in nsIPrincipal aPrincipal); /** * Initializes persistent origin directory for the given origin. This can be * used in tests to verify origin initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPrincipal * A principal for the origin whose directory is to be initialized. */ [must_use] nsIQuotaRequest initializePersistentOrigin(in nsIPrincipal aPrincipal); /** * Initializes temporary origin directory for the given origin. This can be * used in tests to verify origin initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPersistenceType * A string that tells what persistence type of origin will be * initialized (temporary or default). * * @param aPrincipal * A principal for the origin whose directory is to be initialized. * * @param aCreateIfNonExistent * An optional boolean to indicate creation of origin directory if it * doesn't exist yet. */ [must_use] nsIQuotaRequest initializeTemporaryOrigin(in ACString aPersistenceType, in nsIPrincipal aPrincipal, [optional] in boolean aCreateIfNonExistent); /** * Initializes persistent client directory for the given origin and client. * This can be used in tests to verify client initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPrincipal * A principal for the origin whose client directory is to be * initialized. * @param aClientType * A string that tells what client type will be initialized. */ [must_use] nsIQuotaRequest initializePersistentClient(in nsIPrincipal aPrincipal, in AString aClientType); /** * Initializes temporary client directory for the given origin and client. * This can be used in tests to verify client initialization. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPersistenceType * A string that tells what persistence type will be initialized * (either "temporary" or "default"). * @param aPrincipal * A principal for the origin whose client directory is to be * initialized. * @param aClientType * A string that tells what client type will be initialized. * @param aCreateIfNonExistent * An optional boolean to indicate creation of client directory if it * doesn't exist yet. */ [must_use] nsIQuotaRequest initializeTemporaryClient(in ACString aPersistenceType, in nsIPrincipal aPrincipal, in AString aClientType, [optional] in boolean aCreateIfNonExistent); /** * Gets full origin metadata cached in memory for the given persistence type * and origin. * * NOTE: This operation may still be delayed by other operations on the QM * I/O thread that are peforming I/O. * * @param aPersistenceType * A string that tells what persistence type will be used for getting * the metadata (either "temporary" or "default"). * @param aPrincipal * A principal that tells which origin will be used for getting the * metadata. */ [must_use] nsIQuotaRequest getFullOriginMetadata(in ACString aPersistenceType, in nsIPrincipal aPrincipal); /** * Schedules an asynchronous callback that will inspect all origins and * return the total amount of disk space being used by storages for each * origin separately. * * @param aCallback * The callback that will be called when the usage is available. * @param aGetAll * An optional boolean to indicate inspection of all origins, * including internal ones. */ [must_use] nsIQuotaUsageRequest getUsage(in nsIQuotaUsageCallback aCallback, [optional] in boolean aGetAll); /** * Schedules an asynchronous callback that will return the total amount of * disk space being used by storages for the given origin. * * @param aPrincipal * A principal for the origin whose usage is being queried. * @param aCallback * The callback that will be called when the usage is available. * Note: Origin usage here represents total usage of an origin. */ [must_use] nsIQuotaUsageRequest getUsageForPrincipal(in nsIPrincipal aPrincipal, in nsIQuotaUsageCallback aCallback); /** * Gets usage cached in memory for the given origin. * * This mechanism uses cached quota usage and does not perform any I/O on its * own, but it may be delayed by QuotaManager operations that do need to * perform I/O on the QuotaManager I/O thread. * * @param aPrincipal * A principal for the origin whose cached usage is being queried. * Note: Origin usage here represents only non-persistent usage of an origin. */ [must_use] nsIQuotaRequest getCachedUsageForPrincipal(in nsIPrincipal aPrincipal); /** * Asynchronously lists all origins and returns them as plain strings. */ [must_use] nsIQuotaRequest listOrigins(); /** * Asynchronously lists all cached origins and returns them as plain strings. */ [must_use] nsIQuotaRequest listCachedOrigins(); /** * Removes all storages. The files may not be deleted immediately depending * on prohibitive concurrent operations. * Be careful, this removes *all* the data that has ever been stored! * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest clear(); /** * Removes all storages stored for private browsing. The files may not be * deleted immediately depending on prohibitive concurrent operations. In * terms of locks, it will get an exclusive multi directory lock for entire * private repository. */ [must_use] nsIQuotaRequest clearStoragesForPrivateBrowsing(); /** * Removes all storages stored for the given pattern. The files may not be * deleted immediately depending on prohibitive concurrent operations. In * terms of locks, it will get an exclusive multi directory lock for given * pattern. For example, given pattern {"userContextId":1007} and set of 3 * origins ["http://www.mozilla.org^userContextId=1007", * "http://www.example.org^userContextId=1007", * "http://www.example.org^userContextId=1008"], the method will only lock 2 * origins ["http://www.mozilla.org^userContextId=1007", * "http://www.example.org^userContextId=1007"]. * * @param aPattern * A pattern for the origins whose storages are to be cleared. * Currently this is expected to be a JSON representation of the * OriginAttributesPatternDictionary defined in ChromeUtils.webidl. */ [must_use] nsIQuotaRequest clearStoragesForOriginAttributesPattern(in AString aPattern); /** * Removes all storages stored for the given principal. The files may not be * deleted immediately depending on prohibitive concurrent operations. * * @param aPrincipal * A principal for the origin whose storages are to be cleared. * @param aPersistenceType * An optional string that tells what persistence type of storages * will be cleared. If omitted (or void), all persistence types will * be cleared for the principal. If a single persistence type * ("persistent", "temporary", or "default") is provided, then only * that persistence directory will be considered. Note that * "persistent" is different than being "persisted" via persist() and * is only for chrome principals. See bug 1354500 for more info. * In general, null is the right thing to pass here. */ [must_use] nsIQuotaRequest clearStoragesForPrincipal(in nsIPrincipal aPrincipal, [optional] in ACString aPersistenceType); /** * Removes all storages stored for the given client. The files may not be * deleted immediately depending on prohibitive concurrent operations. * * @param aPrincipal * A principal for the origin whose storages are to be cleared. * @param aClientType * A string that tells what client type of storages will be cleared. * @param aPersistenceType * An optional string that tells what persistence type of storages * will be cleared. If omitted (or void), all persistence types will * be cleared for the principal and client type. If a single * persistence type ("persistent", "temporary", or "default") is * provided, then only that persistence directory will be considered. * Note that "persistent" is different than being "persisted" via * persist() and is only for chrome principals. See bug 1354500 for * more info. In general, null is the right thing to pass here. */ [must_use] nsIQuotaRequest clearStoragesForClient(in nsIPrincipal aPrincipal, in AString aClientType, [optional] in ACString aPersistenceType); /** * Removes all storages stored for the given prefix. The files may not be * deleted immediately depending on prohibitive concurrent operations. * * Effectively, this clears all possible OriginAttribute suffixes that * could exist. So this clears the given origin across all userContextIds, * in private browsing, all third-party partitioned uses of the origin (by * way of partitionKey), etc. * * @param aPrincipal * A prefix for the origins whose storages are to be cleared. * @param aPersistenceType * An optional string that tells what persistence type of storages * will be cleared. If omitted (or void), all persistence types will * be cleared for the prefix. If a single persistence type * ("persistent", "temporary", or "default") is provided, then only * that persistence directory will be considered. Note that * "persistent" is different than being "persisted" via persist() and * is only for chrome principals. See bug 1354500 for more info. * In general, null is the right thing to pass here. */ [must_use] nsIQuotaRequest clearStoragesForOriginPrefix(in nsIPrincipal aPrincipal, [optional] in ACString aPersistenceType); /** * Resets quota and storage management. This can be used to force * reinitialization of the temp storage, for example when the pref for * overriding the temp storage limit has changed. * Be carefull, this invalidates all live storages! * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. */ [must_use] nsIQuotaRequest reset(); /** * Resets all storages stored for the given principal. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPrincipal * A principal for the origin whose storages are to be reset. * @param aPersistenceType * An optional string that tells what persistence type of storages * will be reset. If omitted (or void), all persistence types will * be cleared for the principal. If a single persistence type * ("persistent", "temporary", or "default") is provided, then only * that persistence directory will be considered. Note that * "persistent" is different than being "persisted" via persist() and * is only for chrome principals. See bug 1354500 for more info. * In general, null is the right thing to pass here. */ [must_use] nsIQuotaRequest resetStoragesForPrincipal(in nsIPrincipal aPrincipal, [optional] in ACString aPersistenceType); /** * Resets all storages stored for the given client. * * If the dom.quotaManager.testing preference is not true the call will be * a no-op. * * @param aPrincipal * A principal for the origin whose storages are to be reset. * @param aClientType * A string that tells what client type of storages will be reset. * @param aPersistenceType * An optional string that tells what persistence type of storages * will be reset. If omitted (or void), all persistence types will * be cleared for the principal and client type. If a single * persistence type ("persistent", "temporary", or "default") is * provided, then only that persistence directory will be considered. * Note that "persistent" is different than being "persisted" via * persist() and is only for chrome principals. See bug 1354500 for * more info. In general, null is the right thing to pass here. */ [must_use] nsIQuotaRequest resetStoragesForClient(in nsIPrincipal aPrincipal, in AString aClientType, [optional] in ACString aPersistenceType); /** * Check if given origin is persisted. * * @param aPrincipal * A principal for the origin which we want to check. */ [must_use] nsIQuotaRequest persisted(in nsIPrincipal aPrincipal); /** * Persist given origin. * * @param aPrincipal * A principal for the origin which we want to persist. */ [must_use] nsIQuotaRequest persist(in nsIPrincipal aPrincipal); /** * Given an origin, asynchronously calculate its group quota usage and quota * limit. An origin's group is the set of all origins that share the same * eTLD+1. This method is intended to be used for our implementation of the * StorageManager.estimate() method. When we fix bug 1305665 and stop tracking * quota limits on a group basis, this method will switch to operating on * origins. Callers should strongly consider whether they want to be using * getUsageForPrincipal() instead. * * This mechanism uses cached quota values and does not perform any I/O on its * own, but it may be delayed by QuotaManager operations that do need to * perform I/O on the QuotaManager I/O thread. * * @param aPrincipal * A principal for the origin (group) which we want to estimate. */ [must_use] nsIQuotaRequest estimate(in nsIPrincipal aPrincipal); };