clear(targetChrome); // in case somebody has set a sneaky getter/setter
var errorObject = { message: message };
- if (GetAvailability('extension.lastError').is_available)
+ if (targetChrome && targetChrome.extension)
targetChrome.extension.lastError = errorObject;
assertRuntimeIsAvailable();
- targetChrome.runtime.lastError = errorObject;
+
+ // We check to see if developers access runtime.lastError in order to decide
+ // whether or not to log it in the (error) console.
+ privates(targetChrome.runtime).accessedLastError = false;
+ $Object.defineProperty(targetChrome.runtime, 'lastError', {
+ configurable: true,
+ get: function() {
+ privates(targetChrome.runtime).accessedLastError = true;
+ return errorObject;
+ },
+ set: function(error) {
+ errorObject = errorObject;
+ }});
};
/**
+ * Check if anyone has checked chrome.runtime.lastError since it was set.
+ * @param {Object} targetChrome the Chrome object to check.
+ * @return boolean True if the lastError property was set.
+ */
+function hasAccessed(targetChrome) {
+ assertRuntimeIsAvailable();
+ return privates(targetChrome.runtime).accessedLastError === true;
+}
+
+/**
* Clears the last error on |targetChrome|.
*/
function clear(targetChrome) {
if (!targetChrome)
throw new Error('No target chrome to clear error');
- if (GetAvailability('extension.lastError').is_available)
- delete targetChrome.extension.lastError;
+ if (targetChrome && targetChrome.extension)
+ delete targetChrome.extension.lastError;
assertRuntimeIsAvailable();
delete targetChrome.runtime.lastError;
+ delete privates(targetChrome.runtime).accessedLastError;
};
function assertRuntimeIsAvailable() {
}
exports.clear = clear;
+exports.hasAccessed = hasAccessed;
exports.set = set;
exports.run = run;