Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2013 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 #ifndef ANDROID_WEBVIEW_BROWSER_AW_FORM_DATABASE_SERVICE_H_
      6 #define ANDROID_WEBVIEW_BROWSER_AW_FORM_DATABASE_SERVICE_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/files/file_path.h"
     10 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
     11 #include "components/webdata/common/web_data_service_consumer.h"
     12 #include "components/webdata/common/web_database_service.h"
     13 
     14 namespace base {
     15 class WaitableEvent;
     16 };
     17 
     18 namespace android_webview {
     19 
     20 // Handles the database operations necessary to implement the autocomplete
     21 // functionality. This includes creating and initializing the components that
     22 // handle the database backend, and providing a synchronous interface when
     23 // needed (the chromium database components have an async. interface).
     24 class AwFormDatabaseService : public WebDataServiceConsumer {
     25  public:
     26   AwFormDatabaseService(const base::FilePath path);
     27 
     28   virtual ~AwFormDatabaseService();
     29 
     30   void Shutdown();
     31 
     32   // Returns whether the database has any data stored. May do
     33   // IO access and block.
     34   bool HasFormData();
     35 
     36   // Clear any saved form data. Executes asynchronously.
     37   void ClearFormData();
     38 
     39   scoped_refptr<autofill::AutofillWebDataService>
     40       get_autofill_webdata_service();
     41 
     42   // WebDataServiceConsumer implementation.
     43   virtual void OnWebDataServiceRequestDone(
     44       WebDataServiceBase::Handle h,
     45       const WDTypedResult* result) OVERRIDE;
     46 
     47  private:
     48   struct PendingQuery {
     49     bool* result;
     50     base::WaitableEvent* completion;
     51   };
     52   typedef std::map<WebDataServiceBase::Handle, PendingQuery> QueryMap;
     53 
     54   void ClearFormDataImpl();
     55   void HasFormDataImpl(base::WaitableEvent* completion, bool* result);
     56 
     57   QueryMap result_map_;
     58 
     59   scoped_refptr<autofill::AutofillWebDataService> autofill_data_;
     60   scoped_refptr<WebDatabaseService> web_database_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(AwFormDatabaseService);
     63 };
     64 
     65 }  // namespace android_webview
     66 
     67 #endif  // ANDROID_WEBVIEW_BROWSER_AW_FORM_DATABASE_SERVICE_H_
     68