| Index: chrome/browser/webdata/web_data_service.h
|
| diff --git a/chrome/browser/webdata/web_data_service.h b/chrome/browser/webdata/web_data_service.h
|
| index b0a0689f4ffbb5dd23f148fe2d72a97bd0352697..f50d204f98bbb25837bb088c900d0759d0cf63f2 100644
|
| --- a/chrome/browser/webdata/web_data_service.h
|
| +++ b/chrome/browser/webdata/web_data_service.h
|
| @@ -27,6 +27,7 @@
|
| #include "chrome/browser/search_engines/template_url.h"
|
| #include "chrome/browser/search_engines/template_url_id.h"
|
| #include "chrome/browser/webdata/keyword_table.h"
|
| +#include "chrome/browser/webdata/web_data_request_manager.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "sql/init_status.h"
|
|
|
| @@ -100,106 +101,6 @@ class WebDataService
|
| public AutofillWebData,
|
| public RefcountedProfileKeyedService {
|
| public:
|
| - //////////////////////////////////////////////////////////////////////////////
|
| - //
|
| - // Internal requests
|
| - //
|
| - // Every request is processed using a request object. The object contains
|
| - // both the request parameters and the results.
|
| - //////////////////////////////////////////////////////////////////////////////
|
| - class WebDataRequest {
|
| - public:
|
| - WebDataRequest(WebDataService* service,
|
| - Handle handle,
|
| - WebDataServiceConsumer* consumer);
|
| -
|
| - virtual ~WebDataRequest();
|
| -
|
| - Handle GetHandle() const;
|
| -
|
| - // Retrieves the |consumer_| set in the constructor. If the request was
|
| - // cancelled via the |Cancel()| method then |true| is returned and
|
| - // |*consumer| is set to NULL. The |consumer| parameter may be set to NULL
|
| - // if only the return value is desired.
|
| - bool IsCancelled(WebDataServiceConsumer** consumer) const;
|
| -
|
| - // This can be invoked from any thread. From this point we assume that
|
| - // our consumer_ reference is invalid.
|
| - void Cancel();
|
| -
|
| - // Invoked by the service when this request has been completed.
|
| - // This will notify the service in whatever thread was used to create this
|
| - // request.
|
| - void RequestComplete();
|
| -
|
| - // The result is owned by the request.
|
| - void SetResult(WDTypedResult* r);
|
| - const WDTypedResult* GetResult() const;
|
| -
|
| - private:
|
| - scoped_refptr<WebDataService> service_;
|
| - MessageLoop* message_loop_;
|
| - 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_;
|
| - WebDataServiceConsumer* consumer_;
|
| -
|
| - WDTypedResult* result_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebDataRequest);
|
| - };
|
| -
|
| - //
|
| - // Internally we use instances of the following template to represent
|
| - // requests.
|
| - //
|
| - template <class T>
|
| - class GenericRequest : public WebDataRequest {
|
| - public:
|
| - GenericRequest(WebDataService* service,
|
| - Handle handle,
|
| - WebDataServiceConsumer* consumer,
|
| - const T& arg)
|
| - : WebDataRequest(service, handle, consumer),
|
| - arg_(arg) {
|
| - }
|
| -
|
| - virtual ~GenericRequest() {
|
| - }
|
| -
|
| - const T& arg() const { return arg_; }
|
| -
|
| - private:
|
| - T arg_;
|
| - };
|
| -
|
| - template <class T, class U>
|
| - class GenericRequest2 : public WebDataRequest {
|
| - public:
|
| - GenericRequest2(WebDataService* service,
|
| - Handle handle,
|
| - WebDataServiceConsumer* consumer,
|
| - const T& arg1,
|
| - const U& arg2)
|
| - : WebDataRequest(service, handle, consumer),
|
| - arg1_(arg1),
|
| - arg2_(arg2) {
|
| - }
|
| -
|
| - virtual ~GenericRequest2() { }
|
| -
|
| - const T& arg1() const { return arg1_; }
|
| -
|
| - const U& arg2() const { return arg2_; }
|
| -
|
| - private:
|
| - T arg1_;
|
| - U arg2_;
|
| - };
|
| -
|
| WebDataService();
|
|
|
| // WebDataServiceBase implementation.
|
| @@ -427,9 +328,6 @@ class WebDataService
|
| // Invoked by request implementations when a request has been processed.
|
| void RequestCompleted(Handle h);
|
|
|
| - // Register the request as a pending request.
|
| - void RegisterRequest(WebDataRequest* request);
|
| -
|
| //////////////////////////////////////////////////////////////////////////////
|
| //
|
| // The following methods are only invoked in the web data service thread.
|
| @@ -471,9 +369,6 @@ class WebDataService
|
| // Schedule a commit if one is not already pending.
|
| void ScheduleCommit();
|
|
|
| - // Return the next request handle.
|
| - int GetNextRequestHandle();
|
| -
|
| //////////////////////////////////////////////////////////////////////////////
|
| //
|
| // Keywords.
|
| @@ -565,6 +460,11 @@ class WebDataService
|
| void RemoveAutofillProfilesAndCreditCardsModifiedBetweenImpl(
|
| GenericRequest2<base::Time, base::Time>* request);
|
|
|
| + // Callbacks to ensure that sensitive info is destroyed if request is
|
| + // cancelled.
|
| + void DestroyAutofillProfileResult(const WDTypedResult* result);
|
| + void DestroyAutofillCreditCardResult(const WDTypedResult* result);
|
| +
|
| // True once initialization has started.
|
| bool is_running_;
|
|
|
| @@ -575,6 +475,9 @@ class WebDataService
|
| // |db_| lifetime must be managed on the database thread.
|
| WebDatabase* db_;
|
|
|
| + // Keeps track of all pending requests made to the db.
|
| + WebDataRequestManager request_manager_;
|
| +
|
| // Syncable services for the database data. We own the services, but don't
|
| // use |scoped_ptr|s because the lifetimes must be managed on the database
|
| // thread.
|
| @@ -590,15 +493,6 @@ class WebDataService
|
| // Whether we should commit the database.
|
| bool should_commit_;
|
|
|
| - // A lock to protect pending requests and next request handle.
|
| - base::Lock pending_lock_;
|
| -
|
| - // Next handle to be used for requests. Incremented for each use.
|
| - Handle next_request_handle_;
|
| -
|
| - typedef std::map<Handle, WebDataRequest*> RequestMap;
|
| - RequestMap pending_requests_;
|
| -
|
| // MessageLoop the WebDataService is created on.
|
| MessageLoop* main_loop_;
|
|
|
|
|