Index: third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImpl.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImpl.h b/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImpl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0d489a5a61344d525fca94219c5b60132b4187b8 |
--- /dev/null |
+++ b/third_party/WebKit/Source/bindings/core/v8/NativeValueTraitsImpl.h |
@@ -0,0 +1,312 @@ |
+// Copyright (c) 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef NativeValueTraitsImpl_h |
+#define NativeValueTraitsImpl_h |
+ |
+#include "bindings/core/v8/IDLTypes.h" |
+#include "bindings/core/v8/NativeValueTraits.h" |
+#include "bindings/core/v8/V8Binding.h" |
+#include "core/CoreExport.h" |
+#include "wtf/text/WTFString.h" |
+ |
+namespace blink { |
+ |
+// Boolean |
+template <> |
+struct NativeValueTraits<IDLBoolean> |
+ : public NativeValueTraitsBase<IDLBoolean> { |
+ CORE_EXPORT static inline bool nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toBoolean(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+// Integers |
+// |
+// All integer specializations offer a second nativeValue() besides the default |
+// one: it takes an IntegerConversionConfiguration argument to let callers |
+// specify how the integers should be converted. The default nativeValue() |
+// overload will always use NormalConversion. |
+template <> |
+struct NativeValueTraits<IDLByte> : public NativeValueTraitsBase<IDLByte> { |
+ CORE_EXPORT static inline int8_t nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline int8_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toInt8(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLOctet> : public NativeValueTraitsBase<IDLOctet> { |
+ CORE_EXPORT static inline uint8_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline uint8_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toUInt8(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLShort> : public NativeValueTraitsBase<IDLShort> { |
+ CORE_EXPORT static inline int16_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline int16_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toInt16(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLUnsignedShort> |
+ : public NativeValueTraitsBase<IDLUnsignedShort> { |
+ CORE_EXPORT static inline uint16_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline uint16_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toUInt16(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLLong> : public NativeValueTraitsBase<IDLLong> { |
+ CORE_EXPORT static inline int32_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline int32_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toInt32(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLUnsignedLong> |
+ : public NativeValueTraitsBase<IDLUnsignedLong> { |
+ CORE_EXPORT static inline uint32_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline uint32_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toUInt32(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLLongLong> |
+ : public NativeValueTraitsBase<IDLLongLong> { |
+ CORE_EXPORT static inline int64_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline int64_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toInt64(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLUnsignedLongLong> |
+ : public NativeValueTraitsBase<IDLUnsignedLongLong> { |
+ CORE_EXPORT static inline uint64_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, NormalConversion); |
+ } |
+ |
+ CORE_EXPORT static inline uint64_t nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ IntegerConversionConfiguration conversionMode) { |
+ return toUInt64(isolate, value, conversionMode, exceptionState); |
+ } |
+}; |
+ |
+// Strings |
+template <> |
+struct NativeValueTraits<IDLByteString> |
+ : public NativeValueTraitsBase<IDLByteString> { |
+ CORE_EXPORT static inline String nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toByteString(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLString> : public NativeValueTraitsBase<IDLString> { |
+ CORE_EXPORT static inline String nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue<V8StringResourceMode::DefaultMode>(isolate, value, |
+ exceptionState); |
+ } |
+ |
+ template <V8StringResourceMode Mode = DefaultMode> |
+ CORE_EXPORT static inline String nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ V8StringResource<Mode> string(value); |
+ if (!string.prepare(isolate, exceptionState)) |
+ return String(); |
+ return string; |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLUSVString> |
+ : public NativeValueTraitsBase<IDLUSVString> { |
+ CORE_EXPORT static inline String nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toUSVString(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+// Floats and doubles |
+template <> |
+struct NativeValueTraits<IDLDouble> : public NativeValueTraitsBase<IDLDouble> { |
+ CORE_EXPORT static inline double nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toRestrictedDouble(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLUnrestrictedDouble> |
+ : public NativeValueTraitsBase<IDLUnrestrictedDouble> { |
+ CORE_EXPORT static inline double nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toDouble(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLFloat> : public NativeValueTraitsBase<IDLFloat> { |
+ CORE_EXPORT static inline float nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toRestrictedFloat(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+template <> |
+struct NativeValueTraits<IDLUnrestrictedFloat> |
+ : public NativeValueTraitsBase<IDLUnrestrictedFloat> { |
+ CORE_EXPORT static inline float nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toFloat(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+// Promises |
+template <> |
+struct NativeValueTraits<IDLPromise> |
+ : public NativeValueTraitsBase<IDLPromise> { |
+ CORE_EXPORT static inline ScriptPromise nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value); |
+ } |
+ |
+ CORE_EXPORT static inline ScriptPromise nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value) { |
+ return ScriptPromise::cast(ScriptState::current(isolate), value); |
+ } |
+}; |
+ |
+// Type-specific overloads |
+template <> |
+struct NativeValueTraits<IDLDate> : public NativeValueTraitsBase<IDLDate> { |
+ CORE_EXPORT static inline double nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return toCoreDate(isolate, value, exceptionState); |
+ } |
+}; |
+ |
+// Sequences |
+template <typename T> |
+struct NativeValueTraits<IDLSequence<T>> |
+ : public NativeValueTraitsBase<IDLSequence<T>> { |
+ // Nondependent types need to be explicitly qualified to be accessible. |
+ using typename NativeValueTraitsBase<IDLSequence<T>>::ImplType; |
+ |
+ CORE_EXPORT static inline ImplType nativeValue( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState) { |
+ return nativeValue(isolate, value, exceptionState, 0); |
+ } |
+ |
+ CORE_EXPORT static inline ImplType nativeValue(v8::Isolate* isolate, |
+ v8::Local<v8::Value> value, |
+ ExceptionState& exceptionState, |
+ int index) { |
+ return toImplArray<ImplType, T>(value, index, isolate, exceptionState); |
+ } |
+}; |
+ |
+} // namespace blink |
+ |
+#endif // NativeValueTraitsImpl_h |