Home | History | Annotate | Download | only in tests
      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