Source code

Revision control

Copy as Markdown

Other Tools

/* 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 nsIVariant;
interface nsIContentPrefCallback2;
interface nsILoadContext;
interface nsIContentPref;
[scriptable, uuid(43635c53-b445-4c4e-8cc5-562697299b55)]
interface nsIContentPrefObserver : nsISupports
{
/**
* Called when a content pref is set to a different value.
*
* @param aGroup the group to which the pref belongs, or null
* if it's a global pref (applies to all sites)
* @param aName the name of the pref that was set
* @param aValue the new value of the pref
* @param aIsPrivate an optional flag determining whether the
* original context is private or not
*/
void onContentPrefSet(in AString aGroup,
in AString aName,
in nsIVariant aValue,
[optional] in boolean aIsPrivate);
/**
* Called when a content pref is removed.
*
* @param aGroup the group to which the pref belongs, or null
* if it's a global pref (applies to all sites)
* @param aName the name of the pref that was removed
* @param aIsPrivate an optional flag determining whether the
* original context is private or not
*/
void onContentPrefRemoved(in AString aGroup,
in AString aName,
[optional] in boolean aIsPrivate);
};
/**
* Content Preferences
*
* Content preferences allow the application to associate arbitrary data, or
* "preferences", with specific domains, or web "content". Specifically, a
* content preference is a structure with three values: a domain with which the
* preference is associated, a name that identifies the preference within its
* domain, and a value. (See nsIContentPref below.)
*
* For example, if you want to remember the user's preference for a certain zoom
* level on www.mozilla.org pages, you might store a preference whose domain is
* "www.mozilla.org", whose name is "zoomLevel", and whose value is the numeric
* zoom level.
*
* A preference need not have a domain, and in that case the preference is
* called a "global" preference. This interface doesn't impart any special
* significance to global preferences; they're simply name-value pairs that
* aren't associated with any particular domain. As a consumer of this
* interface, you might choose to let a global preference override all non-
* global preferences of the same name, for example, for whatever definition of
* "override" is appropriate for your use case.
*
*
* Domain Parameters
*
* Many methods of this interface accept a "domain" parameter. Domains may be
* specified either exactly, like "example.com", or as full URLs, like
* "http://example.com/foo/bar". In the latter case the API extracts the full
* domain from the URL, so if you specify "http://foo.bar.example.com/baz", the
* domain is taken to be "foo.bar.example.com", not "example.com".
*
*
* Private-Browsing Context Parameters
*
* Many methods also accept a "context" parameter. This parameter relates to
* private browsing and determines the kind of storage that a method uses,
* either the usual permanent storage or temporary storage set aside for private
* browsing sessions.
*
* Pass null to unconditionally use permanent storage. Pass an nsILoadContext
* to use storage appropriate to the context's usePrivateBrowsing attribute: if
* usePrivateBrowsing is true, temporary private-browsing storage is used, and
* otherwise permanent storage is used. A context can be obtained from the
* window or channel whose content pertains to the preferences being modified or
* retrieved.
*
*
* Callbacks
*
* The methods of callback objects are always called asynchronously.
*
* Observers are called after callbacks are called, but they are called in the
* same turn of the event loop as callbacks.
*
* See nsIContentPrefCallback2 below for more information about callbacks.
*/
[scriptable, uuid(bed98666-d995-470f-bebd-62476d318576)]
interface nsIContentPrefService2 : nsISupports
{
/**
* Group (called "domain" in this interface) names longer than this will be
* truncated automatically.
*/
const unsigned short GROUP_NAME_MAX_LENGTH = 2000;
/**
* Gets all the preferences with the given name.
*
* @param name The preferences' name.
* @param context The private-browsing context, if any.
* @param callback handleResult is called once for each preference unless
* no such preferences exist, in which case handleResult
* is not called at all.
*/
void getByName(in AString name,
in nsILoadContext context,
in nsIContentPrefCallback2 callback);
/**
* Gets the preference with the given domain and name.
*
* @param domain The preference's domain.
* @param name The preference's name.
* @param context The private-browsing context, if any.
* @param callback handleResult is called once unless no such preference
* exists, in which case handleResult is not called at all.
*/
void getByDomainAndName(in AString domain,
in AString name,
in nsILoadContext context,
in nsIContentPrefCallback2 callback);
/**
* Gets all preferences with the given name whose domains are either the same
* as or subdomains of the given domain.
*
* @param domain The preferences' domain.
* @param name The preferences' name.
* @param context The private-browsing context, if any.
* @param callback handleResult is called once for each preference. If no
* such preferences exist, handleResult is not called at all.
*/
void getBySubdomainAndName(in AString domain,
in AString name,
in nsILoadContext context,
in nsIContentPrefCallback2 callback);
/**
* Gets the preference with no domain and the given name.
*
* @param name The preference's name.
* @param context The private-browsing context, if any.
* @param callback handleResult is called once unless no such preference
* exists, in which case handleResult is not called at all.
*/
void getGlobal(in AString name,
in nsILoadContext context,
in nsIContentPrefCallback2 callback);
/**
* Synchronously retrieves from the in-memory cache the preference with the
* given domain and name.
*
* In addition to caching preference values, the cache also keeps track of
* preferences that are known not to exist. If the preference is known not to
* exist, the value attribute of the returned object will be undefined
* (nsIDataType::VTYPE_VOID).
*
* If the preference is neither cached nor known not to exist, then null is
* returned, and get() must be called to determine whether the preference
* exists.
*
* @param domain The preference's domain.
* @param name The preference's name.
* @param context The private-browsing context, if any.
* @return The preference, or null if no such preference is known to
* exist.
*/
nsIContentPref getCachedByDomainAndName(in AString domain,
in AString name,
in nsILoadContext context);
/**
* Synchronously retrieves from the in-memory cache all preferences with the
* given name whose domains are either the same as or subdomains of the given
* domain.
*
* The preferences are returned in an array through the out-parameter. If a
* preference for a particular subdomain is known not to exist, then an object
* corresponding to that preference will be present in the array, and, as with
* getCachedByDomainAndName, its value attribute will be undefined.
*
* @param domain The preferences' domain.
* @param name The preferences' name.
* @param context The private-browsing context, if any.
* @return The array of preferences.
*/
Array<nsIContentPref> getCachedBySubdomainAndName(in AString domain,
in AString name,
in nsILoadContext context);
/**
* Synchronously retrieves from the in-memory cache the preference with no
* domain and the given name.
*
* As with getCachedByDomainAndName, if the preference is cached then it is
* returned; if the preference is known not to exist, then the value attribute
* of the returned object will be undefined; if the preference is neither
* cached nor known not to exist, then null is returned.
*
* @param name The preference's name.
* @param context The private-browsing context, if any.
* @return The preference, or null if no such preference is known to
* exist.
*/
nsIContentPref getCachedGlobal(in AString name,
in nsILoadContext context);
/**
* Sets a preference.
*
* @param domain The preference's domain.
* @param name The preference's name.
* @param value The preference's value.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the preference has been
* stored.
*/
void set(in AString domain,
in AString name,
in nsIVariant value,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Sets a preference with no domain.
*
* @param name The preference's name.
* @param value The preference's value.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the preference has been
* stored.
*/
void setGlobal(in AString name,
in nsIVariant value,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes the preference with the given domain and name.
*
* @param domain The preference's domain.
* @param name The preference's name.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeByDomainAndName(in AString domain,
in AString name,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all the preferences with the given name whose domains are either
* the same as or subdomains of the given domain.
*
* @param domain The preferences' domain.
* @param name The preferences' name.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeBySubdomainAndName(in AString domain,
in AString name,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes the preference with no domain and the given name.
*
* @param name The preference's name.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeGlobal(in AString name,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all preferences with the given domain.
*
* @param domain The preferences' domain.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeByDomain(in AString domain,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all preferences whose domains are either the same as or subdomains
* of the given domain.
*
* @param domain The preferences' domain.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeBySubdomain(in AString domain,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all preferences with the given name regardless of domain, including
* global preferences with the given name.
*
* @param name The preferences' name.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeByName(in AString name,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all non-global preferences -- in other words, all preferences that
* have a domain.
*
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeAllDomains(in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all non-global preferences created after and including |since|.
*
* @param since Timestamp in milliseconds.
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeAllDomainsSince(in unsigned long long since,
in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Removes all global preferences -- in other words, all preferences that have
* no domain.
*
* @param context The private-browsing context, if any.
* @param callback handleCompletion is called when the operation completes.
*/
void removeAllGlobals(in nsILoadContext context,
[optional] in nsIContentPrefCallback2 callback);
/**
* Registers an observer that will be notified whenever a preference with the
* given name is set or removed.
*
* When a set or remove method is called, observers are called after the set
* or removal completes and after the method's callback is called, and they
* are called in the same turn of the event loop as the callback.
*
* The service holds a strong reference to the observer, so the observer must
* be removed later to avoid leaking it.
*
* @param name The name of the preferences to observe. Pass null to
* observe all preference changes regardless of name.
* @param observer The observer.
*/
void addObserverForName(in AString name,
in nsIContentPrefObserver observer);
/**
* Unregisters an observer for the given name.
*
* @param name The name for which the observer was registered. Pass null
* if the observer was added with a null name.
* @param observer The observer.
*/
void removeObserverForName(in AString name,
in nsIContentPrefObserver observer);
/**
* Extracts and returns the domain from the given string representation of a
* URI. This is how the API extracts domains from URIs passed to it.
*
* @param str The string representation of a URI, like
* @return If the given string is a valid URI, the domain of that URI is
* returned. Otherwise, the string itself is returned.
*/
AString extractDomain(in AString str);
};
/**
* The callback used by the above methods.
*/
[scriptable, uuid(1a12cf41-79e8-4d0f-9899-2f7b27c5d9a1)]
interface nsIContentPrefCallback2 : nsISupports
{
/**
* For the retrieval methods, this is called once for each retrieved
* preference. It is not called for other methods.
*
* @param pref The retrieved preference.
*/
void handleResult(in nsIContentPref pref);
/**
* Called when an error occurs. This may be called multiple times before
* handleCompletion is called.
*
* @param error A number in Components.results describing the error.
*/
void handleError(in nsresult error);
/**
* Called when the method finishes. This will be called exactly once for
* each method invocation, and afterward no other callback methods will be
* called.
*
* @param reason One of the COMPLETE_* values indicating the manner in which
* the method completed.
*/
void handleCompletion(in unsigned short reason);
const unsigned short COMPLETE_OK = 0;
const unsigned short COMPLETE_ERROR = 1;
};
[scriptable, uuid(9f24948d-24b5-4b1b-b554-7dbd58c1d792)]
interface nsIContentPref : nsISupports
{
readonly attribute AString domain;
readonly attribute AString name;
readonly attribute nsIVariant value;
};
%{C++
// The contractID for the generic implementation built in to xpcom.
#define NS_CONTENT_PREF_SERVICE_CONTRACTID "@mozilla.org/content-pref/service;1"
%}