/* -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Mozilla Corporation * Portions created by the Initial Developer are Copyright (C) 2007 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Dave Camp * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsISupports.idl" interface nsIURI; interface nsIDOMNode; interface nsIDOMDocument; interface nsIDOMLoadStatus; interface nsIOfflineCacheUpdate; interface nsIPrincipal; interface nsIPrefBranch; [scriptable, uuid(a28abeaf-a0b4-4440-b2fe-bc78249710ea)] interface nsIOfflineCacheUpdateObserver : nsISupports { /** * There was an error updating the cache. * * @param aUpdate * The nsIOfflineCacheUpdate being processed. */ void error(in nsIOfflineCacheUpdate aUpdate); /** * The manifest is being checked for updates * * @param aUpdate * The nsIOfflineCacheUpdate being processed. */ void checking(in nsIOfflineCacheUpdate aUpdate); /** * No update was necessary. * * @param aUpdate * The nsIOfflineCacheUpdate being processed. */ void noUpdate(in nsIOfflineCacheUpdate aUpdate); /** * The cache group is now obsolete. * * @param aUpdate * The nsIOfflineCacheUpdate being processed. */ void obsolete(in nsIOfflineCacheUpdate aUpdate); /** * Starting to download resources * * @param aUpdate * The nsIOfflineCacheUpdate being processed. */ void downloading(in nsIOfflineCacheUpdate aUpdate); /** * An item has started downloading. * * @param aUpdate * The nsIOfflineCacheUpdate being processed. * @param aItem * load status for the item that is being downloaded. */ void itemStarted(in nsIOfflineCacheUpdate aUpdate, in nsIDOMLoadStatus aItem); /** * An item has finished loading. * * @param aUpdate * The nsIOfflineCacheUpdate being processed. * @param aItem * load status for the item that completed. */ void itemCompleted(in nsIOfflineCacheUpdate aUpdate, in nsIDOMLoadStatus aItem); }; /** * An nsIOfflineCacheUpdate is used to update an application's offline * resources. * * It can be used to perform partial or complete updates. * * Each update object maintains a list of nsIDOMLoadStatus items for the * resources it is updating. The list of these items will be available * after the object is scheduled. * * One update object will be updating at a time. The active object will * load its items one by one, sending itemCompleted() to any registered * observers. */ [scriptable, uuid(877261bb-b952-4d27-847e-859bdd47c0ec)] interface nsIOfflineCacheUpdate : nsISupports { /** * Fetch the status of the running update. This will return a value * defined in nsIDOMOfflineResourceList. */ readonly attribute unsigned short status; /** * TRUE if the update is being used to add specific resources. * FALSE if the complete cache update process is happening. */ readonly attribute boolean partial; /** * TRUE if this is an upgrade attempt, FALSE if it is a new cache * attempt. */ readonly attribute boolean isUpgrade; /** * The domain being updated, and the domain that will own any URIs added * with this update. */ readonly attribute ACString updateDomain; /** * The manifest for the offline application being updated. */ readonly attribute nsIURI manifestURI; /** * TRUE if the cache update completed successfully. */ readonly attribute boolean succeeded; /** * Initialize the update. * * @param aManifestURI * The manifest URI to be checked. * @param aDocumentURI * The page that is requesting the update. */ void init(in nsIURI aManifestURI, in nsIURI aDocumentURI); /** * Initialize the update for partial processing. * * @param aManifestURI * The manifest URI of the related cache. * @param aClientID * Client ID of the cache to store resource to. This ClientID * must be ID of cache in the cache group identified by * the manifest URI passed in the first parameter. * @param aDocumentURI * The page that is requesting the update. May be null * when this information is unknown. */ void initPartial(in nsIURI aManifestURI, in ACString aClientID, in nsIURI aDocumentURI); /** * Add a dynamic URI to the offline cache as part of the update. * * @param aURI * The URI to add. */ void addDynamicURI(in nsIURI aURI); /** * Add the update to the offline update queue. An offline-cache-update-added * event will be sent to the observer service. */ void schedule(); /** * Access to the list of items in the update. */ readonly attribute unsigned long count; nsIDOMLoadStatus item(in unsigned long index); /** * Observe loads that are added to the update. * * @param aObserver * object that notifications will be sent to. * @param aHoldWeak * TRUE if you want the update to hold a weak reference to the * observer, FALSE for a strong reference. */ void addObserver(in nsIOfflineCacheUpdateObserver aObserver, in boolean aHoldWeak); /** * Remove an observer from the update. * * @param aObserver * the observer to remove. */ void removeObserver(in nsIOfflineCacheUpdateObserver aObserver); }; [scriptable, uuid(6fd2030f-7b00-4102-a0e3-d73078821eb1)] interface nsIOfflineCacheUpdateService : nsISupports { /** * Constants for the offline-app permission. * * XXX: This isn't a great place for this, but it's really the only * private offline-app-related interface */ /** * Allow the domain to use offline APIs, and don't warn about excessive * usage. */ const unsigned long ALLOW_NO_WARN = 3; /** * Access to the list of cache updates that have been scheduled. */ readonly attribute unsigned long numUpdates; nsIOfflineCacheUpdate getUpdate(in unsigned long index); /** * Schedule a cache update for a given offline manifest. If an * existing update is scheduled or running, that update will be returned. * Otherwise a new update will be scheduled. */ nsIOfflineCacheUpdate scheduleUpdate(in nsIURI aManifestURI, in nsIURI aDocumentURI); /** * Schedule a cache update for a manifest when the document finishes * loading. */ void scheduleOnDocumentStop(in nsIURI aManifestURI, in nsIURI aDocumentURI, in nsIDOMDocument aDocument); /** * Checks whether a principal should have access to the offline * cache. * @param aPrincipal * The principal to check. * @param aPrefBranch * The pref branch to use to check the * offline-apps.allow_by_default pref. If not specified, * the pref service will be used. */ boolean offlineAppAllowed(in nsIPrincipal aPrincipal, in nsIPrefBranch aPrefBranch); /** * Checks whether a document at the given URI should have access * to the offline cache. * @param aURI * The URI to check * @param aPrefBranch * The pref branch to use to check the * offline-apps.allow_by_default pref. If not specified, * the pref service will be used. */ boolean offlineAppAllowedForURI(in nsIURI aURI, in nsIPrefBranch aPrefBranch); };