| Index: third_party/WebKit/Source/bindings/core/v8/IDLTypes.h
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/IDLTypes.h b/third_party/WebKit/Source/bindings/core/v8/IDLTypes.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..eb17c7ddeeda7ea03c68a225820393e1518acb06
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/IDLTypes.h
|
| @@ -0,0 +1,335 @@
|
| +// 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 IDLTypes_h
|
| +#define IDLTypes_h
|
| +
|
| +#include <type_traits>
|
| +#include "bindings/core/v8/NativeValueTraits.h"
|
| +#include "bindings/core/v8/SerializedScriptValue.h"
|
| +#include "bindings/core/v8/V8Binding.h"
|
| +#include "core/CoreExport.h"
|
| +#include "platform/heap/Handle.h"
|
| +#include "wtf/TypeTraits.h"
|
| +#include "wtf/text/WTFString.h"
|
| +
|
| +namespace blink {
|
| +
|
| +namespace idl {
|
| +
|
| +struct CORE_EXPORT Boolean final {};
|
| +
|
| +struct CORE_EXPORT Byte final {};
|
| +struct CORE_EXPORT Octet final {};
|
| +struct CORE_EXPORT Short final {};
|
| +struct CORE_EXPORT UnsignedShort final {};
|
| +struct CORE_EXPORT Long final {};
|
| +struct CORE_EXPORT UnsignedLong final {};
|
| +struct CORE_EXPORT LongLong final {};
|
| +struct CORE_EXPORT UnsignedLongLong final {};
|
| +
|
| +struct CORE_EXPORT ByteString final {};
|
| +struct CORE_EXPORT String final {};
|
| +struct CORE_EXPORT USVString final {};
|
| +
|
| +struct CORE_EXPORT Double final {};
|
| +struct CORE_EXPORT UnrestrictedDouble final {};
|
| +
|
| +struct CORE_EXPORT Float final {};
|
| +struct CORE_EXPORT UnrestrictedFloat final {};
|
| +
|
| +struct CORE_EXPORT Date final {};
|
| +
|
| +template <typename SequenceType>
|
| +struct CORE_EXPORT Sequence final {};
|
| +
|
| +} // namespace idl
|
| +
|
| +class DOMWindow;
|
| +
|
| +// Boolean
|
| +// -------
|
| +template <>
|
| +struct NativeValueTraits<idl::Boolean> {
|
| + using ImplType = bool;
|
| +
|
| + CORE_EXPORT static inline bool nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toBoolean(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +// Integers
|
| +// --------
|
| +template <>
|
| +struct NativeValueTraits<idl::Byte> {
|
| + using ImplType = int8_t;
|
| +
|
| + CORE_EXPORT static inline int8_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toInt8(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::Octet> {
|
| + using ImplType = uint8_t;
|
| +
|
| + CORE_EXPORT static inline uint8_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toUInt8(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::Short> {
|
| + using ImplType = int16_t;
|
| +
|
| + CORE_EXPORT static inline int16_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toInt16(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::UnsignedShort> {
|
| + using ImplType = uint16_t;
|
| +
|
| + CORE_EXPORT static inline uint16_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toUInt16(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::Long> {
|
| + using ImplType = int32_t;
|
| +
|
| + CORE_EXPORT static inline int32_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toInt32(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::UnsignedLong> {
|
| + using ImplType = uint32_t;
|
| +
|
| + CORE_EXPORT static inline uint32_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toUInt32(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::LongLong> {
|
| + using ImplType = int64_t;
|
| +
|
| + CORE_EXPORT static inline int64_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toInt64(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::UnsignedLongLong> {
|
| + using ImplType = uint64_t;
|
| +
|
| + CORE_EXPORT static inline uint64_t nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState,
|
| + IntegerConversionConfiguration conversionMode = NormalConversion) {
|
| + return toUInt64(isolate, value, conversionMode, exceptionState);
|
| + }
|
| +};
|
| +
|
| +// Strings
|
| +// -------
|
| +template <>
|
| +struct NativeValueTraits<idl::ByteString> {
|
| + using ImplType = String;
|
| +
|
| + CORE_EXPORT static inline String nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toByteString(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::String> {
|
| + using ImplType = String;
|
| +
|
| + template <V8StringResourceMode Mode = DefaultMode>
|
| + CORE_EXPORT static inline String nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + V8StringResource<Mode> s(value);
|
| + if (!s.prepare(isolate, exceptionState))
|
| + return String();
|
| + return s;
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::USVString> {
|
| + using ImplType = String;
|
| +
|
| + 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<idl::Double> {
|
| + using ImplType = double;
|
| +
|
| + CORE_EXPORT static inline double nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toRestrictedDouble(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::UnrestrictedDouble> {
|
| + using ImplType = double;
|
| +
|
| + CORE_EXPORT static inline double nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toDouble(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::Float> {
|
| + using ImplType = float;
|
| +
|
| + CORE_EXPORT static inline float nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toRestrictedFloat(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::UnrestrictedFloat> {
|
| + using ImplType = float;
|
| +
|
| + CORE_EXPORT static inline float nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toFloat(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +// Type-specific overloads.
|
| +// ------------------------
|
| +template <>
|
| +struct NativeValueTraits<DOMWindow> {
|
| + using ImplType = DOMWindow;
|
| +
|
| + CORE_EXPORT static inline DOMWindow* nativeValue(
|
| + v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toDOMWindow(isolate, value);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<SerializedScriptValue> {
|
| + using ImplType = SerializedScriptValue;
|
| +
|
| + CORE_EXPORT static inline PassRefPtr<SerializedScriptValue> nativeValue(
|
| + v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return SerializedScriptValue::serialize(isolate, value, nullptr, nullptr, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct NativeValueTraits<idl::Date> {
|
| + using ImplType = double;
|
| +
|
| + CORE_EXPORT static inline double nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return toCoreDate(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <typename T>
|
| +struct NativeValueTraits<Member<T>> {
|
| + using ImplType = Member<T>;
|
| +
|
| + CORE_EXPORT static inline T* nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return NativeValueTraits<T>::nativeValue(isolate, value, exceptionState);
|
| + }
|
| +};
|
| +
|
| +template <typename T>
|
| +struct NativeValueTraits<T> {
|
| + using ImplType = T;
|
| +
|
| + CORE_EXPORT static inline T* nativeValue(v8::Isolate* isolate,
|
| + v8::Local<v8::Value> value,
|
| + ExceptionState& exceptionState) {
|
| + return V8TypeOf<T>::Type::toImplWithTypeCheck(isolate, value);
|
| + }
|
| +};
|
| +
|
| +// Sequences
|
| +// ---------
|
| +template <typename T>
|
| +struct NativeValueTraits<idl::Sequence<T>> {
|
| + private:
|
| + using MemberImplType = typename NativeValueTraits<T>::ImplType;
|
| + using FullMemberImplType = typename std::conditional<WTF::IsGarbageCollectedType<MemberImplType>::value,
|
| + Member<MemberImplType>,
|
| + MemberImplType>::type;
|
| +
|
| + public:
|
| + // This template metaprogramming black magic intends to cover the following cases:
|
| + // * The vector's member type is an Oilpan type: use HeapVector<Member<T>>
|
| + // * The vector's member type is an IDL union or dictionary type: use HeapVector<T>
|
| + // * Everything else: use a simple Vector<T>
|
| + using ImplType =
|
| + typename std::conditional<WTF::IsGarbageCollectedType<MemberImplType>::value ||
|
| + std::is_class<typename V8TypeOf<MemberImplType>::Type>::value,
|
| + HeapVector<FullMemberImplType>,
|
| + Vector<FullMemberImplType>>::type;
|
| +
|
| + CORE_EXPORT static inline ImplType
|
| + nativeValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState, int index = 0) {
|
| + return toImplArray<ImplType>(value, index, isolate, exceptionState);
|
| + }
|
| +};
|
| +
|
| +} // namespace blink
|
| +
|
| +#endif // IDLTypes_h
|
|
|