Index: Source/platform/CrossThreadCopier.h |
diff --git a/Source/platform/CrossThreadCopier.h b/Source/platform/CrossThreadCopier.h |
index e471d0ae3d458ebe360d208de4d8f804814f64a8..dc26b108f2aa310cf5997be43e77a536b32dc6a0 100644 |
--- a/Source/platform/CrossThreadCopier.h |
+++ b/Source/platform/CrossThreadCopier.h |
@@ -37,6 +37,7 @@ |
#include "wtf/Forward.h" |
#include "wtf/PassOwnPtr.h" |
#include "wtf/PassRefPtr.h" |
+#include "wtf/RawPtr.h" |
#include "wtf/RefPtr.h" |
#include "wtf/ThreadSafeRefCounted.h" |
#include "wtf/TypeTraits.h" |
@@ -151,11 +152,38 @@ namespace WebCore { |
} |
}; |
+ template<typename T> struct CrossThreadCopierBase<false, false, true, RawPtr<T> > { |
+ typedef RawPtr<T> Type; |
+ static Type copy(const Type& ptr) |
+ { |
+ return ptr; |
+ } |
+ }; |
+ |
+ template<typename T> struct CrossThreadCopierBase<false, false, true, WeakMember<T> > { |
+ typedef RawPtr<T> Type; |
+ static Type copy(const WeakMember<T>& ptr) |
+ { |
+ return ptr.get(); |
haraken
2014/07/10 12:01:45
Do you need get()?
sof
2014/07/10 12:05:03
Conversions will take care of it; I just wanted to
|
+ } |
+ }; |
+ |
+ template<typename T> struct CrossThreadCopierBase<false, false, true, Member<T> > { |
+ typedef RawPtr<T> Type; |
+ static Type copy(const Member<T>& ptr) |
+ { |
+ return ptr.get(); |
haraken
2014/07/10 12:01:45
Ditto.
|
+ } |
+ }; |
+ |
template<typename T> struct CrossThreadCopier : public CrossThreadCopierBase<WTF::IsConvertibleToInteger<T>::value, |
WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RefPtr>::Type, ThreadSafeRefCounted>::value |
|| WTF::IsSubclassOfTemplate<typename WTF::RemovePointer<T>::Type, ThreadSafeRefCounted>::value |
|| WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, PassRefPtr>::Type, ThreadSafeRefCounted>::value, |
- WTF::IsSubclassOfTemplate<typename WTF::RemovePointer<T>::Type, GarbageCollected>::value, |
+ WTF::IsSubclassOfTemplate<typename WTF::RemovePointer<T>::Type, GarbageCollected>::value |
+ || WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RawPtr>::Type, GarbageCollected>::value |
+ || WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, Member>::Type, GarbageCollected>::value |
+ || WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, WeakMember>::Type, GarbageCollected>::value, |
T> { |
}; |