Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: components/autofill/browser/personal_data_manager.cc

Issue 12851008: Create a common base class for all the webdatas (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix upstream branch Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/autofill/browser/personal_data_manager.h" 5 #include "components/autofill/browser/personal_data_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <iterator> 9 #include <iterator>
10 10
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 is_data_loaded_(false), 114 is_data_loaded_(false),
115 pending_profiles_query_(0), 115 pending_profiles_query_(0),
116 pending_creditcards_query_(0), 116 pending_creditcards_query_(0),
117 metric_logger_(new AutofillMetrics), 117 metric_logger_(new AutofillMetrics),
118 has_logged_profile_count_(false) {} 118 has_logged_profile_count_(false) {}
119 119
120 void PersonalDataManager::Init(BrowserContext* browser_context) { 120 void PersonalDataManager::Init(BrowserContext* browser_context) {
121 browser_context_ = browser_context; 121 browser_context_ = browser_context;
122 metric_logger_->LogIsAutofillEnabledAtStartup(IsAutofillEnabled()); 122 metric_logger_->LogIsAutofillEnabledAtStartup(IsAutofillEnabled());
123 123
124 scoped_ptr<AutofillWebDataService> autofill_data( 124 scoped_refptr<AutofillWebDataService> autofill_data(
125 AutofillWebDataService::FromBrowserContext(browser_context_)); 125 AutofillWebDataService::FromBrowserContext(browser_context_));
126 126
127 // WebDataService may not be available in tests. 127 // WebDataService may not be available in tests.
128 if (!autofill_data.get()) 128 if (!autofill_data.get())
129 return; 129 return;
130 130
131 LoadProfiles(); 131 LoadProfiles();
132 LoadCreditCards(); 132 LoadCreditCards();
133 133
134 notification_registrar_.Add( 134 notification_registrar_.Add(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 PersonalDataManagerObserver* observer) { 190 PersonalDataManagerObserver* observer) {
191 observers_.RemoveObserver(observer); 191 observers_.RemoveObserver(observer);
192 } 192 }
193 193
194 void PersonalDataManager::Observe(int type, 194 void PersonalDataManager::Observe(int type,
195 const content::NotificationSource& source, 195 const content::NotificationSource& source,
196 const content::NotificationDetails& details) { 196 const content::NotificationDetails& details) {
197 DCHECK_EQ(type, chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED); 197 DCHECK_EQ(type, chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED);
198 198
199 if (DCHECK_IS_ON()) { 199 if (DCHECK_IS_ON()) {
200 scoped_ptr<AutofillWebDataService> autofill_data( 200 scoped_refptr<AutofillWebDataService> autofill_data(
201 AutofillWebDataService::FromBrowserContext(browser_context_)); 201 AutofillWebDataService::FromBrowserContext(browser_context_));
202 202
203 DCHECK(autofill_data.get() && 203 DCHECK(autofill_data.get() &&
204 autofill_data->GetNotificationSource() == source); 204 autofill_data->GetNotificationSource() == source);
205 } 205 }
206 206
207 Refresh(); 207 Refresh();
208 } 208 }
209 209
210 bool PersonalDataManager::ImportFormData( 210 bool PersonalDataManager::ImportFormData(
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 if (browser_context_->IsOffTheRecord()) 330 if (browser_context_->IsOffTheRecord())
331 return; 331 return;
332 332
333 if (profile.IsEmpty()) 333 if (profile.IsEmpty())
334 return; 334 return;
335 335
336 // Don't add an existing profile. 336 // Don't add an existing profile.
337 if (FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) 337 if (FindByGUID<AutofillProfile>(web_profiles_, profile.guid()))
338 return; 338 return;
339 339
340 scoped_ptr<AutofillWebDataService> autofill_data( 340 scoped_refptr<AutofillWebDataService> autofill_data(
341 AutofillWebDataService::FromBrowserContext(browser_context_)); 341 AutofillWebDataService::FromBrowserContext(browser_context_));
342 if (!autofill_data.get()) 342 if (!autofill_data.get())
343 return; 343 return;
344 344
345 // Don't add a duplicate. 345 // Don't add a duplicate.
346 if (FindByContents(web_profiles_, profile)) 346 if (FindByContents(web_profiles_, profile))
347 return; 347 return;
348 348
349 // Add the new profile to the web database. 349 // Add the new profile to the web database.
350 autofill_data->AddAutofillProfile(profile); 350 autofill_data->AddAutofillProfile(profile);
351 351
352 // Refresh our local cache and send notifications to observers. 352 // Refresh our local cache and send notifications to observers.
353 Refresh(); 353 Refresh();
354 } 354 }
355 355
356 void PersonalDataManager::UpdateProfile(const AutofillProfile& profile) { 356 void PersonalDataManager::UpdateProfile(const AutofillProfile& profile) {
357 if (browser_context_->IsOffTheRecord()) 357 if (browser_context_->IsOffTheRecord())
358 return; 358 return;
359 359
360 if (!FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) 360 if (!FindByGUID<AutofillProfile>(web_profiles_, profile.guid()))
361 return; 361 return;
362 362
363 if (profile.IsEmpty()) { 363 if (profile.IsEmpty()) {
364 RemoveByGUID(profile.guid()); 364 RemoveByGUID(profile.guid());
365 return; 365 return;
366 } 366 }
367 367
368 scoped_ptr<AutofillWebDataService> autofill_data( 368 scoped_refptr<AutofillWebDataService> autofill_data(
369 AutofillWebDataService::FromBrowserContext(browser_context_)); 369 AutofillWebDataService::FromBrowserContext(browser_context_));
370 if (!autofill_data.get()) 370 if (!autofill_data.get())
371 return; 371 return;
372 372
373 // Make the update. 373 // Make the update.
374 autofill_data->UpdateAutofillProfile(profile); 374 autofill_data->UpdateAutofillProfile(profile);
375 375
376 // Refresh our local cache and send notifications to observers. 376 // Refresh our local cache and send notifications to observers.
377 Refresh(); 377 Refresh();
378 } 378 }
(...skipping 12 matching lines...) Expand all
391 void PersonalDataManager::AddCreditCard(const CreditCard& credit_card) { 391 void PersonalDataManager::AddCreditCard(const CreditCard& credit_card) {
392 if (browser_context_->IsOffTheRecord()) 392 if (browser_context_->IsOffTheRecord())
393 return; 393 return;
394 394
395 if (credit_card.IsEmpty()) 395 if (credit_card.IsEmpty())
396 return; 396 return;
397 397
398 if (FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) 398 if (FindByGUID<CreditCard>(credit_cards_, credit_card.guid()))
399 return; 399 return;
400 400
401 scoped_ptr<AutofillWebDataService> autofill_data( 401 scoped_refptr<AutofillWebDataService> autofill_data(
402 AutofillWebDataService::FromBrowserContext(browser_context_)); 402 AutofillWebDataService::FromBrowserContext(browser_context_));
403 if (!autofill_data.get()) 403 if (!autofill_data.get())
404 return; 404 return;
405 405
406 // Don't add a duplicate. 406 // Don't add a duplicate.
407 if (FindByContents(credit_cards_, credit_card)) 407 if (FindByContents(credit_cards_, credit_card))
408 return; 408 return;
409 409
410 // Add the new credit card to the web database. 410 // Add the new credit card to the web database.
411 autofill_data->AddCreditCard(credit_card); 411 autofill_data->AddCreditCard(credit_card);
412 412
413 // Refresh our local cache and send notifications to observers. 413 // Refresh our local cache and send notifications to observers.
414 Refresh(); 414 Refresh();
415 } 415 }
416 416
417 void PersonalDataManager::UpdateCreditCard(const CreditCard& credit_card) { 417 void PersonalDataManager::UpdateCreditCard(const CreditCard& credit_card) {
418 if (browser_context_->IsOffTheRecord()) 418 if (browser_context_->IsOffTheRecord())
419 return; 419 return;
420 420
421 if (!FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) 421 if (!FindByGUID<CreditCard>(credit_cards_, credit_card.guid()))
422 return; 422 return;
423 423
424 if (credit_card.IsEmpty()) { 424 if (credit_card.IsEmpty()) {
425 RemoveByGUID(credit_card.guid()); 425 RemoveByGUID(credit_card.guid());
426 return; 426 return;
427 } 427 }
428 428
429 scoped_ptr<AutofillWebDataService> autofill_data( 429 scoped_refptr<AutofillWebDataService> autofill_data(
430 AutofillWebDataService::FromBrowserContext(browser_context_)); 430 AutofillWebDataService::FromBrowserContext(browser_context_));
431 if (!autofill_data.get()) 431 if (!autofill_data.get())
432 return; 432 return;
433 433
434 // Make the update. 434 // Make the update.
435 autofill_data->UpdateCreditCard(credit_card); 435 autofill_data->UpdateCreditCard(credit_card);
436 436
437 // Refresh our local cache and send notifications to observers. 437 // Refresh our local cache and send notifications to observers.
438 Refresh(); 438 Refresh();
439 } 439 }
440 440
441 void PersonalDataManager::RemoveByGUID(const std::string& guid) { 441 void PersonalDataManager::RemoveByGUID(const std::string& guid) {
442 if (browser_context_->IsOffTheRecord()) 442 if (browser_context_->IsOffTheRecord())
443 return; 443 return;
444 444
445 bool is_credit_card = FindByGUID<CreditCard>(credit_cards_, guid); 445 bool is_credit_card = FindByGUID<CreditCard>(credit_cards_, guid);
446 bool is_profile = !is_credit_card && 446 bool is_profile = !is_credit_card &&
447 FindByGUID<AutofillProfile>(web_profiles_, guid); 447 FindByGUID<AutofillProfile>(web_profiles_, guid);
448 if (!is_credit_card && !is_profile) 448 if (!is_credit_card && !is_profile)
449 return; 449 return;
450 450
451 scoped_ptr<AutofillWebDataService> autofill_data( 451 scoped_refptr<AutofillWebDataService> autofill_data(
452 AutofillWebDataService::FromBrowserContext(browser_context_)); 452 AutofillWebDataService::FromBrowserContext(browser_context_));
453 if (!autofill_data.get()) 453 if (!autofill_data.get())
454 return; 454 return;
455 455
456 if (is_credit_card) 456 if (is_credit_card)
457 autofill_data->RemoveCreditCard(guid); 457 autofill_data->RemoveCreditCard(guid);
458 else 458 else
459 autofill_data->RemoveAutofillProfile(guid); 459 autofill_data->RemoveAutofillProfile(guid);
460 460
461 // Refresh our local cache and send notifications to observers. 461 // Refresh our local cache and send notifications to observers.
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 713
714 // Ensure that profile labels are up to date. Currently, sync relies on 714 // Ensure that profile labels are up to date. Currently, sync relies on
715 // labels to identify a profile. 715 // labels to identify a profile.
716 // TODO(dhollowa): We need to deprecate labels and update the way sync 716 // TODO(dhollowa): We need to deprecate labels and update the way sync
717 // identifies profiles. 717 // identifies profiles.
718 std::vector<AutofillProfile*> profile_pointers(profiles->size()); 718 std::vector<AutofillProfile*> profile_pointers(profiles->size());
719 std::transform(profiles->begin(), profiles->end(), profile_pointers.begin(), 719 std::transform(profiles->begin(), profiles->end(), profile_pointers.begin(),
720 address_of<AutofillProfile>); 720 address_of<AutofillProfile>);
721 AutofillProfile::AdjustInferredLabels(&profile_pointers); 721 AutofillProfile::AdjustInferredLabels(&profile_pointers);
722 722
723 scoped_ptr<AutofillWebDataService> autofill_data( 723 scoped_refptr<AutofillWebDataService> autofill_data(
724 AutofillWebDataService::FromBrowserContext(browser_context_)); 724 AutofillWebDataService::FromBrowserContext(browser_context_));
725 if (!autofill_data.get()) 725 if (!autofill_data.get())
726 return; 726 return;
727 727
728 // Any profiles that are not in the new profile list should be removed from 728 // Any profiles that are not in the new profile list should be removed from
729 // the web database. 729 // the web database.
730 for (std::vector<AutofillProfile*>::const_iterator iter = 730 for (std::vector<AutofillProfile*>::const_iterator iter =
731 web_profiles_.begin(); 731 web_profiles_.begin();
732 iter != web_profiles_.end(); ++iter) { 732 iter != web_profiles_.end(); ++iter) {
733 if (!FindByGUID<AutofillProfile>(*profiles, (*iter)->guid())) 733 if (!FindByGUID<AutofillProfile>(*profiles, (*iter)->guid()))
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 if (browser_context_->IsOffTheRecord()) 765 if (browser_context_->IsOffTheRecord())
766 return; 766 return;
767 767
768 // Remove empty credit cards from input. 768 // Remove empty credit cards from input.
769 credit_cards->erase( 769 credit_cards->erase(
770 std::remove_if( 770 std::remove_if(
771 credit_cards->begin(), credit_cards->end(), 771 credit_cards->begin(), credit_cards->end(),
772 std::mem_fun_ref(&CreditCard::IsEmpty)), 772 std::mem_fun_ref(&CreditCard::IsEmpty)),
773 credit_cards->end()); 773 credit_cards->end());
774 774
775 scoped_ptr<AutofillWebDataService> autofill_data( 775 scoped_refptr<AutofillWebDataService> autofill_data(
776 AutofillWebDataService::FromBrowserContext(browser_context_)); 776 AutofillWebDataService::FromBrowserContext(browser_context_));
777 if (!autofill_data.get()) 777 if (!autofill_data.get())
778 return; 778 return;
779 779
780 // Any credit cards that are not in the new credit card list should be 780 // Any credit cards that are not in the new credit card list should be
781 // removed. 781 // removed.
782 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin(); 782 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin();
783 iter != credit_cards_.end(); ++iter) { 783 iter != credit_cards_.end(); ++iter) {
784 if (!FindByGUID<CreditCard>(*credit_cards, (*iter)->guid())) 784 if (!FindByGUID<CreditCard>(*credit_cards, (*iter)->guid()))
785 autofill_data->RemoveCreditCard((*iter)->guid()); 785 autofill_data->RemoveCreditCard((*iter)->guid());
(...skipping 19 matching lines...) Expand all
805 for (std::vector<CreditCard>::iterator iter = credit_cards->begin(); 805 for (std::vector<CreditCard>::iterator iter = credit_cards->begin();
806 iter != credit_cards->end(); ++iter) { 806 iter != credit_cards->end(); ++iter) {
807 credit_cards_.push_back(new CreditCard(*iter)); 807 credit_cards_.push_back(new CreditCard(*iter));
808 } 808 }
809 809
810 // Refresh our local cache and send notifications to observers. 810 // Refresh our local cache and send notifications to observers.
811 Refresh(); 811 Refresh();
812 } 812 }
813 813
814 void PersonalDataManager::LoadProfiles() { 814 void PersonalDataManager::LoadProfiles() {
815 scoped_ptr<AutofillWebDataService> autofill_data( 815 scoped_refptr<AutofillWebDataService> autofill_data(
816 AutofillWebDataService::FromBrowserContext(browser_context_)); 816 AutofillWebDataService::FromBrowserContext(browser_context_));
817 if (!autofill_data.get()) { 817 if (!autofill_data.get()) {
818 NOTREACHED(); 818 NOTREACHED();
819 return; 819 return;
820 } 820 }
821 821
822 CancelPendingQuery(&pending_profiles_query_); 822 CancelPendingQuery(&pending_profiles_query_);
823 823
824 pending_profiles_query_ = autofill_data->GetAutofillProfiles(this); 824 pending_profiles_query_ = autofill_data->GetAutofillProfiles(this);
825 } 825 }
826 826
827 // Win and Linux implementations do nothing. Mac implementation fills in the 827 // Win and Linux implementations do nothing. Mac implementation fills in the
828 // contents of |auxiliary_profiles_|. 828 // contents of |auxiliary_profiles_|.
829 #if !defined(OS_MACOSX) 829 #if !defined(OS_MACOSX)
830 void PersonalDataManager::LoadAuxiliaryProfiles() { 830 void PersonalDataManager::LoadAuxiliaryProfiles() {
831 } 831 }
832 #endif 832 #endif
833 833
834 void PersonalDataManager::LoadCreditCards() { 834 void PersonalDataManager::LoadCreditCards() {
835 scoped_ptr<AutofillWebDataService> autofill_data( 835 scoped_refptr<AutofillWebDataService> autofill_data(
836 AutofillWebDataService::FromBrowserContext(browser_context_)); 836 AutofillWebDataService::FromBrowserContext(browser_context_));
837 if (!autofill_data.get()) { 837 if (!autofill_data.get()) {
838 NOTREACHED(); 838 NOTREACHED();
839 return; 839 return;
840 } 840 }
841 841
842 CancelPendingQuery(&pending_creditcards_query_); 842 CancelPendingQuery(&pending_creditcards_query_);
843 843
844 pending_creditcards_query_ = autofill_data->GetCreditCards(this); 844 pending_creditcards_query_ = autofill_data->GetCreditCards(this);
845 } 845 }
(...skipping 30 matching lines...) Expand all
876 std::vector<CreditCard*> credit_cards = r->GetValue(); 876 std::vector<CreditCard*> credit_cards = r->GetValue();
877 for (std::vector<CreditCard*>::iterator iter = credit_cards.begin(); 877 for (std::vector<CreditCard*>::iterator iter = credit_cards.begin();
878 iter != credit_cards.end(); ++iter) { 878 iter != credit_cards.end(); ++iter) {
879 credit_cards_.push_back(*iter); 879 credit_cards_.push_back(*iter);
880 } 880 }
881 } 881 }
882 882
883 void PersonalDataManager::CancelPendingQuery( 883 void PersonalDataManager::CancelPendingQuery(
884 WebDataServiceBase::Handle* handle) { 884 WebDataServiceBase::Handle* handle) {
885 if (*handle) { 885 if (*handle) {
886 scoped_ptr<AutofillWebDataService> autofill_data( 886 scoped_refptr<AutofillWebDataService> autofill_data(
887 AutofillWebDataService::FromBrowserContext(browser_context_)); 887 AutofillWebDataService::FromBrowserContext(browser_context_));
888 if (!autofill_data.get()) { 888 if (!autofill_data.get()) {
889 NOTREACHED(); 889 NOTREACHED();
890 return; 890 return;
891 } 891 }
892 autofill_data->CancelRequest(*handle); 892 autofill_data->CancelRequest(*handle);
893 } 893 }
894 *handle = 0; 894 *handle = 0;
895 } 895 }
896 896
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 963
964 void PersonalDataManager::set_metric_logger( 964 void PersonalDataManager::set_metric_logger(
965 const AutofillMetrics* metric_logger) { 965 const AutofillMetrics* metric_logger) {
966 metric_logger_.reset(metric_logger); 966 metric_logger_.reset(metric_logger);
967 } 967 }
968 968
969 void PersonalDataManager::set_browser_context( 969 void PersonalDataManager::set_browser_context(
970 content::BrowserContext* context) { 970 content::BrowserContext* context) {
971 browser_context_ = context; 971 browser_context_ = context;
972 } 972 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698