| Index: chrome/browser/webdata/web_data_service.cc
|
| diff --git a/chrome/browser/webdata/web_data_service.cc b/chrome/browser/webdata/web_data_service.cc
|
| index 7428bfac7588d338da30a212d00082085e2eff97..f7016e7ebfc3e2630f3e3e0ca5fb79bd12ab37b1 100644
|
| --- a/chrome/browser/webdata/web_data_service.cc
|
| +++ b/chrome/browser/webdata/web_data_service.cc
|
| @@ -150,48 +150,35 @@ WebDatabase* WebDataService::GetDatabase() {
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| void WebDataService::AddKeyword(const TemplateURLData& data) {
|
| - GenericRequest<TemplateURLData>* request =
|
| - new GenericRequest<TemplateURLData>(
|
| - this, NULL, &request_manager_, data);
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::AddKeywordImpl, this, request));
|
| + ScheduleDBTask(
|
| + FROM_HERE, Bind(&WebDataService::AddKeywordImpl, this, data));
|
| }
|
|
|
| void WebDataService::RemoveKeyword(TemplateURLID id) {
|
| - GenericRequest<TemplateURLID>* request =
|
| - new GenericRequest<TemplateURLID>(this, NULL, &request_manager_, id);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveKeywordImpl, this, request));
|
| + ScheduleDBTask(
|
| + FROM_HERE, Bind(&WebDataService::RemoveKeywordImpl, this, id));
|
| }
|
|
|
| void WebDataService::UpdateKeyword(const TemplateURLData& data) {
|
| - GenericRequest<TemplateURLData>* request =
|
| - new GenericRequest<TemplateURLData>(
|
| - this, NULL, &request_manager_, data);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::UpdateKeywordImpl, this, request));
|
| + ScheduleDBTask(
|
| + FROM_HERE, Bind(&WebDataService::UpdateKeywordImpl, this, data));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetKeywords(
|
| - WebDataServiceConsumer* consumer) {
|
| - WebDataRequest* request =
|
| - new WebDataRequest(this, consumer, &request_manager_);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetKeywordsImpl, this, request));
|
| - return request->GetHandle();
|
| + WebDataServiceConsumer* consumer) {
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetKeywordsImpl, this), consumer);
|
| }
|
|
|
| void WebDataService::SetDefaultSearchProvider(const TemplateURL* url) {
|
| - GenericRequest<TemplateURLID>* request = new GenericRequest<TemplateURLID>(
|
| - this, NULL, &request_manager_, url ? url->id() : 0);
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::SetDefaultSearchProviderImpl,
|
| - this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::SetDefaultSearchProviderImpl, this,
|
| + url ? url->id() : 0));
|
| }
|
|
|
| void WebDataService::SetBuiltinKeywordVersion(int version) {
|
| - GenericRequest<int>* request = new GenericRequest<int>(
|
| - this, NULL, &request_manager_, version);
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::SetBuiltinKeywordVersionImpl,
|
| - this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::SetBuiltinKeywordVersionImpl, this, version));
|
| }
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
| @@ -202,37 +189,27 @@ void WebDataService::SetBuiltinKeywordVersion(int version) {
|
|
|
| void WebDataService::SetWebAppImage(const GURL& app_url,
|
| const SkBitmap& image) {
|
| - GenericRequest2<GURL, SkBitmap>* request =
|
| - new GenericRequest2<GURL, SkBitmap>(
|
| - this, NULL, &request_manager_, app_url, image);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::SetWebAppImageImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::SetWebAppImageImpl, this, app_url, image));
|
| }
|
|
|
| void WebDataService::SetWebAppHasAllImages(const GURL& app_url,
|
| bool has_all_images) {
|
| - GenericRequest2<GURL, bool>* request =
|
| - new GenericRequest2<GURL, bool>(
|
| - this, NULL, &request_manager_, app_url, has_all_images);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::SetWebAppHasAllImagesImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::SetWebAppHasAllImagesImpl, this, app_url,
|
| + has_all_images));
|
| }
|
|
|
| void WebDataService::RemoveWebApp(const GURL& app_url) {
|
| - GenericRequest<GURL>* request =
|
| - new GenericRequest<GURL>(this, NULL, &request_manager_, app_url);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveWebAppImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveWebAppImpl, this, app_url));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetWebAppImages(
|
| const GURL& app_url,
|
| WebDataServiceConsumer* consumer) {
|
| - GenericRequest<GURL>* request =
|
| - new GenericRequest<GURL>(this, consumer, &request_manager_, app_url);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetWebAppImagesImpl, this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetWebAppImagesImpl, this, app_url), consumer);
|
| }
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
| @@ -242,108 +219,71 @@ WebDataService::Handle WebDataService::GetWebAppImages(
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| void WebDataService::AddWebIntentService(const WebIntentServiceData& service) {
|
| - GenericRequest<WebIntentServiceData>* request =
|
| - new GenericRequest<WebIntentServiceData>(
|
| - this, NULL, &request_manager_, service);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::AddWebIntentServiceImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::AddWebIntentServiceImpl, this, service));
|
| }
|
|
|
| void WebDataService::RemoveWebIntentService(
|
| const WebIntentServiceData& service) {
|
| - GenericRequest<WebIntentServiceData>* request =
|
| - new GenericRequest<WebIntentServiceData>(
|
| - this, NULL, &request_manager_, service);
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::RemoveWebIntentServiceImpl,
|
| - this, request));
|
| + ScheduleDBTask(FROM_HERE, Bind(&WebDataService::RemoveWebIntentServiceImpl,
|
| + this, service));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetWebIntentServicesForAction(
|
| const string16& action,
|
| WebDataServiceConsumer* consumer) {
|
| - DCHECK(consumer);
|
| - GenericRequest<string16>* request =
|
| - new GenericRequest<string16>(
|
| - this, consumer, &request_manager_, action);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetWebIntentServicesImpl, this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetWebIntentServicesImpl, this, action), consumer);
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetWebIntentServicesForURL(
|
| const string16& service_url,
|
| WebDataServiceConsumer* consumer) {
|
| - DCHECK(consumer);
|
| - GenericRequest<string16>* request =
|
| - new GenericRequest<string16>(
|
| - this, consumer, &request_manager_, service_url);
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::GetWebIntentServicesForURLImpl,
|
| - this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetWebIntentServicesForURLImpl, this, service_url),
|
| + consumer);
|
| }
|
|
|
|
|
| WebDataService::Handle WebDataService::GetAllWebIntentServices(
|
| WebDataServiceConsumer* consumer) {
|
| - DCHECK(consumer);
|
| - GenericRequest<std::string>* request =
|
| - new GenericRequest<std::string>(
|
| - this, consumer, &request_manager_, std::string());
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::GetAllWebIntentServicesImpl,
|
| - this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetAllWebIntentServicesImpl, this), consumer);
|
| }
|
|
|
| void WebDataService::AddDefaultWebIntentService(
|
| const DefaultWebIntentService& service) {
|
| - GenericRequest<DefaultWebIntentService>* request =
|
| - new GenericRequest<DefaultWebIntentService>(
|
| - this, NULL, &request_manager_, service);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::AddDefaultWebIntentServiceImpl, this,
|
| - request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::AddDefaultWebIntentServiceImpl, this, service));
|
| }
|
|
|
| void WebDataService::RemoveDefaultWebIntentService(
|
| const DefaultWebIntentService& service) {
|
| - GenericRequest<DefaultWebIntentService>* request =
|
| - new GenericRequest<DefaultWebIntentService>(
|
| - this, NULL, &request_manager_, service);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveDefaultWebIntentServiceImpl, this,
|
| - request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveDefaultWebIntentServiceImpl, this, service));
|
| }
|
|
|
| void WebDataService::RemoveWebIntentServiceDefaults(
|
| const GURL& service_url) {
|
| - GenericRequest<GURL>* request =
|
| - new GenericRequest<GURL>(this, NULL, &request_manager_, service_url);
|
| - ScheduleTask(
|
| - FROM_HERE,
|
| - Bind(&WebDataService::RemoveWebIntentServiceDefaultsImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveWebIntentServiceDefaultsImpl, this,
|
| + service_url));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetDefaultWebIntentServicesForAction(
|
| const string16& action,
|
| WebDataServiceConsumer* consumer) {
|
| - DCHECK(consumer);
|
| - GenericRequest<string16>* request = new GenericRequest<string16>(
|
| - this, consumer, &request_manager_, action);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetDefaultWebIntentServicesForActionImpl,
|
| - this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetDefaultWebIntentServicesForActionImpl, this,
|
| + action),
|
| + consumer);
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetAllDefaultWebIntentServices(
|
| WebDataServiceConsumer* consumer) {
|
| - DCHECK(consumer);
|
| - GenericRequest<std::string>* request = new GenericRequest<std::string>(
|
| - this, consumer, &request_manager_, std::string());
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetAllDefaultWebIntentServicesImpl,
|
| - this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetAllDefaultWebIntentServicesImpl, this),
|
| + consumer);
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -354,31 +294,19 @@ WebDataService::Handle WebDataService::GetAllDefaultWebIntentServices(
|
|
|
| void WebDataService::SetTokenForService(const std::string& service,
|
| const std::string& token) {
|
| - GenericRequest2<std::string, std::string>* request =
|
| - new GenericRequest2<std::string, std::string>(
|
| - this, NULL, &request_manager_, service, token);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::SetTokenForServiceImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::SetTokenForServiceImpl, this, service, token));
|
| }
|
|
|
| void WebDataService::RemoveAllTokens() {
|
| - GenericRequest<std::string>* request =
|
| - new GenericRequest<std::string>(
|
| - this, NULL, &request_manager_, std::string());
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveAllTokensImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE, Bind(&WebDataService::RemoveAllTokensImpl, this));
|
| }
|
|
|
| // Null on failure. Success is WDResult<std::string>
|
| WebDataService::Handle WebDataService::GetAllTokens(
|
| WebDataServiceConsumer* consumer) {
|
| -
|
| - GenericRequest<std::string>* request =
|
| - new GenericRequest<std::string>(
|
| - this, consumer, &request_manager_, std::string());
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetAllTokensImpl, this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetAllTokensImpl, this), consumer);
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -389,132 +317,91 @@ WebDataService::Handle WebDataService::GetAllTokens(
|
|
|
| void WebDataService::AddFormFields(
|
| const std::vector<FormFieldData>& fields) {
|
| - GenericRequest<std::vector<FormFieldData> >* request =
|
| - new GenericRequest<std::vector<FormFieldData> >(
|
| - this, NULL, &request_manager_, fields);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::AddFormElementsImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::AddFormElementsImpl, this, fields));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetFormValuesForElementName(
|
| const string16& name, const string16& prefix, int limit,
|
| WebDataServiceConsumer* consumer) {
|
| - WebDataRequest* request =
|
| - new WebDataRequest(this, consumer, &request_manager_);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetFormValuesForElementNameImpl,
|
| - this, request, name, prefix, limit));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetFormValuesForElementNameImpl,
|
| + this, name, prefix, limit),
|
| + consumer);
|
| }
|
|
|
| void WebDataService::RemoveFormElementsAddedBetween(const Time& delete_begin,
|
| const Time& delete_end) {
|
| - GenericRequest2<Time, Time>* request =
|
| - new GenericRequest2<Time, Time>(
|
| - this, NULL, &request_manager_, delete_begin, delete_end);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveFormElementsAddedBetweenImpl,
|
| - this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveFormElementsAddedBetweenImpl,
|
| + this, delete_begin, delete_end));
|
| }
|
|
|
| void WebDataService::RemoveExpiredFormElements() {
|
| - WebDataRequest* request =
|
| - new WebDataRequest(this, NULL, &request_manager_);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveExpiredFormElementsImpl,
|
| - this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveExpiredFormElementsImpl, this));
|
| }
|
|
|
| void WebDataService::RemoveFormValueForElementName(
|
| const string16& name, const string16& value) {
|
| - GenericRequest2<string16, string16>* request =
|
| - new GenericRequest2<string16, string16>(
|
| - this, NULL, &request_manager_, name, value);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveFormValueForElementNameImpl,
|
| - this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveFormValueForElementNameImpl,
|
| + this, name, value));
|
| }
|
|
|
| void WebDataService::AddAutofillProfile(const AutofillProfile& profile) {
|
| - GenericRequest<AutofillProfile>* request =
|
| - new GenericRequest<AutofillProfile>(
|
| - this, NULL, &request_manager_, profile);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::AddAutofillProfileImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::AddAutofillProfileImpl, this, profile));
|
| }
|
|
|
| void WebDataService::UpdateAutofillProfile(const AutofillProfile& profile) {
|
| - GenericRequest<AutofillProfile>* request =
|
| - new GenericRequest<AutofillProfile>(
|
| - this, NULL, &request_manager_, profile);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::UpdateAutofillProfileImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::UpdateAutofillProfileImpl, this, profile));
|
| }
|
|
|
| void WebDataService::RemoveAutofillProfile(const std::string& guid) {
|
| - GenericRequest<std::string>* request =
|
| - new GenericRequest<std::string>(this, NULL, &request_manager_, guid);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveAutofillProfileImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveAutofillProfileImpl, this, guid));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetAutofillProfiles(
|
| WebDataServiceConsumer* consumer) {
|
| - WebDataRequest* request =
|
| - new WebDataRequest(this, consumer, &request_manager_);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetAutofillProfilesImpl, this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetAutofillProfilesImpl, this), consumer);
|
| }
|
|
|
| void WebDataService::EmptyMigrationTrash(bool notify_sync) {
|
| - GenericRequest<bool>* request =
|
| - new GenericRequest<bool>(this, NULL, &request_manager_, notify_sync);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::EmptyMigrationTrashImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::EmptyMigrationTrashImpl, this, notify_sync));
|
| }
|
|
|
| void WebDataService::AddCreditCard(const CreditCard& credit_card) {
|
| - GenericRequest<CreditCard>* request =
|
| - new GenericRequest<CreditCard>(
|
| - this, NULL, &request_manager_, credit_card);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::AddCreditCardImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::AddCreditCardImpl, this, credit_card));
|
| }
|
|
|
| void WebDataService::UpdateCreditCard(const CreditCard& credit_card) {
|
| - GenericRequest<CreditCard>* request =
|
| - new GenericRequest<CreditCard>(
|
| - this, NULL, &request_manager_, credit_card);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::UpdateCreditCardImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::UpdateCreditCardImpl, this, credit_card));
|
| }
|
|
|
| void WebDataService::RemoveCreditCard(const std::string& guid) {
|
| - GenericRequest<std::string>* request =
|
| - new GenericRequest<std::string>(this, NULL, &request_manager_, guid);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::RemoveCreditCardImpl, this, request));
|
| + ScheduleDBTask(FROM_HERE,
|
| + Bind(&WebDataService::RemoveCreditCardImpl, this, guid));
|
| }
|
|
|
| WebDataService::Handle WebDataService::GetCreditCards(
|
| WebDataServiceConsumer* consumer) {
|
| - WebDataRequest* request =
|
| - new WebDataRequest(this, consumer, &request_manager_);
|
| - ScheduleTask(FROM_HERE,
|
| - Bind(&WebDataService::GetCreditCardsImpl, this, request));
|
| - return request->GetHandle();
|
| + return ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&WebDataService::GetCreditCardsImpl, this), consumer);
|
| }
|
|
|
| void WebDataService::RemoveAutofillProfilesAndCreditCardsModifiedBetween(
|
| const Time& delete_begin,
|
| const Time& delete_end) {
|
| - GenericRequest2<Time, Time>* request =
|
| - new GenericRequest2<Time, Time>(
|
| - this, NULL, &request_manager_, delete_begin, delete_end);
|
| - ScheduleTask(FROM_HERE, Bind(
|
| + ScheduleDBTask(FROM_HERE, Bind(
|
| &WebDataService::RemoveAutofillProfilesAndCreditCardsModifiedBetweenImpl,
|
| - this, request));
|
| + this, delete_begin, delete_end));
|
| }
|
|
|
| WebDataService::~WebDataService() {
|
| @@ -636,90 +523,110 @@ void WebDataService::ScheduleTask(const tracked_objects::Location& from_here,
|
| NOTREACHED() << "Task scheduled after Shutdown()";
|
| }
|
|
|
| -void WebDataService::ScheduleCommit() {
|
| - if (should_commit_ == false) {
|
| - should_commit_ = true;
|
| - ScheduleTask(FROM_HERE, Bind(&WebDataService::Commit, this));
|
| +void WebDataService::ScheduleDBTask(
|
| + const tracked_objects::Location& from_here,
|
| + const base::Closure& task) {
|
| + WebDataRequest* request =
|
| + new WebDataRequest(this, NULL, &request_manager_);
|
| + if (is_running_) {
|
| + BrowserThread::PostTask(BrowserThread::DB, from_here,
|
| + base::Bind(&WebDataService::DBTaskWrapper, this, task, request));
|
| + } else {
|
| + NOTREACHED() << "Task scheduled after Shutdown()";
|
| }
|
| }
|
|
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -//
|
| -// Keywords implementation.
|
| -//
|
| -////////////////////////////////////////////////////////////////////////////////
|
| +WebDataService::Handle WebDataService::ScheduleDBTaskWithResult(
|
| + const tracked_objects::Location& from_here,
|
| + const ResultTask& task,
|
| + WebDataServiceConsumer* consumer) {
|
| + DCHECK(consumer);
|
| + WebDataRequest* request =
|
| + new WebDataRequest(this, consumer, &request_manager_);
|
| + if (is_running_) {
|
| + BrowserThread::PostTask(BrowserThread::DB, from_here,
|
| + base::Bind(&WebDataService::DBResultTaskWrapper, this, task, request));
|
| + } else {
|
| + NOTREACHED() << "Task scheduled after Shutdown()";
|
| + }
|
| + return request->GetHandle();
|
| +}
|
|
|
| -void WebDataService::AddKeywordImpl(GenericRequest<TemplateURLData>* request) {
|
| +void WebDataService::DBTaskWrapper(const base::Closure& task,
|
| + WebDataRequest* request) {
|
| InitializeDatabaseIfNecessary();
|
| if (db_ && !request->IsCancelled()) {
|
| - db_->GetKeywordTable()->AddKeyword(request->arg());
|
| - ScheduleCommit();
|
| + task.Run();
|
| }
|
| request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::RemoveKeywordImpl(GenericRequest<TemplateURLID>* request) {
|
| +void WebDataService::DBResultTaskWrapper(const ResultTask& task,
|
| + WebDataRequest* request) {
|
| InitializeDatabaseIfNecessary();
|
| if (db_ && !request->IsCancelled()) {
|
| - DCHECK(request->arg());
|
| - db_->GetKeywordTable()->RemoveKeyword(request->arg());
|
| - ScheduleCommit();
|
| + request->SetResult(task.Run().Pass());
|
| }
|
| request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::UpdateKeywordImpl(
|
| - GenericRequest<TemplateURLData>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - if (!db_->GetKeywordTable()->UpdateKeyword(request->arg())) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| +void WebDataService::ScheduleCommit() {
|
| + if (should_commit_ == false) {
|
| + should_commit_ = true;
|
| + ScheduleTask(FROM_HERE, Bind(&WebDataService::Commit, this));
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::GetKeywordsImpl(WebDataRequest* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - WDKeywordsResult result;
|
| - db_->GetKeywordTable()->GetKeywords(&result.keywords);
|
| - result.default_search_provider_id =
|
| - db_->GetKeywordTable()->GetDefaultSearchProviderID();
|
| - result.builtin_keyword_version =
|
| - db_->GetKeywordTable()->GetBuiltinKeywordVersion();
|
| - request->SetResult(
|
| - new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result));
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +//
|
| +// Keywords implementation.
|
| +//
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +
|
| +void WebDataService::AddKeywordImpl(const TemplateURLData& data) {
|
| + db_->GetKeywordTable()->AddKeyword(data);
|
| + ScheduleCommit();
|
| +}
|
| +
|
| +void WebDataService::RemoveKeywordImpl(TemplateURLID id) {
|
| + DCHECK(id);
|
| + db_->GetKeywordTable()->RemoveKeyword(id);
|
| + ScheduleCommit();
|
| +}
|
| +
|
| +void WebDataService::UpdateKeywordImpl(const TemplateURLData& data) {
|
| + if (!db_->GetKeywordTable()->UpdateKeyword(data)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| + ScheduleCommit();
|
| }
|
|
|
| -void WebDataService::SetDefaultSearchProviderImpl(
|
| - GenericRequest<TemplateURLID>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - if (!db_->GetKeywordTable()->SetDefaultSearchProviderID(request->arg())) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetKeywordsImpl() {
|
| + WDKeywordsResult result;
|
| + db_->GetKeywordTable()->GetKeywords(&result.keywords);
|
| + result.default_search_provider_id =
|
| + db_->GetKeywordTable()->GetDefaultSearchProviderID();
|
| + result.builtin_keyword_version =
|
| + db_->GetKeywordTable()->GetBuiltinKeywordVersion();
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result));
|
| +}
|
| +
|
| +void WebDataService::SetDefaultSearchProviderImpl(TemplateURLID id) {
|
| + if (!db_->GetKeywordTable()->SetDefaultSearchProviderID(id)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| + ScheduleCommit();
|
| }
|
|
|
| -void WebDataService::SetBuiltinKeywordVersionImpl(
|
| - GenericRequest<int>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - if (!db_->GetKeywordTable()->SetBuiltinKeywordVersion(request->arg())) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| +void WebDataService::SetBuiltinKeywordVersionImpl(int version) {
|
| + if (!db_->GetKeywordTable()->SetBuiltinKeywordVersion(version)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| + ScheduleCommit();
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -729,47 +636,30 @@ void WebDataService::SetBuiltinKeywordVersionImpl(
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| void WebDataService::SetWebAppImageImpl(
|
| - GenericRequest2<GURL, SkBitmap>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - db_->GetWebAppsTable()->SetWebAppImage(
|
| - request->arg1(), request->arg2());
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const GURL& app_url, const SkBitmap& image) {
|
| + db_->GetWebAppsTable()->SetWebAppImage(app_url, image);
|
| + ScheduleCommit();
|
| }
|
|
|
| void WebDataService::SetWebAppHasAllImagesImpl(
|
| - GenericRequest2<GURL, bool>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - db_->GetWebAppsTable()->SetWebAppHasAllImages(request->arg1(),
|
| - request->arg2());
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const GURL& app_url, bool has_all_images) {
|
| + db_->GetWebAppsTable()->SetWebAppHasAllImages(app_url, has_all_images);
|
| + ScheduleCommit();
|
| }
|
|
|
| -void WebDataService::RemoveWebAppImpl(GenericRequest<GURL>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - db_->GetWebAppsTable()->RemoveWebApp(request->arg());
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| +void WebDataService::RemoveWebAppImpl(const GURL& app_url) {
|
| + db_->GetWebAppsTable()->RemoveWebApp(app_url);
|
| + ScheduleCommit();
|
| }
|
|
|
| -void WebDataService::GetWebAppImagesImpl(GenericRequest<GURL>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - WDAppImagesResult result;
|
| - result.has_all_images =
|
| - db_->GetWebAppsTable()->GetWebAppHasAllImages(request->arg());
|
| - db_->GetWebAppsTable()->GetWebAppImages(request->arg(), &result.images);
|
| - request->SetResult(
|
| - new WDResult<WDAppImagesResult>(WEB_APP_IMAGES, result));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetWebAppImagesImpl(
|
| + const GURL& app_url) {
|
| + WDAppImagesResult result;
|
| + result.has_all_images =
|
| + db_->GetWebAppsTable()->GetWebAppHasAllImages(app_url);
|
| + db_->GetWebAppsTable()->GetWebAppImages(app_url, &result.images);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<WDAppImagesResult>(WEB_APP_IMAGES, result));
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -779,126 +669,78 @@ void WebDataService::GetWebAppImagesImpl(GenericRequest<GURL>* request) {
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| void WebDataService::RemoveWebIntentServiceImpl(
|
| - GenericRequest<WebIntentServiceData>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const WebIntentServiceData& service = request->arg();
|
| - db_->GetWebIntentsTable()->RemoveWebIntentService(service);
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const webkit_glue::WebIntentServiceData& service) {
|
| + db_->GetWebIntentsTable()->RemoveWebIntentService(service);
|
| + ScheduleCommit();
|
| }
|
|
|
| void WebDataService::AddWebIntentServiceImpl(
|
| - GenericRequest<WebIntentServiceData>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const WebIntentServiceData& service = request->arg();
|
| - db_->GetWebIntentsTable()->SetWebIntentService(service);
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const webkit_glue::WebIntentServiceData& service) {
|
| + db_->GetWebIntentsTable()->SetWebIntentService(service);
|
| + ScheduleCommit();
|
| }
|
|
|
|
|
| -void WebDataService::GetWebIntentServicesImpl(
|
| - GenericRequest<string16>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<WebIntentServiceData> result;
|
| - db_->GetWebIntentsTable()->GetWebIntentServicesForAction(request->arg(),
|
| - &result);
|
| - request->SetResult(new WDResult<std::vector<WebIntentServiceData> >(
|
| - WEB_INTENTS_RESULT, result));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetWebIntentServicesImpl(
|
| + const string16& action) {
|
| + std::vector<WebIntentServiceData> result;
|
| + db_->GetWebIntentsTable()->GetWebIntentServicesForAction(action, &result);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<WebIntentServiceData> >(
|
| + WEB_INTENTS_RESULT, result));
|
| }
|
|
|
| -void WebDataService::GetWebIntentServicesForURLImpl(
|
| - GenericRequest<string16>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<WebIntentServiceData> result;
|
| - db_->GetWebIntentsTable()->GetWebIntentServicesForURL(
|
| - request->arg(), &result);
|
| - request->SetResult(
|
| - new WDResult<std::vector<WebIntentServiceData> >(
|
| - WEB_INTENTS_RESULT, result));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetWebIntentServicesForURLImpl(
|
| + const string16& service_url) {
|
| + std::vector<WebIntentServiceData> result;
|
| + db_->GetWebIntentsTable()->GetWebIntentServicesForURL(service_url, &result);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<WebIntentServiceData> >(
|
| + WEB_INTENTS_RESULT, result));
|
| }
|
|
|
| -void WebDataService::GetAllWebIntentServicesImpl(
|
| - GenericRequest<std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<WebIntentServiceData> result;
|
| - db_->GetWebIntentsTable()->GetAllWebIntentServices(&result);
|
| - request->SetResult(
|
| - new WDResult<std::vector<WebIntentServiceData> >(
|
| - WEB_INTENTS_RESULT, result));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetAllWebIntentServicesImpl() {
|
| + std::vector<WebIntentServiceData> result;
|
| + db_->GetWebIntentsTable()->GetAllWebIntentServices(&result);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<WebIntentServiceData> >(
|
| + WEB_INTENTS_RESULT, result));
|
| }
|
|
|
| void WebDataService::AddDefaultWebIntentServiceImpl(
|
| - GenericRequest<DefaultWebIntentService>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const DefaultWebIntentService& service = request->arg();
|
| - db_->GetWebIntentsTable()->SetDefaultService(service);
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const DefaultWebIntentService& service) {
|
| + db_->GetWebIntentsTable()->SetDefaultService(service);
|
| + ScheduleCommit();
|
| }
|
|
|
| void WebDataService::RemoveDefaultWebIntentServiceImpl(
|
| - GenericRequest<DefaultWebIntentService>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const DefaultWebIntentService& service = request->arg();
|
| - db_->GetWebIntentsTable()->RemoveDefaultService(service);
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const DefaultWebIntentService& service) {
|
| + db_->GetWebIntentsTable()->RemoveDefaultService(service);
|
| + ScheduleCommit();
|
| }
|
|
|
| void WebDataService::RemoveWebIntentServiceDefaultsImpl(
|
| - GenericRequest<GURL>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const GURL& service_url = request->arg();
|
| - db_->GetWebIntentsTable()->RemoveServiceDefaults(service_url);
|
| - ScheduleCommit();
|
| - }
|
| - request->RequestComplete();
|
| + const GURL& service_url) {
|
| + db_->GetWebIntentsTable()->RemoveServiceDefaults(service_url);
|
| + ScheduleCommit();
|
| }
|
|
|
| -void WebDataService::GetDefaultWebIntentServicesForActionImpl(
|
| - GenericRequest<string16>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<DefaultWebIntentService> result;
|
| - db_->GetWebIntentsTable()->GetDefaultServices(
|
| - request->arg(), &result);
|
| - request->SetResult(
|
| - new WDResult<std::vector<DefaultWebIntentService> >(
|
| - WEB_INTENTS_DEFAULTS_RESULT, result));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult>
|
| + WebDataService::GetDefaultWebIntentServicesForActionImpl(
|
| + const string16& action) {
|
| + std::vector<DefaultWebIntentService> result;
|
| + db_->GetWebIntentsTable()->GetDefaultServices(action, &result);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<DefaultWebIntentService> >(
|
| + WEB_INTENTS_DEFAULTS_RESULT, result));
|
| }
|
|
|
| -void WebDataService::GetAllDefaultWebIntentServicesImpl(
|
| - GenericRequest<std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<DefaultWebIntentService> result;
|
| - db_->GetWebIntentsTable()->GetAllDefaultServices(&result);
|
| - request->SetResult(
|
| - new WDResult<std::vector<DefaultWebIntentService> >(
|
| - WEB_INTENTS_DEFAULTS_RESULT, result));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetAllDefaultWebIntentServicesImpl() {
|
| + std::vector<DefaultWebIntentService> result;
|
| + db_->GetWebIntentsTable()->GetAllDefaultServices(&result);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<DefaultWebIntentService> >(
|
| + WEB_INTENTS_DEFAULTS_RESULT, result));
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -907,41 +749,24 @@ void WebDataService::GetAllDefaultWebIntentServicesImpl(
|
| //
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| -// argument std::string is unused
|
| -void WebDataService::RemoveAllTokensImpl(
|
| - GenericRequest<std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - if (db_->GetTokenServiceTable()->RemoveAllTokens()) {
|
| - ScheduleCommit();
|
| - }
|
| +void WebDataService::RemoveAllTokensImpl() {
|
| + if (db_->GetTokenServiceTable()->RemoveAllTokens()) {
|
| + ScheduleCommit();
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::SetTokenForServiceImpl(
|
| - GenericRequest2<std::string, std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - if (db_->GetTokenServiceTable()->SetTokenForService(
|
| - request->arg1(), request->arg2())) {
|
| - ScheduleCommit();
|
| - }
|
| +void WebDataService::SetTokenForServiceImpl(const std::string& service,
|
| + const std::string& token) {
|
| + if (db_->GetTokenServiceTable()->SetTokenForService(service, token)) {
|
| + ScheduleCommit();
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| -// argument is unused
|
| -void WebDataService::GetAllTokensImpl(
|
| - GenericRequest<std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::map<std::string, std::string> map;
|
| - db_->GetTokenServiceTable()->GetAllTokens(&map);
|
| - request->SetResult(
|
| - new WDResult<std::map<std::string, std::string> >(TOKEN_RESULT, map));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetAllTokensImpl() {
|
| + std::map<std::string, std::string> map;
|
| + db_->GetTokenServiceTable()->GetAllTokens(&map);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::map<std::string, std::string> >(TOKEN_RESULT, map));
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -951,393 +776,305 @@ void WebDataService::GetAllTokensImpl(
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| void WebDataService::AddFormElementsImpl(
|
| - GenericRequest<std::vector<FormFieldData> >* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - AutofillChangeList changes;
|
| - if (!db_->GetAutofillTable()->AddFormFieldValues(
|
| - request->arg(), &changes)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - request->SetResult(
|
| - new WDResult<AutofillChangeList>(AUTOFILL_CHANGES, changes));
|
| - ScheduleCommit();
|
| -
|
| - // Post the notifications including the list of affected keys.
|
| - // This is sent here so that work resulting from this notification will be
|
| - // done on the DB thread, and not the UI thread.
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillChangeList>(&changes));
|
| + const std::vector<FormFieldData>& fields) {
|
| + AutofillChangeList changes;
|
| + if (!db_->GetAutofillTable()->AddFormFieldValues(fields, &changes)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| + ScheduleCommit();
|
|
|
| - request->RequestComplete();
|
| + // Post the notifications including the list of affected keys.
|
| + // This is sent here so that work resulting from this notification will be
|
| + // done on the DB thread, and not the UI thread.
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillChangeList>(&changes));
|
| }
|
|
|
| -void WebDataService::GetFormValuesForElementNameImpl(WebDataRequest* request,
|
| - const string16& name, const string16& prefix, int limit) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<string16> values;
|
| - db_->GetAutofillTable()->GetFormValuesForElementName(
|
| - name, prefix, &values, limit);
|
| - request->SetResult(
|
| - new WDResult<std::vector<string16> >(AUTOFILL_VALUE_RESULT, values));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetFormValuesForElementNameImpl(
|
| + const string16& name, const string16& prefix, int limit) {
|
| + std::vector<string16> values;
|
| + db_->GetAutofillTable()->GetFormValuesForElementName(
|
| + name, prefix, &values, limit);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<string16> >(AUTOFILL_VALUE_RESULT, values));
|
| }
|
|
|
| void WebDataService::RemoveFormElementsAddedBetweenImpl(
|
| - GenericRequest2<Time, Time>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - AutofillChangeList changes;
|
| - if (db_->GetAutofillTable()->RemoveFormElementsAddedBetween(
|
| - request->arg1(), request->arg2(), &changes)) {
|
| - if (!changes.empty()) {
|
| - request->SetResult(
|
| - new WDResult<AutofillChangeList>(AUTOFILL_CHANGES, changes));
|
| -
|
| - // Post the notifications including the list of affected keys.
|
| - // This is sent here so that work resulting from this notification
|
| - // will be done on the DB thread, and not the UI thread.
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillChangeList>(&changes));
|
| - }
|
| - ScheduleCommit();
|
| - }
|
| - }
|
| - request->RequestComplete();
|
| -}
|
| -
|
| -void WebDataService::RemoveExpiredFormElementsImpl(WebDataRequest* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - AutofillChangeList changes;
|
| - if (db_->GetAutofillTable()->RemoveExpiredFormElements(&changes)) {
|
| - if (!changes.empty()) {
|
| - request->SetResult(
|
| - new WDResult<AutofillChangeList>(AUTOFILL_CHANGES, changes));
|
| -
|
| - // Post the notifications including the list of affected keys.
|
| - // This is sent here so that work resulting from this notification
|
| - // will be done on the DB thread, and not the UI thread.
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillChangeList>(&changes));
|
| - }
|
| - ScheduleCommit();
|
| + const base::Time& delete_begin, const base::Time& delete_end) {
|
| + AutofillChangeList changes;
|
| + if (db_->GetAutofillTable()->RemoveFormElementsAddedBetween(
|
| + delete_begin, delete_end, &changes)) {
|
| + if (!changes.empty()) {
|
| + // Post the notifications including the list of affected keys.
|
| + // This is sent here so that work resulting from this notification
|
| + // will be done on the DB thread, and not the UI thread.
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillChangeList>(&changes));
|
| }
|
| + ScheduleCommit();
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::RemoveFormValueForElementNameImpl(
|
| - GenericRequest2<string16, string16>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const string16& name = request->arg1();
|
| - const string16& value = request->arg2();
|
| -
|
| - if (db_->GetAutofillTable()->RemoveFormElement(name, value)) {
|
| - AutofillChangeList changes;
|
| - changes.push_back(AutofillChange(AutofillChange::REMOVE,
|
| - AutofillKey(name, value)));
|
| - request->SetResult(
|
| - new WDResult<AutofillChangeList>(AUTOFILL_CHANGES, changes));
|
| - ScheduleCommit();
|
| +void WebDataService::RemoveExpiredFormElementsImpl() {
|
| + AutofillChangeList changes;
|
|
|
| + if (db_->GetAutofillTable()->RemoveExpiredFormElements(&changes)) {
|
| + if (!changes.empty()) {
|
| // Post the notifications including the list of affected keys.
|
| + // This is sent here so that work resulting from this notification
|
| + // will be done on the DB thread, and not the UI thread.
|
| content::NotificationService::current()->Notify(
|
| chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| content::Source<WebDataService>(this),
|
| content::Details<AutofillChangeList>(&changes));
|
| }
|
| + ScheduleCommit();
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::AddAutofillProfileImpl(
|
| - GenericRequest<AutofillProfile>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const AutofillProfile& profile = request->arg();
|
| - if (!db_->GetAutofillTable()->AddAutofillProfile(profile)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| +void WebDataService::RemoveFormValueForElementNameImpl(
|
| + const string16& name, const string16& value) {
|
| +
|
| + if (db_->GetAutofillTable()->RemoveFormElement(name, value)) {
|
| + AutofillChangeList changes;
|
| + changes.push_back(AutofillChange(AutofillChange::REMOVE,
|
| + AutofillKey(name, value)));
|
| ScheduleCommit();
|
|
|
| - // Send GUID-based notification.
|
| - AutofillProfileChange change(AutofillProfileChange::ADD,
|
| - profile.guid(), &profile);
|
| + // Post the notifications including the list of affected keys.
|
| content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| + chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
|
| content::Source<WebDataService>(this),
|
| - content::Details<AutofillProfileChange>(&change));
|
| + content::Details<AutofillChangeList>(&changes));
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| -void WebDataService::UpdateAutofillProfileImpl(
|
| - GenericRequest<AutofillProfile>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const AutofillProfile& profile = request->arg();
|
| -
|
| - // 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.
|
| - AutofillProfile* original_profile = NULL;
|
| - if (!db_->GetAutofillTable()->GetAutofillProfile(profile.guid(),
|
| - &original_profile)) {
|
| - request->RequestComplete();
|
| - return;
|
| - }
|
| - scoped_ptr<AutofillProfile> scoped_profile(original_profile);
|
| +void WebDataService::AddAutofillProfileImpl(const AutofillProfile& profile) {
|
| + if (!db_->GetAutofillTable()->AddAutofillProfile(profile)) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + ScheduleCommit();
|
|
|
| - if (!db_->GetAutofillTable()->UpdateAutofillProfileMulti(profile)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| + // Send GUID-based notification.
|
| + AutofillProfileChange change(AutofillProfileChange::ADD,
|
| + profile.guid(), &profile);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillProfileChange>(&change));
|
| +}
|
|
|
| - // Send GUID-based notification.
|
| - AutofillProfileChange change(AutofillProfileChange::UPDATE,
|
| - profile.guid(), &profile);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillProfileChange>(&change));
|
| +void WebDataService::UpdateAutofillProfileImpl(const AutofillProfile& profile) {
|
| + // 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.
|
| + AutofillProfile* original_profile = NULL;
|
| + if (!db_->GetAutofillTable()->GetAutofillProfile(profile.guid(),
|
| + &original_profile)) {
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| -}
|
| + scoped_ptr<AutofillProfile> scoped_profile(original_profile);
|
|
|
| -void WebDataService::RemoveAutofillProfileImpl(
|
| - GenericRequest<std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const std::string& guid = request->arg();
|
| + if (!db_->GetAutofillTable()->UpdateAutofillProfileMulti(profile)) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + ScheduleCommit();
|
|
|
| - AutofillProfile* profile = NULL;
|
| - if (!db_->GetAutofillTable()->GetAutofillProfile(guid, &profile)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - scoped_ptr<AutofillProfile> scoped_profile(profile);
|
| + // Send GUID-based notification.
|
| + AutofillProfileChange change(AutofillProfileChange::UPDATE,
|
| + profile.guid(), &profile);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillProfileChange>(&change));
|
| +}
|
|
|
| - if (!db_->GetAutofillTable()->RemoveAutofillProfile(guid)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| +void WebDataService::RemoveAutofillProfileImpl(const std::string& guid) {
|
| + AutofillProfile* profile = NULL;
|
| + if (!db_->GetAutofillTable()->GetAutofillProfile(guid, &profile)) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + scoped_ptr<AutofillProfile> scoped_profile(profile);
|
|
|
| - // Send GUID-based notification.
|
| - AutofillProfileChange change(AutofillProfileChange::REMOVE, guid, NULL);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillProfileChange>(&change));
|
| + if (!db_->GetAutofillTable()->RemoveAutofillProfile(guid)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| + ScheduleCommit();
|
| +
|
| + // Send GUID-based notification.
|
| + AutofillProfileChange change(AutofillProfileChange::REMOVE, guid, NULL);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillProfileChange>(&change));
|
| }
|
|
|
| -void WebDataService::GetAutofillProfilesImpl(WebDataRequest* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<AutofillProfile*> profiles;
|
| - db_->GetAutofillTable()->GetAutofillProfiles(&profiles);
|
| - request->SetResult(
|
| - new WDResult<std::vector<AutofillProfile*> >(AUTOFILL_PROFILES_RESULT,
|
| - base::Bind(&WebDataService::DestroyAutofillProfileResult,
|
| - base::Unretained(this)), profiles));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetAutofillProfilesImpl() {
|
| + std::vector<AutofillProfile*> profiles;
|
| + db_->GetAutofillTable()->GetAutofillProfiles(&profiles);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<AutofillProfile*> >(
|
| + AUTOFILL_PROFILES_RESULT,
|
| + base::Bind(&WebDataService::DestroyAutofillProfileResult,
|
| + base::Unretained(this)),
|
| + profiles));
|
| }
|
|
|
| -void WebDataService::EmptyMigrationTrashImpl(
|
| - GenericRequest<bool>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - bool notify_sync = request->arg();
|
| - if (notify_sync) {
|
| - std::vector<std::string> guids;
|
| - if (!db_->GetAutofillTable()->GetAutofillProfilesInTrash(&guids)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| +void WebDataService::EmptyMigrationTrashImpl(bool notify_sync) {
|
| + if (notify_sync) {
|
| + std::vector<std::string> guids;
|
| + if (!db_->GetAutofillTable()->GetAutofillProfilesInTrash(&guids)) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
|
|
| - for (std::vector<std::string>::const_iterator iter = guids.begin();
|
| - iter != guids.end(); ++iter) {
|
| - // Send GUID-based notification.
|
| - AutofillProfileChange change(AutofillProfileChange::REMOVE,
|
| - *iter, NULL);
|
| + for (std::vector<std::string>::const_iterator iter = guids.begin();
|
| + iter != guids.end(); ++iter) {
|
| + // Send GUID-based notification.
|
| + AutofillProfileChange change(AutofillProfileChange::REMOVE,
|
| + *iter, NULL);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillProfileChange>(&change));
|
| + }
|
| +
|
| + // If we trashed any profiles they may have been merged, so send out
|
| + // update notifications as well.
|
| + if (!guids.empty()) {
|
| + std::vector<AutofillProfile*> profiles;
|
| + db_->GetAutofillTable()->GetAutofillProfiles(&profiles);
|
| + for (std::vector<AutofillProfile*>::const_iterator
|
| + iter = profiles.begin();
|
| + iter != profiles.end(); ++iter) {
|
| + AutofillProfileChange change(AutofillProfileChange::UPDATE,
|
| + (*iter)->guid(), *iter);
|
| content::NotificationService::current()->Notify(
|
| chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| content::Source<WebDataService>(this),
|
| content::Details<AutofillProfileChange>(&change));
|
| }
|
| -
|
| - // If we trashed any profiles they may have been merged, so send out
|
| - // update notifications as well.
|
| - if (!guids.empty()) {
|
| - std::vector<AutofillProfile*> profiles;
|
| - db_->GetAutofillTable()->GetAutofillProfiles(&profiles);
|
| - for (std::vector<AutofillProfile*>::const_iterator
|
| - iter = profiles.begin();
|
| - iter != profiles.end(); ++iter) {
|
| - AutofillProfileChange change(AutofillProfileChange::UPDATE,
|
| - (*iter)->guid(), *iter);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillProfileChange>(&change));
|
| - }
|
| - STLDeleteElements(&profiles);
|
| - }
|
| + STLDeleteElements(&profiles);
|
| }
|
| + }
|
|
|
| - if (!db_->GetAutofillTable()->EmptyAutofillProfilesTrash()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| + if (!db_->GetAutofillTable()->EmptyAutofillProfilesTrash()) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| + ScheduleCommit();
|
| }
|
|
|
| -void WebDataService::AddCreditCardImpl(
|
| - GenericRequest<CreditCard>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const CreditCard& credit_card = request->arg();
|
| - if (!db_->GetAutofillTable()->AddCreditCard(credit_card)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| -
|
| - // Send GUID-based notification.
|
| - AutofillCreditCardChange change(AutofillCreditCardChange::ADD,
|
| - credit_card.guid(), &credit_card);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillCreditCardChange>(&change));
|
| +void WebDataService::AddCreditCardImpl(const CreditCard& credit_card) {
|
| + if (!db_->GetAutofillTable()->AddCreditCard(credit_card)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| -}
|
| + ScheduleCommit();
|
|
|
| -void WebDataService::UpdateCreditCardImpl(
|
| - GenericRequest<CreditCard>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const CreditCard& credit_card = request->arg();
|
| -
|
| - // 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;
|
| - if (!db_->GetAutofillTable()->GetCreditCard(credit_card.guid(),
|
| - &original_credit_card)) {
|
| - request->RequestComplete();
|
| - return;
|
| - }
|
| - scoped_ptr<CreditCard> scoped_credit_card(original_credit_card);
|
| + // Send GUID-based notification.
|
| + AutofillCreditCardChange change(AutofillCreditCardChange::ADD,
|
| + credit_card.guid(), &credit_card);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillCreditCardChange>(&change));
|
| +}
|
|
|
| - if (!db_->GetAutofillTable()->UpdateCreditCard(credit_card)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| +void WebDataService::UpdateCreditCardImpl(const CreditCard& credit_card) {
|
| + // 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;
|
| + if (!db_->GetAutofillTable()->GetCreditCard(credit_card.guid(),
|
| + &original_credit_card)) {
|
| + return;
|
| + }
|
| + scoped_ptr<CreditCard> scoped_credit_card(original_credit_card);
|
|
|
| - // Send GUID-based notification.
|
| - AutofillCreditCardChange change(AutofillCreditCardChange::UPDATE,
|
| - credit_card.guid(), &credit_card);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillCreditCardChange>(&change));
|
| + if (!db_->GetAutofillTable()->UpdateCreditCard(credit_card)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| -}
|
| + ScheduleCommit();
|
|
|
| -void WebDataService::RemoveCreditCardImpl(
|
| - GenericRequest<std::string>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - const std::string& guid = request->arg();
|
| - if (!db_->GetAutofillTable()->RemoveCreditCard(guid)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - ScheduleCommit();
|
| + // Send GUID-based notification.
|
| + AutofillCreditCardChange change(AutofillCreditCardChange::UPDATE,
|
| + credit_card.guid(), &credit_card);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillCreditCardChange>(&change));
|
| +}
|
|
|
| - // Send GUID-based notification.
|
| - AutofillCreditCardChange change(AutofillCreditCardChange::REMOVE, guid,
|
| - NULL);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillCreditCardChange>(&change));
|
| +void WebDataService::RemoveCreditCardImpl(const std::string& guid) {
|
| + if (!db_->GetAutofillTable()->RemoveCreditCard(guid)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - request->RequestComplete();
|
| + ScheduleCommit();
|
| +
|
| + // Send GUID-based notification.
|
| + AutofillCreditCardChange change(AutofillCreditCardChange::REMOVE, guid,
|
| + NULL);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillCreditCardChange>(&change));
|
| }
|
|
|
| -void WebDataService::GetCreditCardsImpl(WebDataRequest* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<CreditCard*> credit_cards;
|
| - db_->GetAutofillTable()->GetCreditCards(&credit_cards);
|
| - request->SetResult(
|
| - new WDResult<std::vector<CreditCard*> >(AUTOFILL_CREDITCARDS_RESULT,
|
| - base::Bind(&WebDataService::DestroyAutofillCreditCardResult,
|
| - base::Unretained(this)), credit_cards));
|
| - }
|
| - request->RequestComplete();
|
| +scoped_ptr<WDTypedResult> WebDataService::GetCreditCardsImpl() {
|
| + std::vector<CreditCard*> credit_cards;
|
| + db_->GetAutofillTable()->GetCreditCards(&credit_cards);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::vector<CreditCard*> >(
|
| + AUTOFILL_CREDITCARDS_RESULT,
|
| + base::Bind(&WebDataService::DestroyAutofillCreditCardResult,
|
| + base::Unretained(this)),
|
| + credit_cards));
|
| }
|
|
|
| void WebDataService::RemoveAutofillProfilesAndCreditCardsModifiedBetweenImpl(
|
| - GenericRequest2<Time, Time>* request) {
|
| - InitializeDatabaseIfNecessary();
|
| - if (db_ && !request->IsCancelled()) {
|
| - std::vector<std::string> profile_guids;
|
| - std::vector<std::string> credit_card_guids;
|
| - if (db_->GetAutofillTable()->
|
| - RemoveAutofillProfilesAndCreditCardsModifiedBetween(
|
| - request->arg1(),
|
| - request->arg2(),
|
| - &profile_guids,
|
| - &credit_card_guids)) {
|
| - for (std::vector<std::string>::iterator iter = profile_guids.begin();
|
| - iter != profile_guids.end(); ++iter) {
|
| - AutofillProfileChange change(AutofillProfileChange::REMOVE, *iter,
|
| - NULL);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillProfileChange>(&change));
|
| - }
|
| + const base::Time& delete_begin, const base::Time& delete_end) {
|
| + std::vector<std::string> profile_guids;
|
| + std::vector<std::string> credit_card_guids;
|
| + if (db_->GetAutofillTable()->
|
| + RemoveAutofillProfilesAndCreditCardsModifiedBetween(
|
| + delete_begin,
|
| + delete_end,
|
| + &profile_guids,
|
| + &credit_card_guids)) {
|
| + for (std::vector<std::string>::iterator iter = profile_guids.begin();
|
| + iter != profile_guids.end(); ++iter) {
|
| + AutofillProfileChange change(AutofillProfileChange::REMOVE, *iter,
|
| + NULL);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillProfileChange>(&change));
|
| + }
|
|
|
| - for (std::vector<std::string>::iterator iter = credit_card_guids.begin();
|
| - iter != credit_card_guids.end(); ++iter) {
|
| - AutofillCreditCardChange change(AutofillCreditCardChange::REMOVE,
|
| - *iter, NULL);
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| - content::Source<WebDataService>(this),
|
| - content::Details<AutofillCreditCardChange>(&change));
|
| - }
|
| - // Note: It is the caller's responsibility to post notifications for any
|
| - // changes, e.g. by calling the Refresh() method of PersonalDataManager.
|
| - ScheduleCommit();
|
| + for (std::vector<std::string>::iterator iter = credit_card_guids.begin();
|
| + iter != credit_card_guids.end(); ++iter) {
|
| + AutofillCreditCardChange change(AutofillCreditCardChange::REMOVE,
|
| + *iter, NULL);
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
|
| + content::Source<WebDataService>(this),
|
| + content::Details<AutofillCreditCardChange>(&change));
|
| }
|
| + // Note: It is the caller's responsibility to post notifications for any
|
| + // changes, e.g. by calling the Refresh() method of PersonalDataManager.
|
| + ScheduleCommit();
|
| }
|
| - request->RequestComplete();
|
| }
|
|
|
| AutofillProfileSyncableService*
|
|
|