Index: chrome/browser/autofill/autofill_dialog_controller_mac.mm |
=================================================================== |
--- chrome/browser/autofill/autofill_dialog_controller_mac.mm (revision 46425) |
+++ chrome/browser/autofill/autofill_dialog_controller_mac.mm (working copy) |
@@ -10,7 +10,6 @@ |
#import "chrome/browser/autofill/autofill_address_view_controller_mac.h" |
#import "chrome/browser/autofill/autofill_credit_card_model_mac.h" |
#import "chrome/browser/autofill/autofill_credit_card_view_controller_mac.h" |
-#import "chrome/browser/autofill/personal_data_manager.h" |
#include "chrome/browser/browser_process.h" |
#import "chrome/browser/cocoa/disclosure_view_controller.h" |
#import "chrome/browser/cocoa/section_separator_view.h" |
@@ -20,80 +19,6 @@ |
#include "chrome/common/pref_names.h" |
#include "grit/generated_resources.h" |
-// Private interface. |
-@interface AutoFillDialogController (PrivateAPI) |
-// Asyncronous handler for when PersonalDataManager data loads. The |
-// personal data manager notifies the dialog with this method when the |
-// data loading is complete and ready to be used. |
-- (void)onPersonalDataLoaded:(const std::vector<AutoFillProfile*>&)profiles |
- creditCards:(const std::vector<CreditCard*>&)creditCards; |
-@end |
- |
-namespace AutoFillDialogControllerInternal { |
- |
-// PersonalDataManagerObserver facilitates asynchronous loading of |
-// PersonalDataManager data before showing the AutoFill settings data to the |
-// user. It acts as a C++-based delegate for the |AutoFillDialogController|. |
-class PersonalDataManagerObserver : public PersonalDataManager::Observer { |
- public: |
- explicit PersonalDataManagerObserver( |
- AutoFillDialogController* controller, |
- PersonalDataManager* personal_data_manager, |
- Profile* profile) |
- : controller_(controller), |
- personal_data_manager_(personal_data_manager), |
- profile_(profile) { |
- } |
- |
- virtual ~PersonalDataManagerObserver(); |
- |
- // Notifies the observer that the PersonalDataManager has finished loading. |
- virtual void OnPersonalDataLoaded(); |
- |
- private: |
- // Utility method to remove |this| from |personal_data_manager_| as an |
- // observer. |
- void RemoveObserver(); |
- |
- // The dialog controller to be notified when the data loading completes. |
- // Weak reference. |
- AutoFillDialogController* controller_; |
- |
- // The object in which we are registered as an observer. We hold on to |
- // it to facilitate un-registering ourself in the destructor and in the |
- // |OnPersonalDataLoaded| method. This may be NULL. |
- // 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); |
-}; |
- |
-// During destruction ensure that we are removed from the |
-// |personal_data_manager_| as an observer. |
-PersonalDataManagerObserver::~PersonalDataManagerObserver() { |
- RemoveObserver(); |
-} |
- |
-void PersonalDataManagerObserver::RemoveObserver() { |
- if (personal_data_manager_) { |
- personal_data_manager_->RemoveObserver(this); |
- } |
-} |
- |
-// The data is ready so display our data. Notify the dialog controller that |
-// the data is ready. Once done we clear the observer. |
-void PersonalDataManagerObserver::OnPersonalDataLoaded() { |
- RemoveObserver(); |
- [controller_ onPersonalDataLoaded:personal_data_manager_->web_profiles() |
- creditCards:personal_data_manager_->credit_cards()]; |
-} |
- |
-} // namespace AutoFillDialogControllerInternal |
- |
@interface AutoFillDialogController (PrivateMethods) |
- (void)runModalDialog; |
- (void)installChildViews; |
@@ -104,14 +29,14 @@ |
@synthesize auxiliaryEnabled = auxiliaryEnabled_; |
+ (void)showAutoFillDialogWithObserver:(AutoFillDialogObserver*)observer |
- profile:(Profile*)profile |
- importedProfile:(AutoFillProfile*) importedProfile |
- importedCreditCard:(CreditCard*) importedCreditCard { |
+ autoFillProfiles:(const std::vector<AutoFillProfile*>&)profiles |
+ creditCards:(const std::vector<CreditCard*>&)creditCards |
+ profile:(Profile*)profile { |
AutoFillDialogController* controller = |
[AutoFillDialogController controllerWithObserver:observer |
- profile:profile |
- importedProfile:importedProfile |
- importedCreditCard:importedCreditCard]; |
+ autoFillProfiles:profiles |
+ creditCards:creditCards |
+ profile:profile]; |
// Only run modal dialog if it is not already being shown. |
if (![controller isWindowLoaded]) { |
@@ -121,23 +46,7 @@ |
- (void)awakeFromNib { |
[addressSectionBox_ setShowTopLine:FALSE]; |
- |
- PersonalDataManager* personal_data_manager = |
- profile_->GetPersonalDataManager(); |
- DCHECK(personal_data_manager); |
- |
- if (personal_data_manager->IsDataLoaded()) { |
- // |personalDataManager| data is loaded, we can proceed with the contents. |
- [self onPersonalDataLoaded:personal_data_manager->web_profiles() |
- creditCards:personal_data_manager->credit_cards()]; |
- } else { |
- // |personalDataManager| data is NOT loaded, so we load it here, installing |
- // our observer. |
- personalDataManagerObserver_.reset( |
- new AutoFillDialogControllerInternal::PersonalDataManagerObserver( |
- self, personal_data_manager, profile_)); |
- personal_data_manager->SetObserver(personalDataManagerObserver_.get()); |
- } |
+ [self installChildViews]; |
} |
// NSWindow Delegate callback. When the window closes the controller can |
@@ -456,17 +365,17 @@ |
@implementation AutoFillDialogController (ExposedForUnitTests) |
+ (AutoFillDialogController*)controllerWithObserver: |
- (AutoFillDialogObserver*)observer |
- profile:(Profile*)profile |
- importedProfile:(AutoFillProfile*)importedProfile |
- importedCreditCard:(CreditCard*)importedCreditCard { |
+ (AutoFillDialogObserver*)observer |
+ autoFillProfiles:(const std::vector<AutoFillProfile*>&)profiles |
+ creditCards:(const std::vector<CreditCard*>&)creditCards |
+ profile:(Profile*)profile { |
// Deallocation is done upon window close. See |windowWillClose:|. |
AutoFillDialogController* controller = |
[[self alloc] initWithObserver:observer |
- profile:profile |
- importedProfile:importedProfile |
- importedCreditCard:importedCreditCard]; |
+ autoFillProfiles:profiles |
+ creditCards:creditCards |
+ profile:profile]; |
return controller; |
} |
@@ -475,9 +384,9 @@ |
// |profiles| are non-retained immutable list of autofill profiles. |
// |creditCards| are non-retained immutable list of credit card info. |
- (id)initWithObserver:(AutoFillDialogObserver*)observer |
- profile:(Profile*)profile |
- importedProfile:(AutoFillProfile*)importedProfile |
- importedCreditCard:(CreditCard*)importedCreditCard { |
+ autoFillProfiles:(const std::vector<AutoFillProfile*>&)profiles |
+ creditCards:(const std::vector<CreditCard*>&)creditCards |
+ profile:(Profile*)profile { |
CHECK(profile); |
// Use initWithWindowNibPath: instead of initWithWindowNibName: so we |
// can override it in a unit test. |
@@ -486,9 +395,18 @@ |
ofType:@"nib"]; |
if ((self = [super initWithWindowNibPath:nibpath owner:self])) { |
observer_ = observer; |
+ |
+ // Make local copy of |profiles|. |
+ std::vector<AutoFillProfile*>::const_iterator i; |
+ for (i = profiles.begin(); i != profiles.end(); ++i) |
+ profiles_.push_back(**i); |
+ |
+ // Make local copy of |creditCards|. |
+ std::vector<CreditCard*>::const_iterator j; |
+ for (j = creditCards.begin(); j != creditCards.end(); ++j) |
+ creditCards_.push_back(**j); |
+ |
profile_ = profile; |
- importedProfile_ = importedProfile; |
- importedCreditCard_ = importedCreditCard; |
// Use property here to trigger KVO binding. |
[self setAuxiliaryEnabled:profile_->GetPrefs()->GetBoolean( |
@@ -602,30 +520,4 @@ |
[self didChangeValueForKey:@"defaultCreditCardLabel"]; |
} |
-- (void)onPersonalDataLoaded:(const std::vector<AutoFillProfile*>&)profiles |
- creditCards:(const std::vector<CreditCard*>&)creditCards { |
- if (importedProfile_) { |
- profiles_.push_back(*importedProfile_); |
- } |
- |
- if (importedCreditCard_) { |
- creditCards_.push_back(*importedCreditCard_); |
- } |
- |
- // If we're not using imported data then use the data fetch from the web db. |
- if (!importedProfile_ && !importedCreditCard_) { |
- // Make local copy of |profiles|. |
- for (std::vector<AutoFillProfile*>::const_iterator iter = profiles.begin(); |
- iter != profiles.end(); ++iter) |
- profiles_.push_back(**iter); |
- |
- // Make local copy of |creditCards|. |
- for (std::vector<CreditCard*>::const_iterator iter = creditCards.begin(); |
- iter != creditCards.end(); ++iter) |
- creditCards_.push_back(**iter); |
- } |
- |
- [self installChildViews]; |
-} |
- |
@end |