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