| Index: chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc
|
| diff --git a/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc b/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc
|
| index 83223c626fefd13fdb5f8bcba82c365cc2107c6a..e5903371ffb1a764088ddefcee7fa7be0da02178 100644
|
| --- a/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc
|
| +++ b/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc
|
| @@ -11,6 +11,9 @@
|
| #include "chrome/browser/ui/views/autofill/decorated_textfield.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "components/constrained_window/constrained_window_views.h"
|
| +#include "components/web_modal/web_contents_modal_dialog_host.h"
|
| +#include "components/web_modal/web_contents_modal_dialog_manager.h"
|
| +#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h"
|
| #include "grit/theme_resources.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| @@ -70,29 +73,48 @@ class CardUnmaskPromptViews : public CardUnmaskPromptView,
|
| Layout();
|
| }
|
|
|
| - void GotVerificationResult(bool success) override {
|
| - if (success) {
|
| + void GotVerificationResult(const base::string16& error_message,
|
| + bool allow_retry) override {
|
| + if (!error_message.empty()) {
|
| progress_label_->SetText(base::ASCIIToUTF16("Success!"));
|
| base::MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE, base::Bind(&CardUnmaskPromptViews::ClosePrompt,
|
| base::Unretained(this)),
|
| base::TimeDelta::FromSeconds(1));
|
| } else {
|
| - SetInputsEnabled(true);
|
| - SetInputsInvalid(true);
|
| + SetInputsEnabled(allow_retry);
|
| +
|
| + // If there is more than one input showing, don't mark anything as invalid
|
| + // since we don't know the location of the problem.
|
| + if (controller_->ShouldRequestExpirationDate())
|
| + cvc_input_->SetInvalid(true);
|
| +
|
| // TODO(estade): it's somewhat jarring when the error comes back too
|
| // quickly.
|
| progress_overlay_->SetVisible(false);
|
| // TODO(estade): When do we hide |error_label_|?
|
| - error_label_->SetText(
|
| - base::ASCIIToUTF16("Verification error. Please try again."));
|
| + error_label_->SetMultiLine(true);
|
| + error_label_->SetText(error_message);
|
| +
|
| + // Update the dialog's size, which may change depending on
|
| + // |error_message|.
|
| + if (GetWidget() && controller_->GetWebContents()) {
|
| + constrained_window::UpdateWebContentsModalDialogPosition(
|
| + GetWidget(),
|
| + web_modal::WebContentsModalDialogManager::FromWebContents(
|
| + controller_->GetWebContents())
|
| + ->delegate()
|
| + ->GetWebContentsModalDialogHost());
|
| + }
|
| GetDialogClientView()->UpdateDialogButtons();
|
| }
|
| +
|
| Layout();
|
| }
|
|
|
| void SetInputsEnabled(bool enabled) {
|
| cvc_input_->SetEnabled(enabled);
|
| + storage_checkbox_->SetEnabled(enabled);
|
|
|
| if (month_input_)
|
| month_input_->SetEnabled(enabled);
|
| @@ -100,15 +122,6 @@ class CardUnmaskPromptViews : public CardUnmaskPromptView,
|
| year_input_->SetEnabled(enabled);
|
| }
|
|
|
| - void SetInputsInvalid(bool invalid) {
|
| - cvc_input_->SetInvalid(invalid);
|
| -
|
| - if (month_input_)
|
| - month_input_->SetInvalid(invalid);
|
| - if (year_input_)
|
| - year_input_->SetInvalid(invalid);
|
| - }
|
| -
|
| // views::DialogDelegateView
|
| View* GetContentsView() override {
|
| InitIfNecessary();
|
| @@ -120,7 +133,7 @@ class CardUnmaskPromptViews : public CardUnmaskPromptView,
|
| // Must hardcode a width so the label knows where to wrap. TODO(estade):
|
| // This can lead to a weird looking dialog if we end up getting allocated
|
| // more width than we ask for, e.g. if the title is super long.
|
| - const int kWidth = 250;
|
| + const int kWidth = 450;
|
| return gfx::Size(kWidth, GetHeightForWidth(kWidth));
|
| }
|
|
|
| @@ -209,17 +222,13 @@ class CardUnmaskPromptViews : public CardUnmaskPromptView,
|
| // views::TextfieldController
|
| void ContentsChanged(views::Textfield* sender,
|
| const base::string16& new_contents) override {
|
| - // Sets all inputs back to valid since we don't know which one was
|
| - // actually invalid to begin with.
|
| - SetInputsInvalid(false);
|
| + cvc_input_->SetInvalid(false);
|
| GetDialogClientView()->UpdateDialogButtons();
|
| }
|
|
|
| // views::ComboboxListener
|
| void OnPerformAction(views::Combobox* combobox) override {
|
| - // Sets all inputs back to valid since we don't know which one was
|
| - // actually invalid to begin with.
|
| - SetInputsInvalid(false);
|
| + combobox->SetInvalid(false);
|
| GetDialogClientView()->UpdateDialogButtons();
|
| }
|
|
|
| @@ -268,7 +277,7 @@ class CardUnmaskPromptViews : public CardUnmaskPromptView,
|
|
|
| input_row->AddChildView(cvc_image);
|
|
|
| - // Reserve vertical space.
|
| + // Reserve vertical space for the error label, assuming it's one line.
|
| error_label_ = new views::Label(base::ASCIIToUTF16(" "));
|
| error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| error_label_->SetEnabledColor(kWarningColor);
|
|
|