/* Test for Bug 503832 * https://bugzilla.mozilla.org/show_bug.cgi?id=503832 */ add_task(async function () { var pagetitle = "Page Title for Bug 503832"; var pageurl = "http://mochi.test:8888/browser/docshell/test/browser/file_bug503832.html"; var fragmenturl = "http://mochi.test:8888/browser/docshell/test/browser/file_bug503832.html#firefox"; var historyService = Cc[ "@mozilla.org/browser/nav-history-service;1" ].getService(Ci.nsINavHistoryService); let fragmentPromise = new Promise(resolve => { const listener = events => { const { url, title } = events[0]; switch (url) { case pageurl: is(title, pagetitle, "Correct page title for " + url); return; case fragmenturl: is(title, pagetitle, "Correct page title for " + url); // If titles for fragment URLs aren't set, this code // branch won't be called and the test will timeout, // resulting in a failure PlacesObservers.removeListener(["page-title-changed"], listener); resolve(); } }; PlacesObservers.addListener(["page-title-changed"], listener); }); /* Queries nsINavHistoryService and returns a single history entry * for a given URI */ function getNavHistoryEntry(aURI) { var options = historyService.getNewQueryOptions(); options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_HISTORY; options.maxResults = 1; var query = historyService.getNewQuery(); query.uri = aURI; var result = historyService.executeQuery(query, options); result.root.containerOpen = true; if (!result.root.childCount) { return null; } var node = result.root.getChild(0); result.root.containerOpen = false; return node; } // 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."); // Now open the test page in a new tab await BrowserTestUtils.openNewForegroundTab(gBrowser, pageurl); // Now that the page is loaded, click on fragment link await BrowserTestUtils.synthesizeMouseAtCenter( "#firefox-link", {}, gBrowser.selectedBrowser ); await fragmentPromise; gBrowser.removeCurrentTab(); });