Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: chrome/renderer/resources/extensions/send_request.js

Issue 12378077: Attempting to fix problems in 11571014. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: oops Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/resources/extensions/notification_custom_bindings.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); 5 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
6 var DCHECK = requireNative('logging').DCHECK; 6 var DCHECK = requireNative('logging').DCHECK;
7 var json = require('json'); 7 var json = require('json');
8 var lastError = require('lastError'); 8 var lastError = require('lastError');
9 var natives = requireNative('sendRequest'); 9 var natives = requireNative('sendRequest');
10 var validate = require('schemaUtils').validate; 10 var validate = require('schemaUtils').validate;
11 11
12 // All outstanding requests from sendRequest().
13 var requests = {};
14
12 // Callback handling. 15 // Callback handling.
13 var requests = [];
14 chromeHidden.handleResponse = function(requestId, name, 16 chromeHidden.handleResponse = function(requestId, name,
15 success, responseList, error) { 17 success, responseList, error) {
18 var callerChrome = null;
16 try { 19 try {
17 var request = requests[requestId]; 20 var request = requests[requestId];
18 DCHECK(request != null); 21 DCHECK(request != null);
19 if (success) { 22
20 lastError.clear(); 23 // lastError needs to be set on the caller's global object, which may not
21 } else { 24 // necessarily be ours.
22 if (!error) { 25 var callerGlobal =
26 natives.GetGlobal(request.callback || request.customCallback || chrome);
27 callerChrome = callerGlobal.chrome;
28
29 lastError.clear(callerChrome);
30 if (!success) {
31 if (!error)
23 error = "Unknown error."; 32 error = "Unknown error.";
24 } 33 lastError.set(error, callerChrome);
25 console.error("Error during " + name + ": " + error);
26 lastError.set(error);
27 } 34 }
28 35
29 if (request.customCallback) { 36 if (request.customCallback) {
30 var customCallbackArgs = [name, request].concat(responseList); 37 var customCallbackArgs = [name, request].concat(responseList);
31 request.customCallback.apply(request, customCallbackArgs); 38 request.customCallback.apply(request, customCallbackArgs);
32 } 39 }
33 40
34 if (request.callback) { 41 if (request.callback) {
35 // Validate callback in debug only -- and only when the 42 // Validate callback in debug only -- and only when the
36 // caller has provided a callback. Implementations of api 43 // caller has provided a callback. Implementations of api
37 // calls may not return data if they observe the caller 44 // calls may not return data if they observe the caller
38 // has not provided a callback. 45 // has not provided a callback.
39 if (chromeHidden.validateCallbacks && !error) { 46 if (chromeHidden.validateCallbacks && !error) {
40 try { 47 try {
41 if (!request.callbackSchema.parameters) { 48 if (!request.callbackSchema.parameters) {
42 throw new Error("No callback schemas defined"); 49 throw new Error("No callback schemas defined");
43 } 50 }
44 51
45 validate(responseList, request.callbackSchema.parameters); 52 validate(responseList, request.callbackSchema.parameters);
46 } catch (exception) { 53 } catch (exception) {
47 return "Callback validation error during " + name + " -- " + 54 return "Callback validation error during " + name + " -- " +
48 exception.stack; 55 exception.stack;
49 } 56 }
50 } 57 }
51 58
52 request.callback.apply(request, responseList); 59 request.callback.apply(request, responseList);
53 } 60 }
54 } finally { 61 } finally {
55 delete requests[requestId]; 62 delete requests[requestId];
56 lastError.clear(); 63 if (callerChrome)
64 lastError.clear(callerChrome);
57 } 65 }
58
59 return undefined;
60 }; 66 };
61 67
62 function prepareRequest(args, argSchemas) { 68 function prepareRequest(args, argSchemas) {
63 var request = {}; 69 var request = {};
64 var argCount = args.length; 70 var argCount = args.length;
65 71
66 // Look for callback param. 72 // Look for callback param.
67 if (argSchemas.length > 0 && 73 if (argSchemas.length > 0 &&
68 argSchemas[argSchemas.length - 1].type == "function") { 74 argSchemas[argSchemas.length - 1].type == "function") {
69 request.callback = args[args.length - 1]; 75 request.callback = args[args.length - 1];
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // v8 values instead of expecting JSON strings. 110 // v8 values instead of expecting JSON strings.
105 var doStringify = false; 111 var doStringify = false;
106 if (optArgs.nativeFunction && !optArgs.noStringify) 112 if (optArgs.nativeFunction && !optArgs.noStringify)
107 doStringify = true; 113 doStringify = true;
108 var requestArgs = doStringify ? json.stringify(request.args) : request.args; 114 var requestArgs = doStringify ? json.stringify(request.args) : request.args;
109 var nativeFunction = optArgs.nativeFunction || natives.StartRequest; 115 var nativeFunction = optArgs.nativeFunction || natives.StartRequest;
110 116
111 var requestId = natives.GetNextRequestId(); 117 var requestId = natives.GetNextRequestId();
112 request.id = requestId; 118 request.id = requestId;
113 requests[requestId] = request; 119 requests[requestId] = request;
120
114 var hasCallback = request.callback || optArgs.customCallback; 121 var hasCallback = request.callback || optArgs.customCallback;
115 return nativeFunction(functionName, 122 return nativeFunction(functionName,
116 requestArgs, 123 requestArgs,
117 requestId, 124 requestId,
118 hasCallback, 125 hasCallback,
119 optArgs.forIOThread, 126 optArgs.forIOThread,
120 optArgs.preserveNullInObjects); 127 optArgs.preserveNullInObjects);
121 } 128 }
122 129
123 exports.sendRequest = sendRequest; 130 exports.sendRequest = sendRequest;
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/notification_custom_bindings.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698