Index: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
index ce1a2d12eef334d1af7c0a85133a75cedf87bf0c..0fafc8c04f8a74df95d13800bed94ed1543b4e73 100644 |
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
@@ -778,23 +778,27 @@ void AutofillDialogControllerImpl::EnsureLegalDocumentsText() { |
void AutofillDialogControllerImpl::PrepareDetailInputsForSection( |
DialogSection section) { |
- // Reset all previously entered data and stop editing |section|. |
- DetailInputs* inputs = MutableRequestedFieldsForSection(section); |
- for (size_t i = 0; i < inputs->size(); ++i) { |
- (*inputs)[i].initial_value.clear(); |
- } |
section_editing_state_[section] = false; |
+ scoped_ptr<DataModelWrapper> wrapper = CreateWrapper(section); |
// If the chosen item in |model| yields an empty suggestion text, it is |
// invalid. In this case, show the editing UI with invalid fields highlighted. |
SuggestionsMenuModel* model = SuggestionsMenuModelForSection(section); |
if (IsASuggestionItemKey(model->GetItemKeyForCheckedItem()) && |
SuggestionTextForSection(section).empty()) { |
- scoped_ptr<DataModelWrapper> wrapper = CreateWrapper(section); |
- wrapper->FillInputs(MutableRequestedFieldsForSection(section)); |
section_editing_state_[section] = true; |
} |
+ // Reset all previously entered data and stop editing |section|. |
+ DetailInputs* inputs = MutableRequestedFieldsForSection(section); |
+ for (DetailInputs::iterator it = inputs->begin(); it != inputs->end(); ++it) { |
+ it->initial_value.clear(); |
+ it->editable = InputIsEditable(*it, section); |
+ } |
+ |
+ if (wrapper && section_editing_state_[section]) |
+ wrapper->FillInputs(inputs); |
+ |
if (view_) |
view_->UpdateSection(section); |
} |
@@ -1080,8 +1084,14 @@ bool AutofillDialogControllerImpl::EditEnabledForSection( |
void AutofillDialogControllerImpl::EditClickedForSection( |
DialogSection section) { |
scoped_ptr<DataModelWrapper> model = CreateWrapper(section); |
- model->FillInputs(MutableRequestedFieldsForSection(section)); |
section_editing_state_[section] = true; |
+ |
+ DetailInputs* inputs = MutableRequestedFieldsForSection(section); |
+ for (DetailInputs::iterator it = inputs->begin(); it != inputs->end(); ++it) { |
+ it->editable = InputIsEditable(*it, section); |
+ } |
+ model->FillInputs(inputs); |
+ |
view_->UpdateSection(section); |
GetMetricLogger().LogDialogUiEvent( |
@@ -2361,6 +2371,20 @@ bool AutofillDialogControllerImpl::IsManuallyEditingAnySection() const { |
return false; |
} |
+bool AutofillDialogControllerImpl::InputIsEditable( |
+ const DetailInput& input, |
+ DialogSection section) const { |
+ if (input.type != CREDIT_CARD_NUMBER || !IsPayingWithWallet()) |
+ return true; |
+ |
+ std::map<DialogSection, bool>::const_iterator it = |
+ section_editing_state_.find(section); |
+ if (it != section_editing_state_.end() && it->second) |
+ return false; |
+ |
+ return true; |
+} |
+ |
bool AutofillDialogControllerImpl::AllSectionsAreValid() const { |
for (size_t section = SECTION_MIN; section <= SECTION_MAX; ++section) { |
if (!SectionIsValid(static_cast<DialogSection>(section))) |