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 CYCLE_PTRS_H_
      6 #define CYCLE_PTRS_H_
      7 
      8 #include "heap/stubs.h"
      9 
     10 namespace blink {
     11 
     12 class B;
     13 class C;
     14 class D;
     15 class E;
     16 
     17 // This contains a leaking cycle:
     18 // E -per-> A -mem-> B -ref-> C -own-> D -own-vec-> E
     19 
     20 // The traced cycle from A -> B -> A does not leak.
     21 
     22 class A : public GarbageCollected<A> {
     23 public:
     24     virtual void Trace(Visitor*);
     25 private:
     26     Member<B> m_b;
     27 };
     28 
     29 class B : public GarbageCollectedFinalized<B> {
     30 public:
     31     virtual void Trace(Visitor*);
     32 private:
     33     Member<A> m_a;
     34     RefPtr<C> m_c;
     35 };
     36 
     37 class C : public RefCounted<C> {
     38 private:
     39     OwnPtr<D> m_d;
     40 };
     41 
     42 class D {
     43 private:
     44     Vector<OwnPtr<E> > m_es;
     45 };
     46 
     47 class E {
     48 private:
     49     Persistent<A> m_a;
     50 };
     51 
     52 }
     53 
     54 #endif
     55