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

Side by Side Diff: Source/bindings/core/v8/V8Binding.cpp

Issue 860353002: IDL: Add toRestricted{Float,Double}() helpers to V8Binding.h (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: add FIXME comment Created 5 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/core/v8/V8Binding.h ('k') | Source/bindings/scripts/v8_attributes.py » ('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) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 { 512 {
513 NonThrowableExceptionState exceptionState; 513 NonThrowableExceptionState exceptionState;
514 return toUInt64(value, NormalConversion, exceptionState); 514 return toUInt64(value, NormalConversion, exceptionState);
515 } 515 }
516 516
517 float toFloat(v8::Handle<v8::Value> value, ExceptionState& exceptionState) 517 float toFloat(v8::Handle<v8::Value> value, ExceptionState& exceptionState)
518 { 518 {
519 return static_cast<float>(toDouble(value, exceptionState)); 519 return static_cast<float>(toDouble(value, exceptionState));
520 } 520 }
521 521
522 float toRestrictedFloat(v8::Handle<v8::Value> value, ExceptionState& exceptionSt ate)
523 {
524 float numberValue = toFloat(value, exceptionState);
525 if (exceptionState.hadException())
526 return 0;
527 if (!std::isfinite(numberValue)) {
528 exceptionState.throwTypeError("The provided float value is non-finite.") ;
a.suchit2 2015/02/20 15:03:12 Why are we not throwing NotSupportedError from her
Jens Widell 2015/02/20 15:16:46 We're throwing TypeError here because that's what
a.suchit2 2015/02/21 09:35:26 Thanks Jens
529 return 0;
530 }
531 return numberValue;
532 }
533
522 double toDouble(v8::Handle<v8::Value> value, ExceptionState& exceptionState) 534 double toDouble(v8::Handle<v8::Value> value, ExceptionState& exceptionState)
523 { 535 {
524 if (value->IsNumber()) 536 if (value->IsNumber())
525 return value->NumberValue(); 537 return value->NumberValue();
526 538
527 v8::Isolate* isolate = v8::Isolate::GetCurrent(); 539 v8::Isolate* isolate = v8::Isolate::GetCurrent();
528 v8::TryCatch block(isolate); 540 v8::TryCatch block(isolate);
529 v8::Local<v8::Number> numberObject(value->ToNumber(isolate)); 541 v8::Local<v8::Number> numberObject(value->ToNumber(isolate));
530 if (block.HasCaught()) { 542 if (block.HasCaught()) {
531 exceptionState.rethrowV8Exception(block.Exception()); 543 exceptionState.rethrowV8Exception(block.Exception());
532 return 0; 544 return 0;
533 } 545 }
534 return numberObject->NumberValue(); 546 return numberObject->NumberValue();
535 } 547 }
536 548
549 double toRestrictedDouble(v8::Handle<v8::Value> value, ExceptionState& exception State)
550 {
551 double numberValue = toDouble(value, exceptionState);
552 if (exceptionState.hadException())
553 return 0;
554 if (!std::isfinite(numberValue)) {
555 exceptionState.throwTypeError("The provided double value is non-finite." );
a.suchit2 2015/02/20 15:03:12 same as above.
556 return 0;
557 }
558 return numberValue;
559 }
560
537 String toByteString(v8::Handle<v8::Value> value, ExceptionState& exceptionState) 561 String toByteString(v8::Handle<v8::Value> value, ExceptionState& exceptionState)
538 { 562 {
539 // Handle null default value. 563 // Handle null default value.
540 if (value.IsEmpty()) 564 if (value.IsEmpty())
541 return String(); 565 return String();
542 566
543 // From the Web IDL spec: http://heycam.github.io/webidl/#es-ByteString 567 // From the Web IDL spec: http://heycam.github.io/webidl/#es-ByteString
544 if (value.IsEmpty()) 568 if (value.IsEmpty())
545 return String(); 569 return String();
546 570
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 PassRefPtr<TraceEvent::ConvertableToTraceFormat> devToolsTraceEventData(v8::Isol ate* isolate, ExecutionContext* context, v8::Handle<v8::Function> function) 1030 PassRefPtr<TraceEvent::ConvertableToTraceFormat> devToolsTraceEventData(v8::Isol ate* isolate, ExecutionContext* context, v8::Handle<v8::Function> function)
1007 { 1031 {
1008 int scriptId = 0; 1032 int scriptId = 0;
1009 String resourceName; 1033 String resourceName;
1010 int lineNumber = 1; 1034 int lineNumber = 1;
1011 GetDevToolsFunctionInfo(function, isolate, scriptId, resourceName, lineNumbe r); 1035 GetDevToolsFunctionInfo(function, isolate, scriptId, resourceName, lineNumbe r);
1012 return InspectorFunctionCallEvent::data(context, scriptId, resourceName, lin eNumber); 1036 return InspectorFunctionCallEvent::data(context, scriptId, resourceName, lin eNumber);
1013 } 1037 }
1014 1038
1015 } // namespace blink 1039 } // namespace blink
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/V8Binding.h ('k') | Source/bindings/scripts/v8_attributes.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698