Bug 1460570 - Merge mozIAsyncFavicons into nsIFaviconService. r=standard8 draft
authorMarco Bonardo <mbonardo@mozilla.com>
Thu, 10 May 2018 13:49:00 +0200
changeset 793545 b096792719a74fcf15909ce93f0d9341754009f6
parent 793518 27f7d939ab9acab6eb4896e8fc1348e74aee35cf
push id109430
push usermak77@bonardo.net
push dateThu, 10 May 2018 12:08:29 +0000
reviewersstandard8
bugs1460570
milestone62.0a1
Bug 1460570 - Merge mozIAsyncFavicons into nsIFaviconService. r=standard8 MozReview-Commit-ID: JAxNj9MfcUI
browser/base/content/browser.js
docshell/base/nsDocShell.cpp
toolkit/components/alerts/nsAlertsService.cpp
toolkit/components/places/PlacesUtils.jsm
toolkit/components/places/moz.build
toolkit/components/places/mozIAsyncFavicons.idl
toolkit/components/places/nsFaviconService.cpp
toolkit/components/places/nsFaviconService.h
toolkit/components/places/nsIFaviconService.idl
toolkit/components/places/tests/favicons/test_replaceFaviconData.js
toolkit/components/places/tests/favicons/test_replaceFaviconDataFromDataURL.js
widget/windows/WinUtils.cpp
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -121,17 +121,17 @@ XPCOMUtils.defineLazyScriptGetter(this, 
 if (AppConstants.NIGHTLY_BUILD) {
   XPCOMUtils.defineLazyScriptGetter(this, "gWebRender",
                                     "chrome://browser/content/browser-webrender.js");
 }
 
 // lazy service getters
 
 XPCOMUtils.defineLazyServiceGetters(this, {
-  Favicons: ["@mozilla.org/browser/favicon-service;1", "mozIAsyncFavicons"],
+  Favicons: ["@mozilla.org/browser/favicon-service;1", "nsIFaviconService"],
   gAboutNewTabService: ["@mozilla.org/browser/aboutnewtab-service;1", "nsIAboutNewTabService"],
   gDNSService: ["@mozilla.org/network/dns-service;1", "nsIDNSService"],
   gSerializationHelper: ["@mozilla.org/network/serialization-helper;1", "nsISerializationHelper"],
   Marionette: ["@mozilla.org/remote/marionette;1", "nsIMarionette"],
   SessionStartup: ["@mozilla.org/browser/sessionstartup;1", "nsISessionStartup"],
   WindowsUIUtils: ["@mozilla.org/windows-ui-utils;1", "nsIWindowsUIUtils"],
 });
 
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -209,17 +209,16 @@
 #include "prenv.h"
 #include "URIUtils.h"
 
 #include "timeline/JavascriptTimelineMarker.h"
 
 #ifdef MOZ_PLACES
 #include "nsIFaviconService.h"
 #include "mozIPlacesPendingOperation.h"
-#include "mozIAsyncFavicons.h"
 #endif
 
 #if NS_PRINT_PREVIEW
 #include "nsIDocumentViewerPrint.h"
 #include "nsIWebBrowserPrint.h"
 #endif
 
 #ifdef MOZ_TOOLKIT_SEARCH
@@ -9191,17 +9190,17 @@ nsDocShell::CopyFavicon(nsIURI* aOldURI,
       contentChild->SendCopyFavicon(oldURI, newURI,
                                     IPC::Principal(aLoadingPrincipal),
                                     aInPrivateBrowsing);
     }
     return;
   }
 
 #ifdef MOZ_PLACES
-  nsCOMPtr<mozIAsyncFavicons> favSvc =
+  nsCOMPtr<nsIFaviconService> favSvc =
     do_GetService("@mozilla.org/browser/favicon-service;1");
   if (favSvc) {
     favSvc->CopyFavicons(aOldURI, aNewURI,
       aInPrivateBrowsing ? nsIFaviconService::FAVICON_LOAD_PRIVATE
                          : nsIFaviconService::FAVICON_LOAD_NON_PRIVATE, nullptr);
   }
 #endif
 }
--- a/toolkit/components/alerts/nsAlertsService.cpp
+++ b/toolkit/components/alerts/nsAlertsService.cpp
@@ -13,17 +13,16 @@
 
 #include "nsXPCOM.h"
 #include "nsIServiceManager.h"
 #include "nsIDOMWindow.h"
 #include "nsPromiseFlatString.h"
 #include "nsToolkitCompsCID.h"
 
 #ifdef MOZ_PLACES
-#include "mozIAsyncFavicons.h"
 #include "nsIFaviconService.h"
 #endif // MOZ_PLACES
 
 #ifdef XP_WIN
 #include <shellapi.h>
 #endif
 
 using namespace mozilla;
@@ -99,17 +98,17 @@ ShowWithIconBackend(nsIAlertsService* aB
   nsCOMPtr<nsIAlertsIconURI> alertsIconURI;
   if (!alertsIconData) {
     alertsIconURI = do_QueryInterface(aBackend);
   }
   if (!alertsIconData && !alertsIconURI) {
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
-  nsCOMPtr<mozIAsyncFavicons> favicons(do_GetService(
+  nsCOMPtr<nsIFaviconService> favicons(do_GetService(
     "@mozilla.org/browser/favicon-service;1"));
   NS_ENSURE_TRUE(favicons, NS_ERROR_FAILURE);
 
   nsCOMPtr<nsIFaviconDataCallback> callback =
     new IconCallback(aBackend, aAlert, aAlertListener);
   if (alertsIconData) {
     return favicons->GetFaviconDataForPage(uri, callback, 0);
   }
--- a/toolkit/components/places/PlacesUtils.jsm
+++ b/toolkit/components/places/PlacesUtils.jsm
@@ -1868,17 +1868,17 @@ XPCOMUtils.defineLazyGetter(PlacesUtils,
       }
       return property;
     }
   }));
 });
 
 XPCOMUtils.defineLazyServiceGetter(PlacesUtils, "favicons",
                                    "@mozilla.org/browser/favicon-service;1",
-                                   "mozIAsyncFavicons");
+                                   "nsIFaviconService");
 
 XPCOMUtils.defineLazyServiceGetter(this, "bmsvc",
                                    "@mozilla.org/browser/nav-bookmarks-service;1",
                                    "nsINavBookmarksService");
 XPCOMUtils.defineLazyGetter(PlacesUtils, "bookmarks", () => {
   return Object.freeze(new Proxy(Bookmarks, {
     get: (target, name) => Bookmarks.hasOwnProperty(name) ? Bookmarks[name]
                                                           : bmsvc[name]
--- a/toolkit/components/places/moz.build
+++ b/toolkit/components/places/moz.build
@@ -10,17 +10,16 @@ if CONFIG['MOZ_PLACES']:
 XPIDL_SOURCES += [
     'nsINavHistoryService.idl',
 ]
 
 XPIDL_MODULE = 'places'
 
 if CONFIG['MOZ_PLACES']:
     XPIDL_SOURCES += [
-        'mozIAsyncFavicons.idl',
         'mozIAsyncHistory.idl',
         'mozIAsyncLivemarks.idl',
         'mozIColorAnalyzer.idl',
         'mozIPlacesAutoComplete.idl',
         'mozIPlacesPendingOperation.idl',
         'nsIAnnotationService.idl',
         'nsIFaviconService.idl',
         'nsINavBookmarksService.idl',
deleted file mode 100644
--- a/toolkit/components/places/mozIAsyncFavicons.idl
+++ /dev/null
@@ -1,211 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* 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 nsIURI;
-interface nsIFaviconDataCallback;
-interface nsIPrincipal;
-interface mozIPlacesPendingOperation;
-
-[scriptable, uuid(a9c81797-9133-4823-b55f-3646e67cfd41)]
-interface mozIAsyncFavicons : nsISupports
-{
-  /**
-   * Declares that a given page uses a favicon with the given URI and
-   * attempts to fetch and save the icon data by loading the favicon URI
-   * through an async network request.
-   *
-   * If the icon data already exists, we won't try to reload the icon unless
-   * aForceReload is true.  Similarly, if the icon is in the failed favicon
-   * cache we won't do anything unless aForceReload is true, in which case
-   * we'll try to reload the favicon.
-   *
-   * This function will only save favicons for pages that are already stored in
-   * the database, like visited pages or bookmarks.  For any other URIs, it
-   * will succeed but do nothing.  This function will also ignore the error
-   * page favicon URI (see FAVICON_ERRORPAGE_URL below).
-   *
-   * Icons that fail to load will automatically be added to the failed favicon
-   * cache, and this function will not save favicons for non-bookmarked URIs
-   * when history is disabled.
-   *
-   * @note This function is identical to
-   *       nsIFaviconService::setAndLoadFaviconForPage.
-   *
-   * @param aPageURI
-   *        URI of the page whose favicon is being set.
-   * @param aFaviconURI
-   *        URI of the favicon to associate with the page.
-   * @param aForceReload
-   *        If aForceReload is false, we try to reload the favicon only if we
-   *        don't have it or it has expired from the cache.  Setting
-   *        aForceReload to true causes us to reload the favicon even if we
-   *        have a usable copy.
-   * @param aFaviconLoadType
-   *        Set to FAVICON_LOAD_PRIVATE if the favicon is loaded from a private
-   *        browsing window.  Set to FAVICON_LOAD_NON_PRIVATE otherwise.
-   * @param [optional] aCallback
-   *        Once we're done setting and/or fetching the favicon, we invoke this
-   *        callback.
-   * @param [optional] aLoadingPrincipal
-   *        Principal of the page whose favicon is being set. If this argument
-   *        is omitted, the loadingPrincipal defaults to the nullPrincipal.
-   * @param [optional] aRequestContextID
-   *        used to inform Necko of how to link the
-   *        favicon request with other requests in the same tab.
-   *
-   * @see nsIFaviconDataCallback in nsIFaviconService.idl.
-   */
-  mozIPlacesPendingOperation setAndFetchFaviconForPage(
-    in nsIURI aPageURI,
-    in nsIURI aFaviconURI,
-    in boolean aForceReload,
-    in unsigned long aFaviconLoadType,
-    [optional] in nsIFaviconDataCallback aCallback,
-    [optional] in nsIPrincipal aLoadingPrincipal,
-    [optional] in unsigned long long aRequestContextID);
-
-  /**
-   * Sets the data for a given favicon URI either by replacing existing data in
-   * the database or taking the place of otherwise fetched icon data when
-   * calling setAndFetchFaviconForPage later.
-   *
-   * Favicon data for favicon URIs that are not associated with a page URI via
-   * setAndFetchFaviconForPage will be stored in memory, but may be expired at
-   * any time, so you should make an effort to associate favicon URIs with page
-   * URIs as soon as possible.
-   *
-   * It's better to not use this function for chrome: icon URIs since you can
-   * reference the chrome image yourself. 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.
-   * Pages using this favicons that are visible in history or bookmarks views
-   * 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 a defined limit we will try to convert it to a 16x16 png image.
-   * If the conversion fails and favicon is still bigger than our max accepted
-   * size it 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.  You should always set this
-   *        param unless you are clearing an icon.
-   * @param [optional] 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 replaceFaviconData(in nsIURI aFaviconURI,
-                          [const,array,size_is(aDataLen)] in octet aData,
-                          in unsigned long aDataLen,
-                          in AUTF8String aMimeType,
-                          [optional] in PRTime aExpiration);
-
-  /**
-   * Same as replaceFaviconData but the data is provided by a string
-   * containing a data URL.
-   *
-   * @see replaceFaviconData
-   *
-   * @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 [optional] aExpiration
-   *        Time in microseconds since the epoch when this favicon expires.
-   *        Until this time, we won't try to load it again.
-   * @param [optional] aLoadingPrincipal
-   *        Principal of the page whose favicon is being set. If this argument
-   *        is omitted, the loadingPrincipal defaults to the nullPrincipal.
-   * @throws NS_ERROR_FAILURE
-   *         Thrown if the favicon is overbloated and won't be saved to the db.
-   */
-  void replaceFaviconDataFromDataURL(in nsIURI aFaviconURI,
-                                     in AString aDataURL,
-                                     [optional] in PRTime aExpiration,
-                                     [optional] in nsIPrincipal aLoadingPrincipal);
-
-  /**
-   * Retrieves the favicon URI associated to the given page, if any.
-   *
-   * @param aPageURI
-   *        URI of the page whose favicon URI we're looking up.
-   * @param aCallback
-   *        This callback is always invoked to notify the result of the lookup.
-   *        The aURI parameter will be the favicon URI, or null when no favicon
-   *        is associated with the page or an error occurred while fetching it.
-   *        aDataLen will be always 0, aData will be an empty array, and
-   *        aMimeType will be an empty string, regardless of whether a favicon
-   *        was found.
-   * @param [optional] aPreferredWidth
-   *        The preferred icon width, 0 for the biggest available.
-   *
-   * @note If a favicon specific to this page cannot be found, this will try to
-   *       fallback to the /favicon.ico for the root domain.
-   *
-   * @see nsIFaviconDataCallback in nsIFaviconService.idl.
-   */
-  void getFaviconURLForPage(in nsIURI aPageURI,
-                            in nsIFaviconDataCallback aCallback,
-                            [optional] in unsigned short aPreferredWidth);
-
-  /**
-   * Retrieves the favicon URI and data associated to the given page, if any.
-   * If the page icon is not available, it will try to return the root domain
-   * icon data, when it's known.
-   *
-   * @param aPageURI
-   *        URI of the page whose favicon URI and data we're looking up.
-   * @param aCallback
-   *        This callback is always invoked to notify the result of the lookup.  The aURI
-   *        parameter will be the favicon URI, or null when no favicon is
-   *        associated with the page or an error occurred while fetching it.  If
-   *        aURI is not null, the other parameters may contain the favicon data.
-   *        However, if no favicon data is currently associated with the favicon
-   *        URI, aDataLen will be 0, aData will be an empty array, and aMimeType
-   *        will be an empty string.
-   * @param [optional] aPreferredWidth
-   *        The preferred icon width, 0 for the biggest available.
-   * @note If a favicon specific to this page cannot be found, this will try to
-   *       fallback to the /favicon.ico for the root domain.
-   *
-   * @see nsIFaviconDataCallback in nsIFaviconService.idl.
-   */
-  void getFaviconDataForPage(in nsIURI aPageURI,
-                             in nsIFaviconDataCallback aCallback,
-                             [optional] in unsigned short aPreferredWidth);
-
-  /**
-   * Copies cached favicons from a page to another one.
-   *
-   * @param aFromPageURI
-   *        URI of the originating page.
-   * @param aToPageURI
-   *        URI of the destination page.
-   * @param aFaviconLoadType
-   *        Set to FAVICON_LOAD_PRIVATE if the copy is started from a private
-   *        browsing window.  Set to FAVICON_LOAD_NON_PRIVATE otherwise.
-   * @param [optional] aCallback
-   *        Once we're done copying the favicon, we invoke this callback.
-   *        If a copy has been done, the callback will report one of the
-   *        favicons uri as aFaviconURI, otherwise all the params will be null.
-   */
-  void copyFavicons(in nsIURI aFromPageURI,
-                    in nsIURI aToPageURI,
-                    in unsigned long aFaviconLoadType,
-                    [optional] in nsIFaviconDataCallback aCallback);
-};
--- a/toolkit/components/places/nsFaviconService.cpp
+++ b/toolkit/components/places/nsFaviconService.cpp
@@ -122,17 +122,16 @@ GetFramesInfoForContainer(imgIContainer*
 } // namespace
 
 PLACES_FACTORY_SINGLETON_IMPLEMENTATION(nsFaviconService, gFaviconService)
 
 NS_IMPL_CLASSINFO(nsFaviconService, nullptr, 0, NS_FAVICONSERVICE_CID)
 NS_IMPL_ISUPPORTS_CI(
   nsFaviconService
 , nsIFaviconService
-, mozIAsyncFavicons
 , nsITimerCallback
 , nsINamed
 )
 
 nsFaviconService::nsFaviconService()
   : mFailedFaviconSerial(0)
   , mFailedFavicons(MAX_FAILED_FAVICONS / 2)
   , mUnassociatedIcons(UNASSOCIATED_FAVICONS_LENGTH)
--- a/toolkit/components/places/nsFaviconService.h
+++ b/toolkit/components/places/nsFaviconService.h
@@ -2,17 +2,16 @@
 /* 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/. */
 
 #ifndef nsFaviconService_h_
 #define nsFaviconService_h_
 
 #include "nsIFaviconService.h"
-#include "mozIAsyncFavicons.h"
 
 #include "nsCOMPtr.h"
 #include "nsString.h"
 #include "nsDataHashtable.h"
 #include "nsServiceManagerUtils.h"
 #include "nsTHashtable.h"
 #include "nsToolkitCompsCID.h"
 #include "nsURIHashKey.h"
@@ -45,17 +44,16 @@ public:
   {
     NS_NOTREACHED("Do not call me!");
   }
   mozilla::places::IconData iconData;
   PRTime created;
 };
 
 class nsFaviconService final : public nsIFaviconService
-                             , public mozIAsyncFavicons
                              , public nsITimerCallback
                              , public nsINamed
 {
 public:
   nsFaviconService();
 
   /**
    * Obtains the service's object.
@@ -119,17 +117,16 @@ public:
                                 const nsACString& aGUID);
 
   static mozilla::Atomic<int64_t> sLastInsertedIconId;
   static void StoreLastInsertedId(const nsACString& aTable,
                                   const int64_t aLastInsertedId);
 
   NS_DECL_ISUPPORTS
   NS_DECL_NSIFAVICONSERVICE
-  NS_DECL_MOZIASYNCFAVICONS
   NS_DECL_NSITIMERCALLBACK
   NS_DECL_NSINAMED
 
 private:
   imgITools* GetImgTools() {
     if (!mImgTools) {
       mImgTools = do_CreateInstance("@mozilla.org/image/tools;1");
     }
--- a/toolkit/components/places/nsIFaviconService.idl
+++ b/toolkit/components/places/nsIFaviconService.idl
@@ -1,16 +1,19 @@
 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /* 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 nsIURI;
+interface nsIPrincipal;
+interface mozIPlacesPendingOperation;
+interface nsIFaviconDataCallback;
 
 [scriptable, uuid(e81e0b0c-b9f1-4c2e-8f3c-b809933cf73c)]
 interface nsIFaviconService : nsISupports
 {
   // The favicon is being loaded from a private browsing window
   const unsigned long FAVICON_LOAD_PRIVATE = 1;
   // The favicon is being loaded from a non-private browsing window
   const unsigned long FAVICON_LOAD_NON_PRIVATE = 2;
@@ -110,16 +113,212 @@ interface nsIFaviconService : nsISupport
    * The default favicon URI
    */
   readonly attribute nsIURI defaultFavicon;
 
   /**
    * The default favicon mimeType
    */
   readonly attribute AUTF8String defaultFaviconMimeType;
+
+  /**
+   * Declares that a given page uses a favicon with the given URI and
+   * attempts to fetch and save the icon data by loading the favicon URI
+   * through an async network request.
+   *
+   * If the icon data already exists, we won't try to reload the icon unless
+   * aForceReload is true.  Similarly, if the icon is in the failed favicon
+   * cache we won't do anything unless aForceReload is true, in which case
+   * we'll try to reload the favicon.
+   *
+   * This function will only save favicons for pages that are already stored in
+   * the database, like visited pages or bookmarks.  For any other URIs, it
+   * will succeed but do nothing.  This function will also ignore the error
+   * page favicon URI (see FAVICON_ERRORPAGE_URL below).
+   *
+   * Icons that fail to load will automatically be added to the failed favicon
+   * cache, and this function will not save favicons for non-bookmarked URIs
+   * when history is disabled.
+   *
+   * @note This function is identical to
+   *       nsIFaviconService::setAndLoadFaviconForPage.
+   *
+   * @param aPageURI
+   *        URI of the page whose favicon is being set.
+   * @param aFaviconURI
+   *        URI of the favicon to associate with the page.
+   * @param aForceReload
+   *        If aForceReload is false, we try to reload the favicon only if we
+   *        don't have it or it has expired from the cache.  Setting
+   *        aForceReload to true causes us to reload the favicon even if we
+   *        have a usable copy.
+   * @param aFaviconLoadType
+   *        Set to FAVICON_LOAD_PRIVATE if the favicon is loaded from a private
+   *        browsing window.  Set to FAVICON_LOAD_NON_PRIVATE otherwise.
+   * @param [optional] aCallback
+   *        Once we're done setting and/or fetching the favicon, we invoke this
+   *        callback.
+   * @param [optional] aLoadingPrincipal
+   *        Principal of the page whose favicon is being set. If this argument
+   *        is omitted, the loadingPrincipal defaults to the nullPrincipal.
+   * @param [optional] aRequestContextID
+   *        used to inform Necko of how to link the
+   *        favicon request with other requests in the same tab.
+   *
+   * @see nsIFaviconDataCallback in nsIFaviconService.idl.
+   */
+  mozIPlacesPendingOperation setAndFetchFaviconForPage(
+    in nsIURI aPageURI,
+    in nsIURI aFaviconURI,
+    in boolean aForceReload,
+    in unsigned long aFaviconLoadType,
+    [optional] in nsIFaviconDataCallback aCallback,
+    [optional] in nsIPrincipal aLoadingPrincipal,
+    [optional] in unsigned long long aRequestContextID);
+
+  /**
+   * Sets the data for a given favicon URI either by replacing existing data in
+   * the database or taking the place of otherwise fetched icon data when
+   * calling setAndFetchFaviconForPage later.
+   *
+   * Favicon data for favicon URIs that are not associated with a page URI via
+   * setAndFetchFaviconForPage will be stored in memory, but may be expired at
+   * any time, so you should make an effort to associate favicon URIs with page
+   * URIs as soon as possible.
+   *
+   * It's better to not use this function for chrome: icon URIs since you can
+   * reference the chrome image yourself. 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.
+   * Pages using this favicons that are visible in history or bookmarks views
+   * 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 a defined limit we will try to convert it to a 16x16 png image.
+   * If the conversion fails and favicon is still bigger than our max accepted
+   * size it 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.  You should always set this
+   *        param unless you are clearing an icon.
+   * @param [optional] 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 replaceFaviconData(in nsIURI aFaviconURI,
+                          [const,array,size_is(aDataLen)] in octet aData,
+                          in unsigned long aDataLen,
+                          in AUTF8String aMimeType,
+                          [optional] in PRTime aExpiration);
+
+  /**
+   * Same as replaceFaviconData but the data is provided by a string
+   * containing a data URL.
+   *
+   * @see replaceFaviconData
+   *
+   * @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 [optional] aExpiration
+   *        Time in microseconds since the epoch when this favicon expires.
+   *        Until this time, we won't try to load it again.
+   * @param [optional] aLoadingPrincipal
+   *        Principal of the page whose favicon is being set. If this argument
+   *        is omitted, the loadingPrincipal defaults to the nullPrincipal.
+   * @throws NS_ERROR_FAILURE
+   *         Thrown if the favicon is overbloated and won't be saved to the db.
+   */
+  void replaceFaviconDataFromDataURL(in nsIURI aFaviconURI,
+                                     in AString aDataURL,
+                                     [optional] in PRTime aExpiration,
+                                     [optional] in nsIPrincipal aLoadingPrincipal);
+
+  /**
+   * Retrieves the favicon URI associated to the given page, if any.
+   *
+   * @param aPageURI
+   *        URI of the page whose favicon URI we're looking up.
+   * @param aCallback
+   *        This callback is always invoked to notify the result of the lookup.
+   *        The aURI parameter will be the favicon URI, or null when no favicon
+   *        is associated with the page or an error occurred while fetching it.
+   *        aDataLen will be always 0, aData will be an empty array, and
+   *        aMimeType will be an empty string, regardless of whether a favicon
+   *        was found.
+   * @param [optional] aPreferredWidth
+   *        The preferred icon width, 0 for the biggest available.
+   *
+   * @note If a favicon specific to this page cannot be found, this will try to
+   *       fallback to the /favicon.ico for the root domain.
+   *
+   * @see nsIFaviconDataCallback in nsIFaviconService.idl.
+   */
+  void getFaviconURLForPage(in nsIURI aPageURI,
+                            in nsIFaviconDataCallback aCallback,
+                            [optional] in unsigned short aPreferredWidth);
+
+  /**
+   * Retrieves the favicon URI and data associated to the given page, if any.
+   * If the page icon is not available, it will try to return the root domain
+   * icon data, when it's known.
+   *
+   * @param aPageURI
+   *        URI of the page whose favicon URI and data we're looking up.
+   * @param aCallback
+   *        This callback is always invoked to notify the result of the lookup.  The aURI
+   *        parameter will be the favicon URI, or null when no favicon is
+   *        associated with the page or an error occurred while fetching it.  If
+   *        aURI is not null, the other parameters may contain the favicon data.
+   *        However, if no favicon data is currently associated with the favicon
+   *        URI, aDataLen will be 0, aData will be an empty array, and aMimeType
+   *        will be an empty string.
+   * @param [optional] aPreferredWidth
+   *        The preferred icon width, 0 for the biggest available.
+   * @note If a favicon specific to this page cannot be found, this will try to
+   *       fallback to the /favicon.ico for the root domain.
+   *
+   * @see nsIFaviconDataCallback in nsIFaviconService.idl.
+   */
+  void getFaviconDataForPage(in nsIURI aPageURI,
+                             in nsIFaviconDataCallback aCallback,
+                             [optional] in unsigned short aPreferredWidth);
+
+  /**
+   * Copies cached favicons from a page to another one.
+   *
+   * @param aFromPageURI
+   *        URI of the originating page.
+   * @param aToPageURI
+   *        URI of the destination page.
+   * @param aFaviconLoadType
+   *        Set to FAVICON_LOAD_PRIVATE if the copy is started from a private
+   *        browsing window.  Set to FAVICON_LOAD_NON_PRIVATE otherwise.
+   * @param [optional] aCallback
+   *        Once we're done copying the favicon, we invoke this callback.
+   *        If a copy has been done, the callback will report one of the
+   *        favicons uri as aFaviconURI, otherwise all the params will be null.
+   */
+  void copyFavicons(in nsIURI aFromPageURI,
+                    in nsIURI aToPageURI,
+                    in unsigned long aFaviconLoadType,
+                    [optional] in nsIFaviconDataCallback aCallback);
 };
 
 [scriptable, function, uuid(c85e5c82-b70f-4621-9528-beb2aa47fb44)]
 interface nsIFaviconDataCallback : nsISupports
 {
   /**
    * Called when the required favicon's information is available.
    *
--- a/toolkit/components/places/tests/favicons/test_replaceFaviconData.js
+++ b/toolkit/components/places/tests/favicons/test_replaceFaviconData.js
@@ -1,13 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
  *    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /*
- * Tests for mozIAsyncFavicons::replaceFaviconData()
+ * Tests for replaceFaviconData()
  */
 
 var iconsvc = PlacesUtils.favicons;
 
 var originalFavicon = {
   file: do_get_file("favicon-normal16.png"),
   uri: uri(do_get_file("favicon-normal16.png")),
   data: readFileData(do_get_file("favicon-normal16.png")),
--- a/toolkit/components/places/tests/favicons/test_replaceFaviconDataFromDataURL.js
+++ b/toolkit/components/places/tests/favicons/test_replaceFaviconDataFromDataURL.js
@@ -1,13 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
  *    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /*
- * Tests for mozIAsyncFavicons::replaceFaviconData()
+ * Tests for replaceFaviconData()
  */
 
 var iconsvc = PlacesUtils.favicons;
 
 var originalFavicon = {
   file: do_get_file("favicon-normal16.png"),
   uri: uri(do_get_file("favicon-normal16.png")),
   data: readFileData(do_get_file("favicon-normal16.png")),
--- a/widget/windows/WinUtils.cpp
+++ b/widget/windows/WinUtils.cpp
@@ -32,17 +32,17 @@
 #include "nsDirectoryServiceUtils.h"
 #include "imgIContainer.h"
 #include "imgITools.h"
 #include "nsNetUtil.h"
 #include "nsIOutputStream.h"
 #include "nsNetCID.h"
 #include "prtime.h"
 #ifdef MOZ_PLACES
-#include "mozIAsyncFavicons.h"
+#include "nsIFaviconService.h"
 #endif
 #include "nsIIconURI.h"
 #include "nsIDownloader.h"
 #include "nsINetUtil.h"
 #include "nsIChannel.h"
 #include "nsIObserver.h"
 #include "imgIEncoder.h"
 #include "nsIThread.h"
@@ -1644,17 +1644,17 @@ nsresult FaviconHelper::GetOutputIconPat
 nsresult 
   FaviconHelper::CacheIconFileFromFaviconURIAsync(nsCOMPtr<nsIURI> aFaviconPageURI,
                                                   nsCOMPtr<nsIFile> aICOFile,
                                                   nsCOMPtr<nsIThread> &aIOThread,
                                                   bool aURLShortcut)
 {
 #ifdef MOZ_PLACES
   // Obtain the favicon service and get the favicon for the specified page
-  nsCOMPtr<mozIAsyncFavicons> favIconSvc(
+  nsCOMPtr<nsIFaviconService> favIconSvc(
     do_GetService("@mozilla.org/browser/favicon-service;1"));
   NS_ENSURE_TRUE(favIconSvc, NS_ERROR_FAILURE);
 
   nsCOMPtr<nsIFaviconDataCallback> callback = 
     new mozilla::widget::AsyncFaviconDataReady(aFaviconPageURI, 
                                                aIOThread, 
                                                aURLShortcut);