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

Unified Diff: third_party/WebKit/Source/bindings/core/v8/IDLTypes.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 side-by-side diff with in-line comments
Download patch
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..611a0c04b81aee15c442a22bea42ee60886d21ec
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/core/v8/IDLTypes.h
@@ -0,0 +1,80 @@
+// 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/IDLTypesBase.h"
+#include "bindings/core/v8/NativeValueTraits.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 {
+
+class ScriptPromise;
+
+// Boolean
+struct CORE_EXPORT IDLBoolean final : public IDLBaseHelper<bool> {};
+
+// Integers
+struct CORE_EXPORT IDLByte final : public IDLBaseHelper<int8_t> {};
+struct CORE_EXPORT IDLOctet final : public IDLBaseHelper<uint8_t> {};
+struct CORE_EXPORT IDLShort final : public IDLBaseHelper<int16_t> {};
+struct CORE_EXPORT IDLUnsignedShort final : public IDLBaseHelper<uint16_t> {};
+struct CORE_EXPORT IDLLong final : public IDLBaseHelper<int32_t> {};
+struct CORE_EXPORT IDLUnsignedLong final : public IDLBaseHelper<uint32_t> {};
+struct CORE_EXPORT IDLLongLong final : public IDLBaseHelper<int64_t> {};
+struct CORE_EXPORT IDLUnsignedLongLong final : public IDLBaseHelper<uint64_t> {
+};
+
+// Strings
+struct CORE_EXPORT IDLByteString final : public IDLBaseHelper<String> {};
+struct CORE_EXPORT IDLString final : public IDLBaseHelper<String> {};
+struct CORE_EXPORT IDLUSVString final : public IDLBaseHelper<String> {};
+
+// Double
+struct CORE_EXPORT IDLDouble final : public IDLBaseHelper<double> {};
+struct CORE_EXPORT IDLUnrestrictedDouble final : public IDLBaseHelper<double> {
+};
+
+// Float
+struct CORE_EXPORT IDLFloat final : public IDLBaseHelper<float> {};
+struct CORE_EXPORT IDLUnrestrictedFloat final : public IDLBaseHelper<float> {};
+
+struct CORE_EXPORT IDLDate final : public IDLBaseHelper<double> {};
+
+// Promise
+struct CORE_EXPORT IDLPromise final : public IDLBaseHelper<ScriptPromise> {};
+
+// Sequence
+template <typename T>
+struct CORE_EXPORT IDLSequence final : public IDLBase {
+ private:
+ using CppType = typename NativeValueTraits<T>::ImplType;
+ using MaybeWrappedCppType =
+ typename std::conditional<WTF::IsGarbageCollectedType<CppType>::value,
+ Member<CppType>,
+ CppType>::type;
+
+ public:
+ // Two kinds of types need HeapVector:
+ // 1. Oilpan types, which are wrapped by Member<>.
+ // 2. IDL unions and dictionaries, which are not Oilpan types themselves (and
+ // are thus not wrapped by Member<>) but have a trace() method and can
+ // contain Oilpan members. They both also happen to specialize V8TypeOf,
+ // which we use to recognize them.
+ using ImplType = typename std::conditional<
+ std::is_same<MaybeWrappedCppType, Member<CppType>>::value ||
+ std::is_class<typename V8TypeOf<CppType>::Type>::value,
+ HeapVector<MaybeWrappedCppType>,
+ Vector<CppType>>::type;
+};
+
+} // namespace blink
+
+#endif // IDLTypes_h
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/Dictionary.h ('k') | third_party/WebKit/Source/bindings/core/v8/IDLTypesBase.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698