Index: extensions/renderer/resources/last_error.js |
diff --git a/extensions/renderer/resources/last_error.js b/extensions/renderer/resources/last_error.js |
index 8d53371827acd01eeaa12840bd71497b5bb90120..9b5b3c0674e79fef7c1792ed2b9e391cd0bbdd3f 100644 |
--- a/extensions/renderer/resources/last_error.js |
+++ b/extensions/renderer/resources/last_error.js |
@@ -19,12 +19,12 @@ var GetGlobal = requireNative('sendRequest').GetGlobal; |
* optional |stack|. |
*/ |
function set(name, message, stack, targetChrome) { |
- var errorMessage = name + ': ' + message; |
- if (stack != null && stack != '') |
- errorMessage += '\n' + stack; |
- |
- if (!targetChrome) |
+ if (!targetChrome) { |
+ var errorMessage = name + ': ' + message; |
+ if (stack != null && stack != '') |
+ errorMessage += '\n' + stack; |
throw new Error('No chrome object to set error: ' + errorMessage); |
+ } |
clear(targetChrome); // in case somebody has set a sneaky getter/setter |
var errorObject = { message: message }; |
@@ -113,12 +113,30 @@ function run(name, message, stack, callback, args) { |
try { |
$Function.apply(callback, undefined, args); |
} finally { |
+ reportIfUnchecked(name, targetChrome, stack); |
clear(targetChrome); |
} |
} |
+/** |
+ * Checks whether chrome.runtime.lastError has been accessed if set. |
+ * If it was set but not accessed, the error is reported to the console. |
+ * |
+ * @param {string=} name - name of API. |
+ * @param {Object} targetChrome - the Chrome object to check. |
+ * @param {string=} stack - Stack trace of the call up to the error. |
+ */ |
+function reportIfUnchecked(name, targetChrome, stack) { |
+ if (hasAccessed(targetChrome) || !hasError(targetChrome)) |
+ return; |
+ var message = targetChrome.runtime.lastError.message; |
+ console.error("Unchecked runtime.lastError while running " + |
+ (name || "unknown") + ": " + message + (stack ? "\n" + stack : "")); |
+} |
+ |
exports.clear = clear; |
exports.hasAccessed = hasAccessed; |
exports.hasError = hasError; |
exports.set = set; |
exports.run = run; |
+exports.reportIfUnchecked = reportIfUnchecked; |