Bug 1420714 - fix favicon fetching in reader mode, r?mak
MozReview-Commit-ID: KZFoKNqVPPy
--- a/browser/modules/ReaderParent.jsm
+++ b/browser/modules/ReaderParent.jsm
@@ -23,17 +23,17 @@ var ReaderParent = {
receiveMessage(message) {
switch (message.name) {
case "Reader:FaviconRequest": {
if (message.target.messageManager) {
let faviconUrl = PlacesUtils.promiseFaviconLinkUrl(message.data.url);
faviconUrl.then(function onResolution(favicon) {
message.target.messageManager.sendAsyncMessage("Reader:FaviconReturn", {
url: message.data.url,
- faviconUrl: favicon.path.replace(/^favicon:/, "")
+ faviconUrl: favicon.pathQueryRef.replace(/^favicon:/, "")
});
},
function onRejection(reason) {
Cu.reportError("Error requesting favicon URL for about:reader content: " + reason);
}).catch(Cu.reportError);
}
break;
}
--- a/toolkit/components/reader/test/browser_readerMode.js
+++ b/toolkit/components/reader/test/browser_readerMode.js
@@ -9,16 +9,19 @@
const TEST_PREFS = [
["reader.parse-on-load.enabled", true],
];
const TEST_PATH = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com");
var readerButton = document.getElementById("reader-mode-button");
+XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils",
+ "resource://testing-common/PlacesTestUtils.jsm");
+
add_task(async function test_reader_button() {
registerCleanupFunction(function() {
// Reset test prefs.
TEST_PREFS.forEach(([name, value]) => {
Services.prefs.clearUserPref(name);
});
while (gBrowser.tabs.length > 1) {
gBrowser.removeCurrentTab();
@@ -32,29 +35,42 @@ add_task(async function test_reader_butt
let tab = gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
is_element_hidden(readerButton, "Reader mode button is not present on a new tab");
ok(!UITour.isInfoOnTarget(window, "readerMode-urlBar"),
"Info panel shouldn't appear without the reader mode button");
// Point tab to a test page that is reader-able.
let url = TEST_PATH + "readerModeArticle.html";
+ // Set up favicon for testing.
+ let favicon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAA" +
+ "AAAA6fptVAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==";
+ info("Adding visit so we can add favicon");
+ await PlacesTestUtils.addVisits(new URL(url));
+ info("Adding favicon");
+ await PlacesTestUtils.addFavicons(new Map([[url, favicon]]));
+ info("Opening tab and waiting for reader mode button to show up");
+
await promiseTabLoadEvent(tab, url);
await promiseWaitForCondition(() => !readerButton.hidden);
is_element_visible(readerButton, "Reader mode button is present on a reader-able page");
// Switch page into reader mode.
let promiseTabLoad = promiseTabLoadEvent(tab);
readerButton.click();
await promiseTabLoad;
let readerUrl = gBrowser.selectedBrowser.currentURI.spec;
ok(readerUrl.startsWith("about:reader"), "about:reader loaded after clicking reader mode button");
is_element_visible(readerButton, "Reader mode button is present on about:reader");
+ let iconEl = document.getAnonymousElementByAttribute(tab, "anonid", "tab-icon-image");
+ await promiseWaitForCondition(() => iconEl.getBoundingClientRect().width != 0);
+ is_element_visible(iconEl, "Favicon should be visible");
+ is(iconEl.src, favicon, "Correct favicon should be loaded");
is(gURLBar.value, readerUrl, "gURLBar value is about:reader URL");
is(gURLBar.textValue, url.substring("http://".length), "gURLBar is displaying original article URL");
// Check selected value for URL bar
await new Promise((resolve, reject) => {
waitForClipboard(url, function() {
gURLBar.focus();