Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Chromium settings and storage represent user-selected preferences and | |
| 6 // information and MUST not be extracted, overwritten or modified except | |
| 7 // through Chromium defined APIs. | |
| 8 | |
| 9 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_REQUEST_MANAGER_H__ | |
| 10 #define CHROME_BROWSER_WEBDATA_WEB_DATA_REQUEST_MANAGER_H__ | |
| 11 | |
| 12 #include <map> | |
| 13 | |
| 14 #include "base/memory/ref_counted.h" | |
| 15 #include "base/synchronization/lock.h" | |
| 16 #include "chrome/browser/api/webdata/web_data_results.h" | |
| 17 #include "chrome/browser/api/webdata/web_data_service_base.h" | |
| 18 #include "chrome/browser/api/webdata/web_data_service_consumer.h" | |
| 19 | |
| 20 class MessageLoop; | |
| 21 class WebDataService; | |
| 22 class WebDataServiceConsumer; | |
| 23 class WebDataRequestManager; | |
| 24 | |
| 25 ////////////////////////////////////////////////////////////////////////////// | |
| 26 // | |
| 27 // Webdata requests | |
| 28 // | |
| 29 // Every request is processed using a request object. The object contains | |
| 30 // both the request parameters and the results. | |
| 31 ////////////////////////////////////////////////////////////////////////////// | |
| 32 class WebDataRequest { | |
| 33 public: | |
| 34 WebDataRequest(WebDataService* service, | |
| 35 WebDataServiceConsumer* consumer, | |
| 36 WebDataRequestManager* manager); | |
| 37 | |
| 38 virtual ~WebDataRequest(); | |
| 39 | |
| 40 WebDataServiceBase::Handle GetHandle() const; | |
| 41 | |
| 42 // Retrieves the |consumer_| set in the constructor. | |
| 43 WebDataServiceConsumer* GetConsumer() const; | |
| 44 | |
| 45 // Returns |true| if the request was cancelled via the |Cancel()| method. | |
| 46 bool IsCancelled() const; | |
| 47 | |
| 48 // This can be invoked from any thread. From this point we assume that | |
| 49 // our consumer_ reference is invalid. | |
| 50 void Cancel(); | |
| 51 | |
| 52 // Invoked by the service when this request has been completed. | |
| 53 // This will notify the service in whatever thread was used to create this | |
| 54 // request. | |
| 55 void RequestComplete(); | |
| 56 | |
| 57 // The result is owned by the request. | |
| 58 void SetResult(WDTypedResult* r); | |
| 59 const WDTypedResult* GetResult() const; | |
| 60 | |
| 61 private: | |
| 62 // Used to notify service of request completion. | |
| 63 scoped_refptr<WebDataService> service_; | |
| 64 | |
| 65 // Tracks loop that the request originated on. | |
| 66 MessageLoop* message_loop_; | |
| 67 | |
| 68 // Identifier for this request. | |
| 69 WebDataServiceBase::Handle handle_; | |
| 70 | |
| 71 // A lock to protect against simultaneous cancellations of the request. | |
| 72 // Cancellation affects both the |cancelled_| flag and |consumer_|. | |
| 73 mutable base::Lock cancel_lock_; | |
| 74 bool cancelled_; | |
| 75 | |
| 76 // The originator of the service request. | |
| 77 WebDataServiceConsumer* consumer_; | |
| 78 | |
| 79 WDTypedResult* result_; | |
| 80 | |
| 81 DISALLOW_COPY_AND_ASSIGN(WebDataRequest); | |
| 82 }; | |
| 83 | |
| 84 ////////////////////////////////////////////////////////////////////////////// | |
| 85 // | |
| 86 // Webdata request templates | |
| 87 // | |
| 88 // Internally we use instances of the following template to represent | |
| 89 // requests. | |
| 90 ////////////////////////////////////////////////////////////////////////////// | |
| 91 | |
| 92 template <class T> | |
| 93 class GenericRequest : public WebDataRequest { | |
| 94 public: | |
| 95 GenericRequest(WebDataService* service, | |
| 96 WebDataServiceConsumer* consumer, | |
| 97 WebDataRequestManager* manager, | |
| 98 const T& arg) | |
| 99 : WebDataRequest(service, consumer, manager), | |
| 100 arg_(arg) { | |
| 101 } | |
| 102 | |
| 103 virtual ~GenericRequest() { | |
| 104 } | |
| 105 | |
| 106 const T& arg() const { return arg_; } | |
| 107 | |
| 108 private: | |
| 109 T arg_; | |
| 110 }; | |
| 111 | |
| 112 template <class T, class U> | |
| 113 class GenericRequest2 : public WebDataRequest { | |
| 114 public: | |
| 115 GenericRequest2(WebDataService* service, | |
| 116 WebDataServiceConsumer* consumer, | |
| 117 WebDataRequestManager* manager, | |
| 118 const T& arg1, | |
| 119 const U& arg2) | |
| 120 : WebDataRequest(service, consumer, manager), | |
| 121 arg1_(arg1), | |
| 122 arg2_(arg2) { | |
| 123 } | |
| 124 | |
| 125 virtual ~GenericRequest2() { } | |
| 126 | |
| 127 const T& arg1() const { return arg1_; } | |
| 128 | |
| 129 const U& arg2() const { return arg2_; } | |
| 130 | |
| 131 private: | |
| 132 T arg1_; | |
| 133 U arg2_; | |
| 134 }; | |
| 135 | |
| 136 ////////////////////////////////////////////////////////////////////////////// | |
| 137 // | |
| 138 // Webdata Request Manager | |
| 139 // | |
| 140 // Tracks all WebDataRequests for a WebDataService. | |
| 141 // | |
| 142 // Note: This is an internal interface, not to be used outside of webdata/ | |
| 143 ////////////////////////////////////////////////////////////////////////////// | |
| 144 class WebDataRequestManager { | |
| 145 public: | |
| 146 WebDataRequestManager(); | |
| 147 | |
| 148 virtual ~WebDataRequestManager(); | |
|
dhollowa
2013/01/08 21:24:33
Do any of the methods in this file need to be virt
Cait (Slow)
2013/01/08 22:43:13
Done.
| |
| 149 | |
| 150 // Cancel any pending request. | |
| 151 virtual void CancelRequest(WebDataServiceBase::Handle h); | |
| 152 | |
| 153 // Invoked by request implementations when a request has been processed. | |
| 154 virtual void RequestCompleted(WebDataServiceBase::Handle h); | |
| 155 | |
| 156 // Register the request as a pending request. | |
| 157 virtual void RegisterRequest(WebDataRequest* request); | |
| 158 | |
| 159 // Return the next request handle. | |
| 160 virtual int GetNextRequestHandle(); | |
| 161 | |
| 162 private: | |
| 163 // A lock to protect pending requests and next request handle. | |
| 164 base::Lock pending_lock_; | |
| 165 | |
| 166 // Next handle to be used for requests. Incremented for each use. | |
| 167 WebDataServiceBase::Handle next_request_handle_; | |
| 168 | |
| 169 typedef std::map<WebDataServiceBase::Handle, WebDataRequest*> RequestMap; | |
| 170 RequestMap pending_requests_; | |
| 171 | |
| 172 DISALLOW_COPY_AND_ASSIGN(WebDataRequestManager); | |
| 173 }; | |
| 174 | |
| 175 #endif // CHROME_BROWSER_WEBDATA_WEB_DATA_REQUEST_MANAGER_H__ | |
| OLD | NEW |