OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Weak handles provides a way to refer to weak pointers from another | 5 // Weak handles provides a way to refer to weak pointers from another |
6 // thread. This is useful because it is not safe to reference a weak | 6 // thread. This is useful because it is not safe to reference a weak |
7 // pointer from a thread other than the thread on which it was | 7 // pointer from a thread other than the thread on which it was |
8 // created. | 8 // created. |
9 // | 9 // |
10 // Weak handles can be passed across threads, so for example, you can | 10 // Weak handles can be passed across threads, so for example, you can |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
102 class WeakHandleCoreBase { | 102 class WeakHandleCoreBase { |
103 public: | 103 public: |
104 // Assumes the current thread is the owner thread. | 104 // Assumes the current thread is the owner thread. |
105 WeakHandleCoreBase(); | 105 WeakHandleCoreBase(); |
106 | 106 |
107 // May be called on any thread. | 107 // May be called on any thread. |
108 bool IsOnOwnerThread() const; | 108 bool IsOnOwnerThread() const; |
109 | 109 |
110 protected: | 110 protected: |
111 // May be destroyed on any thread. | 111 // May be destroyed on any thread. |
112 ~WeakHandleCoreBase(); | 112 virtual ~WeakHandleCoreBase(); |
113 | 113 |
114 // May be called on any thread. | 114 // May be called on any thread. |
115 void PostToOwnerThread(const tracked_objects::Location& from_here, | 115 void PostToOwnerThread(const tracked_objects::Location& from_here, |
116 const base::Closure& fn) const; | 116 const base::Closure& fn) const; |
117 | 117 |
118 private: | 118 private: |
119 // May be used on any thread. | 119 // May be used on any thread. |
120 const scoped_refptr<base::MessageLoopProxy> owner_loop_proxy_; | 120 const scoped_refptr<base::MessageLoopProxy> owner_loop_proxy_; |
121 | 121 |
122 DISALLOW_COPY_AND_ASSIGN(WeakHandleCoreBase); | 122 DISALLOW_COPY_AND_ASSIGN(WeakHandleCoreBase); |
123 }; | 123 }; |
124 | 124 |
125 // WeakHandleCore<T> contains all the logic for WeakHandle<T>. | 125 // WeakHandleCore<T> contains all the logic for WeakHandle<T>. |
126 template <typename T> | 126 template <typename T> |
127 class WeakHandleCore | 127 class WeakHandleCore |
128 : public NON_EXPORTED_BASE(WeakHandleCoreBase), | 128 : public NON_EXPORTED_BASE(WeakHandleCoreBase), |
Raghu Simha
2012/12/26 08:02:38
Note: I had added this NON_EXPORTED_BASE annotatio
| |
129 public base::RefCountedThreadSafe<WeakHandleCore<T> > { | 129 public base::RefCountedThreadSafe<WeakHandleCore<T> > { |
130 public: | 130 public: |
131 // Must be called on |ptr|'s owner thread, which is assumed to be | 131 // Must be called on |ptr|'s owner thread, which is assumed to be |
132 // the current thread. | 132 // the current thread. |
133 explicit WeakHandleCore(const base::WeakPtr<T>& ptr) : ptr_(ptr) {} | 133 explicit WeakHandleCore(const base::WeakPtr<T>& ptr) : ptr_(ptr) {} |
134 | 134 |
135 // Must be called on |ptr_|'s owner thread. | 135 // Must be called on |ptr_|'s owner thread. |
136 base::WeakPtr<T> Get() const { | 136 base::WeakPtr<T> Get() const { |
137 CHECK(IsOnOwnerThread()); | 137 CHECK(IsOnOwnerThread()); |
138 return ptr_; | 138 return ptr_; |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
369 | 369 |
370 // Makes a WeakHandle from a WeakPtr. | 370 // Makes a WeakHandle from a WeakPtr. |
371 template <typename T> | 371 template <typename T> |
372 WeakHandle<T> MakeWeakHandle(const base::WeakPtr<T>& ptr) { | 372 WeakHandle<T> MakeWeakHandle(const base::WeakPtr<T>& ptr) { |
373 return WeakHandle<T>(ptr); | 373 return WeakHandle<T>(ptr); |
374 } | 374 } |
375 | 375 |
376 } // namespace syncer | 376 } // namespace syncer |
377 | 377 |
378 #endif // SYNC_UTIL_WEAK_HANDLE_H_ | 378 #endif // SYNC_UTIL_WEAK_HANDLE_H_ |
OLD | NEW |