/* 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/. */ if (!window.__firefox__) { Object.defineProperty(window, '__firefox__', { enumerable: false, configurable: false, writable: false, value: {} }); } Object.defineProperty(window.__firefox__, 'favicons', { enumerable: false, configurable: false, writable: false, value: (function() { // These integers should be kept in sync with the IconType raw-values var ICON = 0; var APPLE = 1; var APPLE_PRECOMPOSED = 2; var GUESS = 3; var selectors = { "link[rel~='icon']": ICON, "link[rel='apple-touch-icon']": APPLE, "link[rel='apple-touch-icon-precomposed']": APPLE_PRECOMPOSED }; function getAll() { var favicons = {}; for (var selector in selectors) { var icons = document.querySelectorAll(selector); for (var i = 0; i < icons.length; i++) { var href = icons[i].href; favicons[href] = selectors[selector]; } } // If we didn't find anything in the page, look to see if a favicon.ico file exists for the domain if (Object.keys(favicons).length === 0) { var href = document.location.origin + "/favicon.ico"; favicons[href] = GUESS; } return favicons; } function getFavicons() { var favicons = getAll(); webkit.messageHandlers.faviconsMessageHandler.postMessage(favicons); } return { getFavicons: getFavicons }; })() });