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

Unified Diff: chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.mm

Issue 1014683007: Autofill OSX: Add "Verifying card" / "Your card is verified" status overlay. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 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/cocoa/autofill/card_unmask_prompt_view_bridge.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.mm
diff --git a/chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.mm b/chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.mm
index abdbdbfffbd8c6ea1af18a6e3892b6d7f7f164a2..ba5e6c62a33702b24044768134eb1c30e4e64c39 100644
--- a/chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.mm
+++ b/chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.mm
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
#include "base/strings/sys_string_conversions.h"
#include "chrome/browser/ui/autofill/autofill_dialog_models.h"
#include "chrome/browser/ui/autofill/card_unmask_prompt_controller.h"
@@ -23,6 +25,8 @@ namespace {
const CGFloat kButtonGap = 6.0f;
const CGFloat kDialogContentMinWidth = 210.0f;
const CGFloat kCvcInputWidth = 64.0f;
+const ui::ResourceBundle::FontStyle kProgressFontStyle =
+ chrome_style::kTitleFontStyle;
} // namespace
@@ -38,7 +42,7 @@ CardUnmaskPromptView* CardUnmaskPromptView::CreateAndShow(
CardUnmaskPromptViewBridge::CardUnmaskPromptViewBridge(
CardUnmaskPromptController* controller)
- : controller_(controller) {
+ : controller_(controller), weak_ptr_factory_(this) {
view_controller_.reset(
[[CardUnmaskPromptViewCocoa alloc] initWithBridge:this]);
@@ -61,22 +65,33 @@ void CardUnmaskPromptViewBridge::ControllerGone() {
}
void CardUnmaskPromptViewBridge::DisableAndWaitForVerification() {
- [view_controller_ setInputsEnabled:false];
- [view_controller_ updateVerifyButtonEnabled];
+ [view_controller_ setProgressOverlayText:
+ l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_IN_PROGRESS)];
}
void CardUnmaskPromptViewBridge::GotVerificationResult(
const base::string16& error_message,
bool allow_retry) {
- [view_controller_ setInputsEnabled:true];
- [view_controller_ updateVerifyButtonEnabled];
+ if (error_message.empty()) {
+ [view_controller_ setProgressOverlayText:
+ l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_SUCCESS)];
+
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, base::Bind(&CardUnmaskPromptViewBridge::PerformClose,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(1));
+ } else {
+ [view_controller_ setProgressOverlayText:base::string16()];
+ }
}
void CardUnmaskPromptViewBridge::OnConstrainedWindowClosed(
ConstrainedWindowMac* window) {
- constrained_window_.reset();
if (controller_)
controller_->OnUnmaskDialogClosed();
+ base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
}
CardUnmaskPromptController* CardUnmaskPromptViewBridge::GetController() {
@@ -98,6 +113,8 @@ void CardUnmaskPromptViewBridge::PerformClose() {
base::scoped_nsobject<NSButton> verifyButton_;
base::scoped_nsobject<NSButton> storageCheckbox_;
base::scoped_nsobject<AutofillTooltipController> storageTooltip_;
+ base::scoped_nsobject<NSView> inputRow_;
+ base::scoped_nsobject<NSTextField> progressOverlayText_;
int monthPopupDefaultIndex_;
int yearPopupDefaultIndex_;
@@ -145,10 +162,18 @@ void CardUnmaskPromptViewBridge::PerformClose() {
return self;
}
-- (void)setInputsEnabled:(BOOL)enabled {
- [cvcInput_ setEnabled:enabled];
- [monthPopup_ setEnabled:enabled];
- [yearPopup_ setEnabled:enabled];
+- (void)setProgressOverlayText:(const base::string16&)text {
+ if (!text.empty()) {
+ NSAttributedString* attributedString =
+ constrained_window::GetAttributedLabelString(
+ SysUTF16ToNSString(text), kProgressFontStyle, NSCenterTextAlignment,
+ NSLineBreakByWordWrapping);
+ [progressOverlayText_ setAttributedStringValue:attributedString];
+ }
+
+ [progressOverlayText_ setHidden:text.empty()];
+ [inputRow_ setHidden:!text.empty()];
+ [self updateVerifyButtonEnabled];
}
- (void)updateVerifyButtonEnabled {
@@ -156,7 +181,7 @@ void CardUnmaskPromptViewBridge::PerformClose() {
DCHECK(controller);
BOOL enable =
- [cvcInput_ isEnabled] &&
+ ![inputRow_ isHidden] &&
controller->InputCvcIsValid(
base::SysNSStringToUTF16([cvcInput_ stringValue])) &&
(!monthPopup_ ||
@@ -238,9 +263,8 @@ void CardUnmaskPromptViewBridge::PerformClose() {
[mainView
setContentViewMargins:NSMakeSize(chrome_style::kHorizontalPadding, 0)];
- base::scoped_nsobject<NSView> inputRowView(
- [[NSView alloc] initWithFrame:NSZeroRect]);
- [mainView addSubview:inputRowView];
+ inputRow_.reset([[NSView alloc] initWithFrame:NSZeroRect]);
+ [mainView addSubview:inputRow_];
base::scoped_nsobject<NSView> storageView(
[self createStorageViewWithController:controller]);
@@ -298,7 +322,7 @@ void CardUnmaskPromptViewBridge::PerformClose() {
NSUnionRect([monthPopup_ frame], [yearPopup_ frame]);
expirationFrame.size.width += kButtonGap;
[expirationView setFrame:expirationFrame];
- [inputRowView addSubview:expirationView];
+ [inputRow_ addSubview:expirationView];
}
// CVC text input.
@@ -311,7 +335,7 @@ void CardUnmaskPromptViewBridge::PerformClose() {
[cvcInput_ sizeToFit];
[cvcInput_ setFrame:NSMakeRect(NSMaxX([expirationView frame]), 0,
kCvcInputWidth, NSHeight([cvcInput_ frame]))];
- [inputRowView addSubview:cvcInput_];
+ [inputRow_ addSubview:cvcInput_];
// CVC image.
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
@@ -323,7 +347,7 @@ void CardUnmaskPromptViewBridge::PerformClose() {
[cvcImageView setFrameSize:[cvcImage size]];
[cvcImageView
setFrameOrigin:NSMakePoint(NSMaxX([cvcInput_ frame]) + kButtonGap, 0)];
- [inputRowView addSubview:cvcImageView];
+ [inputRow_ addSubview:cvcImageView];
// Cancel button.
base::scoped_nsobject<NSButton> cancelButton(
@@ -347,13 +371,13 @@ void CardUnmaskPromptViewBridge::PerformClose() {
[self updateVerifyButtonEnabled];
[mainView addSubview:verifyButton_];
- // Layout inputRowView.
- [CardUnmaskPromptViewCocoa sizeToFitView:inputRowView];
- [CardUnmaskPromptViewCocoa verticallyCenterSubviewsInView:inputRowView];
+ // Layout inputRow_.
+ [CardUnmaskPromptViewCocoa sizeToFitView:inputRow_];
+ [CardUnmaskPromptViewCocoa verticallyCenterSubviewsInView:inputRow_];
// Calculate dialog content width.
CGFloat contentWidth =
- std::max(NSWidth([title frame]), NSWidth([inputRowView frame]));
+ std::max(NSWidth([title frame]), NSWidth([inputRow_ frame]));
contentWidth = std::max(contentWidth, NSWidth([storageView frame]));
contentWidth = std::max(contentWidth, kDialogContentMinWidth);
@@ -374,11 +398,11 @@ void CardUnmaskPromptViewBridge::PerformClose() {
NSMinY([verifyButton_ frame]))];
// Input row.
- [inputRowView setFrameOrigin:NSMakePoint(0, NSMaxY([cancelButton frame]) +
- chrome_style::kRowPadding)];
+ [inputRow_ setFrameOrigin:NSMakePoint(0, NSMaxY([cancelButton frame]) +
+ chrome_style::kRowPadding)];
// Instruction label.
- [instructions setFrameOrigin:NSMakePoint(0, NSMaxY([inputRowView frame]) +
+ [instructions setFrameOrigin:NSMakePoint(0, NSMaxY([inputRow_ frame]) +
chrome_style::kRowPadding)];
NSSize instructionsSize = [[instructions cell]
cellSizeForBounds:NSMakeRect(0, 0, contentWidth, CGFLOAT_MAX)];
@@ -394,6 +418,18 @@ void CardUnmaskPromptViewBridge::PerformClose() {
contentWidth + [mainView contentViewMargins].width * 2.0,
NSMaxY([title frame]) + chrome_style::kTitleTopPadding)];
+ // Add progress overlay.
+ progressOverlayText_.reset([constrained_window::CreateLabel() retain]);
+ CGFloat progressHeight = ui::ResourceBundle::GetSharedInstance()
+ .GetFont(kProgressFontStyle)
+ .GetHeight();
+ // Center the text vertically within inputRow_ frame.
+ [progressOverlayText_ setFrame:NSMakeRect(0, ceil(NSMidY([inputRow_ frame]) -
+ progressHeight / 2.0),
+ contentWidth, progressHeight)];
+ [progressOverlayText_ setHidden:YES];
+ [mainView addSubview:progressOverlayText_];
+
[self setView:mainView];
}
« no previous file with comments | « chrome/browser/ui/cocoa/autofill/card_unmask_prompt_view_bridge.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698