Chromium Code Reviews| 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 |