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

Side by Side Diff: chrome/browser/autofill/autofill_dialog_controller_mac.mm

Issue 3140024: Implement policy for disabling auto fill. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: regenerate XIBs in order to avoid maxID corruption. Created 10 years, 3 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #import "chrome/browser/autofill/autofill_dialog_controller_mac.h" 5 #import "chrome/browser/autofill/autofill_dialog_controller_mac.h"
6 #include "app/l10n_util.h" 6 #include "app/l10n_util.h"
7 #include "app/resource_bundle.h" 7 #include "app/resource_bundle.h"
8 #include "base/mac_util.h" 8 #include "base/mac_util.h"
9 #include "base/sys_string_conversions.h" 9 #include "base/sys_string_conversions.h"
10 #include "chrome/browser/browser.h" 10 #include "chrome/browser/browser.h"
11 #include "chrome/browser/browser_list.h" 11 #include "chrome/browser/browser_list.h"
12 #import "chrome/browser/autofill/autofill_address_model_mac.h" 12 #import "chrome/browser/autofill/autofill_address_model_mac.h"
13 #import "chrome/browser/autofill/autofill_address_sheet_controller_mac.h" 13 #import "chrome/browser/autofill/autofill_address_sheet_controller_mac.h"
14 #import "chrome/browser/autofill/autofill_credit_card_model_mac.h" 14 #import "chrome/browser/autofill/autofill_credit_card_model_mac.h"
15 #import "chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.h" 15 #import "chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.h"
16 #import "chrome/browser/autofill/personal_data_manager.h" 16 #import "chrome/browser/autofill/personal_data_manager.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #import "chrome/browser/cocoa/window_size_autosaver.h" 18 #import "chrome/browser/cocoa/window_size_autosaver.h"
19 #include "chrome/browser/pref_service.h" 19 #include "chrome/browser/pref_service.h"
20 #include "chrome/browser/profile.h" 20 #include "chrome/browser/profile.h"
21 #include "chrome/common/notification_details.h"
22 #include "chrome/common/notification_observer.h"
21 #include "chrome/common/pref_names.h" 23 #include "chrome/common/pref_names.h"
22 #include "grit/generated_resources.h" 24 #include "grit/generated_resources.h"
23 #include "grit/app_resources.h" 25 #include "grit/app_resources.h"
24 #include "grit/theme_resources.h" 26 #include "grit/theme_resources.h"
25 27
26 namespace { 28 namespace {
27 29
28 // Update profile labels passed as |input|. When profile data changes as a 30 // Update profile labels passed as |input|. When profile data changes as a
29 // result of adding new profiles, edititing existing profiles, or deleting a 31 // result of adding new profiles, edititing existing profiles, or deleting a
30 // profile, then the list of profiles need to have their derived labels 32 // profile, then the list of profiles need to have their derived labels
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 @end 80 @end
79 81
80 // Private interface. 82 // Private interface.
81 @interface AutoFillDialogController (PrivateMethods) 83 @interface AutoFillDialogController (PrivateMethods)
82 // Asyncronous handler for when PersonalDataManager data loads. The 84 // Asyncronous handler for when PersonalDataManager data loads. The
83 // personal data manager notifies the dialog with this method when the 85 // personal data manager notifies the dialog with this method when the
84 // data loading is complete and ready to be used. 86 // data loading is complete and ready to be used.
85 - (void)onPersonalDataLoaded:(const std::vector<AutoFillProfile*>&)profiles 87 - (void)onPersonalDataLoaded:(const std::vector<AutoFillProfile*>&)profiles
86 creditCards:(const std::vector<CreditCard*>&)creditCards; 88 creditCards:(const std::vector<CreditCard*>&)creditCards;
87 89
90 // Called upon changes to AutoFill preferences that should be reflected in the
91 // UI.
92 - (void)onPrefChanged:(const std::string&)prefName;
93
88 // Returns true if |row| is an index to a valid profile in |tableView_|, and 94 // Returns true if |row| is an index to a valid profile in |tableView_|, and
89 // false otherwise. 95 // false otherwise.
90 - (BOOL)isProfileRow:(NSInteger)row; 96 - (BOOL)isProfileRow:(NSInteger)row;
91 97
92 // Returns true if |row| is an index to the profile group row in |tableView_|, 98 // Returns true if |row| is an index to the profile group row in |tableView_|,
93 // and false otherwise. 99 // and false otherwise.
94 - (BOOL)isProfileGroupRow:(NSInteger)row; 100 - (BOOL)isProfileGroupRow:(NSInteger)row;
95 101
96 // Returns true if |row| is an index to a valid credit card in |tableView_|, and 102 // Returns true if |row| is an index to a valid credit card in |tableView_|, and
97 // false otherwise. 103 // false otherwise.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 } 183 }
178 184
179 // The data is ready so display our data. Notify the dialog controller that 185 // The data is ready so display our data. Notify the dialog controller that
180 // the data is ready. Once done we clear the observer. 186 // the data is ready. Once done we clear the observer.
181 void PersonalDataManagerObserver::OnPersonalDataLoaded() { 187 void PersonalDataManagerObserver::OnPersonalDataLoaded() {
182 RemoveObserver(); 188 RemoveObserver();
183 [controller_ onPersonalDataLoaded:personal_data_manager_->web_profiles() 189 [controller_ onPersonalDataLoaded:personal_data_manager_->web_profiles()
184 creditCards:personal_data_manager_->credit_cards()]; 190 creditCards:personal_data_manager_->credit_cards()];
185 } 191 }
186 192
193 // Bridges preference changed notifications to the dialog controller.
194 class PrefObserver : public NotificationObserver {
195 public:
196 explicit PrefObserver(AutoFillDialogController* controller)
197 : controller_(controller) {}
198
199 // Overridden from NotificationObserver:
200 virtual void Observe(NotificationType type,
201 const NotificationSource& source,
202 const NotificationDetails& details) {
203 if (type == NotificationType::PREF_CHANGED) {
204 const std::string* pref = Details<std::string>(details).ptr();
205 if (pref) {
206 [controller_ onPrefChanged:*pref];
207 }
208 }
209 }
210
211 private:
212 AutoFillDialogController* controller_;
213
214 DISALLOW_COPY_AND_ASSIGN(PrefObserver);
215 };
216
187 } // namespace AutoFillDialogControllerInternal 217 } // namespace AutoFillDialogControllerInternal
188 218
189 @implementation AutoFillDialogController 219 @implementation AutoFillDialogController
190 220
191 @synthesize autoFillEnabled = autoFillEnabled_; 221 @synthesize autoFillEnabled = autoFillEnabled_;
222 @synthesize autoFillManaged = autoFillManaged_;
223 @synthesize autoFillManagedAndDisabled = autoFillManagedAndDisabled_;
192 @synthesize auxiliaryEnabled = auxiliaryEnabled_; 224 @synthesize auxiliaryEnabled = auxiliaryEnabled_;
193 @synthesize itemIsSelected = itemIsSelected_; 225 @synthesize itemIsSelected = itemIsSelected_;
194 @synthesize multipleSelected = multipleSelected_; 226 @synthesize multipleSelected = multipleSelected_;
195 227
196 + (void)showAutoFillDialogWithObserver:(AutoFillDialogObserver*)observer 228 + (void)showAutoFillDialogWithObserver:(AutoFillDialogObserver*)observer
197 profile:(Profile*)profile 229 profile:(Profile*)profile
198 importedProfile:(AutoFillProfile*) importedProfile 230 importedProfile:(AutoFillProfile*) importedProfile
199 importedCreditCard:(CreditCard*) importedCreditCard { 231 importedCreditCard:(CreditCard*) importedCreditCard {
200 AutoFillDialogController* controller = 232 AutoFillDialogController* controller =
201 [AutoFillDialogController controllerWithObserver:observer 233 [AutoFillDialogController controllerWithObserver:observer
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 // NSWindow Delegate callback. When the window closes the controller can 270 // NSWindow Delegate callback. When the window closes the controller can
239 // be released. 271 // be released.
240 - (void)windowWillClose:(NSNotification *)notification { 272 - (void)windowWillClose:(NSNotification *)notification {
241 [tableView_ setDataSource:nil]; 273 [tableView_ setDataSource:nil];
242 [tableView_ setDelegate:nil]; 274 [tableView_ setDelegate:nil];
243 [self autorelease]; 275 [self autorelease];
244 } 276 }
245 277
246 // Called when the user clicks the save button. 278 // Called when the user clicks the save button.
247 - (IBAction)save:(id)sender { 279 - (IBAction)save:(id)sender {
248 // If we have an |observer_| then communicate the changes back. 280 // If we have an |observer_| then communicate the changes back, unless
249 if (observer_) { 281 // AutoFill has been disabled through policy in the mean time.
250 profile_->GetPrefs()->SetBoolean(prefs::kAutoFillEnabled, autoFillEnabled_); 282 if (observer_ && !autoFillManagedAndDisabled_) {
283 prefAutoFillEnabled_.SetValueIfNotManaged(autoFillEnabled_);
251 profile_->GetPrefs()->SetBoolean(prefs::kAutoFillAuxiliaryProfilesEnabled, 284 profile_->GetPrefs()->SetBoolean(prefs::kAutoFillAuxiliaryProfilesEnabled,
252 auxiliaryEnabled_); 285 auxiliaryEnabled_);
253 observer_->OnAutoFillDialogApply(&profiles_, &creditCards_); 286 observer_->OnAutoFillDialogApply(&profiles_, &creditCards_);
254 } 287 }
255 [self closeDialog]; 288 [self closeDialog];
256 } 289 }
257 290
258 // Called when the user clicks the cancel button. All we need to do is stop 291 // Called when the user clicks the cancel button. All we need to do is stop
259 // the modal session. 292 // the modal session.
260 - (IBAction)cancel:(id)sender { 293 - (IBAction)cancel:(id)sender {
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 AutoFillDialogController* controller = 657 AutoFillDialogController* controller =
625 [[self alloc] initWithObserver:observer 658 [[self alloc] initWithObserver:observer
626 profile:profile 659 profile:profile
627 importedProfile:importedProfile 660 importedProfile:importedProfile
628 importedCreditCard:importedCreditCard]; 661 importedCreditCard:importedCreditCard];
629 return controller; 662 return controller;
630 } 663 }
631 664
632 665
633 // This is the designated initializer for this class. 666 // This is the designated initializer for this class.
634 // |profiles| are non-retained immutable list of autofill profiles. 667 // |profiles| are non-retained immutable list of AutoFill profiles.
635 // |creditCards| are non-retained immutable list of credit card info. 668 // |creditCards| are non-retained immutable list of credit card info.
636 - (id)initWithObserver:(AutoFillDialogObserver*)observer 669 - (id)initWithObserver:(AutoFillDialogObserver*)observer
637 profile:(Profile*)profile 670 profile:(Profile*)profile
638 importedProfile:(AutoFillProfile*)importedProfile 671 importedProfile:(AutoFillProfile*)importedProfile
639 importedCreditCard:(CreditCard*)importedCreditCard { 672 importedCreditCard:(CreditCard*)importedCreditCard {
640 DCHECK(profile); 673 DCHECK(profile);
641 // Use initWithWindowNibPath: instead of initWithWindowNibName: so we 674 // Use initWithWindowNibPath: instead of initWithWindowNibName: so we
642 // can override it in a unit test. 675 // can override it in a unit test.
643 NSString* nibpath = [mac_util::MainAppBundle() 676 NSString* nibpath = [mac_util::MainAppBundle()
644 pathForResource:@"AutoFillDialog" 677 pathForResource:@"AutoFillDialog"
645 ofType:@"nib"]; 678 ofType:@"nib"];
646 if ((self = [super initWithWindowNibPath:nibpath owner:self])) { 679 if ((self = [super initWithWindowNibPath:nibpath owner:self])) {
647 // Initialize member variables based on input. 680 // Initialize member variables based on input.
648 observer_ = observer; 681 observer_ = observer;
649 profile_ = profile; 682 profile_ = profile;
650 importedProfile_ = importedProfile; 683 importedProfile_ = importedProfile;
651 importedCreditCard_ = importedCreditCard; 684 importedCreditCard_ = importedCreditCard;
652 685
653 // Use property here to trigger KVO binding. 686 // Initialize the preference observer and watch kAutoFillEnabled.
654 [self setAutoFillEnabled:profile_->GetPrefs()->GetBoolean( 687 prefObserver_.reset(
655 prefs::kAutoFillEnabled)]; 688 new AutoFillDialogControllerInternal::PrefObserver(self));
689 prefAutoFillEnabled_.Init(prefs::kAutoFillEnabled, profile_->GetPrefs(),
690 prefObserver_.get());
691
692 // Call onPrefChanged in order to initialize UI state of the checkbox and
693 // save button.
694 [self onPrefChanged:prefs::kAutoFillEnabled];
656 695
657 // Use property here to trigger KVO binding. 696 // Use property here to trigger KVO binding.
658 [self setAuxiliaryEnabled:profile_->GetPrefs()->GetBoolean( 697 [self setAuxiliaryEnabled:profile_->GetPrefs()->GetBoolean(
659 prefs::kAutoFillAuxiliaryProfilesEnabled)]; 698 prefs::kAutoFillAuxiliaryProfilesEnabled)];
660 699
661 // Do not use [NSMutableArray array] here; we need predictable destruction 700 // Do not use [NSMutableArray array] here; we need predictable destruction
662 // which will be prevented by having a reference held by an autorelease 701 // which will be prevented by having a reference held by an autorelease
663 // pool. 702 // pool.
664 } 703 }
665 return self; 704 return self;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 782
744 // Make local copy of |creditCards|. 783 // Make local copy of |creditCards|.
745 for (std::vector<CreditCard*>::const_iterator iter = creditCards.begin(); 784 for (std::vector<CreditCard*>::const_iterator iter = creditCards.begin();
746 iter != creditCards.end(); ++iter) 785 iter != creditCards.end(); ++iter)
747 creditCards_.push_back(**iter); 786 creditCards_.push_back(**iter);
748 } 787 }
749 788
750 UpdateProfileLabels(&profiles_); 789 UpdateProfileLabels(&profiles_);
751 } 790 }
752 791
792 - (void)onPrefChanged:(const std::string&)prefName {
793 if (prefName == prefs::kAutoFillEnabled) {
794 [self setAutoFillEnabled:prefAutoFillEnabled_.GetValue()];
795 [self setAutoFillManaged:prefAutoFillEnabled_.IsManaged()];
796 [self setAutoFillManagedAndDisabled:
797 prefAutoFillEnabled_.IsManaged() && !prefAutoFillEnabled_.GetValue()];
798 } else {
799 NOTREACHED();
800 }
801 }
802
753 - (BOOL)isProfileRow:(NSInteger)row { 803 - (BOOL)isProfileRow:(NSInteger)row {
754 if (row > 0 && static_cast<size_t>(row) <= profiles_.size()) 804 if (row > 0 && static_cast<size_t>(row) <= profiles_.size())
755 return YES; 805 return YES;
756 return NO; 806 return NO;
757 } 807 }
758 808
759 - (BOOL)isProfileGroupRow:(NSInteger)row { 809 - (BOOL)isProfileGroupRow:(NSInteger)row {
760 if (row == 0) 810 if (row == 0)
761 return YES; 811 return YES;
762 return NO; 812 return NO;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 if (!image) { 890 if (!image) {
841 image = rb.GetNSImageNamed(IDR_INPUT_GOOD); 891 image = rb.GetNSImageNamed(IDR_INPUT_GOOD);
842 DCHECK(image); 892 DCHECK(image);
843 return image; 893 return image;
844 } 894 }
845 895
846 return nil; 896 return nil;
847 } 897 }
848 898
849 @end 899 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698