Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: Source/platform/RefCountedSupplement.h

Issue 255983003: Oilpan: Move all supplements of Page, Document, and WorkerClients to the managed heap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: using namespace WebCore Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/modules/webmidi/MIDIController.cpp ('k') | Source/platform/heap/Handle.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google, Inc. All Rights Reserved. 2 * Copyright (C) 2012 Google, Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 14 matching lines...) Expand all
25 25
26 #ifndef RefCountedSupplement_h 26 #ifndef RefCountedSupplement_h
27 #define RefCountedSupplement_h 27 #define RefCountedSupplement_h
28 28
29 #include "platform/Supplementable.h" 29 #include "platform/Supplementable.h"
30 #include "wtf/RefCounted.h" 30 #include "wtf/RefCounted.h"
31 #include "wtf/RefPtr.h" 31 #include "wtf/RefPtr.h"
32 32
33 namespace WebCore { 33 namespace WebCore {
34 34
35 #if !ENABLE(OILPAN)
35 template<class T, class S> 36 template<class T, class S>
36 class RefCountedSupplement : public RefCounted<S> { 37 class RefCountedSupplement : public RefCounted<S> {
37 public: 38 public:
38 typedef RefCountedSupplement<T, S> ThisType; 39 typedef RefCountedSupplement<T, S> ThisType;
39 40
40 virtual ~RefCountedSupplement() { } 41 virtual ~RefCountedSupplement() { }
41 42
42 class Wrapper FINAL : public Supplement<T> { 43 class Wrapper FINAL : public Supplement<T> {
43 public: 44 public:
44 explicit Wrapper(PassRefPtr<ThisType> wrapped) : m_wrapped(wrapped) { } 45 explicit Wrapper(PassRefPtr<ThisType> wrapped) : m_wrapped(wrapped) { }
(...skipping 17 matching lines...) Expand all
62 63
63 static ThisType* from(Supplementable<T>& host, const char* key) 64 static ThisType* from(Supplementable<T>& host, const char* key)
64 { 65 {
65 Supplement<T>* found = static_cast<Supplement<T>*>(host.requireSupplemen t(key)); 66 Supplement<T>* found = static_cast<Supplement<T>*>(host.requireSupplemen t(key));
66 if (!found) 67 if (!found)
67 return 0; 68 return 0;
68 ASSERT_WITH_SECURITY_IMPLICATION(found->isRefCountedWrapper()); 69 ASSERT_WITH_SECURITY_IMPLICATION(found->isRefCountedWrapper());
69 return static_cast<Wrapper*>(found)->wrapped(); 70 return static_cast<Wrapper*>(found)->wrapped();
70 } 71 }
71 }; 72 };
72 73 #endif
73 // FIXME: Oilpan: Consider moving all supplements to the managed heap (as HeapSu pplement) and removing this wrapper.
74 template<typename T, typename S>
75 class RefCountedGarbageCollectedSupplement : public RefCountedGarbageCollected<S > {
76 public:
77 typedef RefCountedGarbageCollectedSupplement<T, S> ThisType;
78
79 virtual ~RefCountedGarbageCollectedSupplement() { }
80
81 class Wrapper FINAL : public Supplement<T> {
82 public:
83 explicit Wrapper(ThisType* wrapped) : m_wrapped(wrapped) { }
84 virtual ~Wrapper() { }
85 ThisType* wrapped() const { return m_wrapped; }
86 virtual void trace(Visitor* visitor) OVERRIDE { visitor->trace(m_wrapped ); }
87 private:
88 Member<ThisType> m_wrapped;
89 };
90
91 static void provideTo(Supplementable<T>& host, const char* key, ThisType* su pplement)
92 {
93 host.provideSupplement(key, adoptPtr(new Wrapper(supplement)));
94 }
95
96 static ThisType* from(Supplementable<T>& host, const char* key)
97 {
98 Supplement<T>* found = static_cast<Supplement<T>*>(host.requireSupplemen t(key));
99 if (!found)
100 return 0;
101 return static_cast<Wrapper*>(found)->wrapped();
102 }
103
104 virtual void trace(Visitor*) = 0;
105 };
106 74
107 } // namespace WebCore 75 } // namespace WebCore
108 76
109 #endif // RefCountedSupplement_h 77 #endif // RefCountedSupplement_h
OLDNEW
« no previous file with comments | « Source/modules/webmidi/MIDIController.cpp ('k') | Source/platform/heap/Handle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698