Chromium Code Reviews| Index: components/webdata/common/web_data_request_manager.h |
| diff --git a/components/webdata/common/web_data_request_manager.h b/components/webdata/common/web_data_request_manager.h |
| index 87b5509158375c61b8abe819be392828c1127d89..46699c8b3df7ba519175ba6bffe1bff4fb2aa820 100644 |
| --- a/components/webdata/common/web_data_request_manager.h |
| +++ b/components/webdata/common/web_data_request_manager.h |
| @@ -12,6 +12,7 @@ |
| #include <map> |
| #include <memory> |
| +#include "base/atomicops.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/single_thread_task_runner.h" |
| @@ -48,11 +49,13 @@ class WebDataRequest { |
| // Private constructor called for WebDataRequestManager::NewRequest. |
| WebDataRequest(WebDataRequestManager* manager, |
| - WebDataServiceConsumer* consumer); |
| + WebDataServiceConsumer* consumer, |
| + WebDataServiceBase::Handle handle); |
| - // Internal debugging helper to assert that the request is active and that the |
| - // manager's lock is held by the current thread. |
| - void AssertThreadSafe() const; |
| + // Retrieves the manager set in the constructor, if the request is still |
| + // active, or nullptr if the request is inactive. The returned value may |
| + // change between calls. |
| + WebDataRequestManager* GetManager() const; |
|
Peter Kasting
2017/04/28 06:36:41
Const methods should not return non-const pointers
Roger McFarlane (Chromium)
2017/04/28 15:06:13
Removed const qualifiers as needed.
|
| // Retrieves the |consumer_| set in the constructor. |
| WebDataServiceConsumer* GetConsumer() const; |
| @@ -67,16 +70,18 @@ class WebDataRequest { |
| // Tracks task runner that the request originated on. |
| const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| - // Used to notify manager if request is cancelled. Uses a raw ptr instead of |
| - // a ref_ptr so that it can be set to null when a request is cancelled or |
| - // completed. |
| - WebDataRequestManager* manager_; |
| + // The manager associated with this request. This is stored as a raw (untyped) |
| + // pointer value because it does double duty as the flag indicating whether or |
| + // not this request is active (non-nullptr => active). |
| + base::subtle::AtomicWord atomic_manager_; |
| + static_assert(sizeof(atomic_manager_) == sizeof(WebDataRequestManager*), |
| + "size mismatch"); |
| // The originator of the service request. |
| - WebDataServiceConsumer* consumer_; |
| + WebDataServiceConsumer* const consumer_; |
| // Identifier for this request. |
| - WebDataServiceBase::Handle handle_; |
| + const WebDataServiceBase::Handle handle_; |
| DISALLOW_COPY_AND_ASSIGN(WebDataRequest); |
| }; |
| @@ -104,10 +109,6 @@ class WebDataRequestManager |
| void RequestCompleted(std::unique_ptr<WebDataRequest> request, |
| std::unique_ptr<WDTypedResult> result); |
| - // A debugging aid to assert that the pending_lock_ is held by the current |
| - // thread. |
| - void AssertLockedByCurrentThread() const; |
| - |
| private: |
| friend class base::RefCountedThreadSafe<WebDataRequestManager>; |