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 #ifndef CLASS_REQUIRES_FINALIZATION_MIXIN_H_ 6 #define CLASS_REQUIRES_FINALIZATION_MIXIN_H_ 7 8 #include "heap/stubs.h" 9 10 namespace blink { 11 12 class OffHeap : public RefCounted<OffHeap> { }; 13 class OnHeap : public GarbageCollected<OnHeap> { }; 14 15 class MixinFinalizable : public GarbageCollectedMixin { 16 public: 17 void trace(Visitor*); 18 private: 19 RefPtr<OffHeap> m_offHeap; // Requires finalization 20 Member<OnHeap> m_onHeap; 21 }; 22 23 class MixinNotFinalizable : public GarbageCollectedMixin { 24 public: 25 void trace(Visitor*); 26 private: 27 Member<OnHeap> m_onHeap; 28 }; 29 30 class NeedsFinalizer 31 : public GarbageCollected<NeedsFinalizer> 32 , public MixinFinalizable { 33 USING_GARBAGE_COLLECTED_MIXIN(NeedsFinalizer); 34 public: 35 void trace(Visitor*); 36 private: 37 Member<OnHeap> m_obj; 38 }; 39 40 class HasFinalizer : public GarbageCollectedFinalized<HasFinalizer>, 41 public MixinFinalizable { 42 USING_GARBAGE_COLLECTED_MIXIN(HasFinalizer); 43 public: 44 void trace(Visitor*); 45 private: 46 Member<OnHeap> m_obj; 47 }; 48 49 class NeedsNoFinalization 50 : public GarbageCollected<NeedsNoFinalization> 51 , public MixinNotFinalizable 52 , public ScriptWrappable { 53 USING_GARBAGE_COLLECTED_MIXIN(NeedsNoFinalization); 54 public: 55 void trace(Visitor*); 56 private: 57 Member<OnHeap> m_obj; 58 }; 59 60 } 61 62 #endif 63