From 7d014581cf761e28aee149acdd03e4783cf61002 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 29 Sep 2015 20:23:51 -0600 Subject: [PATCH] Move installation of uncaught error handler to startEditorWindow --- spec/atom-spec.coffee | 4 ++++ src/atom.coffee | 45 +++++++++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/spec/atom-spec.coffee b/spec/atom-spec.coffee index 85d9dd4b9..f0219d164 100644 --- a/spec/atom-spec.coffee +++ b/spec/atom-spec.coffee @@ -61,6 +61,10 @@ describe "the `atom` global", -> beforeEach -> spyOn atom, 'openDevTools' spyOn atom, 'executeJavaScriptInDevTools' + atom.installUncaughtErrorHandler() + + afterEach: -> + atom.uninstallUncaughtErrorHandler() it "will open the dev tools when an error is triggered", -> try diff --git a/src/atom.coffee b/src/atom.coffee index c302bbdc0..720f2c455 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -254,25 +254,6 @@ class Atom extends Model # # Call after this instance has been assigned to the `atom` global. initialize: -> - window.onerror = => - @lastUncaughtError = Array::slice.call(arguments) - [message, url, line, column, originalError] = @lastUncaughtError - - {line, column} = mapSourcePosition({source: url, line, column}) - - eventObject = {message, url, line, column, originalError} - - openDevTools = true - eventObject.preventDefault = -> openDevTools = false - - @emitter.emit 'will-throw-error', eventObject - - if openDevTools - @openDevTools() - @executeJavaScriptInDevTools('DevToolsAPI.showConsole()') - - @emitter.emit 'did-throw-error', {message, url, line, column, originalError} - @displayWindow() unless @inSpecMode() @setBodyPlatformClass() @@ -599,6 +580,8 @@ class Atom extends Model # Call this method when establishing a real application window. startEditorWindow: -> + @installUncaughtErrorHandler() + {safeMode} = @getLoadSettings() CommandInstaller = require './command-installer' @@ -655,6 +638,30 @@ class Atom extends Model if @getLoadSettings().initialPaths?.length is 0 and @workspace.getPaneItems().length is 0 @workspace.open(null) + installUncaughtErrorHandler: -> + @previousWindowErrorHandler = window.onerror + window.onerror = => + @lastUncaughtError = Array::slice.call(arguments) + [message, url, line, column, originalError] = @lastUncaughtError + + {line, column} = mapSourcePosition({source: url, line, column}) + + eventObject = {message, url, line, column, originalError} + + openDevTools = true + eventObject.preventDefault = -> openDevTools = false + + @emitter.emit 'will-throw-error', eventObject + + if openDevTools + @openDevTools() + @executeJavaScriptInDevTools('DevToolsAPI.showConsole()') + + @emitter.emit 'did-throw-error', {message, url, line, column, originalError} + + uninstallUncaughtErrorHandler: -> + window.onerror = @previousWindowErrorHandler + ### Section: Messaging the User ###