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

Unified 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, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/autofill_dialog_controller_mac.mm
diff --git a/chrome/browser/autofill/autofill_dialog_controller_mac.mm b/chrome/browser/autofill/autofill_dialog_controller_mac.mm
index fe28c531bb78ff6da69a67418761b4541c58cff2..44405c0e9c25c7e94f4aabd403886bd18878370e 100644
--- a/chrome/browser/autofill/autofill_dialog_controller_mac.mm
+++ b/chrome/browser/autofill/autofill_dialog_controller_mac.mm
@@ -18,6 +18,8 @@
#import "chrome/browser/cocoa/window_size_autosaver.h"
#include "chrome/browser/pref_service.h"
#include "chrome/browser/profile.h"
+#include "chrome/common/notification_details.h"
+#include "chrome/common/notification_observer.h"
#include "chrome/common/pref_names.h"
#include "grit/generated_resources.h"
#include "grit/app_resources.h"
@@ -85,6 +87,10 @@ void UpdateProfileLabels(std::vector<AutoFillProfile>* input) {
- (void)onPersonalDataLoaded:(const std::vector<AutoFillProfile*>&)profiles
creditCards:(const std::vector<CreditCard*>&)creditCards;
+// Called upon changes to AutoFill preferences that should be reflected in the
+// UI.
+- (void)onPrefChanged:(const std::string&)prefName;
+
// Returns true if |row| is an index to a valid profile in |tableView_|, and
// false otherwise.
- (BOOL)isProfileRow:(NSInteger)row;
@@ -184,11 +190,37 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() {
creditCards:personal_data_manager_->credit_cards()];
}
+// Bridges preference changed notifications to the dialog controller.
+class PrefObserver : public NotificationObserver {
+ public:
+ explicit PrefObserver(AutoFillDialogController* controller)
+ : controller_(controller) {}
+
+ // Overridden from NotificationObserver:
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == NotificationType::PREF_CHANGED) {
+ const std::string* pref = Details<std::string>(details).ptr();
+ if (pref) {
+ [controller_ onPrefChanged:*pref];
+ }
+ }
+ }
+
+ private:
+ AutoFillDialogController* controller_;
+
+ DISALLOW_COPY_AND_ASSIGN(PrefObserver);
+};
+
} // namespace AutoFillDialogControllerInternal
@implementation AutoFillDialogController
@synthesize autoFillEnabled = autoFillEnabled_;
+@synthesize autoFillManaged = autoFillManaged_;
+@synthesize autoFillManagedAndDisabled = autoFillManagedAndDisabled_;
@synthesize auxiliaryEnabled = auxiliaryEnabled_;
@synthesize itemIsSelected = itemIsSelected_;
@synthesize multipleSelected = multipleSelected_;
@@ -245,9 +277,10 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() {
// Called when the user clicks the save button.
- (IBAction)save:(id)sender {
- // If we have an |observer_| then communicate the changes back.
- if (observer_) {
- profile_->GetPrefs()->SetBoolean(prefs::kAutoFillEnabled, autoFillEnabled_);
+ // If we have an |observer_| then communicate the changes back, unless
+ // AutoFill has been disabled through policy in the mean time.
+ if (observer_ && !autoFillManagedAndDisabled_) {
+ prefAutoFillEnabled_.SetValueIfNotManaged(autoFillEnabled_);
profile_->GetPrefs()->SetBoolean(prefs::kAutoFillAuxiliaryProfilesEnabled,
auxiliaryEnabled_);
observer_->OnAutoFillDialogApply(&profiles_, &creditCards_);
@@ -631,7 +664,7 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() {
// This is the designated initializer for this class.
-// |profiles| are non-retained immutable list of autofill profiles.
+// |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
@@ -650,9 +683,15 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() {
importedProfile_ = importedProfile;
importedCreditCard_ = importedCreditCard;
- // Use property here to trigger KVO binding.
- [self setAutoFillEnabled:profile_->GetPrefs()->GetBoolean(
- prefs::kAutoFillEnabled)];
+ // Initialize the preference observer and watch kAutoFillEnabled.
+ prefObserver_.reset(
+ new AutoFillDialogControllerInternal::PrefObserver(self));
+ prefAutoFillEnabled_.Init(prefs::kAutoFillEnabled, profile_->GetPrefs(),
+ prefObserver_.get());
+
+ // Call onPrefChanged in order to initialize UI state of the checkbox and
+ // save button.
+ [self onPrefChanged:prefs::kAutoFillEnabled];
// Use property here to trigger KVO binding.
[self setAuxiliaryEnabled:profile_->GetPrefs()->GetBoolean(
@@ -750,6 +789,17 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() {
UpdateProfileLabels(&profiles_);
}
+- (void)onPrefChanged:(const std::string&)prefName {
+ if (prefName == prefs::kAutoFillEnabled) {
+ [self setAutoFillEnabled:prefAutoFillEnabled_.GetValue()];
+ [self setAutoFillManaged:prefAutoFillEnabled_.IsManaged()];
+ [self setAutoFillManagedAndDisabled:
+ prefAutoFillEnabled_.IsManaged() && !prefAutoFillEnabled_.GetValue()];
+ } else {
+ NOTREACHED();
+ }
+}
+
- (BOOL)isProfileRow:(NSInteger)row {
if (row > 0 && static_cast<size_t>(row) <= profiles_.size())
return YES;

Powered by Google App Engine
This is Rietveld 408576698