Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: extensions/renderer/resources/uncaught_exception_handler.js

Issue 2794043002: [Extensions Bindings] Move safeCallbackApply to exception handler (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « extensions/renderer/resources/send_request.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Handles uncaught exceptions thrown by extensions. By default this is to 5 // Handles uncaught exceptions thrown by extensions. By default this is to
6 // log an error message, but tests may override this behaviour. 6 // log an error message, but tests may override this behaviour.
7 var handler = function(message, e) { 7 var handler = function(message, e) {
8 console.error(message); 8 console.error(message);
9 }; 9 };
10 10
11 /** 11 /**
12 * Formats the error message and invokes the error handler.
13 *
14 * @param {string} message - Error message prefix.
15 * @param {Error|*} e - Thrown object.
16 * @param {string=} priorStackTrace - Error message suffix.
17 * @see formatErrorMessage
18 */
19 function handle(message, e, priorStackTrace) {
20 message = formatErrorMessage(message, e, priorStackTrace);
21 handler(message, e);
22 }
23
24 // Runs a user-supplied callback safely.
25 function safeCallbackApply(name, request, callback, args) {
26 try {
27 $Function.apply(callback, request, args);
28 } catch (e) {
29 handle('Error in response to ' + name, e, request.stack);
30 }
31 }
32
33 /**
12 * Append the error description and stack trace to |message|. 34 * Append the error description and stack trace to |message|.
13 * 35 *
14 * @param {string} message - The prefix of the error message. 36 * @param {string} message - The prefix of the error message.
15 * @param {Error|*} e - The thrown error object. This object is potentially 37 * @param {Error|*} e - The thrown error object. This object is potentially
16 * unsafe, because it could be generated by an extension. 38 * unsafe, because it could be generated by an extension.
17 * @param {string=} priorStackTrace - The stack trace to be appended to the 39 * @param {string=} priorStackTrace - The stack trace to be appended to the
18 * error message. This stack trace must not include stack frames of |e.stack|, 40 * error message. This stack trace must not include stack frames of |e.stack|,
19 * because both stack traces are concatenated. Overlapping stack traces will 41 * because both stack traces are concatenated. Overlapping stack traces will
20 * confuse extension developers. 42 * confuse extension developers.
21 * @return {string} The formatted error message. 43 * @return {string} The formatted error message.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 function safeErrorToString(e, omitType) { 102 function safeErrorToString(e, omitType) {
81 try { 103 try {
82 return $String.self(omitType && e.message || e); 104 return $String.self(omitType && e.message || e);
83 } catch (e) { 105 } catch (e) {
84 // This error is exceptional and could be triggered by 106 // This error is exceptional and could be triggered by
85 // throw {toString: function() { throw 'Haha' } }; 107 // throw {toString: function() { throw 'Haha' } };
86 return '(cannot get error message)'; 108 return '(cannot get error message)';
87 } 109 }
88 } 110 }
89 111
90 /** 112 exports.$set('handle', handle);
91 * Formats the error message and invokes the error handler.
92 *
93 * @param {string} message - Error message prefix.
94 * @param {Error|*} e - Thrown object.
95 * @param {string=} priorStackTrace - Error message suffix.
96 * @see formatErrorMessage
97 */
98 exports.$set('handle', function(message, e, priorStackTrace) {
99 message = formatErrorMessage(message, e, priorStackTrace);
100 handler(message, e);
101 });
102 113
103 // |newHandler| A function which matches |handler|. 114 // |newHandler| A function which matches |handler|.
104 exports.$set('setHandler', function(newHandler) { 115 exports.$set('setHandler', function(newHandler) {
105 handler = newHandler; 116 handler = newHandler;
106 }); 117 });
107 118
119 exports.$set('safeCallbackApply', safeCallbackApply);
108 exports.$set('getStackTrace', getStackTrace); 120 exports.$set('getStackTrace', getStackTrace);
109 exports.$set('getExtensionStackTrace', getExtensionStackTrace); 121 exports.$set('getExtensionStackTrace', getExtensionStackTrace);
110 exports.$set('safeErrorToString', safeErrorToString); 122 exports.$set('safeErrorToString', safeErrorToString);
OLDNEW
« no previous file with comments | « extensions/renderer/resources/send_request.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698