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

Side by Side Diff: samples/process.cc

Issue 15994003: remove most remaining V8_ALLOW_ACCESS_TO* defines (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments Created 7 years, 6 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 | « samples/lineprocessor.cc ('k') | samples/shell.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 // TODO(dcarney): remove this
29 #define V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR
30 #define V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT
31 #define V8_ALLOW_ACCESS_TO_PERSISTENT_ARROW
32
33 #include <v8.h> 28 #include <v8.h>
34 29
35 #include <string> 30 #include <string>
36 #include <map> 31 #include <map>
37 32
38 #ifdef COMPRESS_STARTUP_DATA_BZ2 33 #ifdef COMPRESS_STARTUP_DATA_BZ2
39 #error Using compressed startup data is not supported for this sample 34 #error Using compressed startup data is not supported for this sample
40 #endif 35 #endif
41 36
42 using namespace std; 37 using namespace std;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 if (!InstallMaps(opts, output)) 174 if (!InstallMaps(opts, output))
180 return false; 175 return false;
181 176
182 // Compile and run the script 177 // Compile and run the script
183 if (!ExecuteScript(script_)) 178 if (!ExecuteScript(script_))
184 return false; 179 return false;
185 180
186 // The script compiled and ran correctly. Now we fetch out the 181 // The script compiled and ran correctly. Now we fetch out the
187 // Process function from the global object. 182 // Process function from the global object.
188 Handle<String> process_name = String::New("Process"); 183 Handle<String> process_name = String::New("Process");
189 Handle<Value> process_val = context_->Global()->Get(process_name); 184 Handle<Value> process_val = context->Global()->Get(process_name);
190 185
191 // If there is no Process function, or if it is not a function, 186 // If there is no Process function, or if it is not a function,
192 // bail out 187 // bail out
193 if (!process_val->IsFunction()) return false; 188 if (!process_val->IsFunction()) return false;
194 189
195 // It is a function; cast it to a Function 190 // It is a function; cast it to a Function
196 Handle<Function> process_fun = Handle<Function>::Cast(process_val); 191 Handle<Function> process_fun = Handle<Function>::Cast(process_val);
197 192
198 // Store the function in a Persistent handle, since we also want 193 // Store the function in a Persistent handle, since we also want
199 // that to remain after this call returns 194 // that to remain after this call returns
200 process_ = Persistent<Function>::New(GetIsolate(), process_fun); 195 process_.Reset(GetIsolate(), process_fun);
201 196
202 // All done; all went well 197 // All done; all went well
203 return true; 198 return true;
204 } 199 }
205 200
206 201
207 bool JsHttpRequestProcessor::ExecuteScript(Handle<String> script) { 202 bool JsHttpRequestProcessor::ExecuteScript(Handle<String> script) {
208 HandleScope handle_scope(GetIsolate()); 203 HandleScope handle_scope(GetIsolate());
209 204
210 // We're just about to compile the script; set up an error handler to 205 // We're just about to compile the script; set up an error handler to
(...skipping 22 matching lines...) Expand all
233 } 228 }
234 229
235 230
236 bool JsHttpRequestProcessor::InstallMaps(map<string, string>* opts, 231 bool JsHttpRequestProcessor::InstallMaps(map<string, string>* opts,
237 map<string, string>* output) { 232 map<string, string>* output) {
238 HandleScope handle_scope(GetIsolate()); 233 HandleScope handle_scope(GetIsolate());
239 234
240 // Wrap the map object in a JavaScript wrapper 235 // Wrap the map object in a JavaScript wrapper
241 Handle<Object> opts_obj = WrapMap(opts); 236 Handle<Object> opts_obj = WrapMap(opts);
242 237
238 v8::Local<v8::Context> context =
239 v8::Local<v8::Context>::New(GetIsolate(), context_);
240
243 // Set the options object as a property on the global object. 241 // Set the options object as a property on the global object.
244 context_->Global()->Set(String::New("options"), opts_obj); 242 context->Global()->Set(String::New("options"), opts_obj);
245 243
246 Handle<Object> output_obj = WrapMap(output); 244 Handle<Object> output_obj = WrapMap(output);
247 context_->Global()->Set(String::New("output"), output_obj); 245 context->Global()->Set(String::New("output"), output_obj);
248 246
249 return true; 247 return true;
250 } 248 }
251 249
252 250
253 bool JsHttpRequestProcessor::Process(HttpRequest* request) { 251 bool JsHttpRequestProcessor::Process(HttpRequest* request) {
254 // Create a handle scope to keep the temporary object references. 252 // Create a handle scope to keep the temporary object references.
255 HandleScope handle_scope(GetIsolate()); 253 HandleScope handle_scope(GetIsolate());
256 254
257 v8::Local<v8::Context> context = 255 v8::Local<v8::Context> context =
258 v8::Local<v8::Context>::New(GetIsolate(), context_); 256 v8::Local<v8::Context>::New(GetIsolate(), context_);
259 257
260 // Enter this processor's context so all the remaining operations 258 // Enter this processor's context so all the remaining operations
261 // take place there 259 // take place there
262 Context::Scope context_scope(context); 260 Context::Scope context_scope(context);
263 261
264 // Wrap the C++ request object in a JavaScript wrapper 262 // Wrap the C++ request object in a JavaScript wrapper
265 Handle<Object> request_obj = WrapRequest(request); 263 Handle<Object> request_obj = WrapRequest(request);
266 264
267 // Set up an exception handler before calling the Process function 265 // Set up an exception handler before calling the Process function
268 TryCatch try_catch; 266 TryCatch try_catch;
269 267
270 // Invoke the process function, giving the global object as 'this' 268 // Invoke the process function, giving the global object as 'this'
271 // and one argument, the request. 269 // and one argument, the request.
272 const int argc = 1; 270 const int argc = 1;
273 Handle<Value> argv[argc] = { request_obj }; 271 Handle<Value> argv[argc] = { request_obj };
274 Handle<Value> result = process_->Call(context_->Global(), argc, argv); 272 v8::Local<v8::Function> process =
273 v8::Local<v8::Function>::New(GetIsolate(), process_);
274 Handle<Value> result = process->Call(context->Global(), argc, argv);
275 if (result.IsEmpty()) { 275 if (result.IsEmpty()) {
276 String::Utf8Value error(try_catch.Exception()); 276 String::Utf8Value error(try_catch.Exception());
277 Log(*error); 277 Log(*error);
278 return false; 278 return false;
279 } else { 279 } else {
280 return true; 280 return true;
281 } 281 }
282 } 282 }
283 283
284 284
(...skipping 18 matching lines...) Expand all
303 // Utility function that wraps a C++ http request object in a 303 // Utility function that wraps a C++ http request object in a
304 // JavaScript object. 304 // JavaScript object.
305 Handle<Object> JsHttpRequestProcessor::WrapMap(map<string, string>* obj) { 305 Handle<Object> JsHttpRequestProcessor::WrapMap(map<string, string>* obj) {
306 // Handle scope for temporary handles. 306 // Handle scope for temporary handles.
307 HandleScope handle_scope(GetIsolate()); 307 HandleScope handle_scope(GetIsolate());
308 308
309 // Fetch the template for creating JavaScript map wrappers. 309 // Fetch the template for creating JavaScript map wrappers.
310 // It only has to be created once, which we do on demand. 310 // It only has to be created once, which we do on demand.
311 if (map_template_.IsEmpty()) { 311 if (map_template_.IsEmpty()) {
312 Handle<ObjectTemplate> raw_template = MakeMapTemplate(GetIsolate()); 312 Handle<ObjectTemplate> raw_template = MakeMapTemplate(GetIsolate());
313 map_template_ = Persistent<ObjectTemplate>::New(GetIsolate(), raw_template); 313 map_template_.Reset(GetIsolate(), raw_template);
314 } 314 }
315 Handle<ObjectTemplate> templ = 315 Handle<ObjectTemplate> templ =
316 Local<ObjectTemplate>::New(GetIsolate(), map_template_); 316 Local<ObjectTemplate>::New(GetIsolate(), map_template_);
317 317
318 // Create an empty map wrapper. 318 // Create an empty map wrapper.
319 Handle<Object> result = templ->NewInstance(); 319 Handle<Object> result = templ->NewInstance();
320 320
321 // Wrap the raw C++ pointer in an External so it can be referenced 321 // Wrap the raw C++ pointer in an External so it can be referenced
322 // from within JavaScript. 322 // from within JavaScript.
323 Handle<External> map_ptr = External::New(obj); 323 Handle<External> map_ptr = External::New(obj);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 * JavaScript object. 410 * JavaScript object.
411 */ 411 */
412 Handle<Object> JsHttpRequestProcessor::WrapRequest(HttpRequest* request) { 412 Handle<Object> JsHttpRequestProcessor::WrapRequest(HttpRequest* request) {
413 // Handle scope for temporary handles. 413 // Handle scope for temporary handles.
414 HandleScope handle_scope(GetIsolate()); 414 HandleScope handle_scope(GetIsolate());
415 415
416 // Fetch the template for creating JavaScript http request wrappers. 416 // Fetch the template for creating JavaScript http request wrappers.
417 // It only has to be created once, which we do on demand. 417 // It only has to be created once, which we do on demand.
418 if (request_template_.IsEmpty()) { 418 if (request_template_.IsEmpty()) {
419 Handle<ObjectTemplate> raw_template = MakeRequestTemplate(GetIsolate()); 419 Handle<ObjectTemplate> raw_template = MakeRequestTemplate(GetIsolate());
420 request_template_ = 420 request_template_.Reset(GetIsolate(), raw_template);
421 Persistent<ObjectTemplate>::New(GetIsolate(), raw_template);
422 } 421 }
423 Handle<ObjectTemplate> templ = 422 Handle<ObjectTemplate> templ =
424 Local<ObjectTemplate>::New(GetIsolate(), request_template_); 423 Local<ObjectTemplate>::New(GetIsolate(), request_template_);
425 424
426 // Create an empty http request wrapper. 425 // Create an empty http request wrapper.
427 Handle<Object> result = templ->NewInstance(); 426 Handle<Object> result = templ->NewInstance();
428 427
429 // Wrap the raw C++ pointer in an External so it can be referenced 428 // Wrap the raw C++ pointer in an External so it can be referenced
430 // from within JavaScript. 429 // from within JavaScript.
431 Handle<External> request_ptr = External::New(request); 430 Handle<External> request_ptr = External::New(request);
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 JsHttpRequestProcessor processor(isolate, source); 632 JsHttpRequestProcessor processor(isolate, source);
634 map<string, string> output; 633 map<string, string> output;
635 if (!processor.Initialize(&options, &output)) { 634 if (!processor.Initialize(&options, &output)) {
636 fprintf(stderr, "Error initializing processor.\n"); 635 fprintf(stderr, "Error initializing processor.\n");
637 return 1; 636 return 1;
638 } 637 }
639 if (!ProcessEntries(&processor, kSampleSize, kSampleRequests)) 638 if (!ProcessEntries(&processor, kSampleSize, kSampleRequests))
640 return 1; 639 return 1;
641 PrintMap(&output); 640 PrintMap(&output);
642 } 641 }
OLDNEW
« no previous file with comments | « samples/lineprocessor.cc ('k') | samples/shell.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698