summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser_aboutSearchReset.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/browser_aboutSearchReset.js')
-rw-r--r--browser/components/search/test/browser_aboutSearchReset.js159
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();
+ });
+}