| OLD | NEW |
| (Empty) |
| 1 // Copyright 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 COMPONENTS_AUTOFILL_BROWSER_WEBDATA_AUTOFILL_WEBDATA_BACKEND_IMPL_H_ | |
| 6 #define COMPONENTS_AUTOFILL_BROWSER_WEBDATA_AUTOFILL_WEBDATA_BACKEND_IMPL_H_ | |
| 7 | |
| 8 #include "base/memory/ref_counted.h" | |
| 9 #include "base/memory/scoped_ptr.h" | |
| 10 #include "base/observer_list.h" | |
| 11 #include "base/supports_user_data.h" | |
| 12 #include "components/autofill/browser/webdata/autofill_webdata.h" | |
| 13 #include "components/autofill/browser/webdata/autofill_webdata_backend.h" | |
| 14 #include "components/autofill/core/common/form_field_data.h" | |
| 15 #include "components/webdata/common/web_data_results.h" | |
| 16 #include "components/webdata/common/web_data_service_base.h" | |
| 17 #include "components/webdata/common/web_data_service_consumer.h" | |
| 18 #include "components/webdata/common/web_database.h" | |
| 19 #include "content/public/browser/browser_thread.h" | |
| 20 | |
| 21 class WebDataServiceBackend; | |
| 22 | |
| 23 namespace autofill { | |
| 24 | |
| 25 class AutofillChange; | |
| 26 class AutofillProfile; | |
| 27 class AutofillWebDataServiceObserverOnDBThread; | |
| 28 class CreditCard; | |
| 29 | |
| 30 // Backend implentation for the AutofillWebDataService. This class runs on the | |
| 31 // DB thread, as it handles reads and writes to the WebDatabase, and functions | |
| 32 // in it should only be called from that thread. Most functions here are just | |
| 33 // the implementations of the corresponding functions in the Autofill | |
| 34 // WebDataService. | |
| 35 class AutofillWebDataBackendImpl | |
| 36 : public base::RefCountedThreadSafe<AutofillWebDataBackendImpl, | |
| 37 content::BrowserThread::DeleteOnDBThread>, | |
| 38 public AutofillWebDataBackend { | |
| 39 public: | |
| 40 // |web_database_backend| is used to access the WebDatabase directly for | |
| 41 // Sync-related operations. |on_changed_callback| is a closure which can be | |
| 42 // used to notify the UI thread of changes initiated by Sync (this callback | |
| 43 // may be called multiple times). | |
| 44 AutofillWebDataBackendImpl( | |
| 45 scoped_refptr<WebDataServiceBackend> web_database_backend, | |
| 46 const base::Closure& on_changed_callback); | |
| 47 | |
| 48 // AutofillWebDataBackend implementation. | |
| 49 virtual void AddObserver(AutofillWebDataServiceObserverOnDBThread* observer) | |
| 50 OVERRIDE; | |
| 51 virtual void RemoveObserver( | |
| 52 AutofillWebDataServiceObserverOnDBThread* observer) OVERRIDE; | |
| 53 virtual WebDatabase* GetDatabase() OVERRIDE; | |
| 54 virtual void RemoveExpiredFormElements() OVERRIDE; | |
| 55 virtual void NotifyOfMultipleAutofillChanges() OVERRIDE; | |
| 56 | |
| 57 // Returns a SupportsUserData objects that may be used to store data | |
| 58 // owned by the DB thread on this object. Should be called only from | |
| 59 // the DB thread, and will be destroyed on the DB thread soon after | |
| 60 // |ShutdownOnUIThread()| is called. | |
| 61 base::SupportsUserData* GetDBUserData(); | |
| 62 | |
| 63 void ResetUserData(); | |
| 64 | |
| 65 // Adds form fields to the web database. | |
| 66 WebDatabase::State AddFormElements(const std::vector<FormFieldData>& fields, | |
| 67 WebDatabase* db); | |
| 68 | |
| 69 // Returns a vector of values which have been entered in form input fields | |
| 70 // named |name|. | |
| 71 scoped_ptr<WDTypedResult> GetFormValuesForElementName( | |
| 72 const base::string16& name, | |
| 73 const base::string16& prefix, | |
| 74 int limit, | |
| 75 WebDatabase* db); | |
| 76 | |
| 77 // Returns true if there are any elements in the form. | |
| 78 scoped_ptr<WDTypedResult> HasFormElements(WebDatabase* db); | |
| 79 | |
| 80 // Removes form elements recorded for Autocomplete from the database. | |
| 81 WebDatabase::State RemoveFormElementsAddedBetween( | |
| 82 const base::Time& delete_begin, | |
| 83 const base::Time& delete_end, | |
| 84 WebDatabase* db); | |
| 85 | |
| 86 | |
| 87 // Removes the Form-value |value| which has been entered in form input fields | |
| 88 // named |name| from the database. | |
| 89 WebDatabase::State RemoveFormValueForElementName(const base::string16& name, | |
| 90 const base::string16& value, | |
| 91 WebDatabase* db); | |
| 92 | |
| 93 // Adds an Autofill profile to the web database. | |
| 94 WebDatabase::State AddAutofillProfile(const AutofillProfile& profile, | |
| 95 WebDatabase* db); | |
| 96 | |
| 97 // Updates an Autofill profile in the web database. | |
| 98 WebDatabase::State UpdateAutofillProfile(const AutofillProfile& profile, | |
| 99 WebDatabase* db); | |
| 100 | |
| 101 // Removes an Autofill profile from the web database. | |
| 102 WebDatabase::State RemoveAutofillProfile(const std::string& guid, | |
| 103 WebDatabase* db); | |
| 104 | |
| 105 // Returns all Autofill profiles from the web database. | |
| 106 scoped_ptr<WDTypedResult> GetAutofillProfiles(WebDatabase* db); | |
| 107 | |
| 108 // Adds a credit card to the web database. | |
| 109 WebDatabase::State AddCreditCard(const CreditCard& credit_card, | |
| 110 WebDatabase* db); | |
| 111 | |
| 112 // Updates a credit card in the web database. | |
| 113 WebDatabase::State UpdateCreditCard(const CreditCard& credit_card, | |
| 114 WebDatabase* db); | |
| 115 | |
| 116 // Removes a credit card from the web database. | |
| 117 WebDatabase::State RemoveCreditCard(const std::string& guid, | |
| 118 WebDatabase* db); | |
| 119 | |
| 120 // Returns a vector of all credit cards from the web database. | |
| 121 scoped_ptr<WDTypedResult> GetCreditCards(WebDatabase* db); | |
| 122 | |
| 123 // Removes Autofill records from the database. | |
| 124 WebDatabase::State RemoveAutofillDataModifiedBetween( | |
| 125 const base::Time& delete_begin, | |
| 126 const base::Time& delete_end, | |
| 127 WebDatabase* db); | |
| 128 | |
| 129 // Removes origin URLs associated with Autofill profiles and credit cards from | |
| 130 // the database. | |
| 131 WebDatabase::State RemoveOriginURLsModifiedBetween( | |
| 132 const base::Time& delete_begin, | |
| 133 const base::Time& delete_end, | |
| 134 WebDatabase* db); | |
| 135 | |
| 136 protected: | |
| 137 virtual ~AutofillWebDataBackendImpl(); | |
| 138 | |
| 139 private: | |
| 140 friend struct content::BrowserThread::DeleteOnThread< | |
| 141 content::BrowserThread::DB>; | |
| 142 friend class base::DeleteHelper<AutofillWebDataBackendImpl>; | |
| 143 // We have to friend RCTS<> so WIN shared-lib build is happy | |
| 144 // (http://crbug/112250). | |
| 145 friend class base::RefCountedThreadSafe<AutofillWebDataBackendImpl, | |
| 146 content::BrowserThread::DeleteOnDBThread>; | |
| 147 | |
| 148 // This makes the destructor public, and thus allows us to aggregate | |
| 149 // SupportsUserData. It is private by default to prevent incorrect | |
| 150 // usage in class hierarchies where it is inherited by | |
| 151 // reference-counted objects. | |
| 152 class SupportsUserDataAggregatable : public base::SupportsUserData { | |
| 153 public: | |
| 154 SupportsUserDataAggregatable() {} | |
| 155 virtual ~SupportsUserDataAggregatable() {} | |
| 156 private: | |
| 157 DISALLOW_COPY_AND_ASSIGN(SupportsUserDataAggregatable); | |
| 158 }; | |
| 159 | |
| 160 // Storage for user data to be accessed only on the DB thread. May | |
| 161 // be used e.g. for SyncableService subclasses that need to be owned | |
| 162 // by this object. Is created on first call to |GetDBUserData()|. | |
| 163 scoped_ptr<SupportsUserDataAggregatable> user_data_; | |
| 164 | |
| 165 WebDatabase::State RemoveExpiredFormElementsImpl(WebDatabase* db); | |
| 166 | |
| 167 // Callbacks to ensure that sensitive info is destroyed if request is | |
| 168 // cancelled. | |
| 169 void DestroyAutofillProfileResult(const WDTypedResult* result); | |
| 170 void DestroyAutofillCreditCardResult(const WDTypedResult* result); | |
| 171 | |
| 172 ObserverList<AutofillWebDataServiceObserverOnDBThread> db_observer_list_; | |
| 173 | |
| 174 // WebDataServiceBackend allows direct access to DB. | |
| 175 // TODO(caitkp): Make it so nobody but us needs direct DB access anymore. | |
| 176 scoped_refptr<WebDataServiceBackend> web_database_backend_; | |
| 177 | |
| 178 base::Closure on_changed_callback_; | |
| 179 | |
| 180 DISALLOW_COPY_AND_ASSIGN(AutofillWebDataBackendImpl); | |
| 181 }; | |
| 182 | |
| 183 } // namespace autofill | |
| 184 | |
| 185 #endif // COMPONENTS_AUTOFILL_BROWSER_WEBDATA_AUTOFILL_WEBDATA_BACKEND_IMPL_H_ | |
| OLD | NEW |