Implemented by
[scriptable, uuid(66f6b992-e2d3-43da-ba2a-d966e34a7654)]
interface nsIFaviconService : nsISupports
Attributes
The default favicon URI
readonly attribute
nsIURI
defaultFavicon
Methods
Adds a given favicon's URI to the failed favicon cache. The lifespan of the favicon cache is up to the caching system. This cache will also be written to if you use setAndLoadFaviconForPage and it encounters an error. @see isFailedFavicon
void
addFailedFavicon(in nsIURI aFaviconURI)
Expire all known favicons from the database.
@note This is an async method.
On successful completion a "places-favicons-expired" notification is
dispatched through observer's service.
void
expireAllFavicons()
Retrieves the given favicon data. Throws if we don't have data.
If there is no data but we have an entry for this favicon, aDataLen will
be 0 and aData will be NULL.
@param aFaviconURI
URI of the favicon whose data is being read
@param aData
Output parameter where the binary favicon data will be placed.
This will be null if we have this URI but have no data associated
with it.
@param aDataLen
Output parameter where the size of the binary data will be placed.
@param aMimeType
Output parameter where the MIME type will be placed.
@throws NS_ERROR_NOT_AVAILABLE
Thrown when we have never heard of this favicon URI.
void
getFaviconData(in nsIURI aFaviconURI, out AUTF8String aMimeType, out unsigned long aDataLen, [array, size_is(aDataLen), retval] out octet aData)
Retrieves the given favicon data as a data URL. Throws if we don't
have data.
If there is no data but we have an entry for this favicon, the return
value will be NULL.
@see getFaviconData
@param aFaviconURI
URI of the favicon whose data is being read
@returns A data URL containing the data of the favicon. This will be
null if we have this URL but have no data associated with it.
@throws NS_ERROR_NOT_AVAILABLE
Thrown when we have never heard of this favicon URL.
AString
getFaviconDataAsDataURL(in nsIURI aFaviconURI)
Retrieves the URI of the favicon for the given page.
@param aPageURI
URI of the page whose favicon is desired
@returns The URI of the favicon associated with that page. Returning a
URI here does NOT mean that we have data for this favicon, only
that we know what the favicon should be.
@throws NS_ERROR_NOT_AVAILABLE
When the page is not found or it has no favicon.
nsIURI
getFaviconForPage(in nsIURI aPageURI)
For a given page, this will give you a URI that, when displayed in chrome,
will result in the given page's favicon. Unlike the other get functions,
we needn't have heard of the page or its favicon: the default one will
be returned in this case.
@see getFaviconLinkForIcon
This function only adds the extra level of indirection, looking up
the favicon based on the page URI and using the default if not found.
@param aPageURI
URI of the page whose favicon is desired
@returns A URI that will give you the icon image. This is NOT the URI of
the icon as set on the page, but a URI that will give you the
data out of the favicon service. For a normal page with a
favicon we've stored, this will be an annotation URI which will
then cause the corresponding favicon data to be loaded from this
service. For pages where we don't have a favicon, this will be a
chrome URI of the default icon for a web page.
nsIURI
getFaviconImageForPage(in nsIURI aPageURI)
For a given icon URI, this will return a URI that will result in the image.
In most cases, this is an annotation URI. For chrome, this will do nothing
and return the input URI.
@param aFaviconURI
The URI of an icon in the favicon service.
@returns A URI that will load the desired icon. This is NOT the URI of the
icon as set on the page, but a URI that will give you the data
out of the favicon service. For a normal page with a favicon
we've stored, this will be an annotation URI which will then
cause the corresponding favicon data to be loaded from this
service. For pages where we don't have a favicon, this will be a
chrome URI of the default icon for a web page. For chrome, the
output will be the same as the input.
No validity checking is done. If you pass an icon URI that we've
never seen, you'll get back a URI that references an invalid
icon. The moz-anno protocol handler's special case for "favicon"
annotations will detect most invalid icons and it will resolve to
the default icon, although without caching. For invalid chrome
URIs, you'll get a broken image.
nsIURI
getFaviconLinkForIcon(in nsIURI aFaviconURI)
Checks to see if this favicon is in the failed favicon cache. Returns true if the favicon is in the failed cache, meaning you probably shouldn't try to load it. A false return value means that it's worth trying to load it. This allows you to avoid trying to load "foo.com/favicon.ico" for every page on a site that doesn't have a favicon.
boolean
isFailedFavicon(in nsIURI aFaviconURI)
Removes the given favicon from the failed favicon cache. If the icon is not in the cache, this function will silently succeed.
void
removeFailedFavicon(in nsIURI aFaviconURI)
Same as SetFaviconUrlForPage except that this also attempts to set the
data by loading the favicon URI. An async request will be created for
this URI and if the data is available, it will asynchronously get
saved in the database without any further work from the caller.
If the icon data already exists, we won't normally try to re-load the
icon from the net (or more likely the cache). If the icon is in the
failed favicon cache we won't do anything. Use forceReload to force
a reload of the data. This will remove the favicon from the failed
cache. If it then fails again, it will be re-added to the failed cache.
SetFaviconUrlForPage and SetFaviconData will take any URI you provide
and save it. This function is intended for automatic usage, and will
only save favicons for "good" URIs, as defined by what gets added to
history. For "bad" URIs, this function will succeed and do nothing.
This function will also ignore the error page favicon URI
(chrome://global/skin/icons/warning-16.png). Icons that fail to load
will automatically be added to the failed favicon cache.
This function will not save favicons for non-bookmarked URIs when
history is disabled (expiration time is 0 days). The rest of the functions
here will always store favicons even when history is disabled.
@param aPageURI
URI of the page whose favicon is being set.
@param aFaviconURI
URI of the favicon to associate with the page.
@param aForceReload
Unset is normal behavior, we will only try to reload the favicon
if we don't have it or if it has expired from the cache. If set,
it will always try to reload the favicon.
void
setAndLoadFaviconForPage(in nsIURI aPageURI, in nsIURI aFaviconURI, in boolean aForceReload)
Stores the data of a given favicon. You must specify the MIME type
unless you're clearing the data.
You can set the data even if you haven't called SetFaviconUrlForPage
yet. It will be stored but will not be associated with any page.
However, any favicons not associated with a visited web page, bookmark,
or "place:" URI will be expired when history cleanup is done. This might
be done at any time on a timer, so you should not let the message loop
run between calls or your icon may get deleted.
It is best to set the favicon data, and then associate it with a page.
This will make the notifications more efficient since the icon will
already have data when the set favicon observer messages goes out.
The expiration time is stored. This will be used if you call
SetAndLoadFaviconForPage to see whether the data needs reloading.
Do not use this function for chrome: icon URIs. You should reference the
chrome image yourself. The GetFaviconLinkForIcon/Page will ignore any
associated data if the favicon URI is "chrome:" and just return the same
chrome URI.
This function does NOT send out notifications that the data has changed.
Potentially, many pages could be referencing the favicon and they could
be visible in a history view or toolbar. But sending out those
notifications is very intensive. Those pages will keep the old icon
until they have been refreshed by other means.
This function tries to optimize the favicon size, if it is bigger
than defined limit we will try to convert it to a 16x16 png image. If the
conversion fails and favicon is bigger than our max accepted favicon size
we will fail and the favicon won't be saved.
@param aFaviconURI
URI of the favicon whose data is being set.
@param aData
Binary contents of the favicon to save
@param aDataLength
Length of binary data
@param aMimeType
MIME type of the data to store. This is important so that we know
what to report when the favicon is used.
@param aExpiration
Time in microseconds since the epoch when this favicon expires.
Until this time, we won't try to load it again.
@throws NS_ERROR_FAILURE
Thrown if the favicon is overbloated and won't be saved to the db.
void
setFaviconData(in nsIURI aFaviconURI, [const, array, size_is(aDataLen)] in octet aData, in unsigned long aDataLen, in AUTF8String aMimeType, in PRTime aExpiration)
Stores the data of a given favicon. The data is provided by a string
containing a data URL.
This function tries to optimize the favicon size, if it is bigger
than defined limit we will try to convert it to a 16x16 png image. If the
conversion fails and favicon is bigger than our max accepted favicon size
we will fail and the favicon won't be saved.
@see setFaviconData
@param aFaviconURI
URI of the favicon whose data is being set.
@param aDataURL
string containing a data URL that represents the contents of
the favicon to save
@param aExpiration
Time in microseconds since the epoch when this favicon expires.
Until this time, we won't try to load it again.
@throws NS_ERROR_FAILURE
Thrown if the favicon is overbloated and won't be saved to the db.
void
setFaviconDataFromDataURL(in nsIURI aFaviconURI, in AString aDataURL, in PRTime aExpiration)
Declares that a given page uses a favicon with the given URI.
You needn't have specified any data at this point. An entry linking the
favicon with the page will be create with no data. You can populate it
later with SetFaviconData. However, any favicons not associated with a
visited web page, a bookmark, or a "place:" URI will be expired when
history cleanup is done * (typically at app shutdown, but also possibly
if the user clears their * cache or history).
This will send out history notifications if the new favicon has any data.
This means that you should try to set data first if you have it, otherwise
the page might not get a notification sent for it since data setting does
not send notifications.
@param aPageURI
URI of the page whose favicon is being set.
@param aFaviconURI
URI of the favicon to associate with the page.
void
setFaviconUrlForPage(in nsIURI aPageURI, in nsIURI aFaviconURI)
Compare to: