123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /* 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/. */
- "use strict";
- module.metadata = {
- "stability": "unstable",
- "engines": {
- "Firefox": "*"
- }
- };
- const { Cc, Ci, Cu } = require("chrome");
- const { defer, reject } = require("../core/promise");
- const FaviconService = Cc["@mozilla.org/browser/favicon-service;1"].
- getService(Ci.nsIFaviconService);
- const AsyncFavicons = FaviconService.QueryInterface(Ci.mozIAsyncFavicons);
- const { isValidURI } = require("../url");
- const { newURI, getURL } = require("../url/utils");
- /**
- * Takes an object of several possible types and
- * returns a promise that resolves to the page's favicon URI.
- * @param {String|Tab} object
- * @param {Function} (callback)
- * @returns {Promise}
- */
- function getFavicon (object, callback) {
- let url = getURL(object);
- let deferred = defer();
- if (url && isValidURI(url)) {
- AsyncFavicons.getFaviconURLForPage(newURI(url), function (aURI) {
- if (aURI && aURI.spec)
- deferred.resolve(aURI.spec.toString());
- else
- deferred.reject(null);
- });
- } else {
- deferred.reject(null);
- }
- if (callback) deferred.promise.then(callback, callback);
- return deferred.promise;
- }
- exports.getFavicon = getFavicon;
|