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

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: Update expected outputs 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
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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 // Conversion flags, used in toIntXX/toUIntXX. 271 // Conversion flags, used in toIntXX/toUIntXX.
271 enum IntegerConversionConfiguration { 272 enum IntegerConversionConfiguration {
272 NormalConversion, 273 NormalConversion,
273 EnforceRange, 274 EnforceRange,
274 Clamp 275 Clamp
275 }; 276 };
276 277
277 // Convert a value to a 8-bit signed integer. The conversion fails if the 278 // Convert a value to a 8-bit signed integer. The conversion fails if the
278 // value cannot be converted to a number or the range violated per WebIDL: 279 // value cannot be converted to a number or the range violated per WebIDL:
279 // http://www.w3.org/TR/WebIDL/#es-byte 280 // http://www.w3.org/TR/WebIDL/#es-byte
280 int8_t toInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& o k); 281 int8_t toInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excepti onState&);
281 inline int8_t toInt8(v8::Handle<v8::Value> value, bool& ok) { return toInt8( value, NormalConversion, ok); } 282 inline int8_t toInt8(v8::Handle<v8::Value> value, ExceptionState& exceptionS tate)
283 {
284 return toInt8(value, NormalConversion, exceptionState);
285 }
282 286
283 // Convert a value to a 8-bit integer assuming the conversion cannot fail. 287 // Convert a value to a 8-bit integer assuming the conversion cannot fail.
284 inline int8_t toInt8(v8::Handle<v8::Value> value) 288 int8_t toInt8(v8::Handle<v8::Value>);
285 {
286 bool ok;
287 return toInt8(value, NormalConversion, ok);
288 }
289 289
290 // Convert a value to a 8-bit unsigned integer. The conversion fails if the 290 // Convert a value to a 8-bit unsigned integer. The conversion fails if the
291 // value cannot be converted to a number or the range violated per WebIDL: 291 // value cannot be converted to a number or the range violated per WebIDL:
292 // http://www.w3.org/TR/WebIDL/#es-octet 292 // http://www.w3.org/TR/WebIDL/#es-octet
293 uint8_t toUInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 293 uint8_t toUInt8(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
294 inline uint8_t toUInt8(v8::Handle<v8::Value> value, bool& ok) { return toUIn t8(value, NormalConversion, ok); } 294 inline uint8_t toUInt8(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
295 {
296 return toUInt8(value, NormalConversion, exceptionState);
297 }
295 298
296 // Convert a value to a 8-bit unsigned integer assuming the conversion canno t fail. 299 // Convert a value to a 8-bit unsigned integer assuming the conversion canno t fail.
297 inline uint8_t toUInt8(v8::Handle<v8::Value> value) 300 uint8_t toUInt8(v8::Handle<v8::Value>);
298 {
299 bool ok;
300 return toUInt8(value, NormalConversion, ok);
301 }
302 301
303 // Convert a value to a 16-bit signed integer. The conversion fails if the 302 // Convert a value to a 16-bit signed integer. The conversion fails if the
304 // value cannot be converted to a number or the range violated per WebIDL: 303 // value cannot be converted to a number or the range violated per WebIDL:
305 // http://www.w3.org/TR/WebIDL/#es-short 304 // http://www.w3.org/TR/WebIDL/#es-short
306 int16_t toInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 305 int16_t toInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
307 inline int16_t toInt16(v8::Handle<v8::Value> value, bool& ok) { return toInt 16(value, NormalConversion, ok); } 306 inline int16_t toInt16(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
307 {
308 return toInt16(value, NormalConversion, exceptionState);
309 }
308 310
309 // Convert a value to a 16-bit integer assuming the conversion cannot fail. 311 // Convert a value to a 16-bit integer assuming the conversion cannot fail.
310 inline int16_t toInt16(v8::Handle<v8::Value> value) 312 int16_t toInt16(v8::Handle<v8::Value>);
311 {
312 bool ok;
313 return toInt16(value, NormalConversion, ok);
314 }
315 313
316 // Convert a value to a 16-bit unsigned integer. The conversion fails if the 314 // Convert a value to a 16-bit unsigned integer. The conversion fails if the
317 // value cannot be converted to a number or the range violated per WebIDL: 315 // value cannot be converted to a number or the range violated per WebIDL:
318 // http://www.w3.org/TR/WebIDL/#es-unsigned-short 316 // http://www.w3.org/TR/WebIDL/#es-unsigned-short
319 uint16_t toUInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, boo l& ok); 317 uint16_t toUInt16(v8::Handle<v8::Value>, IntegerConversionConfiguration, Exc eptionState&);
320 inline uint16_t toUInt16(v8::Handle<v8::Value> value, bool& ok) { return toU Int16(value, NormalConversion, ok); } 318 inline uint16_t toUInt16(v8::Handle<v8::Value> value, ExceptionState& except ionState)
319 {
320 return toUInt16(value, NormalConversion, exceptionState);
321 }
321 322
322 // Convert a value to a 16-bit unsigned integer assuming the conversion cann ot fail. 323 // Convert a value to a 16-bit unsigned integer assuming the conversion cann ot fail.
323 inline uint16_t toUInt16(v8::Handle<v8::Value> value) 324 uint16_t toUInt16(v8::Handle<v8::Value>);
324 {
325 bool ok;
326 return toUInt16(value, NormalConversion, ok);
327 }
328 325
329 // Convert a value to a 32-bit signed integer. The conversion fails if the 326 // Convert a value to a 32-bit signed integer. The conversion fails if the
330 // value cannot be converted to a number or the range violated per WebIDL: 327 // value cannot be converted to a number or the range violated per WebIDL:
331 // http://www.w3.org/TR/WebIDL/#es-long 328 // http://www.w3.org/TR/WebIDL/#es-long
332 int32_t toInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 329 int32_t toInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
333 inline int32_t toInt32(v8::Handle<v8::Value> value, bool& ok) { return toInt 32(value, NormalConversion, ok); } 330 inline int32_t toInt32(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
331 {
332 return toInt32(value, NormalConversion, exceptionState);
333 }
334 334
335 // Convert a value to a 32-bit integer assuming the conversion cannot fail. 335 // Convert a value to a 32-bit integer assuming the conversion cannot fail.
336 inline int32_t toInt32(v8::Handle<v8::Value> value) 336 int32_t toInt32(v8::Handle<v8::Value>);
337 {
338 bool ok;
339 return toInt32(value, NormalConversion, ok);
340 }
341 337
342 // Convert a value to a 32-bit unsigned integer. The conversion fails if the 338 // Convert a value to a 32-bit unsigned integer. The conversion fails if the
343 // value cannot be converted to a number or the range violated per WebIDL: 339 // value cannot be converted to a number or the range violated per WebIDL:
344 // http://www.w3.org/TR/WebIDL/#es-unsigned-long 340 // http://www.w3.org/TR/WebIDL/#es-unsigned-long
345 uint32_t toUInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, boo l& ok); 341 uint32_t toUInt32(v8::Handle<v8::Value>, IntegerConversionConfiguration, Exc eptionState&);
346 inline uint32_t toUInt32(v8::Handle<v8::Value> value, bool& ok) { return toU Int32(value, NormalConversion, ok); } 342 inline uint32_t toUInt32(v8::Handle<v8::Value> value, ExceptionState& except ionState)
343 {
344 return toUInt32(value, NormalConversion, exceptionState);
345 }
347 346
348 // Convert a value to a 32-bit unsigned integer assuming the conversion cann ot fail. 347 // Convert a value to a 32-bit unsigned integer assuming the conversion cann ot fail.
349 inline uint32_t toUInt32(v8::Handle<v8::Value> value) 348 uint32_t toUInt32(v8::Handle<v8::Value>);
350 {
351 bool ok;
352 return toUInt32(value, NormalConversion, ok);
353 }
354 349
355 // Convert a value to a 64-bit signed integer. The conversion fails if the 350 // Convert a value to a 64-bit signed integer. The conversion fails if the
356 // value cannot be converted to a number or the range violated per WebIDL: 351 // value cannot be converted to a number or the range violated per WebIDL:
357 // http://www.w3.org/TR/WebIDL/#es-long-long 352 // http://www.w3.org/TR/WebIDL/#es-long-long
358 int64_t toInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, bool& ok); 353 int64_t toInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, Excep tionState&);
354 inline int64_t toInt64(v8::Handle<v8::Value> value, ExceptionState& exceptio nState)
355 {
356 return toInt64(value, NormalConversion, exceptionState);
357 }
359 358
360 // Convert a value to a 64-bit integer assuming the conversion cannot fail. 359 // Convert a value to a 64-bit integer assuming the conversion cannot fail.
361 inline int64_t toInt64(v8::Handle<v8::Value> value) 360 int64_t toInt64(v8::Handle<v8::Value>);
362 {
363 bool ok;
364 return toInt64(value, NormalConversion, ok);
365 }
366 361
367 // Convert a value to a 64-bit unsigned integer. The conversion fails if the 362 // Convert a value to a 64-bit unsigned integer. The conversion fails if the
368 // value cannot be converted to a number or the range violated per WebIDL: 363 // value cannot be converted to a number or the range violated per WebIDL:
369 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long 364 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long
370 uint64_t toUInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, boo l& ok); 365 uint64_t toUInt64(v8::Handle<v8::Value>, IntegerConversionConfiguration, Exc eptionState&);
366 inline uint64_t toUInt64(v8::Handle<v8::Value> value, ExceptionState& except ionState)
367 {
368 return toUInt64(value, NormalConversion, exceptionState);
369 }
371 370
372 // Convert a value to a 64-bit unsigned integer assuming the conversion cann ot fail. 371 // Convert a value to a 64-bit unsigned integer assuming the conversion cann ot fail.
373 inline uint64_t toUInt64(v8::Handle<v8::Value> value) 372 uint64_t toUInt64(v8::Handle<v8::Value>);
374 {
375 bool ok;
376 return toUInt64(value, NormalConversion, ok);
377 }
378 373
374 // Convert a value to a single precision float, which might fail.
375 float toFloat(v8::Handle<v8::Value>, ExceptionState&);
376
377 // Convert a value to a single precision float assuming the conversion canno t fail.
379 inline float toFloat(v8::Local<v8::Value> value) 378 inline float toFloat(v8::Local<v8::Value> value)
380 { 379 {
381 return static_cast<float>(value->NumberValue()); 380 return static_cast<float>(value->NumberValue());
382 } 381 }
383 382
384 WrapperWorldType worldType(v8::Isolate*); 383 WrapperWorldType worldType(v8::Isolate*);
385 WrapperWorldType worldTypeInMainThread(v8::Isolate*); 384 WrapperWorldType worldTypeInMainThread(v8::Isolate*);
386 385
387 DOMWrapperWorld* isolatedWorldForIsolate(v8::Isolate*); 386 DOMWrapperWorld* isolatedWorldForIsolate(v8::Isolate*);
388 387
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 // Result values for platform object 'deleter' methods, 699 // Result values for platform object 'deleter' methods,
701 // http://www.w3.org/TR/WebIDL/#delete 700 // http://www.w3.org/TR/WebIDL/#delete
702 enum DeleteResult { 701 enum DeleteResult {
703 DeleteSuccess, 702 DeleteSuccess,
704 DeleteReject, 703 DeleteReject,
705 DeleteUnknownProperty 704 DeleteUnknownProperty
706 }; 705 };
707 } // namespace WebCore 706 } // namespace WebCore
708 707
709 #endif // V8Binding_h 708 #endif // V8Binding_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698