• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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