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

Side by Side Diff: Source/bindings/v8/V8Binding.h

Issue 121113004: Improve handling of failed integer type conversions. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 6 years, 11 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
« no previous file with comments | « Source/bindings/v8/ExceptionState.cpp ('k') | Source/bindings/v8/V8Binding.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Ericsson AB. All rights reserved. 3 * Copyright (C) 2012 Ericsson AB. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 29 matching lines...) Expand all
40 #include "bindings/v8/V8ThrowException.h" 40 #include "bindings/v8/V8ThrowException.h"
41 #include "bindings/v8/V8ValueCache.h" 41 #include "bindings/v8/V8ValueCache.h"
42 #include "wtf/MathExtras.h" 42 #include "wtf/MathExtras.h"
43 #include "wtf/text/AtomicString.h" 43 #include "wtf/text/AtomicString.h"
44 #include <v8.h> 44 #include <v8.h>
45 45
46 namespace WebCore { 46 namespace WebCore {
47 47
48 class DOMWindow; 48 class DOMWindow;
49 class Document; 49 class Document;
50 class ExceptionState;
50 class Frame; 51 class Frame;
51 class NodeFilter; 52 class NodeFilter;
52 class ExecutionContext; 53 class ExecutionContext;
53 class ScriptWrappable; 54 class ScriptWrappable;
54 class XPathNSResolver; 55 class XPathNSResolver;
55 56
56 const int kMaxRecursionDepth = 22; 57 const int kMaxRecursionDepth = 22;
57 58
58 // Schedule a DOM exception to be thrown, if the exception code is different 59 // Schedule a DOM exception to be thrown, if the exception code is different
59 // from zero. 60 // from zero.
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 // Conversion flags, used in toIntXX/toUIntXX. 291 // Conversion flags, used in toIntXX/toUIntXX.
291 enum IntegerConversionConfiguration { 292 enum IntegerConversionConfiguration {
292 NormalConversion, 293 NormalConversion,
293 EnforceRange, 294 EnforceRange,
294 Clamp 295 Clamp
295 }; 296 };
296 297
297 // Convert a value to a 8-bit signed integer. The conversion fails if the 298 // Convert a value to a 8-bit signed integer. The conversion fails if the
298 // value cannot be converted to a number or the range violated per WebIDL: 299 // value cannot be converted to a number or the range violated per WebIDL:
299 // http://www.w3.org/TR/WebIDL/#es-byte 300 // http://www.w3.org/TR/WebIDL/#es-byte
300 int8_t toInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& o k); 301 int8_t toInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excepti onState&);
301 inline int8_t toInt8(v8::Handle<v8::Value> value, bool& ok) { return toInt8( value, NormalConversion, ok); } 302 inline int8_t toInt8(v8::Handle<v8::Value> value, ExceptionState& exceptionS tate)
303 {
304 return toInt8(value, NormalConversion, exceptionState);
305 }
302 306
303 // Convert a value to a 8-bit integer assuming the conversion cannot fail. 307 // Convert a value to a 8-bit integer assuming the conversion cannot fail.
304 inline int8_t toInt8(v8::Handle<v8::Value> value) 308 int8_t toInt8(v8::Handle<v8::Value>);
305 {
306 bool ok;
307 return toInt8(value, NormalConversion, ok);
308 }
309 309
310 // Convert a value to a 8-bit unsigned integer. The conversion fails if the 310 // Convert a value to a 8-bit unsigned integer. The conversion fails if the
311 // value cannot be converted to a number or the range violated per WebIDL: 311 // value cannot be converted to a number or the range violated per WebIDL:
312 // http://www.w3.org/TR/WebIDL/#es-octet 312 // http://www.w3.org/TR/WebIDL/#es-octet
313 uint8_t toUInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 313 uint8_t toUInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
314 inline uint8_t toUInt8(v8::Handle<v8::Value> value, bool& ok) { return toUIn t8(value, NormalConversion, ok); } 314 inline uint8_t toUInt8(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
315 {
316 return toUInt8(value, NormalConversion, exceptionState);
317 }
315 318
316 // Convert a value to a 8-bit unsigned integer assuming the conversion canno t fail. 319 // Convert a value to a 8-bit unsigned integer assuming the conversion canno t fail.
317 inline uint8_t toUInt8(v8::Handle<v8::Value> value) 320 uint8_t toUInt8(v8::Handle<v8::Value>);
318 {
319 bool ok;
320 return toUInt8(value, NormalConversion, ok);
321 }
322 321
323 // Convert a value to a 16-bit signed integer. The conversion fails if the 322 // Convert a value to a 16-bit signed integer. The conversion fails if the
324 // value cannot be converted to a number or the range violated per WebIDL: 323 // value cannot be converted to a number or the range violated per WebIDL:
325 // http://www.w3.org/TR/WebIDL/#es-short 324 // http://www.w3.org/TR/WebIDL/#es-short
326 int16_t toInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 325 int16_t toInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
327 inline int16_t toInt16(v8::Handle<v8::Value> value, bool& ok) { return toInt 16(value, NormalConversion, ok); } 326 inline int16_t toInt16(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
327 {
328 return toInt16(value, NormalConversion, exceptionState);
329 }
328 330
329 // Convert a value to a 16-bit integer assuming the conversion cannot fail. 331 // Convert a value to a 16-bit integer assuming the conversion cannot fail.
330 inline int16_t toInt16(v8::Handle<v8::Value> value) 332 int16_t toInt16(v8::Handle<v8::Value>);
331 {
332 bool ok;
333 return toInt16(value, NormalConversion, ok);
334 }
335 333
336 // Convert a value to a 16-bit unsigned integer. The conversion fails if the 334 // Convert a value to a 16-bit unsigned integer. The conversion fails if the
337 // value cannot be converted to a number or the range violated per WebIDL: 335 // value cannot be converted to a number or the range violated per WebIDL:
338 // http://www.w3.org/TR/WebIDL/#es-unsigned-short 336 // http://www.w3.org/TR/WebIDL/#es-unsigned-short
339 uint16_t toUInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, boo l& ok); 337 uint16_t toUInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, Exc eptionState&);
340 inline uint16_t toUInt16(v8::Handle<v8::Value> value, bool& ok) { return toU Int16(value, NormalConversion, ok); } 338 inline uint16_t toUInt16(v8::Handle<v8::Value> value, ExceptionState& except ionState)
339 {
340 return toUInt16(value, NormalConversion, exceptionState);
341 }
341 342
342 // Convert a value to a 16-bit unsigned integer assuming the conversion cann ot fail. 343 // Convert a value to a 16-bit unsigned integer assuming the conversion cann ot fail.
343 inline uint16_t toUInt16(v8::Handle<v8::Value> value) 344 uint16_t toUInt16(v8::Handle<v8::Value>);
344 {
345 bool ok;
346 return toUInt16(value, NormalConversion, ok);
347 }
348 345
349 // Convert a value to a 32-bit signed integer. The conversion fails if the 346 // Convert a value to a 32-bit signed integer. The conversion fails if the
350 // value cannot be converted to a number or the range violated per WebIDL: 347 // value cannot be converted to a number or the range violated per WebIDL:
351 // http://www.w3.org/TR/WebIDL/#es-long 348 // http://www.w3.org/TR/WebIDL/#es-long
352 int32_t toInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 349 int32_t toInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
353 inline int32_t toInt32(v8::Handle<v8::Value> value, bool& ok) { return toInt 32(value, NormalConversion, ok); } 350 inline int32_t toInt32(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
351 {
352 return toInt32(value, NormalConversion, exceptionState);
353 }
354 354
355 // Convert a value to a 32-bit integer assuming the conversion cannot fail. 355 // Convert a value to a 32-bit integer assuming the conversion cannot fail.
356 inline int32_t toInt32(v8::Handle<v8::Value> value) 356 int32_t toInt32(v8::Handle<v8::Value>);
357 {
358 bool ok;
359 return toInt32(value, NormalConversion, ok);
360 }
361 357
362 // Convert a value to a 32-bit unsigned integer. The conversion fails if the 358 // Convert a value to a 32-bit unsigned integer. The conversion fails if the
363 // value cannot be converted to a number or the range violated per WebIDL: 359 // value cannot be converted to a number or the range violated per WebIDL:
364 // http://www.w3.org/TR/WebIDL/#es-unsigned-long 360 // http://www.w3.org/TR/WebIDL/#es-unsigned-long
365 uint32_t toUInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, boo l& ok); 361 uint32_t toUInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, Exc eptionState&);
366 inline uint32_t toUInt32(v8::Handle<v8::Value> value, bool& ok) { return toU Int32(value, NormalConversion, ok); } 362 inline uint32_t toUInt32(v8::Handle<v8::Value> value, ExceptionState& except ionState)
363 {
364 return toUInt32(value, NormalConversion, exceptionState);
365 }
367 366
368 // Convert a value to a 32-bit unsigned integer assuming the conversion cann ot fail. 367 // Convert a value to a 32-bit unsigned integer assuming the conversion cann ot fail.
369 inline uint32_t toUInt32(v8::Handle<v8::Value> value) 368 uint32_t toUInt32(v8::Handle<v8::Value>);
370 {
371 bool ok;
372 return toUInt32(value, NormalConversion, ok);
373 }
374 369
375 // Convert a value to a 64-bit signed integer. The conversion fails if the 370 // Convert a value to a 64-bit signed integer. The conversion fails if the
376 // value cannot be converted to a number or the range violated per WebIDL: 371 // value cannot be converted to a number or the range violated per WebIDL:
377 // http://www.w3.org/TR/WebIDL/#es-long-long 372 // http://www.w3.org/TR/WebIDL/#es-long-long
378 int64_t toInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 373 int64_t toInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
374 inline int64_t toInt64(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
375 {
376 return toInt64(value, NormalConversion, exceptionState);
377 }
379 378
380 // Convert a value to a 64-bit integer assuming the conversion cannot fail. 379 // Convert a value to a 64-bit integer assuming the conversion cannot fail.
381 inline int64_t toInt64(v8::Handle<v8::Value> value) 380 int64_t toInt64(v8::Handle<v8::Value>);
382 {
383 bool ok;
384 return toInt64(value, NormalConversion, ok);
385 }
386 381
387 // Convert a value to a 64-bit unsigned integer. The conversion fails if the 382 // Convert a value to a 64-bit unsigned integer. The conversion fails if the
388 // value cannot be converted to a number or the range violated per WebIDL: 383 // value cannot be converted to a number or the range violated per WebIDL:
389 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long 384 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long
390 uint64_t toUInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, boo l& ok); 385 uint64_t toUInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, Exc eptionState&);
386 inline uint64_t toUInt64(v8::Handle<v8::Value> value, ExceptionState& except ionState)
387 {
388 return toUInt64(value, NormalConversion, exceptionState);
389 }
391 390
392 // Convert a value to a 64-bit unsigned integer assuming the conversion cann ot fail. 391 // Convert a value to a 64-bit unsigned integer assuming the conversion cann ot fail.
393 inline uint64_t toUInt64(v8::Handle<v8::Value> value) 392 uint64_t toUInt64(v8::Handle<v8::Value>);
394 {
395 bool ok;
396 return toUInt64(value, NormalConversion, ok);
397 }
398 393
394 // Convert a value to a single precision float, which might fail.
395 float toFloat(v8::Handle<v8::Value>, ExceptionState&);
396
397 // Convert a value to a single precision float assuming the conversion canno t fail.
399 inline float toFloat(v8::Local<v8::Value> value) 398 inline float toFloat(v8::Local<v8::Value> value)
400 { 399 {
401 return static_cast<float>(value->NumberValue()); 400 return static_cast<float>(value->NumberValue());
402 } 401 }
403 402
404 WrapperWorldType worldType(v8::Isolate*); 403 WrapperWorldType worldType(v8::Isolate*);
405 WrapperWorldType worldTypeInMainThread(v8::Isolate*); 404 WrapperWorldType worldTypeInMainThread(v8::Isolate*);
406 405
407 DOMWrapperWorld* isolatedWorldForIsolate(v8::Isolate*); 406 DOMWrapperWorld* isolatedWorldForIsolate(v8::Isolate*);
408 407
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 // Result values for platform object 'deleter' methods, 706 // Result values for platform object 'deleter' methods,
708 // http://www.w3.org/TR/WebIDL/#delete 707 // http://www.w3.org/TR/WebIDL/#delete
709 enum DeleteResult { 708 enum DeleteResult {
710 DeleteSuccess, 709 DeleteSuccess,
711 DeleteReject, 710 DeleteReject,
712 DeleteUnknownProperty 711 DeleteUnknownProperty
713 }; 712 };
714 } // namespace WebCore 713 } // namespace WebCore
715 714
716 #endif // V8Binding_h 715 #endif // V8Binding_h
OLDNEW
« no previous file with comments | « Source/bindings/v8/ExceptionState.cpp ('k') | Source/bindings/v8/V8Binding.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698