/* Queries nsINavHistoryService and returns a single history entry
* for a given URI */ function getNavHistoryEntry(aURI) { var options = PlacesUtils.history.getNewQueryOptions();
options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_HISTORY;
options.maxResults = 1;
var query = PlacesUtils.history.getNewQuery();
query.uri = aURI; var result = PlacesUtils.history.executeQuery(query, options);
result.root.containerOpen = true;
if (!result.root.childCount) { returnnull;
} return result.root.getChild(0);
}
// We'll save the favicon URL of the orignal page here and check that the // page with a hash has the same favicon. var originalFavicon;
// Control flow in this test is a bit complicated. // // When the page loads, onPageLoad (the DOMContentLoaded handler) and // favicon-changed are both called, in some order. Once // they've both run, we click a fragment link in the content page // (clickLinkIfReady), which should trigger another favicon-changed event, // this time for the fragment's URL.
var _clickLinkTimes = 0; function clickLinkIfReady() {
_clickLinkTimes++; if (_clickLinkTimes == 2) {
BrowserTestUtils.synthesizeMouseAtCenter( "#firefox-link",
{},
gBrowser.selectedBrowser
);
}
}
function onPageLoad() {
clickLinkIfReady();
}
// Make sure neither of the test pages haven't been loaded before. var info = getNavHistoryEntry(makeURI(pageurl));
ok(!info, "The test page must not have been visited already.");
info = getNavHistoryEntry(makeURI(fragmenturl));
ok(!info, "The fragment test page must not have been visited already.");
let promiseIcon1 = PlacesTestUtils.waitForNotification( "favicon-changed",
events =>
events.some(e => { if (e.url == pageurl) {
ok(
e.faviconUrl, "Favicon value is not null for page without fragment."
);
originalFavicon = e.faviconUrl;
// Now that the favicon has loaded, click on fragment link. // This should trigger the |case fragmenturl| below.
clickLinkIfReady(); returntrue;
} returnfalse;
})
);
let promiseIcon2 = PlacesTestUtils.waitForNotification( "favicon-changed",
events =>
events.some(e => { if (e.url == fragmenturl) { // If the fragment URL's favicon isn't set, this branch won't // be called and the test will time out.
is(
e.faviconUrl,
originalFavicon, "New favicon should be same as original favicon."
);
ok(
e.faviconUrl, "Favicon value is not null for page without fragment."
);
originalFavicon = e.faviconUrl;
// Now that the favicon has loaded, click on fragment link. // This should trigger the |case fragmenturl| below.
clickLinkIfReady(); returntrue;
} returnfalse;
})
);
// Now open the test page in a new tab.
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
BrowserTestUtils.waitForContentEvent(
gBrowser.selectedBrowser, "DOMContentLoaded", true
).then(onPageLoad);
BrowserTestUtils.startLoadingURIString(gBrowser.selectedBrowser, pageurl);
await promiseIcon1;
await promiseIcon2;
// Let's explicitly check that we can get the favicon // from nsINavHistoryService now.
info = getNavHistoryEntry(makeURI(fragmenturl));
ok(info, "There must be a history entry for the fragment.");
ok(info.icon, "The history entry must have an associated favicon.");
gBrowser.removeCurrentTab();
});
¤ Dauer der Verarbeitung: 0.29 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.