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#include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/bind.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/stl_util.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_country.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_change.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_entry.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_table.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_backend_impl.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service_observer.h" 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h" 20a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "components/webdata/common/web_data_service_backend.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/webdata/common/web_database_service.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::Bind; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::Time; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutofillWebDataService::AutofillWebDataService( 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<WebDatabaseService> wdbs, 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> ui_thread, 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> db_thread, 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ProfileErrorCallback& callback) 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : WebDataServiceBase(wdbs, callback, ui_thread), 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui_thread_(ui_thread), 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_thread_(db_thread), 36a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_ptr_factory_(this), 37a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) autofill_backend_(NULL) { 38a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::Closure on_changed_callback = Bind( 40a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) &AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread, 41a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr()); 42a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 43a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) autofill_backend_ = new AutofillWebDataBackendImpl( 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wdbs_->GetBackend(), ui_thread_, db_thread_, on_changed_callback); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)AutofillWebDataService::AutofillWebDataService( 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> ui_thread, 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> db_thread) 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : WebDataServiceBase(NULL, WebDataServiceBase::ProfileErrorCallback(), 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui_thread), 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui_thread_(ui_thread), 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_thread_(db_thread), 54a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_ptr_factory_(this), 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) autofill_backend_(new AutofillWebDataBackendImpl(NULL, 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui_thread_, 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_thread_, 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Closure())) { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::ShutdownOnUIThread() { 62a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_ptr_factory_.InvalidateWeakPtrs(); 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_thread_->PostTask(FROM_HERE, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::ResetUserData, autofill_backend_)); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceBase::ShutdownOnUIThread(); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::AddFormFields( 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<FormFieldData>& fields) { 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::AddFormElements, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, fields)); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebDataServiceBase::Handle AutofillWebDataService::GetFormValuesForElementName( 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& name, const base::string16& prefix, int limit, 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceConsumer* consumer) { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, 79a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::GetFormValuesForElementName, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, name, prefix, limit), consumer); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)WebDataServiceBase::Handle AutofillWebDataService::HasFormElements( 84b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebDataServiceConsumer* consumer) { 85b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, 86a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::HasFormElements, autofill_backend_), 87b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) consumer); 88b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveFormElementsAddedBetween( 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Time& delete_begin, const Time& delete_end) { 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 93a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::RemoveFormElementsAddedBetween, 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, delete_begin, delete_end)); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveFormValueForElementName( 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& name, const base::string16& value) { 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 100a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::RemoveFormValueForElementName, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, name, value)); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::AddAutofillProfile( 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AutofillProfile& profile) { 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 107a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::AddAutofillProfile, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, profile)); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::UpdateAutofillProfile( 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AutofillProfile& profile) { 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 114a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::UpdateAutofillProfile, 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, profile)); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveAutofillProfile( 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& guid) { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask(FROM_HERE, 121a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::RemoveAutofillProfile, 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, guid)); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebDataServiceBase::Handle AutofillWebDataService::GetAutofillProfiles( 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceConsumer* consumer) { 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, 128a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::GetAutofillProfiles, autofill_backend_), 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) consumer); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::AddCreditCard(const CreditCard& credit_card) { 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask( 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 135a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::AddCreditCard, 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, credit_card)); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::UpdateCreditCard( 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const CreditCard& credit_card) { 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask( 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 143a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::UpdateCreditCard, 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, credit_card)); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveCreditCard(const std::string& guid) { 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask( 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 150a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::RemoveCreditCard, 151a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) autofill_backend_, guid)); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebDataServiceBase::Handle AutofillWebDataService::GetCreditCards( 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebDataServiceConsumer* consumer) { 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::GetCreditCards, autofill_backend_), 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) consumer); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveAutofillDataModifiedBetween( 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Time& delete_begin, 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Time& delete_end) { 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wdbs_->ScheduleDBTask( 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::RemoveAutofillDataModifiedBetween, 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_, delete_begin, delete_end)); 16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AutofillWebDataService::RemoveOriginURLsModifiedBetween( 17190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const Time& delete_begin, const Time& delete_end) { 17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) wdbs_->ScheduleDBTask( 17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FROM_HERE, 17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Bind(&AutofillWebDataBackendImpl::RemoveOriginURLsModifiedBetween, 17590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) autofill_backend_, delete_begin, delete_end)); 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::AddObserver( 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillWebDataServiceObserverOnDBThread* observer) { 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(db_thread_->BelongsToCurrentThread()); 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (autofill_backend_.get()) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_->AddObserver(observer); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveObserver( 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillWebDataServiceObserverOnDBThread* observer) { 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(db_thread_->BelongsToCurrentThread()); 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (autofill_backend_.get()) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_backend_->RemoveObserver(observer); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::AddObserver( 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillWebDataServiceObserverOnUIThread* observer) { 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(ui_thread_->BelongsToCurrentThread()); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_observer_list_.AddObserver(observer); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::RemoveObserver( 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillWebDataServiceObserverOnUIThread* observer) { 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(ui_thread_->BelongsToCurrentThread()); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_observer_list_.RemoveObserver(observer); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::SupportsUserData* AutofillWebDataService::GetDBUserData() { 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(db_thread_->BelongsToCurrentThread()); 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return autofill_backend_->GetDBUserData(); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void AutofillWebDataService::GetAutofillBackend( 210a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const base::Callback<void(AutofillWebDataBackend*)>& callback) { 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_thread_->PostTask(FROM_HERE, base::Bind(callback, autofill_backend_)); 212a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 213a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AutofillWebDataService::~AutofillWebDataService() { 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread() { 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(ui_thread_->BelongsToCurrentThread()); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread, 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_observer_list_, 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMultipleChanged()); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 225