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