diff options
Diffstat (limited to 'chrome/browser/cocoa/preferences_window_controller.mm')
-rw-r--r-- | chrome/browser/cocoa/preferences_window_controller.mm | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/chrome/browser/cocoa/preferences_window_controller.mm b/chrome/browser/cocoa/preferences_window_controller.mm index 8422df7..f380661 100644 --- a/chrome/browser/cocoa/preferences_window_controller.mm +++ b/chrome/browser/cocoa/preferences_window_controller.mm @@ -427,8 +427,10 @@ class PrefObserverBridge : public NotificationObserver, class PersonalDataManagerObserver : public PersonalDataManager::Observer { public: explicit PersonalDataManagerObserver( - PersonalDataManager* personal_data_manager) - : personal_data_manager_(personal_data_manager) { + PersonalDataManager* personal_data_manager, + Profile* profile) + : personal_data_manager_(personal_data_manager), + profile_(profile) { } virtual ~PersonalDataManagerObserver(); @@ -439,7 +441,8 @@ class PersonalDataManagerObserver : public PersonalDataManager::Observer { // Static method to dispatch to |ShowAutoFillDialog| method in autofill // module. This is public to facilitate direct external call when the // data manager has already loaded its data. - static void ShowAutoFillDialog(PersonalDataManager* personal_data_manager); + static void ShowAutoFillDialog(PersonalDataManager* personal_data_manager, + Profile* profile); private: // Utility method to remove |this| from |personal_data_manager_| as an @@ -452,6 +455,9 @@ class PersonalDataManagerObserver : public PersonalDataManager::Observer { // Weak reference. PersonalDataManager* personal_data_manager_; + // Profile of caller. Held as weak reference. May not be NULL. + Profile* profile_; + private: DISALLOW_COPY_AND_ASSIGN(PersonalDataManagerObserver); }; @@ -474,24 +480,26 @@ void PersonalDataManagerObserver::RemoveObserver() { // (deleting |this| in the process). void PersonalDataManagerObserver::OnPersonalDataLoaded() { RemoveObserver(); - PersonalDataManagerObserver::ShowAutoFillDialog(personal_data_manager_); + PersonalDataManagerObserver::ShowAutoFillDialog(personal_data_manager_, + profile_); } // Dispatches request to show the autofill dialog. If there are no profiles // in the |personal_data_manager| the we create a new one here. Similary with // credit card info. void PersonalDataManagerObserver::ShowAutoFillDialog( - PersonalDataManager* personal_data_manager) { + PersonalDataManager* personal_data_manager, Profile* profile) { + DCHECK(profile); if (!personal_data_manager) return; std::vector<AutoFillProfile*> profiles = personal_data_manager->profiles(); - AutoFillProfile profile(ASCIIToUTF16(""), 0); + AutoFillProfile autofill_profile(ASCIIToUTF16(""), 0); if (profiles.size() == 0) { string16 new_profile_name = l10n_util::GetStringUTF16(IDS_AUTOFILL_NEW_ADDRESS); - profile.set_label(new_profile_name); - profiles.push_back(&profile); + autofill_profile.set_label(new_profile_name); + profiles.push_back(&autofill_profile); } std::vector<CreditCard*> credit_cards = personal_data_manager->credit_cards(); @@ -503,7 +511,7 @@ void PersonalDataManagerObserver::ShowAutoFillDialog( credit_cards.push_back(&credit_card); } - ::ShowAutoFillDialog(personal_data_manager, profiles, credit_cards); + ::ShowAutoFillDialog(personal_data_manager, profiles, credit_cards, profile); } @@ -1267,12 +1275,13 @@ const int kDisabledIndex = 1; if (personalDataManager->IsDataLoaded()) { // |personalDataManager| data is loaded, we can proceed with the dialog. - PersonalDataManagerObserver::ShowAutoFillDialog(personalDataManager); + PersonalDataManagerObserver::ShowAutoFillDialog(personalDataManager, + profile_); } else { // |personalDataManager| data is NOT loaded, so we load it here, installing // our observer. personalDataManagerObserver_.reset( - new PersonalDataManagerObserver(personalDataManager)); + new PersonalDataManagerObserver(personalDataManager, profile_)); personalDataManager->SetObserver(personalDataManagerObserver_.get()); } } |