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_SUPER_NEG_H_
      6 #define CYCLE_SUPER_NEG_H_
      7 
      8 #include "heap/stubs.h"
      9 
     10 namespace blink {
     11 
     12 class C;
     13 
     14 // The chain:
     15 //   C -per-> B -sup-> A -sub-> D -ref-> C
     16 // is not a leaking cycle, because the super-class relationship
     17 // should not transitively imply sub-class relationships.
     18 // I.e. B -/-> D
     19 
     20 class A : public GarbageCollectedFinalized<A> {
     21 public:
     22     virtual void trace(Visitor*) {}
     23 };
     24 
     25 class B : public A {
     26 public:
     27     virtual void trace(Visitor*);
     28 };
     29 
     30 class C : public RefCounted<C> {
     31 private:
     32     Persistent<B> m_b;
     33 };
     34 
     35 class D : public A {
     36 public:
     37     virtual void trace(Visitor*);
     38 private:
     39     RefPtr<C> m_c;
     40 };
     41 
     42 }
     43 
     44 #endif
     45