Index: chrome/renderer/resources/extensions/send_request.js |
diff --git a/chrome/renderer/resources/extensions/send_request.js b/chrome/renderer/resources/extensions/send_request.js |
index 1e5746f9ea712ad2b1489db8d034048e2524e595..256ef33cd9ad3fd540c763425b5e0aab15466562 100644 |
--- a/chrome/renderer/resources/extensions/send_request.js |
+++ b/chrome/renderer/resources/extensions/send_request.js |
@@ -9,21 +9,28 @@ var lastError = require('lastError'); |
var natives = requireNative('sendRequest'); |
var validate = require('schemaUtils').validate; |
+// All outstanding requests from sendRequest(). |
+var requests = {}; |
+ |
// Callback handling. |
-var requests = []; |
chromeHidden.handleResponse = function(requestId, name, |
success, responseList, error) { |
+ var callerChrome = null; |
try { |
var request = requests[requestId]; |
DCHECK(request != null); |
- if (success) { |
- lastError.clear(); |
- } else { |
- if (!error) { |
+ |
+ // lastError needs to be set on the caller's global object, which may not |
+ // necessarily be ours. |
+ var callerGlobal = |
+ natives.GetGlobal(request.callback || request.customCallback || chrome); |
+ callerChrome = callerGlobal.chrome; |
+ |
+ lastError.clear(callerChrome); |
+ if (!success) { |
+ if (!error) |
error = "Unknown error."; |
- } |
- console.error("Error during " + name + ": " + error); |
- lastError.set(error); |
+ lastError.set(error, callerChrome); |
} |
if (request.customCallback) { |
@@ -53,10 +60,9 @@ chromeHidden.handleResponse = function(requestId, name, |
} |
} finally { |
delete requests[requestId]; |
- lastError.clear(); |
+ if (callerChrome) |
+ lastError.clear(callerChrome); |
} |
- |
- return undefined; |
}; |
function prepareRequest(args, argSchemas) { |
@@ -111,6 +117,7 @@ function sendRequest(functionName, args, argSchemas, optArgs) { |
var requestId = natives.GetNextRequestId(); |
request.id = requestId; |
requests[requestId] = request; |
+ |
var hasCallback = request.callback || optArgs.customCallback; |
return nativeFunction(functionName, |
requestArgs, |