summaryrefslogtreecommitdiffstats
path: root/browser/base/content/aboutTabCrashed.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/aboutTabCrashed.js')
-rw-r--r--browser/base/content/aboutTabCrashed.js309
1 files changed, 0 insertions, 309 deletions
diff --git a/browser/base/content/aboutTabCrashed.js b/browser/base/content/aboutTabCrashed.js
deleted file mode 100644
index 337add1d2..000000000
--- a/browser/base/content/aboutTabCrashed.js
+++ /dev/null
@@ -1,309 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var AboutTabCrashed = {
- /**
- * This can be set to true once this page receives a message from the
- * parent saying whether or not a crash report is available.
- */
- hasReport: false,
-
- /**
- * The messages that we might receive from the parent.
- */
- MESSAGES: [
- "SetCrashReportAvailable",
- "CrashReportSent",
- "UpdateCount",
- ],
-
- /**
- * Items for which we will listen for click events.
- */
- CLICK_TARGETS: [
- "closeTab",
- "restoreTab",
- "restoreAll",
- "sendReport",
- ],
-
- /**
- * Returns information about this crashed tab.
- *
- * @return (Object) An object with the following properties:
- * title (String):
- * The title of the page that crashed.
- * URL (String):
- * The URL of the page that crashed.
- */
- get pageData() {
- delete this.pageData;
-
- let URL = document.documentURI;
- let queryString = URL.replace(/^about:tabcrashed?e=tabcrashed/, "");
-
- let titleMatch = queryString.match(/d=([^&]*)/);
- let URLMatch = queryString.match(/u=([^&]*)/);
-
- return this.pageData = {
- title: titleMatch && titleMatch[1] ? decodeURIComponent(titleMatch[1]) : "",
- URL: URLMatch && URLMatch[1] ? decodeURIComponent(URLMatch[1]) : "",
- };
- },
-
- init() {
- this.MESSAGES.forEach((msg) => addMessageListener(msg, this.receiveMessage.bind(this)));
- addEventListener("DOMContentLoaded", this);
-
- document.title = this.pageData.title;
- },
-
- receiveMessage(message) {
- switch (message.name) {
- case "UpdateCount": {
- this.setMultiple(message.data.count > 1);
- break;
- }
- case "SetCrashReportAvailable": {
- this.onSetCrashReportAvailable(message);
- break;
- }
- case "CrashReportSent": {
- this.onCrashReportSent();
- break;
- }
- }
- },
-
- handleEvent(event) {
- switch (event.type) {
- case "DOMContentLoaded": {
- this.onDOMContentLoaded();
- break;
- }
- case "click": {
- this.onClick(event);
- break;
- }
- case "input": {
- this.onInput(event);
- break;
- }
- }
- },
-
- onDOMContentLoaded() {
- this.CLICK_TARGETS.forEach((targetID) => {
- let el = document.getElementById(targetID);
- el.addEventListener("click", this);
- });
-
- // For setting "emailMe" checkbox automatically on email value change.
- document.getElementById("email").addEventListener("input", this);
-
- // Error pages are loaded as LOAD_BACKGROUND, so they don't get load events.
- let event = new CustomEvent("AboutTabCrashedLoad", {bubbles:true});
- document.dispatchEvent(event);
-
- sendAsyncMessage("Load");
- },
-
- onClick(event) {
- switch (event.target.id) {
- case "closeTab": {
- this.sendMessage("closeTab");
- break;
- }
-
- case "restoreTab": {
- this.sendMessage("restoreTab");
- break;
- }
-
- case "restoreAll": {
- this.sendMessage("restoreAll");
- break;
- }
-
- case "sendReport": {
- this.showCrashReportUI(event.target.checked);
- break;
- }
- }
- },
-
- onInput(event) {
- switch (event.target.id) {
- case "email": {
- document.getElementById("emailMe").checked = !!event.target.value;
- break;
- }
- }
- },
- /**
- * After this page tells the parent that it has loaded, the parent
- * will respond with whether or not a crash report is available. This
- * method handles that message.
- *
- * @param message
- * The message from the parent, which should contain a data
- * Object property with the following properties:
- *
- * hasReport (bool):
- * Whether or not there is a crash report.
- *
- * sendReport (bool):
- * Whether or not the the user prefers to send the report
- * by default.
- *
- * includeURL (bool):
- * Whether or not the user prefers to send the URL of
- * the tab that crashed.
- *
- * emailMe (bool):
- * Whether or not to send the email address of the user
- * in the report.
- *
- * email (String):
- * The email address of the user (empty if emailMe is false).
- *
- * requestAutoSubmit (bool):
- * Whether or not we should ask the user to automatically
- * submit backlogged crash reports.
- *
- */
- onSetCrashReportAvailable(message) {
- let data = message.data;
-
- if (data.hasReport) {
- this.hasReport = true;
- document.documentElement.classList.add("crashDumpAvailable");
-
- document.getElementById("sendReport").checked = data.sendReport;
- document.getElementById("includeURL").checked = data.includeURL;
-
- if (data.requestEmail) {
- document.getElementById("requestEmail").hidden = false;
- document.getElementById("emailMe").checked = data.emailMe;
- if (data.emailMe) {
- document.getElementById("email").value = data.email;
- }
- }
-
- this.showCrashReportUI(data.sendReport);
- } else {
- this.showCrashReportUI(false);
- }
-
- if (data.requestAutoSubmit) {
- document.getElementById("requestAutoSubmit").hidden = false;
- }
-
- let event = new CustomEvent("AboutTabCrashedReady", {bubbles:true});
- document.dispatchEvent(event);
- },
-
- /**
- * Handler for when the parent reports that the crash report associated
- * with this about:tabcrashed page has been sent.
- */
- onCrashReportSent() {
- document.documentElement.classList.remove("crashDumpAvailable");
- document.documentElement.classList.add("crashDumpSubmitted");
- },
-
- /**
- * Toggles the display of the crash report form.
- *
- * @param shouldShow (bool)
- * True if the crash report form should be shown
- */
- showCrashReportUI(shouldShow) {
- let options = document.getElementById("options");
- options.hidden = !shouldShow;
- },
-
- /**
- * Toggles whether or not the page is one of several visible pages
- * showing the crash reporter. This controls some of the language
- * on the page, along with what the "primary" button is.
- *
- * @param hasMultiple (bool)
- * True if there are multiple crash report pages being shown.
- */
- setMultiple(hasMultiple) {
- let main = document.getElementById("main");
- main.setAttribute("multiple", hasMultiple);
-
- let restoreTab = document.getElementById("restoreTab");
-
- // The "Restore All" button has the "primary" class by default, so
- // we only need to modify the "Restore Tab" button.
- if (hasMultiple) {
- restoreTab.classList.remove("primary");
- } else {
- restoreTab.classList.add("primary");
- }
- },
-
- /**
- * Sends a message to the parent in response to the user choosing
- * one of the actions available on the page. This might also send up
- * crash report information if the user has chosen to submit a crash
- * report.
- *
- * @param messageName (String)
- * The message to send to the parent
- */
- sendMessage(messageName) {
- let comments = "";
- let email = "";
- let URL = "";
- let sendReport = false;
- let emailMe = false;
- let includeURL = false;
- let autoSubmit = false;
-
- if (this.hasReport) {
- sendReport = document.getElementById("sendReport").checked;
- if (sendReport) {
- comments = document.getElementById("comments").value.trim();
-
- includeURL = document.getElementById("includeURL").checked;
- if (includeURL) {
- URL = this.pageData.URL.trim();
- }
-
- if (!document.getElementById("requestEmail").hidden) {
- emailMe = document.getElementById("emailMe").checked;
- if (emailMe) {
- email = document.getElementById("email").value.trim();
- }
- }
- }
- }
-
- let requestAutoSubmit = document.getElementById("requestAutoSubmit");
- if (requestAutoSubmit.hidden) {
- // The checkbox is hidden if the user has already opted in to sending
- // backlogged crash reports.
- autoSubmit = true;
- } else {
- autoSubmit = document.getElementById("autoSubmit").checked;
- }
-
- sendAsyncMessage(messageName, {
- sendReport,
- comments,
- email,
- emailMe,
- includeURL,
- URL,
- autoSubmit,
- hasReport: this.hasReport,
- });
- },
-};
-
-AboutTabCrashed.init();