Chromium Code Reviews| 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, |