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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/V8Binding.h

Issue 2730183003: bindings: Add C++ versions of WebIDL types and generalize NativeValueTraits. (Closed)
Patch Set: Move specialization for SerializedScriptValue to the appropriate header Created 3 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
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 743 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 } else { 754 } else {
755 exceptionState.throwTypeError("Invalid Array element type"); 755 exceptionState.throwTypeError("Invalid Array element type");
756 return VectorType(); 756 return VectorType();
757 } 757 }
758 } 758 }
759 return result; 759 return result;
760 } 760 }
761 761
762 // Converts a JavaScript value to an array as per the Web IDL specification: 762 // Converts a JavaScript value to an array as per the Web IDL specification:
763 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-array 763 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-array
764 template <typename VectorType> 764 template <typename VectorType,
765 typename ValueType = typename VectorType::ValueType>
765 VectorType toImplArray(v8::Local<v8::Value> value, 766 VectorType toImplArray(v8::Local<v8::Value> value,
766 int argumentIndex, 767 int argumentIndex,
767 v8::Isolate* isolate, 768 v8::Isolate* isolate,
768 ExceptionState& exceptionState) { 769 ExceptionState& exceptionState) {
769 typedef typename VectorType::ValueType ValueType;
770 typedef NativeValueTraits<ValueType> TraitsType; 770 typedef NativeValueTraits<ValueType> TraitsType;
771 771
772 uint32_t length = 0; 772 uint32_t length = 0;
773 if (value->IsArray()) { 773 if (value->IsArray()) {
774 length = v8::Local<v8::Array>::Cast(value)->Length(); 774 length = v8::Local<v8::Array>::Cast(value)->Length();
775 } else if (!toV8Sequence(value, length, isolate, exceptionState)) { 775 } else if (!toV8Sequence(value, length, isolate, exceptionState)) {
776 if (!exceptionState.hadException()) 776 if (!exceptionState.hadException())
777 exceptionState.throwTypeError( 777 exceptionState.throwTypeError(
778 ExceptionMessages::notAnArrayTypeArgumentOrValue(argumentIndex)); 778 ExceptionMessages::notAnArrayTypeArgumentOrValue(argumentIndex));
779 return VectorType(); 779 return VectorType();
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 if (!v8Call(lengthValue->Uint32Value(isolate->GetCurrentContext()), 896 if (!v8Call(lengthValue->Uint32Value(isolate->GetCurrentContext()),
897 sequenceLength, block)) { 897 sequenceLength, block)) {
898 exceptionState.rethrowV8Exception(block.Exception()); 898 exceptionState.rethrowV8Exception(block.Exception());
899 return false; 899 return false;
900 } 900 }
901 901
902 length = sequenceLength; 902 length = sequenceLength;
903 return true; 903 return true;
904 } 904 }
905 905
906 // TODO(rakuco): remove the specializations below (and consequently the
907 // non-IDLBase version of NativeValueTraitsBase) once we manage to convert all
908 // uses of NativeValueTraits to types that derive from IDLBase or for generated
909 // IDL interfaces/dictionaries/unions.
906 template <> 910 template <>
907 struct NativeValueTraits<String> { 911 struct NativeValueTraits<String> {
908 static inline String nativeValue(v8::Isolate* isolate, 912 static inline String nativeValue(v8::Isolate* isolate,
909 v8::Local<v8::Value> value, 913 v8::Local<v8::Value> value,
910 ExceptionState& exceptionState) { 914 ExceptionState& exceptionState) {
911 V8StringResource<> stringValue(value); 915 V8StringResource<> stringValue(value);
912 if (!stringValue.prepare(exceptionState)) 916 if (!stringValue.prepare(exceptionState))
913 return String(); 917 return String();
914 return stringValue; 918 return stringValue;
915 } 919 }
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 // If the argument isn't an object, this will crash. 1164 // If the argument isn't an object, this will crash.
1161 CORE_EXPORT v8::Local<v8::Value> freezeV8Object(v8::Local<v8::Value>, 1165 CORE_EXPORT v8::Local<v8::Value> freezeV8Object(v8::Local<v8::Value>,
1162 v8::Isolate*); 1166 v8::Isolate*);
1163 1167
1164 CORE_EXPORT v8::Local<v8::Value> fromJSONString(v8::Isolate*, 1168 CORE_EXPORT v8::Local<v8::Value> fromJSONString(v8::Isolate*,
1165 const String& stringifiedJSON, 1169 const String& stringifiedJSON,
1166 ExceptionState&); 1170 ExceptionState&);
1167 } // namespace blink 1171 } // namespace blink
1168 1172
1169 #endif // V8Binding_h 1173 #endif // V8Binding_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698