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

Side by Side Diff: Source/bindings/core/v8/V8Binding.h

Issue 1083003004: bindings: Moves toV8 and v8SetReturnValue out to ToV8.h and V8Binding.h. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Addressed a review comment. Created 5 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Ericsson AB. All rights reserved. 3 * Copyright (C) 2012 Ericsson AB. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "platform/JSONValues.h" 48 #include "platform/JSONValues.h"
49 #include "platform/heap/Handle.h" 49 #include "platform/heap/Handle.h"
50 #include "wtf/text/AtomicString.h" 50 #include "wtf/text/AtomicString.h"
51 #include <v8.h> 51 #include <v8.h>
52 52
53 namespace blink { 53 namespace blink {
54 54
55 class DOMWindow; 55 class DOMWindow;
56 class EventListener; 56 class EventListener;
57 class EventTarget; 57 class EventTarget;
58 class ExceptionState;
58 class ExecutionContext; 59 class ExecutionContext;
59 class ExceptionState;
60 class Frame; 60 class Frame;
61 class LocalDOMWindow; 61 class LocalDOMWindow;
62 class LocalFrame; 62 class LocalFrame;
63 class NodeFilter; 63 class NodeFilter;
64 class WorkerGlobalScope;
64 class XPathNSResolver; 65 class XPathNSResolver;
65 66
66 template <typename T> 67 template <typename T>
67 struct V8TypeOf { 68 struct V8TypeOf {
68 // |Type| provides C++ -> V8 type conversion for DOM wrappers. 69 // |Type| provides C++ -> V8 type conversion for DOM wrappers.
69 // The Blink binding code generator will generate specialized version of 70 // The Blink binding code generator will generate specialized version of
70 // V8TypeOf for each wrapper class. 71 // V8TypeOf for each wrapper class.
71 typedef void Type; 72 typedef void Type;
72 }; 73 };
73 74
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 if (UNLIKELY(!impl)) { 210 if (UNLIKELY(!impl)) {
210 v8SetReturnValueNull(callbackInfo); 211 v8SetReturnValueNull(callbackInfo);
211 return; 212 return;
212 } 213 }
213 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl)) 214 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl))
214 return; 215 return;
215 v8::Handle<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callb ackInfo.Holder(), callbackInfo.GetIsolate()); 216 v8::Handle<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callb ackInfo.Holder(), callbackInfo.GetIsolate());
216 v8SetReturnValue(callbackInfo, wrapper); 217 v8SetReturnValue(callbackInfo, wrapper);
217 } 218 }
218 219
220 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget
221
222 template<typename CallbackInfo>
223 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, DOMWindow* impl)
224 {
225 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
226 }
227
228 template<typename CallbackInfo>
229 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, EventTarget* impl )
230 {
231 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
232 }
233
234 template<typename CallbackInfo>
235 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, WorkerGlobalScope * impl)
236 {
237 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
238 }
239
219 template<typename CallbackInfo, typename T> 240 template<typename CallbackInfo, typename T>
220 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, PassRefPtr<T> imp l) 241 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, PassRefPtr<T> imp l)
221 { 242 {
222 v8SetReturnValue(callbackInfo, impl.get()); 243 v8SetReturnValue(callbackInfo, impl.get());
223 } 244 }
224 245
225 template<typename CallbackInfo, typename T> 246 template<typename CallbackInfo, typename T>
226 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, RawPtr<T> impl) 247 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, RawPtr<T> impl)
227 { 248 {
228 v8SetReturnValue(callbackInfo, impl.get()); 249 v8SetReturnValue(callbackInfo, impl.get());
229 } 250 }
230 251
231 template<typename CallbackInfo> 252 template<typename CallbackInfo>
232 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Scrip tWrappable* impl) 253 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Scrip tWrappable* impl)
233 { 254 {
234 ASSERT(DOMWrapperWorld::current(callbackInfo.GetIsolate()).isMainWorld()); 255 ASSERT(DOMWrapperWorld::current(callbackInfo.GetIsolate()).isMainWorld());
235 if (UNLIKELY(!impl)) { 256 if (UNLIKELY(!impl)) {
236 v8SetReturnValueNull(callbackInfo); 257 v8SetReturnValueNull(callbackInfo);
237 return; 258 return;
238 } 259 }
239 if (DOMDataStore::setReturnValueForMainWorld(callbackInfo.GetReturnValue(), impl)) 260 if (DOMDataStore::setReturnValueForMainWorld(callbackInfo.GetReturnValue(), impl))
240 return; 261 return;
241 v8::Handle<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackI nfo.GetIsolate()); 262 v8::Handle<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackI nfo.GetIsolate());
242 v8SetReturnValue(callbackInfo, wrapper); 263 v8SetReturnValue(callbackInfo, wrapper);
243 } 264 }
244 265
245 template<typename CallbackInfo> 266 template<typename CallbackInfo>
246 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Node* impl) 267 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Node* impl)
247 { 268 {
248 // Since EventTarget has [Custom=ToV8] and V8EventTarget.h defines its own 269 // Since EventTarget has a special version of ToV8 and V8EventTarget.h
249 // v8SetReturnValue family, which are slow, we need to override them with 270 // defines its own v8SetReturnValue family, which are slow, we need to
250 // optimized versions for Node and its subclasses. Without this overload, 271 // override them with optimized versions for Node and its subclasses.
251 // v8SetReturnValueForMainWorld for Node would be very slow. 272 // Without this overload, v8SetReturnValueForMainWorld for Node would be
273 // very slow.
252 // 274 //
253 // class hierarchy: 275 // class hierarchy:
254 // ScriptWrappable <-- EventTarget <--+-- Node <-- ... 276 // ScriptWrappable <-- EventTarget <--+-- Node <-- ...
255 // +-- Window 277 // +-- Window
256 // overloads: 278 // overloads:
257 // v8SetReturnValueForMainWorld(ScriptWrappable*) 279 // v8SetReturnValueForMainWorld(ScriptWrappable*)
258 // Optimized and very fast. 280 // Optimized and very fast.
259 // v8SetReturnValueForMainWorld(EventTarget*) 281 // v8SetReturnValueForMainWorld(EventTarget*)
260 // Uses custom toV8 function and slow. 282 // Uses custom toV8 function and slow.
261 // v8SetReturnValueForMainWorld(Node*) 283 // v8SetReturnValueForMainWorld(Node*)
262 // Optimized and very fast. 284 // Optimized and very fast.
263 // v8SetReturnValueForMainWorld(Window*) 285 // v8SetReturnValueForMainWorld(Window*)
264 // Uses custom toV8 function and slow. 286 // Uses custom toV8 function and slow.
265 v8SetReturnValueForMainWorld(callbackInfo, ScriptWrappable::fromNode(impl)); 287 v8SetReturnValueForMainWorld(callbackInfo, ScriptWrappable::fromNode(impl));
266 } 288 }
267 289
290 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget
291
292 template<typename CallbackInfo>
293 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, DOMWi ndow* impl)
294 {
295 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
296 }
297
298 template<typename CallbackInfo>
299 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Event Target* impl)
300 {
301 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
302 }
303
304 template<typename CallbackInfo>
305 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Worke rGlobalScope* impl)
306 {
307 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
308 }
309
268 template<typename CallbackInfo, typename T> 310 template<typename CallbackInfo, typename T>
269 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, PassR efPtr<T> impl) 311 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, PassR efPtr<T> impl)
270 { 312 {
271 v8SetReturnValueForMainWorld(callbackInfo, impl.get()); 313 v8SetReturnValueForMainWorld(callbackInfo, impl.get());
272 } 314 }
273 315
274 template<typename CallbackInfo, typename T> 316 template<typename CallbackInfo, typename T>
275 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, RawPt r<T> impl) 317 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, RawPt r<T> impl)
276 { 318 {
277 v8SetReturnValueForMainWorld(callbackInfo, impl.get()); 319 v8SetReturnValueForMainWorld(callbackInfo, impl.get());
(...skipping 18 matching lines...) Expand all
296 if (UNLIKELY(!impl)) { 338 if (UNLIKELY(!impl)) {
297 v8SetReturnValueNull(callbackInfo); 339 v8SetReturnValueNull(callbackInfo);
298 return; 340 return;
299 } 341 }
300 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, ca llbackInfo.Holder(), wrappable)) 342 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, ca llbackInfo.Holder(), wrappable))
301 return; 343 return;
302 v8::Handle<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callb ackInfo.Holder(), callbackInfo.GetIsolate()); 344 v8::Handle<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callb ackInfo.Holder(), callbackInfo.GetIsolate());
303 v8SetReturnValue(callbackInfo, wrapper); 345 v8SetReturnValue(callbackInfo, wrapper);
304 } 346 }
305 347
348 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget
349
350 template<typename CallbackInfo>
351 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, DOMWindow* im pl, const ScriptWrappable*)
352 {
353 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
354 }
355
356 template<typename CallbackInfo>
357 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, EventTarget* impl, const ScriptWrappable*)
358 {
359 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
360 }
361
362 template<typename CallbackInfo>
363 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, WorkerGlobalS cope* impl, const ScriptWrappable*)
364 {
365 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
366 }
367
306 template<typename CallbackInfo, typename T, typename Wrappable> 368 template<typename CallbackInfo, typename T, typename Wrappable>
307 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, PassRefPtr<T> impl, const Wrappable* wrappable) 369 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, PassRefPtr<T> impl, const Wrappable* wrappable)
308 { 370 {
309 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable); 371 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable);
310 } 372 }
311 373
312 template<typename CallbackInfo, typename T, typename Wrappable> 374 template<typename CallbackInfo, typename T, typename Wrappable>
313 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, RawPtr<T> imp l, const Wrappable* wrappable) 375 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, RawPtr<T> imp l, const Wrappable* wrappable)
314 { 376 {
315 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable); 377 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable);
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 PassRefPtr<TraceEvent::ConvertableToTraceFormat> devToolsTraceEventData(v8::Isol ate*, ExecutionContext*, v8::Handle<v8::Function>); 1061 PassRefPtr<TraceEvent::ConvertableToTraceFormat> devToolsTraceEventData(v8::Isol ate*, ExecutionContext*, v8::Handle<v8::Function>);
1000 1062
1001 // Callback functions used by generated code. 1063 // Callback functions used by generated code.
1002 CORE_EXPORT void v8ConstructorAttributeGetter(v8::Local<v8::Name> propertyName, const v8::PropertyCallbackInfo<v8::Value>&); 1064 CORE_EXPORT void v8ConstructorAttributeGetter(v8::Local<v8::Name> propertyName, const v8::PropertyCallbackInfo<v8::Value>&);
1003 1065
1004 typedef void (*InstallTemplateFunction)(v8::Local<v8::FunctionTemplate>, v8::Iso late*); 1066 typedef void (*InstallTemplateFunction)(v8::Local<v8::FunctionTemplate>, v8::Iso late*);
1005 1067
1006 } // namespace blink 1068 } // namespace blink
1007 1069
1008 #endif // V8Binding_h 1070 #endif // V8Binding_h
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/ToV8.cpp ('k') | Source/bindings/core/v8/custom/V8EventTargetCustom.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698