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

Unified Diff: chrome/browser/ui/views/autofill/autofill_dialog_views.cc

Issue 12893007: Implementing VERIFY_CVV required action. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 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
« no previous file with comments | « chrome/browser/ui/views/autofill/autofill_dialog_views.h ('k') | components/autofill/browser/credit_card.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/autofill/autofill_dialog_views.cc
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
index b47ee0d82f26df79a9d581e621b4d2e6e345eb9d..0e9872b950b386c473de874a7a8798a087140b3f 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -22,6 +22,7 @@
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/combobox_model.h"
+#include "ui/base/models/menu_model.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
#include "ui/views/background.h"
@@ -351,10 +352,11 @@ AutofillDialogViews::SectionContainer::SectionContainer(
AutofillDialogViews::SectionContainer::~SectionContainer() {}
void AutofillDialogViews::SectionContainer::SetActive(bool active) {
- if (active == !!background())
+ bool is_active = active && proxy_button_->visible();
+ if (is_active == !!background())
return;
- set_background(active ?
+ set_background(is_active ?
views::Background::CreateSolidBackground(SkColorSetARGB(9, 0, 0, 0)):
NULL);
SchedulePaint();
@@ -429,7 +431,8 @@ AutofillDialogViews::SuggestionView::SuggestionView(
icon_(new views::ImageView()),
label_container_(new views::View()),
decorated_(
- new DecoratedTextfield(string16(), string16(), autofill_dialog)) {
+ new DecoratedTextfield(string16(), string16(), autofill_dialog)),
+ edit_link_(new views::Link(edit_label)) {
// Label and icon.
label_container_->SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0,
@@ -447,16 +450,15 @@ AutofillDialogViews::SuggestionView::SuggestionView(
AddChildView(label_line_2_);
// TODO(estade): The link needs to have a different color when hovered.
- views::Link* edit_link = new views::Link(edit_label);
- edit_link->set_listener(autofill_dialog);
- edit_link->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- edit_link->SetUnderline(false);
+ edit_link_->set_listener(autofill_dialog);
+ edit_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ edit_link_->SetUnderline(false);
// This container prevents the edit link from being horizontally stretched.
views::View* link_container = new views::View();
link_container->SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
- link_container->AddChildView(edit_link);
+ link_container->AddChildView(edit_link_);
AddChildView(link_container);
SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
@@ -464,6 +466,10 @@ AutofillDialogViews::SuggestionView::SuggestionView(
AutofillDialogViews::SuggestionView::~SuggestionView() {}
+void AutofillDialogViews::SuggestionView::SetEditable(bool editable) {
+ edit_link_->SetVisible(editable);
+}
+
void AutofillDialogViews::SuggestionView::SetSuggestionText(
const string16& text) {
// TODO(estade): does this localize well?
@@ -647,8 +653,10 @@ void AutofillDialogViews::GetUserInput(DialogSection section,
}
string16 AutofillDialogViews::GetCvc() {
- return GroupForSection(SECTION_CC)->suggested_info->decorated_textfield()->
- textfield()->text();
+ DialogSection billing_section = controller_->SectionIsActive(SECTION_CC) ?
+ SECTION_CC : SECTION_CC_BILLING;
+ return GroupForSection(billing_section)->suggested_info->
+ decorated_textfield()->textfield()->text();
}
bool AutofillDialogViews::UseBillingForShipping() {
@@ -763,12 +771,10 @@ bool AutofillDialogViews::Cancel() {
}
bool AutofillDialogViews::Accept() {
- if (!ValidateForm())
- return false;
+ if (ValidateForm())
+ controller_->OnAccept();
- controller_->OnSubmit();
-
- // Let |controller_| decide when to hide the dialog.
+ // |controller_| decides when to hide the dialog.
return false;
}
@@ -799,6 +805,9 @@ void AutofillDialogViews::ButtonPressed(views::Button* sender,
}
DCHECK(group);
+ if (!group->suggested_button->visible())
+ return;
+
menu_runner_.reset(new views::MenuRunner(
controller_->MenuModelForSection(group->section)));
@@ -851,7 +860,7 @@ void AutofillDialogViews::OnDidChangeFocus(
// If user leaves an edit-field, revalidate the group it belongs to.
DetailsGroup* group = GroupForView(focused_before);
- if (group)
+ if (group && group->container->visible())
ValidateGroup(group, AutofillDialogController::VALIDATE_EDIT);
}
@@ -988,7 +997,7 @@ views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) {
layout->StartRow(0, kColumnSetId);
// The |info_view| holds |manual_inputs| and |suggested_info|, allowing the
- // dialog toggle which is shown.
+ // dialog to toggle which is shown.
views::View* info_view = new views::View();
info_view->SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
@@ -1008,14 +1017,6 @@ views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) {
info_view->AddChildView(suggested_info);
layout->AddView(info_view);
- if (section == SECTION_CC) {
- // TODO(estade): don't hardcode this string.
- suggested_info->ShowTextfield(
- ASCIIToUTF16("CVC"),
- controller_->IconForField(CREDIT_CARD_VERIFICATION_CODE,
- string16()).AsImageSkia());
- }
-
// TODO(estade): Fix the appearance of this button.
views::ImageButton* menu_button = new views::ImageButton(this);
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
@@ -1103,13 +1104,19 @@ views::View* AutofillDialogViews::InitInputsView(DialogSection section) {
}
void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) {
- string16 suggestion_text =
- controller_->SuggestionTextForSection(group.section);
- bool show_suggestions = !suggestion_text.empty();
+ const SuggestionState& suggestion_state =
+ controller_->SuggestionStateForSection(group.section);
+ bool show_suggestions = !suggestion_state.text.empty();
group.suggested_info->SetVisible(show_suggestions);
- group.suggested_info->SetSuggestionText(suggestion_text);
- gfx::Image icon = controller_->SuggestionIconForSection(group.section);
- group.suggested_info->SetSuggestionIcon(icon);
+ group.suggested_info->SetSuggestionText(suggestion_state.text);
+ group.suggested_info->SetSuggestionIcon(suggestion_state.icon);
+ group.suggested_info->SetEditable(suggestion_state.editable);
+
+ if (!suggestion_state.extra_text.empty()) {
+ group.suggested_info->ShowTextfield(
+ suggestion_state.extra_text,
+ suggestion_state.extra_icon.AsImageSkia());
+ }
if (group.section == SECTION_SHIPPING) {
bool show_checkbox = !show_suggestions;
@@ -1131,8 +1138,14 @@ void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) {
save_in_chrome_checkbox_->SetVisible(
controller_->ShouldOfferToSaveInChrome() && AtLeastOneSectionIsEditing());
+ const bool has_suggestions =
+ controller_->MenuModelForSection(group.section)->GetItemCount() > 0;
+
+ if (group.suggested_button)
+ group.suggested_button->SetVisible(has_suggestions);
+
if (group.container) {
- group.container->SetForwardMouseEvents(show_suggestions);
+ group.container->SetForwardMouseEvents(has_suggestions && show_suggestions);
group.container->SetVisible(controller_->SectionIsActive(group.section));
}
@@ -1213,8 +1226,8 @@ bool AutofillDialogViews::ValidateForm() {
if (!group->container->visible())
continue;
- if (!ValidateGroup(group, AutofillDialogController::VALIDATE_FINAL))
- all_valid = false;
+ if (!ValidateGroup(group, AutofillDialogController::VALIDATE_FINAL))
+ all_valid = false;
}
return all_valid;
« no previous file with comments | « chrome/browser/ui/views/autofill/autofill_dialog_views.h ('k') | components/autofill/browser/credit_card.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698