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 836c12e0d5ef280e7b7e218ed7bcba5f3bc6c6ba..f69dfc21645252ee297f821a77f99b8491a6a3b3 100644 |
| --- a/components/webdata/common/web_data_request_manager.h |
| +++ b/components/webdata/common/web_data_request_manager.h |
| @@ -26,7 +26,7 @@ class WebDataRequestManager; |
| ////////////////////////////////////////////////////////////////////////////// |
| // |
| -// Webdata requests |
| +// WebData requests |
| // |
| // Every request is processed using a request object. The object contains |
| // both the request parameters and the results. |
| @@ -38,58 +38,59 @@ class WebDataRequest { |
| virtual ~WebDataRequest(); |
| + // Returns the identifier for this request. |
| WebDataServiceBase::Handle GetHandle() const; |
| + // Returns |true| if the request was cancelled (or has already completed). |
| + bool IsCancelled() const; |
| + |
| + private: |
| + // Internal debugging helper to assert that the manager pointer is valid and |
| + // that the manager's lock is held by the current thread. |
| + void AssertThreadSafe() const; |
| + |
| // Retrieves the |consumer_| set in the constructor. |
| WebDataServiceConsumer* GetConsumer() const; |
| // Retrieves the original task runner of the request. |
| scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() const; |
| - // Returns |true| if the request was cancelled via the |Cancel()| method. |
| - bool IsCancelled() const; |
| - |
| - // This can be invoked from any thread. From this point we assume that |
| - // our consumer_ reference is invalid. |
| - void Cancel(); |
| - |
| - // Invoked when the request has been completed. |
| - void OnComplete(); |
| + // Marks the current request as inactive, either due to cancellation or |
| + // completion. |
| + void MarkAsInactive(); |
| // The result is owned by the request. |
| void SetResult(std::unique_ptr<WDTypedResult> r); |
| - // Transfers ownership pof result to caller. Should only be called once per |
| + // Transfers ownership of result to caller. Should only be called once per |
| // result. |
| std::unique_ptr<WDTypedResult> GetResult(); |
| - private: |
| - // 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. |
| - WebDataRequestManager* manager_; |
| - |
| // Tracks task runner that the request originated on. |
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| + const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| // Identifier for this request. |
| - WebDataServiceBase::Handle handle_; |
| + const WebDataServiceBase::Handle handle_; |
| - // A lock to protect against simultaneous cancellations of the request. |
| - // Cancellation affects both the |cancelled_| flag and |consumer_|. |
| - mutable base::Lock cancel_lock_; |
| - bool cancelled_; |
| + // 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 originator of the service request. |
| WebDataServiceConsumer* consumer_; |
| std::unique_ptr<WDTypedResult> result_; |
| + // For access to the web request mutable state under the manager's lock. |
| + friend class WebDataRequestManager; |
|
Mathieu
2016/12/14 01:13:46
I've seen those statements be right under the priv
Roger McFarlane (Chromium)
2016/12/14 14:02:49
Done.
|
| + |
| DISALLOW_COPY_AND_ASSIGN(WebDataRequest); |
| }; |
| ////////////////////////////////////////////////////////////////////////////// |
| // |
| -// Webdata Request Manager |
| +// WebData Request Manager |
| // |
| // Tracks all WebDataRequests for a WebDataService. |
| // |
| @@ -104,7 +105,8 @@ class WebDataRequestManager |
| void CancelRequest(WebDataServiceBase::Handle h); |
| // Invoked by the WebDataService when |request| has been completed. |
| - void RequestCompleted(std::unique_ptr<WebDataRequest> request); |
| + void RequestCompleted(std::unique_ptr<WebDataRequest> request, |
| + std::unique_ptr<WDTypedResult> result); |
| // Register the request as a pending request. |
| void RegisterRequest(WebDataRequest* request); |
| @@ -112,6 +114,10 @@ class WebDataRequestManager |
| // Return the next request handle. |
| int GetNextRequestHandle(); |
| + // A debugging aid to assert that the pending_lock_ is held by the current |
| + // thread. |
| + void AssertLockedByCurrentThread() const { pending_lock_.AssertAcquired(); } |
| + |
| private: |
| friend class base::RefCountedThreadSafe<WebDataRequestManager>; |