1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WEBDATA_SERVICE_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WEBDATA_SERVICE_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 11a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/memory/weak_ptr.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/observer_list.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/supports_user_data.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_data_results.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_data_service_base.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_data_service_consumer.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebDatabaseService; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace base { 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class MessageLoopProxy; 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillChange; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass AutofillEntry; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillProfile; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillWebDataBackend; 33a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)class AutofillWebDataBackendImpl; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillWebDataServiceObserverOnDBThread; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillWebDataServiceObserverOnUIThread; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CreditCard; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// API for Autofill web data. 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillWebDataService : public AutofillWebData, 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public WebDataServiceBase { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AutofillWebDataService(scoped_refptr<base::MessageLoopProxy> ui_thread, 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> db_thread); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillWebDataService(scoped_refptr<WebDatabaseService> wdbs, 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> ui_thread, 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> db_thread, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ProfileErrorCallback& callback); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // WebDataServiceBase implementation. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ShutdownOnUIThread() OVERRIDE; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AutofillWebData implementation. 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddFormFields( 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<FormFieldData>& fields) OVERRIDE; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebDataServiceBase::Handle GetFormValuesForElementName( 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& name, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& prefix, 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int limit, 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceConsumer* consumer) OVERRIDE; 60b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual WebDataServiceBase::Handle HasFormElements( 62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebDataServiceConsumer* consumer) OVERRIDE; 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveFormElementsAddedBetween( 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Time& delete_begin, const base::Time& delete_end) OVERRIDE; 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveFormValueForElementName( 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& name, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& value) OVERRIDE; 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddAutofillProfile(const AutofillProfile& profile) OVERRIDE; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void UpdateAutofillProfile(const AutofillProfile& profile) OVERRIDE; 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveAutofillProfile(const std::string& guid) OVERRIDE; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebDataServiceBase::Handle GetAutofillProfiles( 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceConsumer* consumer) OVERRIDE; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void UpdateAutofillEntries( 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<AutofillEntry>& autofill_entries) OVERRIDE; 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddCreditCard(const CreditCard& credit_card) OVERRIDE; 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void UpdateCreditCard(const CreditCard& credit_card) OVERRIDE; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveCreditCard(const std::string& guid) OVERRIDE; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebDataServiceBase::Handle GetCreditCards( 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceConsumer* consumer) OVERRIDE; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveAutofillDataModifiedBetween( 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Time& delete_begin, const base::Time& delete_end) OVERRIDE; 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void RemoveOriginURLsModifiedBetween( 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Time& delete_begin, const base::Time& delete_end) OVERRIDE; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddObserver(AutofillWebDataServiceObserverOnDBThread* observer); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveObserver(AutofillWebDataServiceObserverOnDBThread* observer); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddObserver(AutofillWebDataServiceObserverOnUIThread* observer); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveObserver(AutofillWebDataServiceObserverOnUIThread* observer); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns a SupportsUserData objects that may be used to store data 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // owned by the DB thread on this object. Should be called only from 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the DB thread, and will be destroyed on the DB thread soon after 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |ShutdownOnUIThread()| is called. 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SupportsUserData* GetDBUserData(); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Takes a callback which will be called on the DB thread with a pointer to an 98a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // |AutofillWebdataBackend|. This backend can be used to access or update the 99a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // WebDatabase directly on the DB thread. 100a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void GetAutofillBackend( 101a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const base::Callback<void(AutofillWebDataBackend*)>& callback); 102a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~AutofillWebDataService(); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void NotifyAutofillMultipleChangedOnUIThread(); 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::WeakPtr<AutofillWebDataService> AsWeakPtr() { 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return weak_ptr_factory_.GetWeakPtr(); 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ObserverList<AutofillWebDataServiceObserverOnUIThread> ui_observer_list_; 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The MessageLoopProxy that this class uses as its UI thread. 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> ui_thread_; 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The MessageLoopProxy that this class uses as its DB thread. 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> db_thread_; 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<AutofillWebDataBackendImpl> autofill_backend_; 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // This factory is used on the UI thread. All vended weak pointers are 124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // invalidated in ShutdownOnUIThread(). 125a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::WeakPtrFactory<AutofillWebDataService> weak_ptr_factory_; 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillWebDataService); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_WEBDATA_SERVICE_H_ 133