Backed out changeset 85303b3d8d17 (bug 882790) a=backout
authorGabriel Luong <gabriel.luong@gmail.com>
Fri, 07 Aug 2015 13:22:57 -0700
changeset 288514 789ccabdbadc733faaeff2647ad437b24525b043
parent 288513 8d0287d9c8e4e05e0245d9fcc7f5e03cbd58fe0b
child 288515 a5bde89f6829769775f74aeed8ac0de66bc36eac
child 288562 f6a62807987dfc0ed86f3d752beb767efdd6d3cf
push id5067
push userraliiev@mozilla.com
push dateMon, 21 Sep 2015 14:04:52 +0000
treeherdermozilla-beta@14221ffe5b2f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbackout
bugs882790
milestone42.0a1
backs out85303b3d8d177430f72276c553d93b7cf3872d5f
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 85303b3d8d17 (bug 882790) a=backout
browser/devtools/debugger/debugger.xul
browser/devtools/debugger/test/browser_dbg_pause-exceptions-01.js
browser/devtools/debugger/test/browser_dbg_pause-exceptions-02.js
browser/devtools/debugger/test/browser_dbg_source-maps-04.js
browser/devtools/debugger/views/options-view.js
browser/devtools/debugger/views/sources-view.js
browser/devtools/debugger/views/stack-frames-view.js
browser/locales/en-US/chrome/browser/devtools/debugger.dtd
browser/locales/en-US/chrome/browser/devtools/debugger.properties
browser/themes/linux/jar.mn
browser/themes/osx/jar.mn
browser/themes/shared/devtools/debugger.css
browser/themes/shared/devtools/images/debugger-no-pause-exceptions.png
browser/themes/shared/devtools/images/debugger-no-pause-exceptions@2x.png
browser/themes/shared/devtools/images/debugger-pause-all-exceptions.png
browser/themes/shared/devtools/images/debugger-pause-all-exceptions@2x.png
browser/themes/shared/devtools/images/debugger-pause-uncaught-exceptions.png
browser/themes/shared/devtools/images/debugger-pause-uncaught-exceptions@2x.png
browser/themes/windows/jar.mn
--- a/browser/devtools/debugger/debugger.xul
+++ b/browser/devtools/debugger/debugger.xul
@@ -122,16 +122,26 @@
                onpopupshowing="DebuggerView.Options._onPopupShowing()"
                onpopuphiding="DebuggerView.Options._onPopupHiding()"
                onpopuphidden="DebuggerView.Options._onPopupHidden()">
       <menuitem id="auto-pretty-print"
                 type="checkbox"
                 label="&debuggerUI.autoPrettyPrint;"
                 accesskey="&debuggerUI.autoPrettyPrint.accesskey;"
                 command="toggleAutoPrettyPrint"/>
+      <menuitem id="pause-on-exceptions"
+                type="checkbox"
+                label="&debuggerUI.pauseExceptions;"
+                accesskey="&debuggerUI.pauseExceptions.accesskey;"
+                command="togglePauseOnExceptions"/>
+      <menuitem id="ignore-caught-exceptions"
+                type="checkbox"
+                label="&debuggerUI.ignoreCaughtExceptions;"
+                accesskey="&debuggerUI.ignoreCaughtExceptions.accesskey;"
+                command="toggleIgnoreCaughtExceptions"/>
       <menuitem id="show-panes-on-startup"
                 type="checkbox"
                 label="&debuggerUI.showPanesOnInit;"
                 accesskey="&debuggerUI.showPanesOnInit.accesskey;"
                 command="toggleShowPanesOnStartup"/>
       <menuitem id="show-vars-only-enum"
                 type="checkbox"
                 label="&debuggerUI.showOnlyEnum;"
@@ -333,19 +343,16 @@
                                  command="prettyPrintCommand"
                                  hidden="true"/>
                 </hbox>
                 <vbox class="devtools-separator"/>
                 <toolbarbutton id="toggle-breakpoints"
                                class="devtools-toolbarbutton"
                                tooltiptext="&debuggerUI.sources.toggleBreakpoints;"
                                command="toggleBreakpointsCommand"/>
-                <toolbarbutton id="toggle-pause-exceptions"
-                               class="devtools-toolbarbutton"
-                               command="togglePauseOnExceptionsCommand"/>
                 <toolbarbutton id="toggle-promise-debugger"
                                class="devtools-toolbarbutton"
                                tooltiptext="&debuggerUI.sources.togglePromiseDebugger;"
                                command="togglePromiseDebuggerCommand"
                                hidden="true"/>
               </toolbar>
             </tabpanel>
             <tabpanel id="callstack-tabpanel">
--- a/browser/devtools/debugger/test/browser_dbg_pause-exceptions-01.js
+++ b/browser/devtools/debugger/test/browser_dbg_pause-exceptions-01.js
@@ -3,37 +3,40 @@
 
 /**
  * Make sure that pausing on exceptions works.
  */
 
 const TAB_URL = EXAMPLE_URL + "doc_pause-exceptions.html";
 
 let gTab, gPanel, gDebugger;
-let gFrames, gVariables, gPrefs;
+let gFrames, gVariables, gPrefs, gOptions;
 
 function test() {
   requestLongerTimeout(2);
   initDebugger(TAB_URL).then(([aTab,, aPanel]) => {
     gTab = aTab;
     gPanel = aPanel;
     gDebugger = gPanel.panelWin;
     gFrames = gDebugger.DebuggerView.StackFrames;
     gVariables = gDebugger.DebuggerView.Variables;
     gPrefs = gDebugger.Prefs;
+    gOptions = gDebugger.DebuggerView.Options;
 
     is(gPrefs.pauseOnExceptions, false,
       "The pause-on-exceptions pref should be disabled by default.");
+    isnot(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should not be checked.");
 
     testPauseOnExceptionsDisabled()
-      .then(clickToPauseOnAllExceptions)
-      .then(testPauseOnAllExceptionsEnabled)
-      .then(clickToPauseOnUncaughtExceptions)
-      .then(testPauseOnUncaughtExceptionsEnabled)
-      .then(clickToStopPauseOnExceptions)
+      .then(enablePauseOnExceptions)
+      .then(disableIgnoreCaughtExceptions)
+      .then(testPauseOnExceptionsEnabled)
+      .then(disablePauseOnExceptions)
+      .then(enableIgnoreCaughtExceptions)
       .then(() => closeDebuggerAndFinish(gPanel))
       .then(null, aError => {
         ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
       });
   });
 }
 
 function testPauseOnExceptionsDisabled() {
@@ -74,62 +77,19 @@ function testPauseOnExceptionsDisabled()
     return finished;
   });
 
   generateMouseClickInTab(gTab, "content.document.querySelector('button')");
 
   return finished;
 }
 
-function testPauseOnUncaughtExceptionsEnabled() {
-  let finished = waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FETCHED_SCOPES).then(() => {
-    info("Testing enabled pause-on-uncaught-exceptions only.");
-
-    is(gDebugger.gThreadClient.state, "paused",
-      "Should only be getting stack frames while paused (1).");
-    ok(isCaretPos(gPanel, 26),
-      "Should be paused on the debugger statement (1).");
-
-    let innerScope = gVariables.getScopeAtIndex(0);
-    let innerNodes = innerScope.target.querySelector(".variables-view-element-details").childNodes;
-
-    is(gFrames.itemCount, 1,
-      "Should have one frame.");
-    is(gVariables._store.length, 3,
-      "Should have three scopes.");
-
-    is(innerNodes[0].querySelector(".name").getAttribute("value"), "this",
-      "Should have the right property name for 'this'.");
-    is(innerNodes[0].querySelector(".value").getAttribute("value"), "<button>",
-      "Should have the right property value for 'this'.");
-
-    let finished = waitForDebuggerEvents(gPanel, gDebugger.EVENTS.AFTER_FRAMES_CLEARED).then(() => {
-      isnot(gDebugger.gThreadClient.state, "paused",
-        "Should not be paused after resuming.");
-      ok(isCaretPos(gPanel, 26),
-        "Should be idle on the debugger statement.");
-
-      ok(true, "Frames were cleared, debugger didn't pause again.");
-    });
-
-    EventUtils.sendMouseEvent({ type: "mousedown" },
-      gDebugger.document.getElementById("resume"),
-      gDebugger);
-
-    return finished;
-  });
-
-  generateMouseClickInTab(gTab, "content.document.querySelector('button')");
-
-  return finished;
-}
-
-function testPauseOnAllExceptionsEnabled() {
+function testPauseOnExceptionsEnabled() {
   let finished = waitForCaretAndScopes(gPanel, 19).then(() => {
-    info("Testing enabled pause-on-all-exceptions.");
+    info("Testing enabled pause-on-exceptions.");
 
     is(gDebugger.gThreadClient.state, "paused",
       "Should only be getting stack frames while paused.");
     ok(isCaretPos(gPanel, 19),
       "Should be paused on the debugger statement.");
 
     let innerScope = gVariables.getScopeAtIndex(0);
     let innerNodes = innerScope.target.querySelector(".variables-view-element-details").childNodes;
@@ -140,17 +100,17 @@ function testPauseOnAllExceptionsEnabled
       "Should have three scopes.");
 
     is(innerNodes[0].querySelector(".name").getAttribute("value"), "<exception>",
       "Should have the right property name for <exception>.");
     is(innerNodes[0].querySelector(".value").getAttribute("value"), "Error",
       "Should have the right property value for <exception>.");
 
     let finished = waitForCaretAndScopes(gPanel, 26).then(() => {
-      info("Testing enabled pause-on-all-exceptions and resumed after pause.");
+      info("Testing enabled pause-on-exceptions and resumed after pause.");
 
       is(gDebugger.gThreadClient.state, "paused",
         "Should only be getting stack frames while paused.");
       ok(isCaretPos(gPanel, 26),
         "Should be paused on the debugger statement.");
 
       let innerScope = gVariables.getScopeAtIndex(0);
       let innerNodes = innerScope.target.querySelector(".variables-view-element-details").childNodes;
@@ -188,74 +148,93 @@ function testPauseOnAllExceptionsEnabled
     return finished;
   });
 
   generateMouseClickInTab(gTab, "content.document.querySelector('button')");
 
   return finished;
 }
 
-function clickToPauseOnAllExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function enablePauseOnExceptions() {
+  let deferred = promise.defer();
 
   gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Pause on uncaught exceptions",
-      "The button's tooltip text should be 'Pause on uncaught exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 1,
-      "The pause on exceptions button state variable should be 1");
+    is(gPrefs.pauseOnExceptions, true,
+      "The pause-on-exceptions pref should now be enabled.");
+    is(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should now be checked.");
 
-      deferred.resolve();
+    ok(true, "Pausing on exceptions was enabled.");
+    deferred.resolve();
   });
 
-  pauseOnExceptionsButton.click();
+  gOptions._pauseOnExceptionsItem.setAttribute("checked", "true");
+  gOptions._togglePauseOnExceptions();
+
+  return deferred.promise;
+}
+
+function disablePauseOnExceptions() {
+  let deferred = promise.defer();
+
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.pauseOnExceptions, false,
+      "The pause-on-exceptions pref should now be disabled.");
+    isnot(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should now be unchecked.");
+
+    ok(true, "Pausing on exceptions was disabled.");
+    deferred.resolve();
+  });
+
+  gOptions._pauseOnExceptionsItem.setAttribute("checked", "false");
+  gOptions._togglePauseOnExceptions();
 
   return deferred.promise;
 }
 
-function clickToPauseOnUncaughtExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function enableIgnoreCaughtExceptions() {
+  let deferred = promise.defer();
 
-  gDebugger.gThreadClient.addOneTimeListener("resumed", () =>{
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Do not pause on exceptions",
-      "The button's tooltip text should be 'Do not pause on exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 2,
-      "The pause on exceptions button state variable should be 2");
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.ignoreCaughtExceptions, true,
+      "The ignore-caught-exceptions pref should now be enabled.");
+    is(gOptions._ignoreCaughtExceptionsItem.getAttribute("checked"), "true",
+      "The ignore-caught-exceptions menu item should now be checked.");
 
-      deferred.resolve();
+    ok(true, "Ignore caught exceptions was enabled.");
+    deferred.resolve();
   });
-  pauseOnExceptionsButton.click();
+
+  gOptions._ignoreCaughtExceptionsItem.setAttribute("checked", "true");
+  gOptions._toggleIgnoreCaughtExceptions();
+
   return deferred.promise;
 }
 
-function clickToStopPauseOnExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function disableIgnoreCaughtExceptions() {
+  let deferred = promise.defer();
 
-  gDebugger.gThreadClient.addOneTimeListener("resumed", () =>{
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Pause on all exceptions",
-      "The button's tooltip text should be 'Pause on all exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 0,
-      "The pause on exceptions button state variable should be 0");
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.ignoreCaughtExceptions, false,
+      "The ignore-caught-exceptions pref should now be disabled.");
+    isnot(gOptions._ignoreCaughtExceptionsItem.getAttribute("checked"), "true",
+      "The ignore-caught-exceptions menu item should now be unchecked.");
 
-      deferred.resolve();
+    ok(true, "Ignore caught exceptions was disabled.");
+    deferred.resolve();
   });
-  pauseOnExceptionsButton.click();
+
+  gOptions._ignoreCaughtExceptionsItem.setAttribute("checked", "false");
+  gOptions._toggleIgnoreCaughtExceptions();
+
   return deferred.promise;
 }
 
-function getPauseOnExceptionsButton() {
-  return gDebugger.document.getElementById("toggle-pause-exceptions");
-}
-
-
 registerCleanupFunction(function() {
   gTab = null;
   gPanel = null;
   gDebugger = null;
   gFrames = null;
   gVariables = null;
   gPrefs = null;
+  gOptions = null;
 });
--- a/browser/devtools/debugger/test/browser_dbg_pause-exceptions-02.js
+++ b/browser/devtools/debugger/test/browser_dbg_pause-exceptions-02.js
@@ -1,48 +1,51 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
- * Make sure that pausing on exceptions works after tab reload.
+ * Make sure that pausing on exceptions works after reload.
  */
 
 const TAB_URL = EXAMPLE_URL + "doc_pause-exceptions.html";
 
 let gTab, gPanel, gDebugger;
-let gFrames, gVariables, gPrefs;
+let gFrames, gVariables, gPrefs, gOptions;
 
 function test() {
-  requestLongerTimeout(2);
   initDebugger(TAB_URL).then(([aTab,, aPanel]) => {
     gTab = aTab;
     gPanel = aPanel;
     gDebugger = gPanel.panelWin;
     gFrames = gDebugger.DebuggerView.StackFrames;
     gVariables = gDebugger.DebuggerView.Variables;
     gPrefs = gDebugger.Prefs;
+    gOptions = gDebugger.DebuggerView.Options;
 
     is(gPrefs.pauseOnExceptions, false,
       "The pause-on-exceptions pref should be disabled by default.");
+    isnot(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should not be checked.");
 
-    clickToPauseOnAllExceptions()
+    enablePauseOnExceptions()
+      .then(disableIgnoreCaughtExceptions)
       .then(() => reloadActiveTab(gPanel, gDebugger.EVENTS.SOURCE_SHOWN))
-      .then(testPauseOnAllExceptionsEnabledAfterReload)
-      .then(clickToPauseOnUncaughtExceptions)
-      .then(clickToStopPauseOnExceptions)
+      .then(testPauseOnExceptionsAfterReload)
+      .then(disablePauseOnExceptions)
+      .then(enableIgnoreCaughtExceptions)
       .then(() => closeDebuggerAndFinish(gPanel))
       .then(null, aError => {
         ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
       });
   });
 }
 
-function testPauseOnAllExceptionsEnabledAfterReload() {
+function testPauseOnExceptionsAfterReload() {
   let finished = waitForCaretAndScopes(gPanel, 19).then(() => {
-    info("Testing enabled pause-on-all-exceptions.");
+    info("Testing enabled pause-on-exceptions.");
 
     is(gDebugger.gThreadClient.state, "paused",
       "Should only be getting stack frames while paused.");
     ok(isCaretPos(gPanel, 19),
       "Should be paused on the debugger statement.");
 
     let innerScope = gVariables.getScopeAtIndex(0);
     let innerNodes = innerScope.target.querySelector(".variables-view-element-details").childNodes;
@@ -53,17 +56,17 @@ function testPauseOnAllExceptionsEnabled
       "Should have three scopes.");
 
     is(innerNodes[0].querySelector(".name").getAttribute("value"), "<exception>",
       "Should have the right property name for <exception>.");
     is(innerNodes[0].querySelector(".value").getAttribute("value"), "Error",
       "Should have the right property value for <exception>.");
 
     let finished = waitForCaretAndScopes(gPanel, 26).then(() => {
-      info("Testing enabled pause-on-all-exceptions and resumed after pause.");
+      info("Testing enabled pause-on-exceptions and resumed after pause.");
 
       is(gDebugger.gThreadClient.state, "paused",
         "Should only be getting stack frames while paused.");
       ok(isCaretPos(gPanel, 26),
         "Should be paused on the debugger statement.");
 
       let innerScope = gVariables.getScopeAtIndex(0);
       let innerNodes = innerScope.target.querySelector(".variables-view-element-details").childNodes;
@@ -101,73 +104,93 @@ function testPauseOnAllExceptionsEnabled
     return finished;
   });
 
   generateMouseClickInTab(gTab, "content.document.querySelector('button')");
 
   return finished;
 }
 
-function clickToPauseOnAllExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function enablePauseOnExceptions() {
+  let deferred = promise.defer();
 
   gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Pause on uncaught exceptions",
-      "The button's tooltip text should be 'Pause on uncaught exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 1,
-      "The pause on exceptions button state variable should be 1");
+    is(gPrefs.pauseOnExceptions, true,
+      "The pause-on-exceptions pref should now be enabled.");
+    is(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should now be checked.");
 
-      deferred.resolve();
+    ok(true, "Pausing on exceptions was enabled.");
+    deferred.resolve();
   });
 
-  pauseOnExceptionsButton.click();
+  gOptions._pauseOnExceptionsItem.setAttribute("checked", "true");
+  gOptions._togglePauseOnExceptions();
 
   return deferred.promise;
 }
 
-function clickToPauseOnUncaughtExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function disablePauseOnExceptions() {
+  let deferred = promise.defer();
 
-  gDebugger.gThreadClient.addOneTimeListener("resumed", () =>{
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Do not pause on exceptions",
-      "The button's tooltip text should be 'Do not pause on exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 2,
-      "The pause on exceptions button state variable should be 2");
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.pauseOnExceptions, false,
+      "The pause-on-exceptions pref should now be disabled.");
+    isnot(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should now be unchecked.");
 
-      deferred.resolve();
+    ok(true, "Pausing on exceptions was disabled.");
+    deferred.resolve();
   });
-  pauseOnExceptionsButton.click();
+
+  gOptions._pauseOnExceptionsItem.setAttribute("checked", "false");
+  gOptions._togglePauseOnExceptions();
+
   return deferred.promise;
 }
 
-function clickToStopPauseOnExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function enableIgnoreCaughtExceptions() {
+  let deferred = promise.defer();
 
-  gDebugger.gThreadClient.addOneTimeListener("resumed", () =>{
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Pause on all exceptions",
-      "The button's tooltip text should be 'Pause on all exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 0,
-      "The pause on exceptions button state variable should be 0");
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.ignoreCaughtExceptions, true,
+      "The ignore-caught-exceptions pref should now be enabled.");
+    is(gOptions._ignoreCaughtExceptionsItem.getAttribute("checked"), "true",
+      "The ignore-caught-exceptions menu item should now be checked.");
 
-      deferred.resolve();
+    ok(true, "Ignore caught exceptions was enabled.");
+    deferred.resolve();
   });
-  pauseOnExceptionsButton.click();
+
+  gOptions._ignoreCaughtExceptionsItem.setAttribute("checked", "true");
+  gOptions._toggleIgnoreCaughtExceptions();
+
   return deferred.promise;
 }
 
-function getPauseOnExceptionsButton() {
-  return gDebugger.document.getElementById("toggle-pause-exceptions");
+function disableIgnoreCaughtExceptions() {
+  let deferred = promise.defer();
+
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.ignoreCaughtExceptions, false,
+      "The ignore-caught-exceptions pref should now be disabled.");
+    isnot(gOptions._ignoreCaughtExceptionsItem.getAttribute("checked"), "true",
+      "The ignore-caught-exceptions menu item should now be unchecked.");
+
+    ok(true, "Ignore caught exceptions was disabled.");
+    deferred.resolve();
+  });
+
+  gOptions._ignoreCaughtExceptionsItem.setAttribute("checked", "false");
+  gOptions._toggleIgnoreCaughtExceptions();
+
+  return deferred.promise;
 }
 
 registerCleanupFunction(function() {
   gTab = null;
   gPanel = null;
   gDebugger = null;
   gFrames = null;
   gVariables = null;
   gPrefs = null;
+  gOptions = null;
 });
--- a/browser/devtools/debugger/test/browser_dbg_source-maps-04.js
+++ b/browser/devtools/debugger/test/browser_dbg_source-maps-04.js
@@ -7,106 +7,87 @@
 
 const TAB_URL = EXAMPLE_URL + "doc_minified_bogus_map.html";
 const JS_URL = EXAMPLE_URL + "code_math_bogus_map.js";
 
 // This test causes an error to be logged in the console, which appears in TBPL
 // logs, so we are disabling that here.
 DevToolsUtils.reportingDisabled = true;
 
-let gPanel, gDebugger, gFrames, gSources, gPrefs;
+let gPanel, gDebugger, gFrames, gSources, gPrefs, gOptions;
 
 function test() {
   initDebugger(TAB_URL).then(([aTab,, aPanel]) => {
     gPanel = aPanel;
     gDebugger = gPanel.panelWin;
     gFrames = gDebugger.DebuggerView.StackFrames;
     gSources = gDebugger.DebuggerView.Sources;
     gPrefs = gDebugger.Prefs;
+    gOptions = gDebugger.DebuggerView.Options;
 
     is(gPrefs.pauseOnExceptions, false,
       "The pause-on-exceptions pref should be disabled by default.");
+    isnot(gOptions._pauseOnExceptionsItem.getAttribute("checked"), "true",
+      "The pause-on-exceptions menu item should not be checked.");
 
     waitForSourceShown(gPanel, JS_URL)
       .then(checkInitialSource)
-      .then(clickToPauseOnAllExceptions)
-      .then(clickToPauseOnUncaughtExceptions)
+      .then(enablePauseOnExceptions)
+      .then(disableIgnoreCaughtExceptions)
       .then(testSetBreakpoint)
       .then(reloadPage)
       .then(testHitBreakpoint)
-      .then(clickToStopPauseOnExceptions)
+      .then(enableIgnoreCaughtExceptions)
+      .then(disablePauseOnExceptions)
       .then(() => closeDebuggerAndFinish(gPanel))
       .then(null, aError => {
         ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
       });
   });
 }
 
 function checkInitialSource() {
   isnot(gSources.selectedItem.attachment.source.url.indexOf("code_math_bogus_map.js"), -1,
     "The debugger should show the minified js file.");
 }
 
-function clickToPauseOnAllExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function enablePauseOnExceptions() {
+  let deferred = promise.defer();
 
   gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Pause on uncaught exceptions",
-      "The button's tooltip text should be 'Pause on uncaught exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 1,
-      "The pause on exceptions button state variable should be 1");
+    is(gPrefs.pauseOnExceptions, true,
+      "The pause-on-exceptions pref should now be enabled.");
 
-      deferred.resolve();
+    ok(true, "Pausing on exceptions was enabled.");
+    deferred.resolve();
   });
 
-  pauseOnExceptionsButton.click();
+  gOptions._pauseOnExceptionsItem.setAttribute("checked", "true");
+  gOptions._togglePauseOnExceptions();
 
   return deferred.promise;
 }
 
-function clickToPauseOnUncaughtExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
-
-  gDebugger.gThreadClient.addOneTimeListener("resumed", () =>{
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Do not pause on exceptions",
-      "The button's tooltip text should be 'Do not pause on exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 2,
-      "The pause on exceptions button state variable should be 2");
-
-      deferred.resolve();
-  });
-  pauseOnExceptionsButton.click();
-  return deferred.promise;
-}
-
-function clickToStopPauseOnExceptions() {
-  var deferred = promise.defer();
-  var pauseOnExceptionsButton = getPauseOnExceptionsButton();
+function disableIgnoreCaughtExceptions() {
+  let deferred = promise.defer();
 
   gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
-    is(pauseOnExceptionsButton.getAttribute("tooltiptext"),
-      "Pause on all exceptions",
-      "The button's tooltip text should be 'Pause on all exceptions'.");
-    is(pauseOnExceptionsButton.getAttribute("state"), 0,
-      "The pause on exceptions button state variable should be 0");
+    is(gPrefs.ignoreCaughtExceptions, false,
+      "The ignore-caught-exceptions pref should now be disabled.");
 
-      deferred.resolve();
+    ok(true, "Ignore caught exceptions was disabled.");
+    deferred.resolve();
   });
-  pauseOnExceptionsButton.click();
+
+  gOptions._ignoreCaughtExceptionsItem.setAttribute("checked", "false");
+  gOptions._toggleIgnoreCaughtExceptions();
+
   return deferred.promise;
 }
 
-function getPauseOnExceptionsButton() {
-  return gDebugger.document.getElementById("toggle-pause-exceptions");
-}
-
 function testSetBreakpoint() {
   let deferred = promise.defer();
   let sourceForm = getSourceForm(gSources, JS_URL);
   let source = gDebugger.gThreadClient.source(sourceForm);
 
   source.setBreakpoint({ line: 3, column: 18 }, aResponse => {
     ok(!aResponse.error,
       "Should be able to set a breakpoint in a js file.");
@@ -126,24 +107,76 @@ function reloadPage() {
 }
 
 function testHitBreakpoint() {
   let deferred = promise.defer();
 
   gDebugger.gThreadClient.resume(aResponse => {
     ok(!aResponse.error, "Shouldn't get an error resuming.");
     is(aResponse.type, "resumed", "Type should be 'resumed'.");
-    is(gFrames.itemCount, 2, "Should have two frames.");
+
+    waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FETCHED_SCOPES).then(() => {
+      is(gFrames.itemCount, 2, "Should have two frames.");
 
+      // This is weird, but we need to let the debugger a chance to
+      // update first
+      executeSoon(() => {
+        gDebugger.gThreadClient.resume(() => {
+          gDebugger.gThreadClient.addOneTimeListener("paused", () => {
+            gDebugger.gThreadClient.resume(() => {
+              // We also need to make sure the next step doesn't add a
+              // "resumed" handler until this is completely finished
+              executeSoon(() => {
+                deferred.resolve();
+              });
+            });
+          });
+        });
+      });
+    });
+  });
+
+  return deferred.promise;
+}
+
+function enableIgnoreCaughtExceptions() {
+  let deferred = promise.defer();
+
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.ignoreCaughtExceptions, true,
+      "The ignore-caught-exceptions pref should now be enabled.");
+
+    ok(true, "Ignore caught exceptions was enabled.");
     deferred.resolve();
   });
 
+  gOptions._ignoreCaughtExceptionsItem.setAttribute("checked", "true");
+  gOptions._toggleIgnoreCaughtExceptions();
+
+  return deferred.promise;
+}
+
+function disablePauseOnExceptions() {
+  let deferred = promise.defer();
+
+  gDebugger.gThreadClient.addOneTimeListener("resumed", () => {
+    is(gPrefs.pauseOnExceptions, false,
+      "The pause-on-exceptions pref should now be disabled.");
+
+    ok(true, "Pausing on exceptions was disabled.");
+    deferred.resolve();
+  });
+
+  gOptions._pauseOnExceptionsItem.setAttribute("checked", "false");
+  gOptions._togglePauseOnExceptions();
+
   return deferred.promise;
 }
 
 registerCleanupFunction(function() {
   gPanel = null;
   gDebugger = null;
   gFrames = null;
   gSources = null;
   gPrefs = null;
+  gOptions = null;
   DevToolsUtils.reportingDisabled = false;
 });
--- a/browser/devtools/debugger/views/options-view.js
+++ b/browser/devtools/debugger/views/options-view.js
@@ -12,39 +12,45 @@ const POPUP_HIDDEN_DELAY = 100; // ms
  */
 function OptionsView(DebuggerController, DebuggerView) {
   dumpn("OptionsView was instantiated");
 
   this.DebuggerController = DebuggerController;
   this.DebuggerView = DebuggerView;
 
   this._toggleAutoPrettyPrint = this._toggleAutoPrettyPrint.bind(this);
+  this._togglePauseOnExceptions = this._togglePauseOnExceptions.bind(this);
+  this._toggleIgnoreCaughtExceptions = this._toggleIgnoreCaughtExceptions.bind(this);
   this._toggleShowPanesOnStartup = this._toggleShowPanesOnStartup.bind(this);
   this._toggleShowVariablesOnlyEnum = this._toggleShowVariablesOnlyEnum.bind(this);
   this._toggleShowVariablesFilterBox = this._toggleShowVariablesFilterBox.bind(this);
   this._toggleShowOriginalSource = this._toggleShowOriginalSource.bind(this);
   this._toggleAutoBlackBox = this._toggleAutoBlackBox.bind(this);
 }
 
 OptionsView.prototype = {
   /**
    * Initialization function, called when the debugger is started.
    */
   initialize: function() {
     dumpn("Initializing the OptionsView");
 
     this._button = document.getElementById("debugger-options");
     this._autoPrettyPrint = document.getElementById("auto-pretty-print");
+    this._pauseOnExceptionsItem = document.getElementById("pause-on-exceptions");
+    this._ignoreCaughtExceptionsItem = document.getElementById("ignore-caught-exceptions");
     this._showPanesOnStartupItem = document.getElementById("show-panes-on-startup");
     this._showVariablesOnlyEnumItem = document.getElementById("show-vars-only-enum");
     this._showVariablesFilterBoxItem = document.getElementById("show-vars-filter-box");
     this._showOriginalSourceItem = document.getElementById("show-original-source");
     this._autoBlackBoxItem = document.getElementById("auto-black-box");
 
     this._autoPrettyPrint.setAttribute("checked", Prefs.autoPrettyPrint);
+    this._pauseOnExceptionsItem.setAttribute("checked", Prefs.pauseOnExceptions);
+    this._ignoreCaughtExceptionsItem.setAttribute("checked", Prefs.ignoreCaughtExceptions);
     this._showPanesOnStartupItem.setAttribute("checked", Prefs.panesVisibleOnStartup);
     this._showVariablesOnlyEnumItem.setAttribute("checked", Prefs.variablesOnlyEnumVisible);
     this._showVariablesFilterBoxItem.setAttribute("checked", Prefs.variablesSearchboxVisible);
     this._showOriginalSourceItem.setAttribute("checked", Prefs.sourceMapsEnabled);
     this._autoBlackBoxItem.setAttribute("checked", Prefs.autoBlackBox);
 
     this._addCommands();
   },
@@ -58,16 +64,18 @@ OptionsView.prototype = {
   },
 
   /**
    * Add commands that XUL can fire.
    */
   _addCommands: function() {
     XULUtils.addCommands(document.getElementById('debuggerCommands'), {
       toggleAutoPrettyPrint: () => this._toggleAutoPrettyPrint(),
+      togglePauseOnExceptions: () => this._togglePauseOnExceptions(),
+      toggleIgnoreCaughtExceptions: () => this._toggleIgnoreCaughtExceptions(),
       toggleShowPanesOnStartup: () => this._toggleShowPanesOnStartup(),
       toggleShowOnlyEnum: () => this._toggleShowVariablesOnlyEnum(),
       toggleShowVariablesFilterBox: () => this._toggleShowVariablesFilterBox(),
       toggleShowOriginalSource: () => this._toggleShowOriginalSource(),
       toggleAutoBlackBox: () =>  this._toggleAutoBlackBox()
     });
   },
 
@@ -97,16 +105,37 @@ OptionsView.prototype = {
    * Listener handling the 'auto pretty print' menuitem command.
    */
   _toggleAutoPrettyPrint: function(){
     Prefs.autoPrettyPrint =
       this._autoPrettyPrint.getAttribute("checked") == "true";
   },
 
   /**
+   * Listener handling the 'pause on exceptions' menuitem command.
+   */
+  _togglePauseOnExceptions: function() {
+    Prefs.pauseOnExceptions =
+      this._pauseOnExceptionsItem.getAttribute("checked") == "true";
+
+    this.DebuggerController.activeThread.pauseOnExceptions(
+      Prefs.pauseOnExceptions,
+      Prefs.ignoreCaughtExceptions);
+  },
+
+  _toggleIgnoreCaughtExceptions: function() {
+    Prefs.ignoreCaughtExceptions =
+      this._ignoreCaughtExceptionsItem.getAttribute("checked") == "true";
+
+    this.DebuggerController.activeThread.pauseOnExceptions(
+      Prefs.pauseOnExceptions,
+      Prefs.ignoreCaughtExceptions);
+  },
+
+  /**
    * Listener handling the 'show panes on startup' menuitem command.
    */
   _toggleShowPanesOnStartup: function() {
     Prefs.panesVisibleOnStartup =
       this._showPanesOnStartupItem.getAttribute("checked") == "true";
   },
 
   /**
@@ -164,16 +193,17 @@ OptionsView.prototype = {
           useSourceMaps: Prefs.sourceMapsEnabled,
           autoBlackBox: pref
         });
       }, POPUP_HIDDEN_DELAY);
     });
   },
 
   _button: null,
+  _pauseOnExceptionsItem: null,
   _showPanesOnStartupItem: null,
   _showVariablesOnlyEnumItem: null,
   _showVariablesFilterBoxItem: null,
   _showOriginalSourceItem: null,
   _autoBlackBoxItem: null
 };
 
 DebuggerView.Options = new OptionsView(DebuggerController, DebuggerView);
--- a/browser/devtools/debugger/views/sources-view.js
+++ b/browser/devtools/debugger/views/sources-view.js
@@ -3,37 +3,32 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 // Maps known URLs to friendly source group names and put them at the
 // bottom of source list.
 const KNOWN_SOURCE_GROUPS = {
   "Add-on SDK": "resource://gre/modules/commonjs/",
 };
-const DO_NOT_PAUSE_ON_EXCEPTIONS = 0;
-const PAUSE_ON_ALL_EXCEPTIONS = 1;
-const PAUSE_ON_UNCAUGHT_EXCEPTIONS = 2;
 
 KNOWN_SOURCE_GROUPS[L10N.getStr("anonymousSourcesLabel")] = "anonymous";
 
 /**
  * Functions handling the sources UI.
  */
 function SourcesView(DebuggerController, DebuggerView) {
   dumpn("SourcesView was instantiated");
 
   this.Breakpoints = DebuggerController.Breakpoints;
   this.SourceScripts = DebuggerController.SourceScripts;
   this.DebuggerView = DebuggerView;
-  this.DebuggerController = DebuggerController;
 
   this.togglePrettyPrint = this.togglePrettyPrint.bind(this);
   this.toggleBlackBoxing = this.toggleBlackBoxing.bind(this);
   this.toggleBreakpoints = this.toggleBreakpoints.bind(this);
-  this.togglePauseOnExceptions = this.togglePauseOnExceptions.bind(this);
 
   this._onEditorLoad = this._onEditorLoad.bind(this);
   this._onEditorUnload = this._onEditorUnload.bind(this);
   this._onEditorCursorActivity = this._onEditorCursorActivity.bind(this);
   this._onSourceSelect = this._onSourceSelect.bind(this);
   this._onStopBlackBoxing = this._onStopBlackBoxing.bind(this);
   this._onBreakpointRemoved = this._onBreakpointRemoved.bind(this);
   this._onBreakpointClick = this._onBreakpointClick.bind(this);
@@ -56,40 +51,33 @@ SourcesView.prototype = Heritage.extend(
     this.widget = new SideMenuWidget(document.getElementById("sources"), {
       contextMenu: document.getElementById("debuggerSourcesContextMenu"),
       showArrows: true
     });
 
     this._unnamedSourceIndex = 0;
     this.emptyText = L10N.getStr("noSourcesText");
     this._blackBoxCheckboxTooltip = L10N.getStr("blackBoxCheckboxTooltip");
-    this._pauseAllExceptionsTooltip = L10N.getStr("pauseAllExceptionsTooltip");
-    this._pauseUncaughtExceptionsTooltip = L10N.getStr("pauseUncaughtExceptionsTooltip");
-    this._pauseNoExceptionsTooltip = L10N.getStr("pauseNoExceptionsTooltip");
 
     this._commandset = document.getElementById("debuggerCommands");
     this._popupset = document.getElementById("debuggerPopupset");
     this._cmPopup = document.getElementById("sourceEditorContextMenu");
     this._cbPanel = document.getElementById("conditional-breakpoint-panel");
     this._cbTextbox = document.getElementById("conditional-breakpoint-panel-textbox");
     this._blackBoxButton = document.getElementById("black-box");
     this._stopBlackBoxButton = document.getElementById("black-boxed-message-button");
     this._prettyPrintButton = document.getElementById("pretty-print");
     this._toggleBreakpointsButton = document.getElementById("toggle-breakpoints");
-    this._togglePauseOnExceptionsButton = document.getElementById("toggle-pause-exceptions");
     this._newTabMenuItem = document.getElementById("debugger-sources-context-newtab");
     this._copyUrlMenuItem = document.getElementById("debugger-sources-context-copyurl");
 
     if (Prefs.prettyPrintEnabled) {
       this._prettyPrintButton.removeAttribute("hidden");
     }
 
-    this._togglePauseOnExceptionsButton.setAttribute("tooltiptext", this._pauseAllExceptionsTooltip);
-    this._togglePauseOnExceptionsButton.setAttribute("state", DO_NOT_PAUSE_ON_EXCEPTIONS);
-
     window.on(EVENTS.EDITOR_LOADED, this._onEditorLoad, false);
     window.on(EVENTS.EDITOR_UNLOADED, this._onEditorUnload, false);
     this.widget.addEventListener("select", this._onSourceSelect, false);
     this._stopBlackBoxButton.addEventListener("click", this._onStopBlackBoxing, false);
     this._cbPanel.addEventListener("popupshowing", this._onConditionalPopupShowing, false);
     this._cbPanel.addEventListener("popupshown", this._onConditionalPopupShown, false);
     this._cbPanel.addEventListener("popuphiding", this._onConditionalPopupHiding, false);
     this._cbTextbox.addEventListener("keypress", this._onConditionalTextboxKeyPress, false);
@@ -145,17 +133,16 @@ SourcesView.prototype = Heritage.extend(
   _addCommands: function() {
     XULUtils.addCommands(this._commandset, {
       addBreakpointCommand: e => this._onCmdAddBreakpoint(e),
       addConditionalBreakpointCommand: e => this._onCmdAddConditionalBreakpoint(e),
       blackBoxCommand: () => this.toggleBlackBoxing(),
       unBlackBoxButton: () => this._onStopBlackBoxing(),
       prettyPrintCommand: () => this.togglePrettyPrint(),
       toggleBreakpointsCommand: () =>this.toggleBreakpoints(),
-      togglePauseOnExceptionsCommand: () => this.togglePauseOnExceptions(),
       togglePromiseDebuggerCommand: () => this.togglePromiseDebugger(),
       nextSourceCommand: () => this.selectNextItem(),
       prevSourceCommand: () => this.selectPrevItem()
     });
   },
 
   /**
    * Sets the preferred location to be selected in this sources container.
@@ -624,47 +611,16 @@ SourcesView.prototype = Heritage.extend(
       this._toggleBreakpointsButton.setAttribute("checked", true);
       this._onDisableAll();
     } else {
       this._toggleBreakpointsButton.removeAttribute("checked");
       this._onEnableAll();
     }
   },
 
-  /**
-   * Toggles the pause on exceptions functionality
-   */
-  togglePauseOnExceptions: function() {
-    let state = Number(this._togglePauseOnExceptionsButton.getAttribute("state"));
-    let tooltip;
-
-    state = ++state % 3;
-
-    if (state === DO_NOT_PAUSE_ON_EXCEPTIONS) {
-      tooltip = this._pauseAllExceptionsTooltip;
-      Prefs.pauseOnExceptions = false;
-      Prefs.ignoreCaughtExceptions = false;
-    } else if ( state === PAUSE_ON_ALL_EXCEPTIONS) {
-      tooltip = this._pauseUncaughtExceptionsTooltip;
-      Prefs.pauseOnExceptions = true;
-      Prefs.ignoreCaughtExceptions = false;
-    } else {
-      tooltip = this._pauseNoExceptionsTooltip;
-      Prefs.pauseOnExceptions = true;
-      Prefs.ignoreCaughtExceptions = true;
-    }
-
-    this.DebuggerController.activeThread.pauseOnExceptions(
-      Prefs.pauseOnExceptions,
-      Prefs.ignoreCaughtExceptions);
-
-    this._togglePauseOnExceptionsButton.setAttribute("tooltiptext", tooltip);
-    this._togglePauseOnExceptionsButton.setAttribute("state", state);
-  },
-
   togglePromiseDebugger: function() {
     if (Prefs.promiseDebuggerEnabled) {
       let promisePane = this.DebuggerView._promisePane;
       promisePane.hidden = !promisePane.hidden;
 
       this.DebuggerView._initializePromiseDebugger();
     }
   },
--- a/browser/devtools/debugger/views/stack-frames-view.js
+++ b/browser/devtools/debugger/views/stack-frames-view.js
@@ -238,13 +238,12 @@ StackFramesView.prototype = Heritage.ext
       this.dirty = false;
 
       // Loads more stack frames from the debugger server cache.
       DebuggerController.StackFrames.addMoreFrames();
     }
   },
 
   _mirror: null,
-  _prevBlackBoxedUrl: null,
-  _popupset: null
+  _prevBlackBoxedUrl: null
 });
 
 DebuggerView.StackFrames = new StackFramesView(DebuggerController, DebuggerView);
--- a/browser/locales/en-US/chrome/browser/devtools/debugger.dtd
+++ b/browser/locales/en-US/chrome/browser/devtools/debugger.dtd
@@ -61,16 +61,26 @@
 <!-- LOCALIZATION NOTE (debuggerUI.clearButton): This is the label for
   -  the button that clears the collected tracing data in the tracing tab. -->
 <!ENTITY debuggerUI.clearButton "Clear">
 
 <!-- LOCALIZATION NOTE (debuggerUI.clearButton.tooltip): This is the tooltip for
   -  the button that clears the collected tracing data in the tracing tab. -->
 <!ENTITY debuggerUI.clearButton.tooltip "Clear the collected traces">
 
+<!-- LOCALIZATION NOTE (debuggerUI.pauseExceptions): This is the label for the
+  -  checkbox that toggles pausing on exceptions. -->
+<!ENTITY debuggerUI.pauseExceptions           "Pause on Exceptions">
+<!ENTITY debuggerUI.pauseExceptions.accesskey "E">
+
+<!-- LOCALIZATION NOTE (debuggerUI.ignoreCaughtExceptions): This is the label for the
+  -  checkbox that toggles ignoring caught exceptions. -->
+<!ENTITY debuggerUI.ignoreCaughtExceptions           "Ignore Caught Exceptions">
+<!ENTITY debuggerUI.ignoreCaughtExceptions.accesskey "C">
+
 <!-- LOCALIZATION NOTE (debuggerUI.showPanesOnInit): This is the label for the
   -  checkbox that toggles visibility of panes when opening the debugger. -->
 <!ENTITY debuggerUI.showPanesOnInit           "Show Panes on Startup">
 <!ENTITY debuggerUI.showPanesOnInit.accesskey "S">
 
 <!-- LOCALIZATION NOTE (debuggerUI.showVarsFilter): This is the label for the
   -  checkbox that toggles visibility of a designated variables filter box. -->
 <!ENTITY debuggerUI.showVarsFilter           "Show Variables Filter Box">
--- a/browser/locales/en-US/chrome/browser/devtools/debugger.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/debugger.properties
@@ -151,31 +151,16 @@ timeEvents=Time
 touchEvents=Touch
 otherEvents=Other
 
 # LOCALIZATION NOTE (blackBoxCheckboxTooltip): The tooltip text to display when
 # the user hovers over the checkbox used to toggle black boxing its associated
 # source.
 blackBoxCheckboxTooltip=Toggle black boxing
 
-# LOCALIZATION NOTE (pauseAllExceptionsTooltip): The tooltip text to display when
-# the user hovers over the pause on exceptions button in the "pause on all
-# exceptions" state.
-pauseAllExceptionsTooltip=Pause on all exceptions
-
-# LOCALIZATION NOTE (pauseUncaughtExceptionsTooltip): The tooltip text to display when
-# the user hovers over the pause on exceptions button in the "pause on uncaught
-# exceptions" state.
-pauseUncaughtExceptionsTooltip=Pause on uncaught exceptions
-
-# LOCALIZATION NOTE (pauseNoExceptionsTooltip): The tooltip text to display when
-# the user hovers over the pause on exceptions button in the "pause on no
-# exceptions" state.
-pauseNoExceptionsTooltip=Do not pause on exceptions
-
 # LOCALIZATION NOTE (noMatchingStringsText): The text to display in the
 # global search results when there are no matching strings after filtering.
 noMatchingStringsText=No matches found
 
 # LOCALIZATION NOTE (emptySearchText): This is the text that appears in the
 # filter text box when it is empty and the scripts container is selected.
 emptySearchText=Search scripts (%S)
 
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -388,22 +388,16 @@ browser.jar:
   skin/classic/browser/devtools/debugger-step-out.png  (../shared/devtools/images/debugger-step-out.png)
   skin/classic/browser/devtools/debugger-step-out@2x.png  (../shared/devtools/images/debugger-step-out@2x.png)
   skin/classic/browser/devtools/debugger-step-over.png (../shared/devtools/images/debugger-step-over.png)
   skin/classic/browser/devtools/debugger-step-over@2x.png (../shared/devtools/images/debugger-step-over@2x.png)
   skin/classic/browser/devtools/debugger-blackbox.png  (../shared/devtools/images/debugger-blackbox.png)
   skin/classic/browser/devtools/debugger-blackbox@2x.png  (../shared/devtools/images/debugger-blackbox@2x.png)
   skin/classic/browser/devtools/debugger-prettyprint.png  (../shared/devtools/images/debugger-prettyprint.png)
   skin/classic/browser/devtools/debugger-prettyprint@2x.png (../shared/devtools/images/debugger-prettyprint@2x.png)
-  skin/classic/browser/devtools/debugger-no-pause-exceptions.png  (../shared/devtools/images/debugger-no-pause-exceptions.png)
-  skin/classic/browser/devtools/debugger-no-pause-exceptions@2x.png (../shared/devtools/images/debugger-no-pause-exceptions@2x.png)
-  skin/classic/browser/devtools/debugger-pause-all-exceptions.png  (../shared/devtools/images/debugger-pause-all-exceptions.png)
-  skin/classic/browser/devtools/debugger-pause-all-exceptions@2x.png (../shared/devtools/images/debugger-pause-all-exceptions@2x.png)
-  skin/classic/browser/devtools/debugger-pause-uncaught-exceptions.png  (../shared/devtools/images/debugger-pause-uncaught-exceptions.png)
-  skin/classic/browser/devtools/debugger-pause-uncaught-exceptions@2x.png (../shared/devtools/images/debugger-pause-uncaught-exceptions@2x.png)
   skin/classic/browser/devtools/debugger-toggleBreakpoints.png (../shared/devtools/images/debugger-toggleBreakpoints.png)
   skin/classic/browser/devtools/debugger-toggleBreakpoints@2x.png (../shared/devtools/images/debugger-toggleBreakpoints@2x.png)
   skin/classic/browser/devtools/tracer-icon.png        (../shared/devtools/images/tracer-icon.png)
   skin/classic/browser/devtools/tracer-icon@2x.png     (../shared/devtools/images/tracer-icon@2x.png)
   skin/classic/browser/devtools/responsive-se-resizer.png          (../shared/devtools/images/responsivemode/responsive-se-resizer.png)
   skin/classic/browser/devtools/responsive-se-resizer@2x.png       (../shared/devtools/images/responsivemode/responsive-se-resizer@2x.png)
   skin/classic/browser/devtools/responsive-vertical-resizer.png    (../shared/devtools/images/responsivemode/responsive-vertical-resizer.png)
   skin/classic/browser/devtools/responsive-vertical-resizer@2x.png (../shared/devtools/images/responsivemode/responsive-vertical-resizer@2x.png)
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -492,22 +492,16 @@ browser.jar:
   skin/classic/browser/devtools/debugger-step-out.png       (../shared/devtools/images/debugger-step-out.png)
   skin/classic/browser/devtools/debugger-step-out@2x.png    (../shared/devtools/images/debugger-step-out@2x.png)
   skin/classic/browser/devtools/debugger-step-over.png      (../shared/devtools/images/debugger-step-over.png)
   skin/classic/browser/devtools/debugger-step-over@2x.png   (../shared/devtools/images/debugger-step-over@2x.png)
   skin/classic/browser/devtools/debugger-blackbox.png       (../shared/devtools/images/debugger-blackbox.png)
   skin/classic/browser/devtools/debugger-blackbox@2x.png    (../shared/devtools/images/debugger-blackbox@2x.png)
   skin/classic/browser/devtools/debugger-prettyprint.png    (../shared/devtools/images/debugger-prettyprint.png)
   skin/classic/browser/devtools/debugger-prettyprint@2x.png (../shared/devtools/images/debugger-prettyprint@2x.png)
-  skin/classic/browser/devtools/debugger-no-pause-exceptions.png  (../shared/devtools/images/debugger-no-pause-exceptions.png)
-  skin/classic/browser/devtools/debugger-no-pause-exceptions@2x.png (../shared/devtools/images/debugger-no-pause-exceptions@2x.png)
-  skin/classic/browser/devtools/debugger-pause-all-exceptions.png  (../shared/devtools/images/debugger-pause-all-exceptions.png)
-  skin/classic/browser/devtools/debugger-pause-all-exceptions@2x.png (../shared/devtools/images/debugger-pause-all-exceptions@2x.png)
-  skin/classic/browser/devtools/debugger-pause-uncaught-exceptions.png  (../shared/devtools/images/debugger-pause-uncaught-exceptions.png)
-  skin/classic/browser/devtools/debugger-pause-uncaught-exceptions@2x.png (../shared/devtools/images/debugger-pause-uncaught-exceptions@2x.png)
   skin/classic/browser/devtools/debugger-toggleBreakpoints.png (../shared/devtools/images/debugger-toggleBreakpoints.png)
   skin/classic/browser/devtools/debugger-toggleBreakpoints@2x.png (../shared/devtools/images/debugger-toggleBreakpoints@2x.png)
   skin/classic/browser/devtools/tracer-icon.png             (../shared/devtools/images/tracer-icon.png)
   skin/classic/browser/devtools/tracer-icon@2x.png          (../shared/devtools/images/tracer-icon@2x.png)
   skin/classic/browser/devtools/floating-scrollbars.css     (devtools/floating-scrollbars.css)
   skin/classic/browser/devtools/floating-scrollbars-light.css (devtools/floating-scrollbars-light.css)
   skin/classic/browser/devtools/responsive-se-resizer.png          (../shared/devtools/images/responsivemode/responsive-se-resizer.png)
   skin/classic/browser/devtools/responsive-se-resizer@2x.png       (../shared/devtools/images/responsivemode/responsive-se-resizer@2x.png)
--- a/browser/themes/shared/devtools/debugger.css
+++ b/browser/themes/shared/devtools/debugger.css
@@ -87,46 +87,16 @@
 }
 
 @media (min-resolution: 1.25dppx) {
   #toggle-breakpoints {
     list-style-image: url(debugger-toggleBreakpoints@2x.png);
   }
 }
 
-#toggle-pause-exceptions[state="0"] {
-  list-style-image: url(debugger-no-pause-exceptions.png);
-}
-
-@media (min-resolution: 1.25dppx) {
-  #toggle-pause-exceptions[state="0"] {
-    list-style-image: url(debugger-no-pause-exceptions@2x.png);
-  }
-}
-
-#toggle-pause-exceptions[state="1"] {
-  list-style-image: url(debugger-pause-all-exceptions.png);
-}
-
-@media (min-resolution: 1.25dppx) {
-  #toggle-pause-exceptions[state="1"] {
-    list-style-image: url(debugger-pause-all-exceptions@2x.png);
-  }
-}
-
-#toggle-pause-exceptions[state="2"] {
-  list-style-image: url(debugger-pause-uncaught-exceptions.png);
-}
-
-@media (min-resolution: 1.25dppx) {
-  #toggle-pause-exceptions[state="2"] {
-    list-style-image: url(debugger-pause-uncaught-exceptions@2x.png);
-  }
-}
-
 #toggle-promise-debugger {
   /* TODO Bug 1186119: Add a toggle promise debugger image */
 }
 
 #sources-toolbar .devtools-toolbarbutton:not([label]) {
   -moz-image-region: rect(0px,16px,16px,0px);
 }
 
deleted file mode 100644
index 5290a474d4b41b7a1867f3c85098b33baaa036c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b03aa8dd005ee36e8aaf960d19bb62ed76ef4e82..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 56a05b4298791ddd6e53b7cf9c8943e8f20ce4a8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 98b566bca496d92dd2fbac7ade1a729bffe7fe9a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a996ec72eedc5b57667c1269a192923913268154..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index efd21f7696f9202fad42fdb4c0cf1e536a2915c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -503,22 +503,16 @@ browser.jar:
         skin/classic/browser/devtools/debugger-step-out.png         (../shared/devtools/images/debugger-step-out.png)
         skin/classic/browser/devtools/debugger-step-out@2x.png      (../shared/devtools/images/debugger-step-out@2x.png)
         skin/classic/browser/devtools/debugger-step-over.png        (../shared/devtools/images/debugger-step-over.png)
         skin/classic/browser/devtools/debugger-step-over@2x.png     (../shared/devtools/images/debugger-step-over@2x.png)
         skin/classic/browser/devtools/debugger-blackbox.png         (../shared/devtools/images/debugger-blackbox.png)
         skin/classic/browser/devtools/debugger-blackbox@2x.png      (../shared/devtools/images/debugger-blackbox@2x.png)
         skin/classic/browser/devtools/debugger-prettyprint.png      (../shared/devtools/images/debugger-prettyprint.png)
         skin/classic/browser/devtools/debugger-prettyprint@2x.png   (../shared/devtools/images/debugger-prettyprint@2x.png)
-        skin/classic/browser/devtools/debugger-no-pause-exceptions.png  (../shared/devtools/images/debugger-no-pause-exceptions.png)
-        skin/classic/browser/devtools/debugger-no-pause-exceptions@2x.png (../shared/devtools/images/debugger-no-pause-exceptions@2x.png)
-        skin/classic/browser/devtools/debugger-pause-all-exceptions.png  (../shared/devtools/images/debugger-pause-all-exceptions.png)
-        skin/classic/browser/devtools/debugger-pause-all-exceptions@2x.png (../shared/devtools/images/debugger-pause-all-exceptions@2x.png)
-        skin/classic/browser/devtools/debugger-pause-uncaught-exceptions.png  (../shared/devtools/images/debugger-pause-uncaught-exceptions.png)
-        skin/classic/browser/devtools/debugger-pause-uncaught-exceptions@2x.png (../shared/devtools/images/debugger-pause-uncaught-exceptions@2x.png)
         skin/classic/browser/devtools/debugger-toggleBreakpoints.png  (../shared/devtools/images/debugger-toggleBreakpoints.png)
         skin/classic/browser/devtools/debugger-toggleBreakpoints@2x.png  (../shared/devtools/images/debugger-toggleBreakpoints@2x.png)
         skin/classic/browser/devtools/tracer-icon.png               (../shared/devtools/images/tracer-icon.png)
         skin/classic/browser/devtools/tracer-icon@2x.png            (../shared/devtools/images/tracer-icon@2x.png)
         skin/classic/browser/devtools/responsive-se-resizer.png     (../shared/devtools/images/responsivemode/responsive-se-resizer.png)
         skin/classic/browser/devtools/responsive-se-resizer@2x.png       (../shared/devtools/images/responsivemode/responsive-se-resizer@2x.png)
         skin/classic/browser/devtools/responsive-vertical-resizer.png    (../shared/devtools/images/responsivemode/responsive-vertical-resizer.png)
         skin/classic/browser/devtools/responsive-vertical-resizer@2x.png (../shared/devtools/images/responsivemode/responsive-vertical-resizer@2x.png)