summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabcrashed
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/tabcrashed')
-rw-r--r--browser/base/content/test/tabcrashed/browser.ini13
-rw-r--r--browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js152
-rw-r--r--browser/base/content/test/tabcrashed/browser_clearEmail.js85
-rw-r--r--browser/base/content/test/tabcrashed/browser_showForm.js40
-rw-r--r--browser/base/content/test/tabcrashed/browser_shown.js203
-rw-r--r--browser/base/content/test/tabcrashed/browser_withoutDump.js36
-rw-r--r--browser/base/content/test/tabcrashed/head.js110
7 files changed, 0 insertions, 639 deletions
diff --git a/browser/base/content/test/tabcrashed/browser.ini b/browser/base/content/test/tabcrashed/browser.ini
deleted file mode 100644
index 051b40d9f..000000000
--- a/browser/base/content/test/tabcrashed/browser.ini
+++ /dev/null
@@ -1,13 +0,0 @@
-[DEFAULT]
-support-files =
- head.js
-[browser_shown.js]
-skip-if = !e10s || !crashreporter
-[browser_clearEmail.js]
-skip-if = !e10s || !crashreporter
-[browser_showForm.js]
-skip-if = !e10s || !crashreporter
-[browser_withoutDump.js]
-skip-if = !e10s
-[browser_autoSubmitRequest.js]
-skip-if = !e10s || !crashreporter
diff --git a/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js b/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
deleted file mode 100644
index 778331814..000000000
--- a/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
+++ /dev/null
@@ -1,152 +0,0 @@
-"use strict";
-
-const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
-const AUTOSUBMIT_PREF = "browser.crashReports.unsubmittedCheck.autoSubmit2";
-
-const {TabStateFlusher} =
- Cu.import("resource:///modules/sessionstore/TabStateFlusher.jsm", {});
-
-// On debug builds, crashing tabs results in much thinking, which
-// slows down the test and results in intermittent test timeouts,
-// so we'll pump up the expected timeout for this test.
-requestLongerTimeout(2);
-
-/**
- * Tests that if the user is not configured to autosubmit
- * backlogged crash reports, that we offer to do that, and
- * that the user can accept that offer.
- */
-add_task(function* test_show_form() {
- yield SpecialPowers.pushPrefEnv({
- set: [[AUTOSUBMIT_PREF, false]],
- })
-
- return BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- // Make sure we've flushed the browser messages so that
- // we can restore it.
- yield TabStateFlusher.flush(browser);
-
- // Now crash the browser.
- yield BrowserTestUtils.crashBrowser(browser);
-
- let doc = browser.contentDocument;
-
- // Ensure the request is visible. We can safely reach into
- // the content since about:tabcrashed is an in-process URL.
- let requestAutoSubmit = doc.getElementById("requestAutoSubmit");
- Assert.ok(!requestAutoSubmit.hidden,
- "Request for autosubmission is visible.");
-
- // Since the pref is set to false, the checkbox should be
- // unchecked.
- let autoSubmit = doc.getElementById("autoSubmit");
- Assert.ok(!autoSubmit.checked,
- "Checkbox for autosubmission is not checked.")
-
- // Check the checkbox, and then restore the tab.
- autoSubmit.checked = true;
- let restoreButton = doc.getElementById("restoreTab");
- restoreButton.click();
-
- yield BrowserTestUtils.browserLoaded(browser, false, PAGE);
-
- // The autosubmission pref should now be set.
- Assert.ok(Services.prefs.getBoolPref(AUTOSUBMIT_PREF),
- "Autosubmission pref should have been set.");
- });
-});
-
-/**
- * Tests that if the user is autosubmitting backlogged crash reports
- * that we don't make the offer again.
- */
-add_task(function* test_show_form() {
- yield SpecialPowers.pushPrefEnv({
- set: [[AUTOSUBMIT_PREF, true]],
- })
-
- return BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- yield TabStateFlusher.flush(browser);
- // Now crash the browser.
- yield BrowserTestUtils.crashBrowser(browser);
-
- let doc = browser.contentDocument;
-
- // Ensure the request is NOT visible. We can safely reach into
- // the content since about:tabcrashed is an in-process URL.
- let requestAutoSubmit = doc.getElementById("requestAutoSubmit");
- Assert.ok(requestAutoSubmit.hidden,
- "Request for autosubmission is not visible.");
-
- // Restore the tab.
- let restoreButton = doc.getElementById("restoreTab");
- restoreButton.click();
-
- yield BrowserTestUtils.browserLoaded(browser, false, PAGE);
-
- // The autosubmission pref should still be set to true.
- Assert.ok(Services.prefs.getBoolPref(AUTOSUBMIT_PREF),
- "Autosubmission pref should have been set.");
- });
-});
-
-/**
- * Tests that we properly set the autoSubmit preference if the user is
- * presented with a tabcrashed page without a crash report.
- */
-add_task(function* test_no_offer() {
- // We should default to sending the report.
- Assert.ok(TabCrashHandler.prefs.getBoolPref("sendReport"));
-
- yield SpecialPowers.pushPrefEnv({
- set: [[AUTOSUBMIT_PREF, false]],
- });
-
- yield BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- yield TabStateFlusher.flush(browser);
-
- // Make it so that it seems like no dump is available for the next crash.
- prepareNoDump();
-
- // Now crash the browser.
- yield BrowserTestUtils.crashBrowser(browser);
-
- // eslint-disable-next-line mozilla/no-cpows-in-tests
- let doc = browser.contentDocument;
-
- // Ensure the request to autosubmit is invisible, since there's no report.
- let requestRect = doc.getElementById("requestAutoSubmit")
- .getBoundingClientRect();
- Assert.equal(0, requestRect.height,
- "Request for autosubmission has no height");
- Assert.equal(0, requestRect.width,
- "Request for autosubmission has no width");
-
- // Since the pref is set to false, the checkbox should be
- // unchecked.
- let autoSubmit = doc.getElementById("autoSubmit");
- Assert.ok(!autoSubmit.checked,
- "Checkbox for autosubmission is not checked.");
-
- let restoreButton = doc.getElementById("restoreTab");
- restoreButton.click();
-
- yield BrowserTestUtils.browserLoaded(browser, false, PAGE);
-
- // The autosubmission pref should now be set.
- Assert.ok(!Services.prefs.getBoolPref(AUTOSUBMIT_PREF),
- "Autosubmission pref should not have changed.");
- });
-
- // We should not have changed the default value for sending the report.
- Assert.ok(TabCrashHandler.prefs.getBoolPref("sendReport"));
-});
diff --git a/browser/base/content/test/tabcrashed/browser_clearEmail.js b/browser/base/content/test/tabcrashed/browser_clearEmail.js
deleted file mode 100644
index 9ec04944f..000000000
--- a/browser/base/content/test/tabcrashed/browser_clearEmail.js
+++ /dev/null
@@ -1,85 +0,0 @@
-"use strict";
-
-const SERVER_URL = "http://example.com/browser/toolkit/crashreporter/test/browser/crashreport.sjs";
-const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
-const EMAIL = "foo@privacy.com";
-
-/**
- * Sets up the browser to send crash reports to the local crash report
- * testing server.
- */
-add_task(function* setup() {
- // The test harness sets MOZ_CRASHREPORTER_NO_REPORT, which disables crash
- // reports. This test needs them enabled. The test also needs a mock
- // report server, and fortunately one is already set up by toolkit/
- // crashreporter/test/Makefile.in. Assign its URL to MOZ_CRASHREPORTER_URL,
- // which CrashSubmit.jsm uses as a server override.
- let env = Cc["@mozilla.org/process/environment;1"]
- .getService(Components.interfaces.nsIEnvironment);
- let noReport = env.get("MOZ_CRASHREPORTER_NO_REPORT");
- let serverUrl = env.get("MOZ_CRASHREPORTER_URL");
- env.set("MOZ_CRASHREPORTER_NO_REPORT", "");
- env.set("MOZ_CRASHREPORTER_URL", SERVER_URL);
-
- // By default, requesting the email address of the user is disabled.
- // For the purposes of this test, we turn it back on.
- yield SpecialPowers.pushPrefEnv({
- set: [["browser.tabs.crashReporting.requestEmail", true]],
- });
-
- registerCleanupFunction(function() {
- env.set("MOZ_CRASHREPORTER_NO_REPORT", noReport);
- env.set("MOZ_CRASHREPORTER_URL", serverUrl);
- });
-});
-
-/**
- * Test that if we have an email address stored in prefs, and we decide
- * not to submit the email address in the next crash report, that we
- * clear the email address.
- */
-add_task(function* test_clear_email() {
- return BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- let prefs = TabCrashHandler.prefs;
- let originalSendReport = prefs.getBoolPref("sendReport");
- let originalEmailMe = prefs.getBoolPref("emailMe");
- let originalIncludeURL = prefs.getBoolPref("includeURL");
- let originalEmail = prefs.getCharPref("email");
-
- // Pretend that we stored an email address from the previous
- // crash
- prefs.setCharPref("email", EMAIL);
- prefs.setBoolPref("emailMe", true);
-
- let tab = gBrowser.getTabForBrowser(browser);
- yield BrowserTestUtils.crashBrowser(browser);
- let doc = browser.contentDocument;
-
- // Since about:tabcrashed will run in the parent process, we can safely
- // manipulate its DOM nodes directly
- let emailMe = doc.getElementById("emailMe");
- emailMe.checked = false;
-
- let crashReport = promiseCrashReport({
- Email: "",
- });
-
- let restoreTab = browser.contentDocument.getElementById("restoreTab");
- restoreTab.click();
- yield BrowserTestUtils.waitForEvent(tab, "SSTabRestored");
- yield crashReport;
-
- is(prefs.getCharPref("email"), "", "No email address should be stored");
-
- // Submitting the crash report may have set some prefs regarding how to
- // send tab crash reports. Let's reset them for the next test.
- prefs.setBoolPref("sendReport", originalSendReport);
- prefs.setBoolPref("emailMe", originalEmailMe);
- prefs.setBoolPref("includeURL", originalIncludeURL);
- prefs.setCharPref("email", originalEmail);
- });
-});
-
diff --git a/browser/base/content/test/tabcrashed/browser_showForm.js b/browser/base/content/test/tabcrashed/browser_showForm.js
deleted file mode 100644
index 780af93fb..000000000
--- a/browser/base/content/test/tabcrashed/browser_showForm.js
+++ /dev/null
@@ -1,40 +0,0 @@
-"use strict";
-
-const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
-
-// On debug builds, crashing tabs results in much thinking, which
-// slows down the test and results in intermittent test timeouts,
-// so we'll pump up the expected timeout for this test.
-requestLongerTimeout(2);
-
-/**
- * Tests that we show the about:tabcrashed additional details form
- * if the "submit a crash report" checkbox was checked by default.
- */
-add_task(function* test_show_form() {
- return BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- // Flip the pref so that the checkbox should be checked
- // by default.
- let pref = TabCrashHandler.prefs.root + "sendReport";
- yield SpecialPowers.pushPrefEnv({
- set: [[pref, true]]
- });
-
- // Now crash the browser.
- yield BrowserTestUtils.crashBrowser(browser);
-
- let doc = browser.contentDocument;
-
- // Ensure the checkbox is checked. We can safely reach into
- // the content since about:tabcrashed is an in-process URL.
- let checkbox = doc.getElementById("sendReport");
- ok(checkbox.checked, "Send report checkbox is checked.");
-
- // Ensure the options form is displayed.
- let options = doc.getElementById("options");
- ok(!options.hidden, "Showing the crash report options form.");
- });
-});
diff --git a/browser/base/content/test/tabcrashed/browser_shown.js b/browser/base/content/test/tabcrashed/browser_shown.js
deleted file mode 100644
index d09d9438f..000000000
--- a/browser/base/content/test/tabcrashed/browser_shown.js
+++ /dev/null
@@ -1,203 +0,0 @@
-"use strict";
-
-const SERVER_URL = "http://example.com/browser/toolkit/crashreporter/test/browser/crashreport.sjs";
-const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
-const COMMENTS = "Here's my test comment!";
-const EMAIL = "foo@privacy.com";
-
-/**
- * Sets up the browser to send crash reports to the local crash report
- * testing server.
- */
-add_task(function* setup() {
- // The test harness sets MOZ_CRASHREPORTER_NO_REPORT, which disables crash
- // reports. This test needs them enabled. The test also needs a mock
- // report server, and fortunately one is already set up by toolkit/
- // crashreporter/test/Makefile.in. Assign its URL to MOZ_CRASHREPORTER_URL,
- // which CrashSubmit.jsm uses as a server override.
- let env = Cc["@mozilla.org/process/environment;1"]
- .getService(Components.interfaces.nsIEnvironment);
- let noReport = env.get("MOZ_CRASHREPORTER_NO_REPORT");
- let serverUrl = env.get("MOZ_CRASHREPORTER_URL");
- env.set("MOZ_CRASHREPORTER_NO_REPORT", "");
- env.set("MOZ_CRASHREPORTER_URL", SERVER_URL);
-
- // On debug builds, crashing tabs results in much thinking, which
- // slows down the test and results in intermittent test timeouts,
- // so we'll pump up the expected timeout for this test.
- requestLongerTimeout(2);
-
- registerCleanupFunction(function() {
- env.set("MOZ_CRASHREPORTER_NO_REPORT", noReport);
- env.set("MOZ_CRASHREPORTER_URL", serverUrl);
- });
-});
-
-/**
- * This function returns a Promise that resolves once the following
- * actions have taken place:
- *
- * 1) A new tab is opened up at PAGE
- * 2) The tab is crashed
- * 3) The about:tabcrashed page's fields are set in accordance with
- * fieldValues
- * 4) The tab is restored
- * 5) A crash report is received from the testing server
- * 6) Any tab crash prefs that were overwritten are reset
- *
- * @param fieldValues
- * An Object describing how to set the about:tabcrashed
- * fields. The following properties are accepted:
- *
- * comments (String)
- * The comments to put in the comment textarea
- * email (String)
- * The email address to put in the email address input
- * emailMe (bool)
- * The checked value of the "Email me" checkbox
- * includeURL (bool)
- * The checked value of the "Include URL" checkbox
- *
- * If any of these fields are missing, the defaults from
- * the user preferences are used.
- * @param expectedExtra
- * An Object describing the expected values that the submitted
- * crash report's extra data should contain.
- * @returns Promise
- */
-function crashTabTestHelper(fieldValues, expectedExtra) {
- return BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- let prefs = TabCrashHandler.prefs;
- let originalSendReport = prefs.getBoolPref("sendReport");
- let originalEmailMe = prefs.getBoolPref("emailMe");
- let originalIncludeURL = prefs.getBoolPref("includeURL");
- let originalEmail = prefs.getCharPref("email");
-
- let tab = gBrowser.getTabForBrowser(browser);
- yield BrowserTestUtils.crashBrowser(browser);
- let doc = browser.contentDocument;
-
- // Since about:tabcrashed will run in the parent process, we can safely
- // manipulate its DOM nodes directly
- let comments = doc.getElementById("comments");
- let email = doc.getElementById("email");
- let emailMe = doc.getElementById("emailMe");
- let includeURL = doc.getElementById("includeURL");
-
- if (fieldValues.hasOwnProperty("comments")) {
- comments.value = fieldValues.comments;
- }
-
- if (fieldValues.hasOwnProperty("email")) {
- email.value = fieldValues.email;
- }
-
- if (fieldValues.hasOwnProperty("emailMe")) {
- emailMe.checked = fieldValues.emailMe;
- }
-
- if (fieldValues.hasOwnProperty("includeURL")) {
- includeURL.checked = fieldValues.includeURL;
- }
-
- let crashReport = promiseCrashReport(expectedExtra);
- let restoreTab = browser.contentDocument.getElementById("restoreTab");
- restoreTab.click();
- yield BrowserTestUtils.waitForEvent(tab, "SSTabRestored");
- yield crashReport;
-
- // Submitting the crash report may have set some prefs regarding how to
- // send tab crash reports. Let's reset them for the next test.
- prefs.setBoolPref("sendReport", originalSendReport);
- prefs.setBoolPref("emailMe", originalEmailMe);
- prefs.setBoolPref("includeURL", originalIncludeURL);
- prefs.setCharPref("email", originalEmail);
- });
-}
-
-/**
- * Tests what we send with the crash report by default. By default, we do not
- * send any comments, the URL of the crashing page, or the email address of
- * the user.
- */
-add_task(function* test_default() {
- yield crashTabTestHelper({}, {
- "Comments": null,
- "URL": "",
- "Email": null,
- });
-});
-
-/**
- * Test just sending a comment.
- */
-add_task(function* test_just_a_comment() {
- yield crashTabTestHelper({
- comments: COMMENTS,
- }, {
- "Comments": COMMENTS,
- "URL": "",
- "Email": null,
- });
-});
-
-/**
- * Test that we don't send email if emailMe is unchecked
- */
-add_task(function* test_no_email() {
- yield crashTabTestHelper({
- email: EMAIL,
- emailMe: false,
- }, {
- "Comments": null,
- "URL": "",
- "Email": null,
- });
-});
-
-/**
- * Test that we can send an email address if emailMe is checked
- */
-add_task(function* test_yes_email() {
- yield crashTabTestHelper({
- email: EMAIL,
- emailMe: true,
- }, {
- "Comments": null,
- "URL": "",
- "Email": EMAIL,
- });
-});
-
-/**
- * Test that we will send the URL of the page if includeURL is checked.
- */
-add_task(function* test_send_URL() {
- yield crashTabTestHelper({
- includeURL: true,
- }, {
- "Comments": null,
- "URL": PAGE,
- "Email": null,
- });
-});
-
-/**
- * Test that we can send comments, the email address, and the URL
- */
-add_task(function* test_send_all() {
- yield crashTabTestHelper({
- includeURL: true,
- emailMe: true,
- email: EMAIL,
- comments: COMMENTS,
- }, {
- "Comments": COMMENTS,
- "URL": PAGE,
- "Email": EMAIL,
- });
-});
-
diff --git a/browser/base/content/test/tabcrashed/browser_withoutDump.js b/browser/base/content/test/tabcrashed/browser_withoutDump.js
deleted file mode 100644
index 62557f443..000000000
--- a/browser/base/content/test/tabcrashed/browser_withoutDump.js
+++ /dev/null
@@ -1,36 +0,0 @@
-"use strict";
-
-const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
-
-add_task(function* setup() {
- prepareNoDump();
-});
-
-/**
- * Tests tab crash page when a dump is not available.
- */
-add_task(function* test_without_dump() {
- return BrowserTestUtils.withNewTab({
- gBrowser,
- url: PAGE,
- }, function*(browser) {
- let tab = gBrowser.getTabForBrowser(browser);
- yield BrowserTestUtils.crashBrowser(browser);
-
- let tabRemovedPromise = BrowserTestUtils.removeTab(tab, { dontRemove: true });
-
- yield ContentTask.spawn(browser, null, function*() {
- let doc = content.document;
- Assert.ok(!doc.documentElement.classList.contains("crashDumpAvailable"),
- "doesn't have crash dump");
-
- let options = doc.getElementById("options");
- Assert.ok(options, "has crash report options");
- Assert.ok(options.hidden, "crash report options are hidden");
-
- doc.getElementById("closeTab").click();
- });
-
- yield tabRemovedPromise;
- });
-});
diff --git a/browser/base/content/test/tabcrashed/head.js b/browser/base/content/test/tabcrashed/head.js
deleted file mode 100644
index 6eee08f13..000000000
--- a/browser/base/content/test/tabcrashed/head.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Returns a Promise that resolves once a crash report has
- * been submitted. This function will also test the crash
- * reports extra data to see if it matches expectedExtra.
- *
- * @param expectedExtra (object)
- * An Object whose key-value pairs will be compared
- * against the key-value pairs in the extra data of the
- * crash report. A test failure will occur if there is
- * a mismatch.
- *
- * If the value of the key-value pair is "null", this will
- * be interpreted as "this key should not be included in the
- * extra data", and will cause a test failure if it is detected
- * in the crash report.
- *
- * Note that this will ignore any keys that are not included
- * in expectedExtra. It's possible that the crash report
- * will contain other extra information that is not
- * compared against.
- * @returns Promise
- */
-function promiseCrashReport(expectedExtra={}) {
- return Task.spawn(function*() {
- info("Starting wait on crash-report-status");
- let [subject, ] =
- yield TestUtils.topicObserved("crash-report-status", (unused, data) => {
- return data == "success";
- });
- info("Topic observed!");
-
- if (!(subject instanceof Ci.nsIPropertyBag2)) {
- throw new Error("Subject was not a Ci.nsIPropertyBag2");
- }
-
- let remoteID = getPropertyBagValue(subject, "serverCrashID");
- if (!remoteID) {
- throw new Error("Report should have a server ID");
- }
-
- let file = Cc["@mozilla.org/file/local;1"]
- .createInstance(Ci.nsILocalFile);
- file.initWithPath(Services.crashmanager._submittedDumpsDir);
- file.append(remoteID + ".txt");
- if (!file.exists()) {
- throw new Error("Report should have been received by the server");
- }
-
- file.remove(false);
-
- let extra = getPropertyBagValue(subject, "extra");
- if (!(extra instanceof Ci.nsIPropertyBag2)) {
- throw new Error("extra was not a Ci.nsIPropertyBag2");
- }
-
- info("Iterating crash report extra keys");
- let enumerator = extra.enumerator;
- while (enumerator.hasMoreElements()) {
- let key = enumerator.getNext().QueryInterface(Ci.nsIProperty).name;
- let value = extra.getPropertyAsAString(key);
- if (key in expectedExtra) {
- if (expectedExtra[key] == null) {
- ok(false, `Got unexpected key ${key} with value ${value}`);
- } else {
- is(value, expectedExtra[key],
- `Crash report had the right extra value for ${key}`);
- }
- }
- }
- });
-}
-
-
-/**
- * For an nsIPropertyBag, returns the value for a given
- * key.
- *
- * @param bag
- * The nsIPropertyBag to retrieve the value from
- * @param key
- * The key that we want to get the value for from the
- * bag
- * @returns The value corresponding to the key from the bag,
- * or null if the value could not be retrieved (for
- * example, if no value is set at that key).
-*/
-function getPropertyBagValue(bag, key) {
- try {
- let val = bag.getProperty(key);
- return val;
- } catch (e) {
- if (e.result != Cr.NS_ERROR_FAILURE) {
- throw e;
- }
- }
-
- return null;
-}
-
-/**
- * Monkey patches TabCrashHandler.getDumpID to return null in order to test
- * about:tabcrashed when a dump is not available.
- */
-function prepareNoDump() {
- let originalGetDumpID = TabCrashHandler.getDumpID;
- TabCrashHandler.getDumpID = function(browser) { return null; };
- registerCleanupFunction(() => {
- TabCrashHandler.getDumpID = originalGetDumpID;
- });
-}