| Index: components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
|
| diff --git a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
|
| index b3da704df0653c1886448e454ea4a06044022063..0871312ffded92cd06b5755b3c9687cff27b5fb5 100644
|
| --- a/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
|
| +++ b/components/autofill/core/browser/webdata/autofill_webdata_backend_impl.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/stl_util.h"
|
| @@ -19,26 +20,31 @@
|
|
|
| using base::Bind;
|
| using base::Time;
|
| -using content::BrowserThread;
|
|
|
| namespace autofill {
|
|
|
| AutofillWebDataBackendImpl::AutofillWebDataBackendImpl(
|
| scoped_refptr<WebDataServiceBackend> web_database_backend,
|
| + const scoped_refptr<base::MessageLoopProxy>& ui_thread,
|
| + const scoped_refptr<base::MessageLoopProxy>& db_thread,
|
| const base::Closure& on_changed_callback)
|
| - : web_database_backend_(web_database_backend),
|
| + : base::RefCountedDeleteOnMessageLoop<AutofillWebDataBackendImpl>(
|
| + db_thread),
|
| + ui_thread_(ui_thread),
|
| + db_thread_(db_thread),
|
| + web_database_backend_(web_database_backend),
|
| on_changed_callback_(on_changed_callback) {
|
| }
|
|
|
| void AutofillWebDataBackendImpl::AddObserver(
|
| AutofillWebDataServiceObserverOnDBThread* observer) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| db_observer_list_.AddObserver(observer);
|
| }
|
|
|
| void AutofillWebDataBackendImpl::RemoveObserver(
|
| AutofillWebDataServiceObserverOnDBThread* observer) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| db_observer_list_.RemoveObserver(observer);
|
| }
|
|
|
| @@ -47,7 +53,7 @@ AutofillWebDataBackendImpl::~AutofillWebDataBackendImpl() {
|
| }
|
|
|
| WebDatabase* AutofillWebDataBackendImpl::GetDatabase() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| return web_database_backend_->database();
|
| }
|
|
|
| @@ -58,14 +64,12 @@ void AutofillWebDataBackendImpl::RemoveExpiredFormElements() {
|
| }
|
|
|
| void AutofillWebDataBackendImpl::NotifyOfMultipleAutofillChanges() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| - BrowserThread::PostTask(BrowserThread::UI,
|
| - FROM_HERE,
|
| - on_changed_callback_);
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| + ui_thread_->PostTask(FROM_HERE, on_changed_callback_);
|
| }
|
|
|
| base::SupportsUserData* AutofillWebDataBackendImpl::GetDBUserData() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| if (!user_data_)
|
| user_data_.reset(new SupportsUserDataAggregatable());
|
| return user_data_.get();
|
| @@ -77,7 +81,7 @@ void AutofillWebDataBackendImpl::ResetUserData() {
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::AddFormElements(
|
| const std::vector<FormFieldData>& fields, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| AutofillChangeList changes;
|
| if (!AutofillTable::FromWebDatabase(db)->AddFormFieldValues(
|
| fields, &changes)) {
|
| @@ -99,7 +103,7 @@ scoped_ptr<WDTypedResult>
|
| AutofillWebDataBackendImpl::GetFormValuesForElementName(
|
| const base::string16& name, const base::string16& prefix, int limit,
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| std::vector<base::string16> values;
|
| AutofillTable::FromWebDatabase(db)->GetFormValuesForElementName(
|
| name, prefix, &values, limit);
|
| @@ -110,7 +114,7 @@ AutofillWebDataBackendImpl::GetFormValuesForElementName(
|
|
|
| scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::HasFormElements(
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| bool value = AutofillTable::FromWebDatabase(db)->HasFormElements();
|
| return scoped_ptr<WDTypedResult>(
|
| new WDResult<bool>(AUTOFILL_VALUE_RESULT, value));
|
| @@ -120,7 +124,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveFormElementsAddedBetween(
|
| const base::Time& delete_begin,
|
| const base::Time& delete_end,
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| AutofillChangeList changes;
|
|
|
| if (AutofillTable::FromWebDatabase(db)->RemoveFormElementsAddedBetween(
|
| @@ -140,7 +144,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveFormElementsAddedBetween(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::RemoveFormValueForElementName(
|
| const base::string16& name, const base::string16& value, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
|
|
| if (AutofillTable::FromWebDatabase(db)->RemoveFormElement(name, value)) {
|
| AutofillChangeList changes;
|
| @@ -159,7 +163,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveFormValueForElementName(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::AddAutofillProfile(
|
| const AutofillProfile& profile, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| if (!AutofillTable::FromWebDatabase(db)->AddAutofillProfile(profile)) {
|
| NOTREACHED();
|
| return WebDatabase::COMMIT_NOT_NEEDED;
|
| @@ -177,7 +181,7 @@ WebDatabase::State AutofillWebDataBackendImpl::AddAutofillProfile(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::UpdateAutofillProfile(
|
| const AutofillProfile& profile, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| // Only perform the update if the profile exists. It is currently
|
| // valid to try to update a missing profile. We simply drop the write and
|
| // the caller will detect this on the next refresh.
|
| @@ -205,7 +209,7 @@ WebDatabase::State AutofillWebDataBackendImpl::UpdateAutofillProfile(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::RemoveAutofillProfile(
|
| const std::string& guid, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| AutofillProfile* profile = NULL;
|
| if (!AutofillTable::FromWebDatabase(db)->GetAutofillProfile(guid, &profile)) {
|
| NOTREACHED();
|
| @@ -229,7 +233,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveAutofillProfile(
|
|
|
| scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetAutofillProfiles(
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| std::vector<AutofillProfile*> profiles;
|
| AutofillTable::FromWebDatabase(db)->GetAutofillProfiles(&profiles);
|
| return scoped_ptr<WDTypedResult>(
|
| @@ -242,7 +246,7 @@ scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetAutofillProfiles(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::AddCreditCard(
|
| const CreditCard& credit_card, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| if (!AutofillTable::FromWebDatabase(db)->AddCreditCard(credit_card)) {
|
| NOTREACHED();
|
| return WebDatabase::COMMIT_NOT_NEEDED;
|
| @@ -253,7 +257,7 @@ WebDatabase::State AutofillWebDataBackendImpl::AddCreditCard(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::UpdateCreditCard(
|
| const CreditCard& credit_card, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| // It is currently valid to try to update a missing profile. We simply drop
|
| // the write and the caller will detect this on the next refresh.
|
| CreditCard* original_credit_card = NULL;
|
| @@ -272,7 +276,7 @@ WebDatabase::State AutofillWebDataBackendImpl::UpdateCreditCard(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::RemoveCreditCard(
|
| const std::string& guid, WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| if (!AutofillTable::FromWebDatabase(db)->RemoveCreditCard(guid)) {
|
| NOTREACHED();
|
| return WebDatabase::COMMIT_NOT_NEEDED;
|
| @@ -282,7 +286,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveCreditCard(
|
|
|
| scoped_ptr<WDTypedResult> AutofillWebDataBackendImpl::GetCreditCards(
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| std::vector<CreditCard*> credit_cards;
|
| AutofillTable::FromWebDatabase(db)->GetCreditCards(&credit_cards);
|
| return scoped_ptr<WDTypedResult>(
|
| @@ -298,7 +302,7 @@ WebDatabase::State
|
| const base::Time& delete_begin,
|
| const base::Time& delete_end,
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| std::vector<std::string> profile_guids;
|
| std::vector<std::string> credit_card_guids;
|
| if (AutofillTable::FromWebDatabase(db)->RemoveAutofillDataModifiedBetween(
|
| @@ -324,7 +328,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveOriginURLsModifiedBetween(
|
| const base::Time& delete_begin,
|
| const base::Time& delete_end,
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| ScopedVector<AutofillProfile> profiles;
|
| if (AutofillTable::FromWebDatabase(db)->RemoveOriginURLsModifiedBetween(
|
| delete_begin, delete_end, &profiles)) {
|
| @@ -345,7 +349,7 @@ WebDatabase::State AutofillWebDataBackendImpl::RemoveOriginURLsModifiedBetween(
|
|
|
| WebDatabase::State AutofillWebDataBackendImpl::RemoveExpiredFormElementsImpl(
|
| WebDatabase* db) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(db_thread_->BelongsToCurrentThread());
|
| AutofillChangeList changes;
|
|
|
| if (AutofillTable::FromWebDatabase(db)->RemoveExpiredFormElements(&changes)) {
|
|
|