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

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

Issue 350863002: Replaced ToV8Value::toV8Value with V8ValueTraits::toV8Value. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Reverted Source/wtf change Created 6 years, 6 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
« no previous file with comments | « Source/bindings/v8/ScriptPromiseResolver.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 { 212 {
213 ASSERT(isolate); 213 ASSERT(isolate);
214 return v8::String::NewFromUtf8(isolate, str, v8::String::kInternalizedString , length); 214 return v8::String::NewFromUtf8(isolate, str, v8::String::kInternalizedString , length);
215 } 215 }
216 216
217 inline v8::Handle<v8::Value> v8Undefined() 217 inline v8::Handle<v8::Value> v8Undefined()
218 { 218 {
219 return v8::Handle<v8::Value>(); 219 return v8::Handle<v8::Value>();
220 } 220 }
221 221
222 template <class T> 222 // Converts a DOM object to a v8 value.
223 // This is a no-inline version of toV8(). If you want to call toV8()
224 // without creating #include cycles, you can use this function instead.
225 // Each specialized implementation will be generated.
226 template<typename T>
227 v8::Handle<v8::Value> toV8NoInline(T* impl, v8::Handle<v8::Object> creationConte xt, v8::Isolate*);
228
229 template <typename T>
223 struct V8ValueTraits { 230 struct V8ValueTraits {
224 // FIXME: This function requires the associated generated header to be 231 typedef typename WTF::RemovePointer<T>::Type TypeWithoutPointer;
225 // included. Also, this function does not match with other V8ValueTraits 232 static v8::Handle<v8::Value> toV8Value(TypeWithoutPointer* const& value, v8: :Handle<v8::Object> creationContext, v8::Isolate* isolate)
226 // classes. Remove this V8ValueTraits if possible.
227 static inline v8::Handle<v8::Value> toV8Value(const T& value, v8::Handle<v8: :Object> creationContext, v8::Isolate* isolate)
228 { 233 {
229 return toV8(WTF::getPtr(value), creationContext, isolate); 234 return toV8NoInline(value, creationContext, isolate);
235 }
236
237 typedef typename WTF::RemoveTemplate<T, RawPtr>::Type TypeWithoutRawPtr;
238 static v8::Handle<v8::Value> toV8Value(const RawPtr<TypeWithoutRawPtr>& valu e, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
239 {
240 return toV8NoInline(value.get(), creationContext, isolate);
241 }
242
243 // HeapVector<RefPtr> requires the following method:
244 typedef typename WTF::RemoveTemplate<T, RefPtr>::Type TypeWithoutRefPtr;
245 static v8::Handle<v8::Value> toV8Value(const RefPtr<TypeWithoutRefPtr>& valu e, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
246 {
247 return toV8NoInline(value.get(), creationContext, isolate);
248 }
249
250 typedef typename WTF::RemoveTemplate<T, PassRefPtr>::Type TypeWithoutPassRef Ptr;
251 static v8::Handle<v8::Value> toV8Value(const PassRefPtr<TypeWithoutPassRefPt r>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
252 {
253 return toV8NoInline(value.get(), creationContext, isolate);
254 }
255
256 typedef typename WTF::RemoveTemplate<T, Member>::Type TypeWithoutMember;
257 static v8::Handle<v8::Value> toV8Value(const Member<TypeWithoutMember>& valu e, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
258 {
259 return toV8NoInline(value.get(), creationContext, isolate);
230 } 260 }
231 }; 261 };
232 262
263 template <typename T, size_t inlineCapacity, typename Allocator>
264 struct V8ValueTraits<WTF::Vector<T, inlineCapacity, Allocator> > {
265 static v8::Handle<v8::Value> toV8Value(const Vector<T, inlineCapacity, Alloc ator>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
266 {
267 return v8ArrayNoInline(value, creationContext, isolate);
268 }
269 };
270
233 template<> 271 template<>
234 struct V8ValueTraits<String> { 272 struct V8ValueTraits<String> {
235 static inline v8::Handle<v8::Value> toV8Value(const String& value, v8::Handl e<v8::Object>, v8::Isolate* isolate) 273 static inline v8::Handle<v8::Value> toV8Value(const String& value, v8::Handl e<v8::Object>, v8::Isolate* isolate)
236 { 274 {
237 return v8String(isolate, value); 275 return v8String(isolate, value);
238 } 276 }
239 }; 277 };
240 278
241 template<> 279 template<>
242 struct V8ValueTraits<AtomicString> { 280 struct V8ValueTraits<AtomicString> {
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 v8SetReturnValue(info, properties); 913 v8SetReturnValue(info, properties);
876 } 914 }
877 915
878 // These methods store hidden values into an array that is stored in the interna l field of a DOM wrapper. 916 // These methods store hidden values into an array that is stored in the interna l field of a DOM wrapper.
879 void addHiddenValueToArray(v8::Handle<v8::Object>, v8::Local<v8::Value>, int cac heIndex, v8::Isolate*); 917 void addHiddenValueToArray(v8::Handle<v8::Object>, v8::Local<v8::Value>, int cac heIndex, v8::Isolate*);
880 void removeHiddenValueFromArray(v8::Handle<v8::Object>, v8::Local<v8::Value>, in t cacheIndex, v8::Isolate*); 918 void removeHiddenValueFromArray(v8::Handle<v8::Object>, v8::Local<v8::Value>, in t cacheIndex, v8::Isolate*);
881 void moveEventListenerToNewWrapper(v8::Handle<v8::Object>, EventListener* oldVal ue, v8::Local<v8::Value> newValue, int cacheIndex, v8::Isolate*); 919 void moveEventListenerToNewWrapper(v8::Handle<v8::Object>, EventListener* oldVal ue, v8::Local<v8::Value> newValue, int cacheIndex, v8::Isolate*);
882 920
883 PassRefPtr<JSONValue> v8ToJSONValue(v8::Isolate*, v8::Handle<v8::Value>, int); 921 PassRefPtr<JSONValue> v8ToJSONValue(v8::Isolate*, v8::Handle<v8::Value>, int);
884 922
885 // Converts a DOM object to a v8 value.
886 // This is a no-inline version of toV8(). If you want to call toV8()
887 // without creating #include cycles, you can use this function instead.
888 // Each specialized implementation will be generated.
889 template<typename T>
890 v8::Handle<v8::Value> toV8NoInline(T* impl, v8::Handle<v8::Object> creationConte xt, v8::Isolate*);
891
892 // ToV8Value<U, Context> is a class that converts a C++ object to a
893 // v8 value. U has to be a class having a static method getCreationContext
894 // which returns an object created from a target context.
895 template<typename U, typename Context>
896 class ToV8Value {
897 public:
898 template<typename T>
899 static v8::Handle<v8::Value> toV8Value(const T& value, Context context, v8:: Isolate* isolate)
900 {
901 // Default implementaion: for types that don't need the context.
902 return V8ValueTraits<T>::toV8Value(value, context, isolate);
903 }
904
905 // Pointer specializations.
906 template<typename T>
907 static v8::Handle<v8::Value> toV8Value(T* const& value, Context context, v8: :Isolate* isolate)
908 {
909 return toV8NoInline(value, context, isolate);
910 }
911 template<typename T>
912 static v8::Handle<v8::Value> toV8Value(const RefPtr<T>& value, Context conte xt, v8::Isolate* isolate)
913 {
914 return toV8Value(value.get(), context, isolate);
915 }
916 template<typename T>
917 static v8::Handle<v8::Value> toV8Value(const PassRefPtr<T>& value, Context c ontext, v8::Isolate* isolate)
918 {
919 return toV8Value(value.get(), context, isolate);
920 }
921 template<typename T>
922 static v8::Handle<v8::Value> toV8Value(const OwnPtr<T>& value, Context conte xt, v8::Isolate* isolate)
923 {
924 return toV8Value(value.get(), context, isolate);
925 }
926 template<typename T>
927 static v8::Handle<v8::Value> toV8Value(const PassOwnPtr<T>& value, Context c ontext, v8::Isolate* isolate)
928 {
929 return toV8Value(value.get(), context, isolate);
930 }
931 template<typename T>
932 static v8::Handle<v8::Value> toV8Value(const RawPtr<T>& value, Context conte xt, v8::Isolate* isolate)
933 {
934 return toV8Value(value.get(), context, isolate);
935 }
936
937 // const char* should use V8ValueTraits.
938 static v8::Handle<v8::Value> toV8Value(const char* const& value, Context con text, v8::Isolate* isolate)
939 {
940 return V8ValueTraits<const char*>::toV8Value(value, context, isolate);
941 }
942
943 template<typename T, size_t inlineCapacity>
944 static v8::Handle<v8::Value> toV8Value(const Vector<T, inlineCapacity>& valu e, Context context, v8::Isolate* isolate)
945 {
946 return v8ArrayNoInline(value, context, isolate);
947 }
948
949 template<typename T, size_t inlineCapacity>
950 static v8::Handle<v8::Value> toV8Value(const HeapVector<T, inlineCapacity>& value, Context context, v8::Isolate* isolate)
951 {
952 return v8ArrayNoInline(value, context, isolate);
953 }
954
955 template<typename T, size_t inlineCapacity>
956 static v8::Handle<v8::Value> toV8Value(const PersistentHeapVector<T, inlineC apacity>& value, Context context, v8::Isolate* isolate)
957 {
958 return v8ArrayNoInline(static_cast<HeapVector<T, inlineCapacity> >(value ), context, isolate);
959 }
960 };
961
962 // Result values for platform object 'deleter' methods, 923 // Result values for platform object 'deleter' methods,
963 // http://www.w3.org/TR/WebIDL/#delete 924 // http://www.w3.org/TR/WebIDL/#delete
964 enum DeleteResult { 925 enum DeleteResult {
965 DeleteSuccess, 926 DeleteSuccess,
966 DeleteReject, 927 DeleteReject,
967 DeleteUnknownProperty 928 DeleteUnknownProperty
968 }; 929 };
969 930
970 class V8IsolateInterruptor : public ThreadState::Interruptor { 931 class V8IsolateInterruptor : public ThreadState::Interruptor {
971 public: 932 public:
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 m_block.Reset(); 988 m_block.Reset();
1028 } 989 }
1029 990
1030 private: 991 private:
1031 v8::TryCatch& m_block; 992 v8::TryCatch& m_block;
1032 }; 993 };
1033 994
1034 } // namespace WebCore 995 } // namespace WebCore
1035 996
1036 #endif // V8Binding_h 997 #endif // V8Binding_h
OLDNEW
« no previous file with comments | « Source/bindings/v8/ScriptPromiseResolver.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698