Mercurial > addons > firefox-addons > feed-preview
view background.js @ 1:1c31f4102408
Show a hint if the feed has no entries
author | Guido Berhoerster <guido+feed-preview@berhoerster.name> |
---|---|
date | Thu, 04 Oct 2018 09:40:26 +0200 |
parents | bc5cc170163c |
children |
line wrap: on
line source
/* * Copyright (C) 2018 Guido Berhoerster <guido+feed-preview@berhoerster.name> * * 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'; var tabsFeeds = new Map(); // until content handlers become available to webextensions // (https://bugzilla.mozilla.org/show_bug.cgi?id=1457500) intercept all // responses and change the content type from application/atom+xml or // application/rss+xml to application/xml which will then be handled by a // content script browser.webRequest.onHeadersReceived.addListener(details => { if (details.statusCode != 200 || typeof details.responseHeaders === 'undefined') { return; } let contentTypeHeader = details.responseHeaders.find(element => { return element.name.toLowerCase() === 'content-type'; }); if (typeof contentTypeHeader !== 'undefined') { let contentType = contentTypeHeader.value.split(';'); let mediaType = contentType[0].trim().toLowerCase(); if (mediaType === 'application/atom+xml' || mediaType === 'application/rss+xml') { contentType[0] = 'application/xml'; contentTypeHeader.value = contentType.join(';'); } } return {responseHeaders: details.responseHeaders}; }, {urls: ['http://*/*', 'https://*/*'], types: ['main_frame']}, ['blocking', 'responseHeaders']); browser.runtime.onMessage.addListener((request, sender, sendResponse) => { let tab = sender.tab; if (typeof tab !== 'undefined') { // content script sending feeds tabsFeeds.set(tab.id, request); browser.pageAction.show(tab.id); } else { let response = tabsFeeds.get(request); // popup querying feeds sendResponse(tabsFeeds.get(request)); } }); browser.tabs.onUpdated.addListener((id, changeInfo, tab) => { if (typeof changeInfo.url === 'undefined') { // filter out updates which do not change the URL return; } // hide the page action when the URL changes since it is no longer valid, // it will be shown again if the content script detects a feed browser.pageAction.hide(tab.id); }); browser.tabs.onRemoved.addListener((tabId, removeInfo) => { tabsFeeds.delete(tabId); });