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 TRACE_AFTER_DISPATCH_H_
      6 #define TRACE_AFTER_DISPATCH_H_
      7 
      8 #include "heap/stubs.h"
      9 
     10 namespace blink {
     11 
     12 class A : public GarbageCollected<A> {
     13 public:
     14     void Trace(Visitor*);
     15     void TraceAfterDispatch(Visitor*);
     16 protected:
     17     enum Type { TB, TC, TD };
     18     A(Type type) : m_type(type) { }
     19 private:
     20     Type m_type;
     21 };
     22 
     23 class B : public A {
     24 public:
     25     B() : A(TB) { }
     26     void TraceAfterDispatch(Visitor*);
     27 private:
     28     Member<A> m_a;
     29 };
     30 
     31 class C : public A {
     32 public:
     33     C() : A(TC) { }
     34     void TraceAfterDispatch(Visitor*);
     35 private:
     36     Member<A> m_a;
     37 };
     38 
     39 // This class is considered abstract does not need to be dispatched to.
     40 class Abstract : public A {
     41 protected:
     42     Abstract(Type type) : A(type) { }
     43 };
     44 
     45 class D : public Abstract {
     46 public:
     47     D() : Abstract(TD) { }
     48     void TraceAfterDispatch(Visitor*);
     49 private:
     50     Member<A> m_a;
     51 };
     52 
     53 }
     54 
     55 #endif
     56