Implemented by
[scriptable, uuid(ba249b58-346f-42a9-a393-203ae34ec6c4)]
interface nsIAnnotationService : nsISupports
Constants
Valid values for aExpiration, which sets the expiration policy for your annotation. The times for the days, weeks and months policies are measured since the last visit date of the page in question. These will not expire so long as the user keeps visiting the page from time to time.
const
unsigned short
EXPIRE_SESSION = 0
const
unsigned short
EXPIRE_WEEKS = 2
const
unsigned short
EXPIRE_MONTHS = 3
const
unsigned short
EXPIRE_NEVER = 4
const
unsigned short
EXPIRE_WITH_HISTORY = 5
const
unsigned short
EXPIRE_DAYS = 6
const
unsigned short
TYPE_INT32 = 1
const
unsigned short
TYPE_DOUBLE = 2
const
unsigned short
TYPE_STRING = 3
const
unsigned short
TYPE_BINARY = 4
const
unsigned short
TYPE_INT64 = 5
Methods
Adds an annotation observer. The annotation service will keep an owning reference to the observer object.
void
addObserver(in nsIAnnotationObserver aObserver)
void
copyItemAnnotations(in long long aSourceItemId, in long long aDestItemId, in boolean aOverwriteDest)
Copies all annotations from the source to the destination URI/item. If the destination already has an annotation with the same name as one on the source, it will be overwritten if aOverwriteDest is set. Otherwise, the destination URIs will be preferred. All the source annotations will stay as-is. If you don't want them any more, use removePageAnnotations on that URI.
void
copyPageAnnotations(in nsIURI aSourceURI, in nsIURI aDestURI, in boolean aOverwriteDest)
Returns a URI that can be used to access the given binary annotation. This function does NOT check that the annotation exists. Also, note that you can only load URIs for annotations that have have a valid MIME type set by setAnnotationBinary. No non-URI valid chars in name, especially colon, which will mess up parsing.
nsIURI
getAnnotationURI(in nsIURI aURI, in AUTF8String aName)
nsIVariant
getItemAnnotation(in long long aItemId, in AUTF8String aName)
void
getItemAnnotationBinary(in long long aItemId, in AUTF8String aName, [array, size_is(aDataLen)] out octet aData, out unsigned long aDataLen, out AUTF8String aMimeType)
[noscript]
double
getItemAnnotationDouble(in long long aItemId, in AUTF8String aName)
void
getItemAnnotationInfo(in long long aItemId, in AUTF8String aName, out long aFlags, out unsigned short aExpiration, out AUTF8String aMimeType, out unsigned short aType)
[noscript]
long
getItemAnnotationInt32(in long long aItemId, in AUTF8String aName)
[noscript]
long long
getItemAnnotationInt64(in long long aItemId, in AUTF8String aName)
void
getItemAnnotationNames(in long long aItemId, out unsigned long count, [array, size_is(count), retval] out nsIVariant result)
[noscript]
AString
getItemAnnotationString(in long long aItemId, in AUTF8String aName)
PRUint16
getItemAnnotationType(in long long aItemId, in AUTF8String aName)
void
getItemsWithAnnotation(in AUTF8String name, out unsigned long resultCount, [array, size_is(resultCount), retval] out long long results)
Retrieves the value of a given annotation. Throws an error if the annotation does not exist. Throws for binary annotations, for which getPageAnnotationBinary/getItemAnnotationBinary should be used. C++ consumers may use the type-specific methods. The type-specific methods throw if the given annotation is set in a different type.
nsIVariant
getPageAnnotation(in nsIURI aURI, in AUTF8String aName)
@see getPageAnnotation. This also returns the MIME type.
void
getPageAnnotationBinary(in nsIURI aURI, in AUTF8String aName, [array, size_is(aDataLen)] out octet aData, out unsigned long aDataLen, out AUTF8String aMimeType)
@see getPageAnnotation
[noscript]
double
getPageAnnotationDouble(in nsIURI aURI, in AUTF8String aName)
Retrieves info about an existing annotation. aMimeType will be empty
if the value was not binary data.
aType will be one of TYPE_* constansts above
example JS:
var flags = {}, exp = {}, mimeType = {};
annotator.getAnnotationInfo(myURI, "foo", flags, exp, mimeType);
// now you can use 'exp.value' and 'flags.value'
void
getPageAnnotationInfo(in nsIURI aURI, in AUTF8String aName, out PRInt32 aFlags, out unsigned short aExpiration, out AUTF8String aMimeType, out unsigned short aType)
@see getPageAnnotation
[noscript]
long
getPageAnnotationInt32(in nsIURI aURI, in AUTF8String aName)
@see getPageAnnotation
[noscript]
long long
getPageAnnotationInt64(in nsIURI aURI, in AUTF8String aName)
Get the names of all annotations for this URI.
example JS:
var annotations = annotator.getPageAnnotations(myURI, {});
void
getPageAnnotationNames(in nsIURI aURI, out unsigned long count, [array, size_is(count), retval] out nsIVariant result)
@see getPageAnnotation
[noscript]
AString
getPageAnnotationString(in nsIURI aURI, in AUTF8String aName)
Retrieves the type of an existing annotation
Use getAnnotationInfo if you need this along with the mime-type etc.
@param aURI
the uri on which the annotation is set
@param aName
the annotation name
@return one of the TYPE_* constants above
@throws if the annotation is not set
PRUint16
getPageAnnotationType(in nsIURI aURI, in AUTF8String aName)
Returns a list of all URIs having a given annotation.
void
getPagesWithAnnotation(in AUTF8String name, out unsigned long resultCount, [array, size_is(resultCount), retval] out nsIURI results)
boolean
itemHasAnnotation(in long long aItemId, in AUTF8String aName)
Test for annotation existance.
boolean
pageHasAnnotation(in nsIURI aURI, in AUTF8String aName)
void
removeItemAnnotation(in long long aItemId, in AUTF8String aName)
void
removeItemAnnotations(in long long aItemId)
Removes an annotaton observer previously registered by addObserver.
void
removeObserver(in nsIAnnotationObserver aObserver)
Removes a specific annotation. Succeeds even if the annotation is not found.
void
removePageAnnotation(in nsIURI aURI, in AUTF8String aName)
Removes all annotations for the given page/item. We may want some other similar functions to get annotations with given flags (once we have flags defined).
void
removePageAnnotations(in nsIURI aURI)
void
setItemAnnotation(in long long aItemId, in AUTF8String aName, in nsIVariant aValue, in long aFlags, in unsigned short aExpiration)
void
setItemAnnotationBinary(in long long aItemId, in AUTF8String aName, [const, array, size_is(aDataLen)] in octet aData, in unsigned long aDataLen, in AUTF8String aMimeType, in long aFlags, in unsigned short aExpiration)
[noscript]
void
setItemAnnotationDouble(in long long aItemId, in AUTF8String aName, in double aValue, in long aFlags, in unsigned short aExpiration)
[noscript]
void
setItemAnnotationInt32(in long long aItemId, in AUTF8String aName, in long aValue, in long aFlags, in unsigned short aExpiration)
[noscript]
void
setItemAnnotationInt64(in long long aItemId, in AUTF8String aName, in long long aValue, in long aFlags, in unsigned short aExpiration)
[noscript]
void
setItemAnnotationString(in long long aItemId, in AUTF8String aName, in AString aValue, in long aFlags, in unsigned short aExpiration)
Sets an annotation, overwriting any previous annotation with the same URL/name. IT IS YOUR JOB TO NAMESPACE YOUR ANNOTATION NAMES. Use the form "namespace/value", so your name would be like "bills_extension/page_state" or "history/thumbnail". Do not use characters that are not valid in URLs such as spaces, ":", commas, or most other symbols. You should stick to ASCII letters and numbers plus "_", "-", and "/". aExpiration is one of EXPIRE_* above. aFlags should be 0 for now, some flags will be defined in the future. NOTE: ALL ANNOTATIONS WILL GET DELETED WHEN THE PAGE IS REMOVED FROM HISTORY, UNLESS YOU USE THE EXPIRE_NEVER FLAG. This means that if you create an annotation on a random unvisited URI, it will get deleted when the browser shuts down. Otherwise, things can exist in history as annotations but the user has no way of knowing it, potentially violating their privacy expectations about actions such as "Clear history." If there is an important annotation that the user wants to keep, you should make sure that you use EXPIRE_NEVER. This will ensure the item is never completely deleted from the Places database. The annotation "favicon" is special. Favicons are stored in the favicon service, but are special cased in the protocol handler so they look like annotations. Do not set favicons using this service, it will not work. Binary annotations should be set using setItemAnnotationBinary/setPageAnnotationBinary. For other types, only C++ consumers may use the type-specific methods.
void
setPageAnnotation(in nsIURI aURI, in AUTF8String aName, in nsIVariant aValue, in long aFlags, in unsigned short aExpiration)
void
setPageAnnotationBinary(in nsIURI aURI, in AUTF8String aName, [const, array, size_is(aDataLen)] in octet aData, in unsigned long aDataLen, in AUTF8String aMimeType, in long aFlags, in unsigned short aExpiration)
Sets an annotation just like setAnnotationString, but takes a double as input.
[noscript]
void
setPageAnnotationDouble(in nsIURI aURI, in AUTF8String aName, in double aValue, in long aFlags, in unsigned short aExpiration)
Sets an annotation just like setAnnotationString, but takes an Int32 as input.
[noscript]
void
setPageAnnotationInt32(in nsIURI aURI, in AUTF8String aName, in long aValue, in long aFlags, in unsigned short aExpiration)
Sets an annotation just like setAnnotationString, but takes an Int64 as input.
[noscript]
void
setPageAnnotationInt64(in nsIURI aURI, in AUTF8String aName, in long long aValue, in long aFlags, in unsigned short aExpiration)
[noscript]
void
setPageAnnotationString(in nsIURI aURI, in AUTF8String aName, in AString aValue, in long aFlags, in unsigned short aExpiration)
Compare to: