Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / resources / extensions / last_error.js
index 4445f02..6d85b11 100644 (file)
@@ -28,25 +28,48 @@ function set(name, message, stack, targetChrome) {
   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() {
@@ -78,5 +101,6 @@ function run(name, message, stack, callback, args) {
 }
 
 exports.clear = clear;
+exports.hasAccessed = hasAccessed;
 exports.set = set;
 exports.run = run;