From 4ba58a55edf4f23a5128137991eb7cd0983fa2ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Qu=C3=A8ze?= Date: Thu, 19 Mar 2015 15:50:23 -0700 Subject: [PATCH] Bug 1144680 - The Reading List URLbar button should handle about:reader urls and filter out other non-http(s) urls, r=markh. --- browser/base/content/browser-readinglist.js | 27 ++++++++++++++++--- .../components/readinglist/ReadingList.jsm | 8 +++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/browser/base/content/browser-readinglist.js b/browser/base/content/browser-readinglist.js index 851fef307cb9..b3cda23a73ce 100644 --- a/browser/base/content/browser-readinglist.js +++ b/browser/base/content/browser-readinglist.js @@ -232,12 +232,22 @@ let ReadingListUI = { // nothing to do if we have no button. return; } - if (!this.enabled || state == "invalid") { + + let uri; + if (this.enabled && state == "valid") { + uri = gBrowser.currentURI; + if (uri.schemeIs("about")) + uri = ReaderParent.parseReaderUrl(uri.spec); + else if (!uri.schemeIs("http") && !uri.schemeIs("https")) + uri = null; + } + + if (!uri) { this.toolbarButton.setAttribute("hidden", true); return; } - let isInList = yield ReadingList.containsURL(gBrowser.currentURI); + let isInList = yield ReadingList.containsURL(uri); this.setToolbarButtonState(isInList); }), @@ -268,11 +278,17 @@ let ReadingListUI = { * @returns {Promise} Promise resolved when operation has completed. */ togglePageByBrowser: Task.async(function* (browser) { - let item = yield ReadingList.getItemForURL(browser.currentURI); + let uri = browser.currentURI; + if (uri.spec.startsWith("about:reader?")) + uri = ReaderParent.parseReaderUrl(uri.spec); + if (!uri) + return; + + let item = yield ReadingList.getItemForURL(uri); if (item) { yield item.delete(); } else { - yield ReadingList.addItemFromBrowser(browser); + yield ReadingList.addItemFromBrowser(browser, uri); } }), @@ -284,6 +300,9 @@ let ReadingListUI = { */ isItemForCurrentBrowser(item) { let currentURL = gBrowser.currentURI.spec; + if (currentURL.startsWith("about:reader?")) + currentURL = ReaderParent.parseReaderUrl(currentURL); + if (item.url == currentURL || item.resolvedURL == currentURL) { return true; } diff --git a/browser/components/readinglist/ReadingList.jsm b/browser/components/readinglist/ReadingList.jsm index ed2de5eb214c..9b6c785ebd74 100644 --- a/browser/components/readinglist/ReadingList.jsm +++ b/browser/components/readinglist/ReadingList.jsm @@ -289,13 +289,15 @@ ReadingListImpl.prototype = { /** * Add to the ReadingList the page that is loaded in a given browser. * - * @param {} browser - Browser element for the document. + * @param {} browser - Browser element for the document, + * used to get metadata about the article. + * @param {nsIURI/string} url - url to add to the reading list. * @return {Promise} Promise that is fullfilled with the added item. */ - addItemFromBrowser: Task.async(function* (browser) { + addItemFromBrowser: Task.async(function* (browser, url) { let metadata = yield getMetadataFromBrowser(browser); let itemData = { - url: browser.currentURI, + url: url, title: metadata.title, resolvedURL: metadata.url, excerpt: metadata.description,