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..a7e59c622864f2baee6b7c4b45489e92f66e07bd 100644 |
--- a/chrome/renderer/resources/extensions/send_request.js |
+++ b/chrome/renderer/resources/extensions/send_request.js |
@@ -9,21 +9,27 @@ 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 request = requests[requestId]; |
Matt Perry
2013/03/05 21:51:38
Why pull all this out of the try? Might as well be
not at google - send to devlin
2013/03/05 22:05:38
I pulled this out because the finally{} block refe
|
+ delete requests[requestId]; |
+ DCHECK(request != null); |
+ |
+ // lastError needs to be set on the caller's global object, which may not |
+ // necessarily be ours. |
+ var callerChrome = natives.GetGlobal( |
+ request.callback || request.customCallback || chrome).chrome; |
Matt Perry
2013/03/05 21:51:38
does GetGlobal() return the global object, or chro
not at google - send to devlin
2013/03/05 22:05:38
Yeah, chrome. There is a .chrome at the end of the
|
+ |
try { |
- var request = requests[requestId]; |
- DCHECK(request != null); |
- if (success) { |
- lastError.clear(); |
- } else { |
- if (!error) { |
+ 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) { |
@@ -52,11 +58,8 @@ chromeHidden.handleResponse = function(requestId, name, |
request.callback.apply(request, responseList); |
} |
} finally { |
- delete requests[requestId]; |
- lastError.clear(); |
+ lastError.clear(callerChrome); |
} |
- |
- return undefined; |
}; |
function prepareRequest(args, argSchemas) { |
@@ -111,6 +114,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, |