michael@0: // This test performs a search in a public window, then a different michael@0: // search in a private window, and then checks in the public window michael@0: // whether there is an autocomplete entry for the private search. michael@0: michael@0: function test() { michael@0: // Don't use about:home as the homepage for new windows michael@0: Services.prefs.setIntPref("browser.startup.page", 0); michael@0: registerCleanupFunction(function() Services.prefs.clearUserPref("browser.startup.page")); michael@0: michael@0: waitForExplicitFinish(); michael@0: michael@0: let engineURL = michael@0: "http://mochi.test:8888/browser/browser/components/search/test/"; michael@0: let windowsToClose = []; michael@0: registerCleanupFunction(function() { michael@0: let engine = Services.search.getEngineByName("Bug 426329"); michael@0: Services.search.removeEngine(engine); michael@0: windowsToClose.forEach(function(win) { michael@0: win.close(); michael@0: }); michael@0: }); michael@0: michael@0: function onPageLoad(aWin, aCallback) { michael@0: aWin.gBrowser.addEventListener("DOMContentLoaded", function load(aEvent) { michael@0: let doc = aEvent.originalTarget; michael@0: info(doc.location.href); michael@0: if (doc.location.href.indexOf(engineURL) != -1) { michael@0: aWin.gBrowser.removeEventListener("DOMContentLoaded", load, false); michael@0: aCallback(); michael@0: } michael@0: }, false); michael@0: } michael@0: michael@0: function performSearch(aWin, aIsPrivate, aCallback) { michael@0: let searchBar = aWin.BrowserSearch.searchBar; michael@0: ok(searchBar, "got search bar"); michael@0: onPageLoad(aWin, aCallback); michael@0: michael@0: searchBar.value = aIsPrivate ? "private test" : "public test"; michael@0: searchBar.focus(); michael@0: EventUtils.synthesizeKey("VK_RETURN", {}, aWin); michael@0: } michael@0: michael@0: function addEngine(aCallback) { michael@0: let installCallback = { michael@0: onSuccess: function (engine) { michael@0: Services.search.currentEngine = engine; michael@0: aCallback(); michael@0: }, michael@0: onError: function (errorCode) { michael@0: ok(false, "failed to install engine: " + errorCode); michael@0: } michael@0: }; michael@0: Services.search.addEngine(engineURL + "426329.xml", michael@0: Ci.nsISearchEngine.DATA_XML, michael@0: "data:image/x-icon,%00", false, installCallback); michael@0: } michael@0: michael@0: function testOnWindow(aIsPrivate, aCallback) { michael@0: let win = whenNewWindowLoaded({ private: aIsPrivate }, aCallback); michael@0: windowsToClose.push(win); michael@0: } michael@0: michael@0: addEngine(function() { michael@0: testOnWindow(false, function(win) { michael@0: performSearch(win, false, function() { michael@0: testOnWindow(true, function(win) { michael@0: performSearch(win, true, function() { michael@0: testOnWindow(false, function(win) { michael@0: checkSearchPopup(win, finish); michael@0: }); michael@0: }); michael@0: }); michael@0: }); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function checkSearchPopup(aWin, aCallback) { michael@0: let searchBar = aWin.BrowserSearch.searchBar; michael@0: searchBar.value = "p"; michael@0: searchBar.focus(); michael@0: michael@0: let popup = searchBar.textbox.popup; michael@0: popup.addEventListener("popupshowing", function showing() { michael@0: popup.removeEventListener("popupshowing", showing, false); michael@0: michael@0: let entries = getMenuEntries(searchBar); michael@0: for (let i = 0; i < entries.length; i++) { michael@0: isnot(entries[i], "private test", michael@0: "shouldn't see private autocomplete entries"); michael@0: } michael@0: michael@0: searchBar.textbox.toggleHistoryPopup(); michael@0: searchBar.value = ""; michael@0: aCallback(); michael@0: }, false); michael@0: michael@0: searchBar.textbox.showHistoryPopup(); michael@0: } michael@0: michael@0: function getMenuEntries(searchBar) { michael@0: let entries = []; michael@0: let autocompleteMenu = searchBar.textbox.popup; michael@0: // Could perhaps pull values directly from the controller, but it seems michael@0: // more reliable to test the values that are actually in the tree? michael@0: let column = autocompleteMenu.tree.columns[0]; michael@0: let numRows = autocompleteMenu.tree.view.rowCount; michael@0: for (let i = 0; i < numRows; i++) { michael@0: entries.push(autocompleteMenu.tree.view.getValueAt(i, column)); michael@0: } michael@0: return entries; michael@0: }