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