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

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

Issue 71683003: Have AutofillManagerDelegate supply the AutofillWebDataService to core code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 1 month 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 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/core/browser/personal_data_manager.h" 5 #include "components/autofill/core/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
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/prefs/pref_service.h" 13 #include "base/prefs/pref_service.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "components/autofill/core/browser/autofill-inl.h" 17 #include "components/autofill/core/browser/autofill-inl.h"
18 #include "components/autofill/core/browser/autofill_country.h" 18 #include "components/autofill/core/browser/autofill_country.h"
19 #include "components/autofill/core/browser/autofill_field.h" 19 #include "components/autofill/core/browser/autofill_field.h"
20 #include "components/autofill/core/browser/autofill_metrics.h" 20 #include "components/autofill/core/browser/autofill_metrics.h"
21 #include "components/autofill/core/browser/form_structure.h" 21 #include "components/autofill/core/browser/form_structure.h"
22 #include "components/autofill/core/browser/personal_data_manager_observer.h" 22 #include "components/autofill/core/browser/personal_data_manager_observer.h"
23 #include "components/autofill/core/browser/phone_number.h" 23 #include "components/autofill/core/browser/phone_number.h"
24 #include "components/autofill/core/browser/phone_number_i18n.h" 24 #include "components/autofill/core/browser/phone_number_i18n.h"
25 #include "components/autofill/core/browser/validation.h" 25 #include "components/autofill/core/browser/validation.h"
26 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 26 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
27 #include "components/autofill/core/common/autofill_pref_names.h" 27 #include "components/autofill/core/common/autofill_pref_names.h"
28 #include "content/public/browser/browser_context.h"
29 28
30 namespace autofill { 29 namespace autofill {
31 namespace { 30 namespace {
32 31
33 const base::string16::value_type kCreditCardPrefix[] = {'*', 0}; 32 const base::string16::value_type kCreditCardPrefix[] = {'*', 0};
34 33
35 template<typename T> 34 template<typename T>
36 class FormGroupMatchesByGUIDFunctor { 35 class FormGroupMatchesByGUIDFunctor {
37 public: 36 public:
38 explicit FormGroupMatchesByGUIDFunctor(const std::string& guid) 37 explicit FormGroupMatchesByGUIDFunctor(const std::string& guid)
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 139
141 // A helper function for finding the maximum value in a string->int map. 140 // A helper function for finding the maximum value in a string->int map.
142 static bool CompareVotes(const std::pair<std::string, int>& a, 141 static bool CompareVotes(const std::pair<std::string, int>& a,
143 const std::pair<std::string, int>& b) { 142 const std::pair<std::string, int>& b) {
144 return a.second < b.second; 143 return a.second < b.second;
145 } 144 }
146 145
147 } // namespace 146 } // namespace
148 147
149 PersonalDataManager::PersonalDataManager(const std::string& app_locale) 148 PersonalDataManager::PersonalDataManager(const std::string& app_locale)
150 : browser_context_(NULL), 149 : autofill_webdata_(NULL),
151 is_data_loaded_(false), 150 is_data_loaded_(false),
152 pending_profiles_query_(0), 151 pending_profiles_query_(0),
153 pending_creditcards_query_(0), 152 pending_creditcards_query_(0),
154 app_locale_(app_locale), 153 app_locale_(app_locale),
155 metric_logger_(new AutofillMetrics), 154 metric_logger_(new AutofillMetrics),
156 is_off_the_record_(false), 155 is_off_the_record_(false),
157 has_logged_profile_count_(false) {} 156 has_logged_profile_count_(false) {}
158 157
159 void PersonalDataManager::Init(content::BrowserContext* browser_context, 158 void PersonalDataManager::Init(
160 PrefService* pref_service, 159 scoped_refptr<AutofillWebDataService> autofill_webdata,
161 bool is_off_the_record) { 160 PrefService* pref_service,
162 browser_context_ = browser_context; 161 bool is_off_the_record) {
162 autofill_webdata_ = autofill_webdata;
163 pref_service_ = pref_service; 163 pref_service_ = pref_service;
164 is_off_the_record_ = is_off_the_record; 164 is_off_the_record_ = is_off_the_record;
165 165
166 if (!is_off_the_record_) 166 if (!is_off_the_record_)
167 metric_logger_->LogIsAutofillEnabledAtStartup(IsAutofillEnabled()); 167 metric_logger_->LogIsAutofillEnabledAtStartup(IsAutofillEnabled());
168 168
169 scoped_refptr<AutofillWebDataService> autofill_data(
170 AutofillWebDataService::FromBrowserContext(browser_context_));
171
172 // WebDataService may not be available in tests. 169 // WebDataService may not be available in tests.
Ilya Sherman 2013/11/14 02:22:02 Out of curiousity, do you know whether this is com
blundell 2013/11/14 16:46:30 Found the offenders (at least in unit_tests) by pu
173 if (!autofill_data.get()) 170 if (!autofill_webdata_.get())
174 return; 171 return;
175 172
176 LoadProfiles(); 173 LoadProfiles();
177 LoadCreditCards(); 174 LoadCreditCards();
178 175
179 autofill_data->AddObserver(this); 176 autofill_webdata_->AddObserver(this);
180 } 177 }
181 178
182 PersonalDataManager::~PersonalDataManager() { 179 PersonalDataManager::~PersonalDataManager() {
183 CancelPendingQuery(&pending_profiles_query_); 180 CancelPendingQuery(&pending_profiles_query_);
184 CancelPendingQuery(&pending_creditcards_query_); 181 CancelPendingQuery(&pending_creditcards_query_);
185 182
186 if (!browser_context_) 183 if (autofill_webdata_.get())
187 return; 184 autofill_webdata_->RemoveObserver(this);
188
189 scoped_refptr<AutofillWebDataService> autofill_data(
190 AutofillWebDataService::FromBrowserContext(browser_context_));
191 if (autofill_data.get())
192 autofill_data->RemoveObserver(this);
193 } 185 }
194 186
195 void PersonalDataManager::OnWebDataServiceRequestDone( 187 void PersonalDataManager::OnWebDataServiceRequestDone(
196 WebDataServiceBase::Handle h, 188 WebDataServiceBase::Handle h,
197 const WDTypedResult* result) { 189 const WDTypedResult* result) {
198 DCHECK(pending_profiles_query_ || pending_creditcards_query_); 190 DCHECK(pending_profiles_query_ || pending_creditcards_query_);
199 191
200 if (!result) { 192 if (!result) {
201 // Error from the web database. 193 // Error from the web database.
202 if (h == pending_creditcards_query_) 194 if (h == pending_creditcards_query_)
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 if (is_off_the_record_) 380 if (is_off_the_record_)
389 return; 381 return;
390 382
391 if (profile.IsEmpty(app_locale_)) 383 if (profile.IsEmpty(app_locale_))
392 return; 384 return;
393 385
394 // Don't add an existing profile. 386 // Don't add an existing profile.
395 if (FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) 387 if (FindByGUID<AutofillProfile>(web_profiles_, profile.guid()))
396 return; 388 return;
397 389
398 scoped_refptr<AutofillWebDataService> autofill_data( 390 if (!autofill_webdata_.get())
399 AutofillWebDataService::FromBrowserContext(browser_context_));
400 if (!autofill_data.get())
401 return; 391 return;
402 392
403 // Don't add a duplicate. 393 // Don't add a duplicate.
404 if (FindByContents(web_profiles_, profile)) 394 if (FindByContents(web_profiles_, profile))
405 return; 395 return;
406 396
407 // Add the new profile to the web database. 397 // Add the new profile to the web database.
408 autofill_data->AddAutofillProfile(profile); 398 autofill_webdata_->AddAutofillProfile(profile);
409 399
410 // Refresh our local cache and send notifications to observers. 400 // Refresh our local cache and send notifications to observers.
411 Refresh(); 401 Refresh();
412 } 402 }
413 403
414 void PersonalDataManager::UpdateProfile(const AutofillProfile& profile) { 404 void PersonalDataManager::UpdateProfile(const AutofillProfile& profile) {
415 if (is_off_the_record_) 405 if (is_off_the_record_)
416 return; 406 return;
417 407
418 AutofillProfile* existing_profile = GetProfileByGUID(profile.guid()); 408 AutofillProfile* existing_profile = GetProfileByGUID(profile.guid());
419 if (!existing_profile) 409 if (!existing_profile)
420 return; 410 return;
421 411
422 // Don't overwrite the origin for a profile that is already stored. 412 // Don't overwrite the origin for a profile that is already stored.
423 if (existing_profile->Compare(profile) == 0) 413 if (existing_profile->Compare(profile) == 0)
424 return; 414 return;
425 415
426 if (profile.IsEmpty(app_locale_)) { 416 if (profile.IsEmpty(app_locale_)) {
427 RemoveByGUID(profile.guid()); 417 RemoveByGUID(profile.guid());
428 return; 418 return;
429 } 419 }
430 420
431 scoped_refptr<AutofillWebDataService> autofill_data( 421 if (!autofill_webdata_.get())
432 AutofillWebDataService::FromBrowserContext(browser_context_));
433 if (!autofill_data.get())
434 return; 422 return;
435 423
436 // Make the update. 424 // Make the update.
437 autofill_data->UpdateAutofillProfile(profile); 425 autofill_webdata_->UpdateAutofillProfile(profile);
438 426
439 // Refresh our local cache and send notifications to observers. 427 // Refresh our local cache and send notifications to observers.
440 Refresh(); 428 Refresh();
441 } 429 }
442 430
443 AutofillProfile* PersonalDataManager::GetProfileByGUID( 431 AutofillProfile* PersonalDataManager::GetProfileByGUID(
444 const std::string& guid) { 432 const std::string& guid) {
445 const std::vector<AutofillProfile*>& profiles = GetProfiles(); 433 const std::vector<AutofillProfile*>& profiles = GetProfiles();
446 std::vector<AutofillProfile*>::const_iterator iter = 434 std::vector<AutofillProfile*>::const_iterator iter =
447 FindElementByGUID<AutofillProfile>(profiles, guid); 435 FindElementByGUID<AutofillProfile>(profiles, guid);
448 return (iter != profiles.end()) ? *iter : NULL; 436 return (iter != profiles.end()) ? *iter : NULL;
449 } 437 }
450 438
451 void PersonalDataManager::AddCreditCard(const CreditCard& credit_card) { 439 void PersonalDataManager::AddCreditCard(const CreditCard& credit_card) {
452 if (is_off_the_record_) 440 if (is_off_the_record_)
453 return; 441 return;
454 442
455 if (credit_card.IsEmpty(app_locale_)) 443 if (credit_card.IsEmpty(app_locale_))
456 return; 444 return;
457 445
458 if (FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) 446 if (FindByGUID<CreditCard>(credit_cards_, credit_card.guid()))
459 return; 447 return;
460 448
461 scoped_refptr<AutofillWebDataService> autofill_data( 449 if (!autofill_webdata_.get())
462 AutofillWebDataService::FromBrowserContext(browser_context_));
463 if (!autofill_data.get())
464 return; 450 return;
465 451
466 // Don't add a duplicate. 452 // Don't add a duplicate.
467 if (FindByContents(credit_cards_, credit_card)) 453 if (FindByContents(credit_cards_, credit_card))
468 return; 454 return;
469 455
470 // Add the new credit card to the web database. 456 // Add the new credit card to the web database.
471 autofill_data->AddCreditCard(credit_card); 457 autofill_webdata_->AddCreditCard(credit_card);
472 458
473 // Refresh our local cache and send notifications to observers. 459 // Refresh our local cache and send notifications to observers.
474 Refresh(); 460 Refresh();
475 } 461 }
476 462
477 void PersonalDataManager::UpdateCreditCard(const CreditCard& credit_card) { 463 void PersonalDataManager::UpdateCreditCard(const CreditCard& credit_card) {
478 if (is_off_the_record_) 464 if (is_off_the_record_)
479 return; 465 return;
480 466
481 CreditCard* existing_credit_card = GetCreditCardByGUID(credit_card.guid()); 467 CreditCard* existing_credit_card = GetCreditCardByGUID(credit_card.guid());
482 if (!existing_credit_card) 468 if (!existing_credit_card)
483 return; 469 return;
484 470
485 // Don't overwrite the origin for a credit card that is already stored. 471 // Don't overwrite the origin for a credit card that is already stored.
486 if (existing_credit_card->Compare(credit_card) == 0) 472 if (existing_credit_card->Compare(credit_card) == 0)
487 return; 473 return;
488 474
489 if (credit_card.IsEmpty(app_locale_)) { 475 if (credit_card.IsEmpty(app_locale_)) {
490 RemoveByGUID(credit_card.guid()); 476 RemoveByGUID(credit_card.guid());
491 return; 477 return;
492 } 478 }
493 479
494 scoped_refptr<AutofillWebDataService> autofill_data( 480 if (!autofill_webdata_.get())
495 AutofillWebDataService::FromBrowserContext(browser_context_));
496 if (!autofill_data.get())
497 return; 481 return;
498 482
499 // Make the update. 483 // Make the update.
500 autofill_data->UpdateCreditCard(credit_card); 484 autofill_webdata_->UpdateCreditCard(credit_card);
501 485
502 // Refresh our local cache and send notifications to observers. 486 // Refresh our local cache and send notifications to observers.
503 Refresh(); 487 Refresh();
504 } 488 }
505 489
506 void PersonalDataManager::RemoveByGUID(const std::string& guid) { 490 void PersonalDataManager::RemoveByGUID(const std::string& guid) {
507 if (is_off_the_record_) 491 if (is_off_the_record_)
508 return; 492 return;
509 493
510 bool is_credit_card = FindByGUID<CreditCard>(credit_cards_, guid); 494 bool is_credit_card = FindByGUID<CreditCard>(credit_cards_, guid);
511 bool is_profile = !is_credit_card && 495 bool is_profile = !is_credit_card &&
512 FindByGUID<AutofillProfile>(web_profiles_, guid); 496 FindByGUID<AutofillProfile>(web_profiles_, guid);
513 if (!is_credit_card && !is_profile) 497 if (!is_credit_card && !is_profile)
514 return; 498 return;
515 499
516 scoped_refptr<AutofillWebDataService> autofill_data( 500 if (!autofill_webdata_.get())
517 AutofillWebDataService::FromBrowserContext(browser_context_));
518 if (!autofill_data.get())
519 return; 501 return;
520 502
521 if (is_credit_card) 503 if (is_credit_card)
522 autofill_data->RemoveCreditCard(guid); 504 autofill_webdata_->RemoveCreditCard(guid);
523 else 505 else
524 autofill_data->RemoveAutofillProfile(guid); 506 autofill_webdata_->RemoveAutofillProfile(guid);
525 507
526 // Refresh our local cache and send notifications to observers. 508 // Refresh our local cache and send notifications to observers.
527 Refresh(); 509 Refresh();
528 } 510 }
529 511
530 CreditCard* PersonalDataManager::GetCreditCardByGUID(const std::string& guid) { 512 CreditCard* PersonalDataManager::GetCreditCardByGUID(const std::string& guid) {
531 const std::vector<CreditCard*>& credit_cards = GetCreditCards(); 513 const std::vector<CreditCard*>& credit_cards = GetCreditCards();
532 std::vector<CreditCard*>::const_iterator iter = 514 std::vector<CreditCard*>::const_iterator iter =
533 FindElementByGUID<CreditCard>(credit_cards, guid); 515 FindElementByGUID<CreditCard>(credit_cards, guid);
534 return (iter != credit_cards.end()) ? *iter : NULL; 516 return (iter != credit_cards.end()) ? *iter : NULL;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 779
798 // Ensure that profile labels are up to date. Currently, sync relies on 780 // Ensure that profile labels are up to date. Currently, sync relies on
799 // labels to identify a profile. 781 // labels to identify a profile.
800 // TODO(dhollowa): We need to deprecate labels and update the way sync 782 // TODO(dhollowa): We need to deprecate labels and update the way sync
801 // identifies profiles. 783 // identifies profiles.
802 std::vector<AutofillProfile*> profile_pointers(profiles->size()); 784 std::vector<AutofillProfile*> profile_pointers(profiles->size());
803 std::transform(profiles->begin(), profiles->end(), profile_pointers.begin(), 785 std::transform(profiles->begin(), profiles->end(), profile_pointers.begin(),
804 address_of<AutofillProfile>); 786 address_of<AutofillProfile>);
805 AutofillProfile::AdjustInferredLabels(&profile_pointers); 787 AutofillProfile::AdjustInferredLabels(&profile_pointers);
806 788
807 scoped_refptr<AutofillWebDataService> autofill_data( 789 if (!autofill_webdata_.get())
808 AutofillWebDataService::FromBrowserContext(browser_context_));
809 if (!autofill_data.get())
810 return; 790 return;
811 791
812 // Any profiles that are not in the new profile list should be removed from 792 // Any profiles that are not in the new profile list should be removed from
813 // the web database. 793 // the web database.
814 for (std::vector<AutofillProfile*>::const_iterator iter = 794 for (std::vector<AutofillProfile*>::const_iterator iter =
815 web_profiles_.begin(); 795 web_profiles_.begin();
816 iter != web_profiles_.end(); ++iter) { 796 iter != web_profiles_.end(); ++iter) {
817 if (!FindByGUID<AutofillProfile>(*profiles, (*iter)->guid())) 797 if (!FindByGUID<AutofillProfile>(*profiles, (*iter)->guid()))
818 autofill_data->RemoveAutofillProfile((*iter)->guid()); 798 autofill_webdata_->RemoveAutofillProfile((*iter)->guid());
819 } 799 }
820 800
821 // Update the web database with the existing profiles. 801 // Update the web database with the existing profiles.
822 for (std::vector<AutofillProfile>::iterator iter = profiles->begin(); 802 for (std::vector<AutofillProfile>::iterator iter = profiles->begin();
823 iter != profiles->end(); ++iter) { 803 iter != profiles->end(); ++iter) {
824 if (FindByGUID<AutofillProfile>(web_profiles_, iter->guid())) 804 if (FindByGUID<AutofillProfile>(web_profiles_, iter->guid()))
825 autofill_data->UpdateAutofillProfile(*iter); 805 autofill_webdata_->UpdateAutofillProfile(*iter);
826 } 806 }
827 807
828 // Add the new profiles to the web database. Don't add a duplicate. 808 // Add the new profiles to the web database. Don't add a duplicate.
829 for (std::vector<AutofillProfile>::iterator iter = profiles->begin(); 809 for (std::vector<AutofillProfile>::iterator iter = profiles->begin();
830 iter != profiles->end(); ++iter) { 810 iter != profiles->end(); ++iter) {
831 if (!FindByGUID<AutofillProfile>(web_profiles_, iter->guid()) && 811 if (!FindByGUID<AutofillProfile>(web_profiles_, iter->guid()) &&
832 !FindByContents(web_profiles_, *iter)) 812 !FindByContents(web_profiles_, *iter))
833 autofill_data->AddAutofillProfile(*iter); 813 autofill_webdata_->AddAutofillProfile(*iter);
834 } 814 }
835 815
836 // Copy in the new profiles. 816 // Copy in the new profiles.
837 web_profiles_.clear(); 817 web_profiles_.clear();
838 for (std::vector<AutofillProfile>::iterator iter = profiles->begin(); 818 for (std::vector<AutofillProfile>::iterator iter = profiles->begin();
839 iter != profiles->end(); ++iter) { 819 iter != profiles->end(); ++iter) {
840 web_profiles_.push_back(new AutofillProfile(*iter)); 820 web_profiles_.push_back(new AutofillProfile(*iter));
841 } 821 }
842 822
843 // Refresh our local cache and send notifications to observers. 823 // Refresh our local cache and send notifications to observers.
844 Refresh(); 824 Refresh();
845 } 825 }
846 826
847 void PersonalDataManager::SetCreditCards( 827 void PersonalDataManager::SetCreditCards(
848 std::vector<CreditCard>* credit_cards) { 828 std::vector<CreditCard>* credit_cards) {
849 if (is_off_the_record_) 829 if (is_off_the_record_)
850 return; 830 return;
851 831
852 // Remove empty credit cards from input. 832 // Remove empty credit cards from input.
853 credit_cards->erase(std::remove_if(credit_cards->begin(), credit_cards->end(), 833 credit_cards->erase(std::remove_if(credit_cards->begin(), credit_cards->end(),
854 IsEmptyFunctor<CreditCard>(app_locale_)), 834 IsEmptyFunctor<CreditCard>(app_locale_)),
855 credit_cards->end()); 835 credit_cards->end());
856 836
857 scoped_refptr<AutofillWebDataService> autofill_data( 837 if (!autofill_webdata_.get())
858 AutofillWebDataService::FromBrowserContext(browser_context_));
859 if (!autofill_data.get())
860 return; 838 return;
861 839
862 // Any credit cards that are not in the new credit card list should be 840 // Any credit cards that are not in the new credit card list should be
863 // removed. 841 // removed.
864 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin(); 842 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin();
865 iter != credit_cards_.end(); ++iter) { 843 iter != credit_cards_.end(); ++iter) {
866 if (!FindByGUID<CreditCard>(*credit_cards, (*iter)->guid())) 844 if (!FindByGUID<CreditCard>(*credit_cards, (*iter)->guid()))
867 autofill_data->RemoveCreditCard((*iter)->guid()); 845 autofill_webdata_->RemoveCreditCard((*iter)->guid());
868 } 846 }
869 847
870 // Update the web database with the existing credit cards. 848 // Update the web database with the existing credit cards.
871 for (std::vector<CreditCard>::iterator iter = credit_cards->begin(); 849 for (std::vector<CreditCard>::iterator iter = credit_cards->begin();
872 iter != credit_cards->end(); ++iter) { 850 iter != credit_cards->end(); ++iter) {
873 if (FindByGUID<CreditCard>(credit_cards_, iter->guid())) 851 if (FindByGUID<CreditCard>(credit_cards_, iter->guid()))
874 autofill_data->UpdateCreditCard(*iter); 852 autofill_webdata_->UpdateCreditCard(*iter);
875 } 853 }
876 854
877 // Add the new credit cards to the web database. Don't add a duplicate. 855 // Add the new credit cards to the web database. Don't add a duplicate.
878 for (std::vector<CreditCard>::iterator iter = credit_cards->begin(); 856 for (std::vector<CreditCard>::iterator iter = credit_cards->begin();
879 iter != credit_cards->end(); ++iter) { 857 iter != credit_cards->end(); ++iter) {
880 if (!FindByGUID<CreditCard>(credit_cards_, iter->guid()) && 858 if (!FindByGUID<CreditCard>(credit_cards_, iter->guid()) &&
881 !FindByContents(credit_cards_, *iter)) 859 !FindByContents(credit_cards_, *iter))
882 autofill_data->AddCreditCard(*iter); 860 autofill_webdata_->AddCreditCard(*iter);
883 } 861 }
884 862
885 // Copy in the new credit cards. 863 // Copy in the new credit cards.
886 credit_cards_.clear(); 864 credit_cards_.clear();
887 for (std::vector<CreditCard>::iterator iter = credit_cards->begin(); 865 for (std::vector<CreditCard>::iterator iter = credit_cards->begin();
888 iter != credit_cards->end(); ++iter) { 866 iter != credit_cards->end(); ++iter) {
889 credit_cards_.push_back(new CreditCard(*iter)); 867 credit_cards_.push_back(new CreditCard(*iter));
890 } 868 }
891 869
892 // Refresh our local cache and send notifications to observers. 870 // Refresh our local cache and send notifications to observers.
893 Refresh(); 871 Refresh();
894 } 872 }
895 873
896 void PersonalDataManager::LoadProfiles() { 874 void PersonalDataManager::LoadProfiles() {
897 scoped_refptr<AutofillWebDataService> autofill_data( 875 if (!autofill_webdata_.get()) {
898 AutofillWebDataService::FromBrowserContext(browser_context_));
899 if (!autofill_data.get()) {
900 NOTREACHED(); 876 NOTREACHED();
901 return; 877 return;
902 } 878 }
903 879
904 CancelPendingQuery(&pending_profiles_query_); 880 CancelPendingQuery(&pending_profiles_query_);
905 881
906 pending_profiles_query_ = autofill_data->GetAutofillProfiles(this); 882 pending_profiles_query_ = autofill_webdata_->GetAutofillProfiles(this);
907 } 883 }
908 884
909 // Win and Linux implementations do nothing. Mac and Android implementations 885 // Win and Linux implementations do nothing. Mac and Android implementations
910 // fill in the contents of |auxiliary_profiles_|. 886 // fill in the contents of |auxiliary_profiles_|.
911 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) 887 #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
912 void PersonalDataManager::LoadAuxiliaryProfiles() const { 888 void PersonalDataManager::LoadAuxiliaryProfiles() const {
913 } 889 }
914 #endif 890 #endif
915 891
916 void PersonalDataManager::LoadCreditCards() { 892 void PersonalDataManager::LoadCreditCards() {
917 scoped_refptr<AutofillWebDataService> autofill_data( 893 if (!autofill_webdata_.get()) {
918 AutofillWebDataService::FromBrowserContext(browser_context_));
919 if (!autofill_data.get()) {
920 NOTREACHED(); 894 NOTREACHED();
921 return; 895 return;
922 } 896 }
923 897
924 CancelPendingQuery(&pending_creditcards_query_); 898 CancelPendingQuery(&pending_creditcards_query_);
925 899
926 pending_creditcards_query_ = autofill_data->GetCreditCards(this); 900 pending_creditcards_query_ = autofill_webdata_->GetCreditCards(this);
927 } 901 }
928 902
929 void PersonalDataManager::ReceiveLoadedProfiles(WebDataServiceBase::Handle h, 903 void PersonalDataManager::ReceiveLoadedProfiles(WebDataServiceBase::Handle h,
930 const WDTypedResult* result) { 904 const WDTypedResult* result) {
931 DCHECK_EQ(pending_profiles_query_, h); 905 DCHECK_EQ(pending_profiles_query_, h);
932 906
933 pending_profiles_query_ = 0; 907 pending_profiles_query_ = 0;
934 web_profiles_.clear(); 908 web_profiles_.clear();
935 909
936 const WDResult<std::vector<AutofillProfile*> >* r = 910 const WDResult<std::vector<AutofillProfile*> >* r =
(...skipping 21 matching lines...) Expand all
958 std::vector<CreditCard*> credit_cards = r->GetValue(); 932 std::vector<CreditCard*> credit_cards = r->GetValue();
959 for (std::vector<CreditCard*>::iterator iter = credit_cards.begin(); 933 for (std::vector<CreditCard*>::iterator iter = credit_cards.begin();
960 iter != credit_cards.end(); ++iter) { 934 iter != credit_cards.end(); ++iter) {
961 credit_cards_.push_back(*iter); 935 credit_cards_.push_back(*iter);
962 } 936 }
963 } 937 }
964 938
965 void PersonalDataManager::CancelPendingQuery( 939 void PersonalDataManager::CancelPendingQuery(
966 WebDataServiceBase::Handle* handle) { 940 WebDataServiceBase::Handle* handle) {
967 if (*handle) { 941 if (*handle) {
968 scoped_refptr<AutofillWebDataService> autofill_data( 942 if (!autofill_webdata_.get()) {
969 AutofillWebDataService::FromBrowserContext(browser_context_));
970 if (!autofill_data.get()) {
971 NOTREACHED(); 943 NOTREACHED();
972 return; 944 return;
973 } 945 }
974 autofill_data->CancelRequest(*handle); 946 autofill_webdata_->CancelRequest(*handle);
975 } 947 }
976 *handle = 0; 948 *handle = 0;
977 } 949 }
978 950
979 std::string PersonalDataManager::SaveImportedProfile( 951 std::string PersonalDataManager::SaveImportedProfile(
980 const AutofillProfile& imported_profile) { 952 const AutofillProfile& imported_profile) {
981 if (is_off_the_record_) 953 if (is_off_the_record_)
982 return std::string(); 954 return std::string();
983 955
984 // Don't save a web profile if the data in the profile is a subset of an 956 // Don't save a web profile if the data in the profile is a subset of an
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 1012
1041 const AutofillMetrics* PersonalDataManager::metric_logger() const { 1013 const AutofillMetrics* PersonalDataManager::metric_logger() const {
1042 return metric_logger_.get(); 1014 return metric_logger_.get();
1043 } 1015 }
1044 1016
1045 void PersonalDataManager::set_metric_logger( 1017 void PersonalDataManager::set_metric_logger(
1046 const AutofillMetrics* metric_logger) { 1018 const AutofillMetrics* metric_logger) {
1047 metric_logger_.reset(metric_logger); 1019 metric_logger_.reset(metric_logger);
1048 } 1020 }
1049 1021
1050 void PersonalDataManager::set_browser_context( 1022 void PersonalDataManager::set_autofill_webdata_service(
1051 content::BrowserContext* context) { 1023 scoped_refptr<AutofillWebDataService> webdata) {
1052 browser_context_ = context; 1024 autofill_webdata_ = webdata;
1053 } 1025 }
1054 1026
1055 void PersonalDataManager::set_pref_service(PrefService* pref_service) { 1027 void PersonalDataManager::set_pref_service(PrefService* pref_service) {
1056 pref_service_ = pref_service; 1028 pref_service_ = pref_service;
1057 } 1029 }
1058 1030
1059 std::string PersonalDataManager::MostCommonCountryCodeFromProfiles() const { 1031 std::string PersonalDataManager::MostCommonCountryCodeFromProfiles() const {
1060 // Count up country codes from existing profiles. 1032 // Count up country codes from existing profiles.
1061 std::map<std::string, int> votes; 1033 std::map<std::string, int> votes;
1062 // TODO(estade): can we make this GetProfiles() instead? It seems to cause 1034 // TODO(estade): can we make this GetProfiles() instead? It seems to cause
(...skipping 16 matching lines...) Expand all
1079 if (!votes.empty()) { 1051 if (!votes.empty()) {
1080 std::map<std::string, int>::iterator iter = 1052 std::map<std::string, int>::iterator iter =
1081 std::max_element(votes.begin(), votes.end(), CompareVotes); 1053 std::max_element(votes.begin(), votes.end(), CompareVotes);
1082 return iter->first; 1054 return iter->first;
1083 } 1055 }
1084 1056
1085 return std::string(); 1057 return std::string();
1086 } 1058 }
1087 1059
1088 } // namespace autofill 1060 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698