1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This file has been auto-generated from the Jinja2 template
6 // third_party/blink/renderer/bindings/templates/union_container.cc.tmpl
7 // by the script code_generator_v8.py.
8 // DO NOT MODIFY!
9
10 // clang-format off
11 #include "third_party/blink/renderer/bindings/tests/results/core/double_or_string_or_double_or_string_sequence.h"
12
13 #include "base/stl_util.h"
14 #include "third_party/blink/renderer/bindings/core/v8/double_or_string.h"
15 #include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
16 #include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h"
17 #include "third_party/blink/renderer/bindings/core/v8/script_iterator.h"
18 #include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
19
20 namespace blink {
21
DoubleOrStringOrDoubleOrStringSequence()22 DoubleOrStringOrDoubleOrStringSequence::DoubleOrStringOrDoubleOrStringSequence() : type_(SpecificType::kNone) {}
23
GetAsDouble() const24 double DoubleOrStringOrDoubleOrStringSequence::GetAsDouble() const {
25 DCHECK(IsDouble());
26 return double_;
27 }
28
SetDouble(double value)29 void DoubleOrStringOrDoubleOrStringSequence::SetDouble(double value) {
30 DCHECK(IsNull());
31 double_ = value;
32 type_ = SpecificType::kDouble;
33 }
34
FromDouble(double value)35 DoubleOrStringOrDoubleOrStringSequence DoubleOrStringOrDoubleOrStringSequence::FromDouble(double value) {
36 DoubleOrStringOrDoubleOrStringSequence container;
37 container.SetDouble(value);
38 return container;
39 }
40
GetAsDoubleOrStringSequence() const41 const HeapVector<DoubleOrString>& DoubleOrStringOrDoubleOrStringSequence::GetAsDoubleOrStringSequence() const {
42 DCHECK(IsDoubleOrStringSequence());
43 return double_or_string_sequence_;
44 }
45
SetDoubleOrStringSequence(const HeapVector<DoubleOrString> & value)46 void DoubleOrStringOrDoubleOrStringSequence::SetDoubleOrStringSequence(const HeapVector<DoubleOrString>& value) {
47 DCHECK(IsNull());
48 double_or_string_sequence_ = value;
49 type_ = SpecificType::kDoubleOrStringSequence;
50 }
51
FromDoubleOrStringSequence(const HeapVector<DoubleOrString> & value)52 DoubleOrStringOrDoubleOrStringSequence DoubleOrStringOrDoubleOrStringSequence::FromDoubleOrStringSequence(const HeapVector<DoubleOrString>& value) {
53 DoubleOrStringOrDoubleOrStringSequence container;
54 container.SetDoubleOrStringSequence(value);
55 return container;
56 }
57
GetAsString() const58 const String& DoubleOrStringOrDoubleOrStringSequence::GetAsString() const {
59 DCHECK(IsString());
60 return string_;
61 }
62
SetString(const String & value)63 void DoubleOrStringOrDoubleOrStringSequence::SetString(const String& value) {
64 DCHECK(IsNull());
65 string_ = value;
66 type_ = SpecificType::kString;
67 }
68
FromString(const String & value)69 DoubleOrStringOrDoubleOrStringSequence DoubleOrStringOrDoubleOrStringSequence::FromString(const String& value) {
70 DoubleOrStringOrDoubleOrStringSequence container;
71 container.SetString(value);
72 return container;
73 }
74
75 DoubleOrStringOrDoubleOrStringSequence::DoubleOrStringOrDoubleOrStringSequence(const DoubleOrStringOrDoubleOrStringSequence&) = default;
76 DoubleOrStringOrDoubleOrStringSequence::~DoubleOrStringOrDoubleOrStringSequence() = default;
77 DoubleOrStringOrDoubleOrStringSequence& DoubleOrStringOrDoubleOrStringSequence::operator=(const DoubleOrStringOrDoubleOrStringSequence&) = default;
78
Trace(Visitor * visitor) const79 void DoubleOrStringOrDoubleOrStringSequence::Trace(Visitor* visitor) const {
80 visitor->Trace(double_or_string_sequence_);
81 }
82
ToImpl(v8::Isolate * isolate,v8::Local<v8::Value> v8_value,DoubleOrStringOrDoubleOrStringSequence & impl,UnionTypeConversionMode conversion_mode,ExceptionState & exception_state)83 void V8DoubleOrStringOrDoubleOrStringSequence::ToImpl(
84 v8::Isolate* isolate,
85 v8::Local<v8::Value> v8_value,
86 DoubleOrStringOrDoubleOrStringSequence& impl,
87 UnionTypeConversionMode conversion_mode,
88 ExceptionState& exception_state) {
89 if (v8_value.IsEmpty())
90 return;
91
92 if (conversion_mode == UnionTypeConversionMode::kNullable && IsUndefinedOrNull(v8_value))
93 return;
94
95 if (v8_value->IsObject()) {
96 ScriptIterator script_iterator = ScriptIterator::FromIterable(
97 isolate, v8_value.As<v8::Object>(), exception_state);
98 if (exception_state.HadException())
99 return;
100 if (!script_iterator.IsNull()) {
101 HeapVector<DoubleOrString> cpp_value{ NativeValueTraits<IDLSequence<DoubleOrString>>::NativeValue(isolate, std::move(script_iterator), exception_state) };
102 if (exception_state.HadException())
103 return;
104 impl.SetDoubleOrStringSequence(cpp_value);
105 return;
106 }
107 }
108
109 if (v8_value->IsNumber()) {
110 double cpp_value{ NativeValueTraits<IDLDouble>::NativeValue(isolate, v8_value, exception_state) };
111 if (exception_state.HadException())
112 return;
113 impl.SetDouble(cpp_value);
114 return;
115 }
116
117 {
118 V8StringResource<> cpp_value{ v8_value };
119 if (!cpp_value.Prepare(exception_state))
120 return;
121 impl.SetString(cpp_value);
122 return;
123 }
124 }
125
ToV8(const DoubleOrStringOrDoubleOrStringSequence & impl,v8::Local<v8::Object> creationContext,v8::Isolate * isolate)126 v8::Local<v8::Value> ToV8(const DoubleOrStringOrDoubleOrStringSequence& impl, v8::Local<v8::Object> creationContext, v8::Isolate* isolate) {
127 switch (impl.type_) {
128 case DoubleOrStringOrDoubleOrStringSequence::SpecificType::kNone:
129 return v8::Null(isolate);
130 case DoubleOrStringOrDoubleOrStringSequence::SpecificType::kDouble:
131 return v8::Number::New(isolate, impl.GetAsDouble());
132 case DoubleOrStringOrDoubleOrStringSequence::SpecificType::kDoubleOrStringSequence:
133 return ToV8(impl.GetAsDoubleOrStringSequence(), creationContext, isolate);
134 case DoubleOrStringOrDoubleOrStringSequence::SpecificType::kString:
135 return V8String(isolate, impl.GetAsString());
136 default:
137 NOTREACHED();
138 }
139 return v8::Local<v8::Value>();
140 }
141
NativeValue(v8::Isolate * isolate,v8::Local<v8::Value> value,ExceptionState & exception_state)142 DoubleOrStringOrDoubleOrStringSequence NativeValueTraits<DoubleOrStringOrDoubleOrStringSequence>::NativeValue(
143 v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exception_state) {
144 DoubleOrStringOrDoubleOrStringSequence impl;
145 V8DoubleOrStringOrDoubleOrStringSequence::ToImpl(isolate, value, impl, UnionTypeConversionMode::kNotNullable, exception_state);
146 return impl;
147 }
148
149 } // namespace blink
150
151