1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /* 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/. */
- const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
- XPCOMUtils.defineLazyGlobalGetters(this, ["fetch", "URL"]);
- const TIPPYTOP_JSON_PATH = "resource://activity-stream/data/content/tippytop/top_sites.json";
- const TIPPYTOP_URL_PREFIX = "resource://activity-stream/data/content/tippytop/images/";
- function getDomain(url) {
- let domain;
- try {
- domain = new URL(url).hostname;
- } catch (ex) {}
- if (domain && domain.startsWith("www.")) {
- domain = domain.slice(4);
- }
- return domain;
- }
- this.TippyTopProvider = class TippyTopProvider {
- constructor() {
- this._sitesByDomain = new Map();
- this.initialized = false;
- }
- async init() {
- // Load the Tippy Top sites from the json manifest.
- try {
- for (const site of await (await fetch(TIPPYTOP_JSON_PATH, {credentials: "omit"})).json()) {
- // The tippy top manifest can have a url property (string) or a
- // urls property (array of strings)
- for (const url of site.url ? [site.url] : site.urls || []) {
- this._sitesByDomain.set(getDomain(url), site);
- }
- }
- this.initialized = true;
- } catch (error) {
- Cu.reportError("Failed to load tippy top manifest.");
- }
- }
- processSite(site) {
- const tippyTop = this._sitesByDomain.get(getDomain(site.url));
- if (tippyTop) {
- site.tippyTopIcon = TIPPYTOP_URL_PREFIX + tippyTop.image_url;
- site.backgroundColor = tippyTop.background_color;
- }
- return site;
- }
- };
- const EXPORTED_SYMBOLS = ["TippyTopProvider", "getDomain"];
|