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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ToV8.h

Issue 2809243002: Split ToV8.h (Closed)
Patch Set: Rebase Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef ToV8_h 5 #ifndef ToV8_h
6 #define ToV8_h 6 #define ToV8_h
7 7
8 // ToV8() provides C++ -> V8 conversion. Note that ToV8() can return an empty 8 // ToV8() provides C++ -> V8 conversion. Note that ToV8() can return an empty
9 // handle. Call sites must check IsEmpty() before using return value. 9 // handle. Call sites must check IsEmpty() before using return value.
10 10
11 #include <utility> 11 #include <utility>
12 12
13 #include "bindings/core/v8/DOMDataStore.h" 13 #include "bindings/core/v8/DOMDataStore.h"
14 #include "bindings/core/v8/IDLDictionaryBase.h" 14 #include "bindings/core/v8/IDLDictionaryBase.h"
15 #include "bindings/core/v8/ScriptState.h" 15 #include "bindings/core/v8/ScriptState.h"
16 #include "bindings/core/v8/ScriptValue.h" 16 #include "bindings/core/v8/ScriptValue.h"
17 #include "bindings/core/v8/ScriptWrappable.h" 17 #include "bindings/core/v8/ScriptWrappable.h"
18 #include "bindings/core/v8/V8Binding.h" 18 #include "bindings/core/v8/V8Binding.h"
19 #include "core/CoreExport.h" 19 #include "core/CoreExport.h"
20 #include "core/dom/NotShared.h"
21 #include "platform/heap/Handle.h" 20 #include "platform/heap/Handle.h"
22 #include "platform/wtf/Forward.h" 21 #include "platform/wtf/Forward.h"
23 #include "v8/include/v8.h" 22 #include "v8/include/v8.h"
24 23
25 namespace blink { 24 namespace blink {
26 25
27 class DOMWindow;
28 class Dictionary;
29 class EventTarget;
30
31 // ScriptWrappable 26 // ScriptWrappable
32 27
33 inline v8::Local<v8::Value> ToV8(ScriptWrappable* impl, 28 inline v8::Local<v8::Value> ToV8(ScriptWrappable* impl,
34 v8::Local<v8::Object> creation_context, 29 v8::Local<v8::Object> creation_context,
35 v8::Isolate* isolate) { 30 v8::Isolate* isolate) {
36 if (UNLIKELY(!impl)) 31 if (UNLIKELY(!impl))
37 return v8::Null(isolate); 32 return v8::Null(isolate);
38 v8::Local<v8::Value> wrapper = DOMDataStore::GetWrapper(impl, isolate); 33 v8::Local<v8::Value> wrapper = DOMDataStore::GetWrapper(impl, isolate);
39 if (!wrapper.IsEmpty()) 34 if (!wrapper.IsEmpty())
40 return wrapper; 35 return wrapper;
41 36
42 wrapper = impl->Wrap(isolate, creation_context); 37 wrapper = impl->Wrap(isolate, creation_context);
43 DCHECK(!wrapper.IsEmpty()); 38 DCHECK(!wrapper.IsEmpty());
44 return wrapper; 39 return wrapper;
45 } 40 }
46 41
47 inline v8::Local<v8::Value> ToV8(Node* impl,
48 v8::Local<v8::Object> creation_context,
49 v8::Isolate* isolate) {
50 return ToV8(ScriptWrappable::FromNode(impl), creation_context, isolate);
51 }
52
53 // Special versions for DOMWindow and EventTarget
54
55 CORE_EXPORT v8::Local<v8::Value> ToV8(DOMWindow*,
56 v8::Local<v8::Object> creation_context,
57 v8::Isolate*);
58 CORE_EXPORT v8::Local<v8::Value> ToV8(EventTarget*,
59 v8::Local<v8::Object> creation_context,
60 v8::Isolate*);
61
62 // Primitives 42 // Primitives
63 43
64 inline v8::Local<v8::Value> ToV8(const String& value, 44 inline v8::Local<v8::Value> ToV8(const String& value,
65 v8::Local<v8::Object> creation_context, 45 v8::Local<v8::Object> creation_context,
66 v8::Isolate* isolate) { 46 v8::Isolate* isolate) {
67 return V8String(isolate, value); 47 return V8String(isolate, value);
68 } 48 }
69 49
70 inline v8::Local<v8::Value> ToV8(const char* value, 50 inline v8::Local<v8::Value> ToV8(const char* value,
71 v8::Local<v8::Object> creation_context, 51 v8::Local<v8::Object> creation_context,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 inline v8::Local<v8::Value> ToV8(const ScriptValue& value, 168 inline v8::Local<v8::Value> ToV8(const ScriptValue& value,
189 v8::Local<v8::Object> creation_context, 169 v8::Local<v8::Object> creation_context,
190 v8::Isolate* isolate) { 170 v8::Isolate* isolate) {
191 if (value.IsEmpty()) 171 if (value.IsEmpty())
192 return v8::Undefined(isolate); 172 return v8::Undefined(isolate);
193 return value.V8Value(); 173 return value.V8Value();
194 } 174 }
195 175
196 // Dictionary 176 // Dictionary
197 177
198 inline v8::Local<v8::Value> ToV8(const Dictionary& value,
199 v8::Local<v8::Object> creation_context,
200 v8::Isolate* isolate) {
201 NOTREACHED();
202 return v8::Undefined(isolate);
203 }
204
205 inline v8::Local<v8::Value> ToV8(const IDLDictionaryBase& value, 178 inline v8::Local<v8::Value> ToV8(const IDLDictionaryBase& value,
206 v8::Local<v8::Object> creation_context, 179 v8::Local<v8::Object> creation_context,
207 v8::Isolate* isolate) { 180 v8::Isolate* isolate) {
208 return value.ToV8Impl(creation_context, isolate); 181 return value.ToV8Impl(creation_context, isolate);
209 } 182 }
210 183
211 // Array 184 // Array
212 185
213 // Declare the function here but define it later so it can call the ToV8() 186 // Declare the function here but define it later so it can call the ToV8()
214 // overloads below. 187 // overloads below.
215 template <typename Sequence> 188 template <typename Sequence>
216 inline v8::Local<v8::Value> ToV8SequenceInternal( 189 inline v8::Local<v8::Value> ToV8SequenceInternal(
217 const Sequence& sequence, 190 const Sequence&,
218 v8::Local<v8::Object> creation_context, 191 v8::Local<v8::Object> creation_context,
219 v8::Isolate*); 192 v8::Isolate*);
220 193
221 template <typename T, size_t inlineCapacity> 194 template <typename T, size_t inlineCapacity>
222 inline v8::Local<v8::Value> ToV8(const Vector<T, inlineCapacity>& value, 195 inline v8::Local<v8::Value> ToV8(const Vector<T, inlineCapacity>& value,
223 v8::Local<v8::Object> creation_context, 196 v8::Local<v8::Object> creation_context,
224 v8::Isolate* isolate) { 197 v8::Isolate* isolate) {
225 return ToV8SequenceInternal(value, creation_context, isolate); 198 return ToV8SequenceInternal(value, creation_context, isolate);
226 } 199 }
227 200
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 if (v8_value.IsEmpty()) 242 if (v8_value.IsEmpty())
270 v8_value = v8::Undefined(isolate); 243 v8_value = v8::Undefined(isolate);
271 if (!V8CallBoolean(object->CreateDataProperty( 244 if (!V8CallBoolean(object->CreateDataProperty(
272 isolate->GetCurrentContext(), V8String(isolate, value[i].first), 245 isolate->GetCurrentContext(), V8String(isolate, value[i].first),
273 v8_value))) 246 v8_value)))
274 return v8::Local<v8::Value>(); 247 return v8::Local<v8::Value>();
275 } 248 }
276 return object; 249 return object;
277 } 250 }
278 251
279 template <typename T>
280 inline v8::Local<v8::Value> ToV8(NotShared<T> value,
281 v8::Local<v8::Object> creation_context,
282 v8::Isolate* isolate) {
283 return ToV8(value.View(), creation_context, isolate);
284 }
285
286 template <typename Sequence> 252 template <typename Sequence>
287 inline v8::Local<v8::Value> ToV8SequenceInternal( 253 inline v8::Local<v8::Value> ToV8SequenceInternal(
288 const Sequence& sequence, 254 const Sequence& sequence,
289 v8::Local<v8::Object> creation_context, 255 v8::Local<v8::Object> creation_context,
290 v8::Isolate* isolate) { 256 v8::Isolate* isolate) {
291 v8::Local<v8::Array> array; 257 v8::Local<v8::Array> array;
292 { 258 {
293 v8::Context::Scope context_scope(creation_context->CreationContext()); 259 v8::Context::Scope context_scope(creation_context->CreationContext());
294 array = v8::Array::New(isolate, sequence.size()); 260 array = v8::Array::New(isolate, sequence.size());
295 } 261 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 296
331 // Cannot define in ScriptValue because of the circular dependency between toV8 297 // Cannot define in ScriptValue because of the circular dependency between toV8
332 // and ScriptValue 298 // and ScriptValue
333 template <typename T> 299 template <typename T>
334 inline ScriptValue ScriptValue::From(ScriptState* script_state, T&& value) { 300 inline ScriptValue ScriptValue::From(ScriptState* script_state, T&& value) {
335 return ScriptValue(script_state, ToV8(std::forward<T>(value), script_state)); 301 return ScriptValue(script_state, ToV8(std::forward<T>(value), script_state));
336 } 302 }
337 303
338 } // namespace blink 304 } // namespace blink
339 305
340 #endif // ToV8_h 306 #endif // ToV8ForPlatform_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698