diff options
Diffstat (limited to 'browser/components/search/test/browser_aboutSearchReset.js')
-rw-r--r-- | browser/components/search/test/browser_aboutSearchReset.js | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/browser/components/search/test/browser_aboutSearchReset.js b/browser/components/search/test/browser_aboutSearchReset.js new file mode 100644 index 000000000..64376d6da --- /dev/null +++ b/browser/components/search/test/browser_aboutSearchReset.js @@ -0,0 +1,159 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +const TELEMETRY_RESULT_ENUM = { + RESTORED_DEFAULT: 0, + KEPT_CURRENT: 1, + CHANGED_ENGINE: 2, + CLOSED_PAGE: 3, + OPENED_SETTINGS: 4 +}; + +const kSearchStr = "a search"; +const kSearchPurpose = "searchbar"; + +const kTestEngine = "testEngine.xml"; + +function checkTelemetryRecords(expectedValue) { + let histogram = Services.telemetry.getHistogramById("SEARCH_RESET_RESULT"); + let snapshot = histogram.snapshot(); + // The probe is declared with 5 values, but we get 6 back from .counts + let expectedCounts = [0, 0, 0, 0, 0, 0]; + if (expectedValue != null) { + expectedCounts[expectedValue] = 1; + } + Assert.deepEqual(snapshot.counts, expectedCounts, + "histogram has expected content"); + histogram.clear(); +} + +function promiseStoppedLoad(expectedURL) { + return new Promise(resolve => { + let browser = gBrowser.selectedBrowser; + let original = browser.loadURIWithFlags; + browser.loadURIWithFlags = function(URI) { + if (URI == expectedURL) { + browser.loadURIWithFlags = original; + ok(true, "loaded expected url: " + URI); + resolve(); + return; + } + + original.apply(browser, arguments); + }; + }); +} + +var gTests = [ + +{ + desc: "Test the 'Keep Current Settings' button.", + run: function* () { + let engine = yield promiseNewEngine(kTestEngine, {setAsCurrent: true}); + + let expectedURL = engine. + getSubmission(kSearchStr, null, kSearchPurpose). + uri.spec; + + let rawEngine = engine.wrappedJSObject; + let initialHash = rawEngine.getAttr("loadPathHash"); + rawEngine.setAttr("loadPathHash", "broken"); + + let loadPromise = promiseStoppedLoad(expectedURL); + gBrowser.contentDocument.getElementById("searchResetKeepCurrent").click(); + yield loadPromise; + + is(engine, Services.search.currentEngine, + "the custom engine is still default"); + is(rawEngine.getAttr("loadPathHash"), initialHash, + "the loadPathHash has been fixed"); + + checkTelemetryRecords(TELEMETRY_RESULT_ENUM.KEPT_CURRENT); + } +}, + +{ + desc: "Test the 'Restore Search Defaults' button.", + run: function* () { + let currentEngine = Services.search.currentEngine; + let originalEngine = Services.search.originalDefaultEngine; + let doc = gBrowser.contentDocument; + let defaultEngineSpan = doc.getElementById("defaultEngine"); + is(defaultEngineSpan.textContent, originalEngine.name, + "the name of the original default engine is displayed"); + + let expectedURL = originalEngine. + getSubmission(kSearchStr, null, kSearchPurpose). + uri.spec; + let loadPromise = promiseStoppedLoad(expectedURL); + let button = doc.getElementById("searchResetChangeEngine"); + is(doc.activeElement, button, + "the 'Change Search Engine' button is focused"); + button.click(); + yield loadPromise; + + is(originalEngine, Services.search.currentEngine, + "the default engine is back to the original one"); + + checkTelemetryRecords(TELEMETRY_RESULT_ENUM.RESTORED_DEFAULT); + Services.search.currentEngine = currentEngine; + } +}, + +{ + desc: "Click the settings link.", + run: function* () { + let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser, + false, + "about:preferences#search") + gBrowser.contentDocument.getElementById("linkSettingsPage").click(); + yield loadPromise; + + checkTelemetryRecords(TELEMETRY_RESULT_ENUM.OPENED_SETTINGS); + } +}, + +{ + desc: "Load another page without clicking any of the buttons.", + run: function* () { + yield promiseTabLoadEvent(gBrowser.selectedTab, "about:mozilla"); + + checkTelemetryRecords(TELEMETRY_RESULT_ENUM.CLOSED_PAGE); + } +}, + +]; + +function test() +{ + waitForExplicitFinish(); + Task.spawn(function* () { + let oldCanRecord = Services.telemetry.canRecordExtended; + Services.telemetry.canRecordExtended = true; + checkTelemetryRecords(); + + for (let test of gTests) { + info(test.desc); + + // Create a tab to run the test. + let tab = gBrowser.selectedTab = gBrowser.addTab("about:blank"); + + // Start loading about:searchreset and wait for it to complete. + let url = "about:searchreset?data=" + encodeURIComponent(kSearchStr) + + "&purpose=" + kSearchPurpose; + yield promiseTabLoadEvent(tab, url); + + info("Running test"); + yield test.run(); + + info("Cleanup"); + gBrowser.removeCurrentTab(); + } + + Services.telemetry.canRecordExtended = oldCanRecord; + }).then(finish, ex => { + ok(false, "Unexpected Exception: " + ex); + finish(); + }); +} |