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 799bd76661debeaa951b38ecfe5ce79074444a02..47da81677020406efc69952ef39367f5d56f8904 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 |
@@ -27,6 +27,8 @@ namespace { |
const CGFloat kButtonGap = 6.0f; |
const CGFloat kDialogContentMinWidth = 210.0f; |
const CGFloat kCvcInputWidth = 64.0f; |
+const SkColor kPermanentErrorTextColor = 0xffffffff; |
+const SkColor kPermanentErrorBackgroundColor = 0xffd32f2f; |
const ui::ResourceBundle::FontStyle kProgressFontStyle = |
chrome_style::kTitleFontStyle; |
const ui::ResourceBundle::FontStyle kErrorFontStyle = |
@@ -88,9 +90,16 @@ void CardUnmaskPromptViewBridge::GotVerificationResult( |
base::TimeDelta::FromSeconds(1)); |
} else { |
[view_controller_ setProgressOverlayText:base::string16()]; |
- // TODO(bondd): Views version never hides |errorLabel_|. When Views decides |
- // when to hide it then do the same thing here. |
- [view_controller_ setRetriableErrorMessage:error_message]; |
+ |
+ if (allow_retry) { |
+ // TODO(bondd): Views version never hides |errorLabel_|. When Views |
+ // decides when to hide it then do the same thing here. |
+ [view_controller_ setRetriableErrorMessage:error_message]; |
+ } else { |
+ [view_controller_ setPermanentErrorMessage:error_message]; |
+ [view_controller_ setRetriableErrorMessage:base::string16()]; |
+ } |
+ [view_controller_ performLayout]; |
} |
} |
@@ -114,10 +123,12 @@ void CardUnmaskPromptViewBridge::PerformClose() { |
#pragma mark CardUnmaskPromptViewCocoa |
@implementation CardUnmaskPromptViewCocoa { |
+ base::scoped_nsobject<NSBox> permanentErrorBox_; |
base::scoped_nsobject<NSView> inputRowView_; |
base::scoped_nsobject<NSView> storageView_; |
base::scoped_nsobject<NSTextField> titleLabel_; |
+ base::scoped_nsobject<NSTextField> permanentErrorLabel_; |
base::scoped_nsobject<NSTextField> instructionsLabel_; |
base::scoped_nsobject<NSTextField> cvcInput_; |
base::scoped_nsobject<NSPopUpButton> monthPopup_; |
@@ -206,7 +217,34 @@ void CardUnmaskPromptViewBridge::PerformClose() { |
SysUTF16ToNSString(text), kErrorFontStyle, NSNaturalTextAlignment, |
NSLineBreakByWordWrapping); |
[errorLabel_ setAttributedStringValue:attributedString]; |
- [self performLayoutAndDisplay:YES]; |
+} |
+ |
+- (void)setPermanentErrorMessage:(const base::string16&)text { |
groby-ooo-7-16
2015/03/25 19:32:35
OK, I still have to harp on the naming. setRetriab
bondd
2015/03/26 00:17:59
Acknowledged.
|
+ if (!text.empty()) { |
+ if (!permanentErrorBox_) { |
+ permanentErrorBox_.reset([[NSBox alloc] initWithFrame:NSZeroRect]); |
+ [permanentErrorBox_ setBoxType:NSBoxCustom]; |
+ [permanentErrorBox_ setBorderType:NSNoBorder]; |
+ [permanentErrorBox_ setTitlePosition:NSNoTitle]; |
+ [permanentErrorBox_ setFillColor:gfx::SkColorToCalibratedNSColor( |
+ kPermanentErrorBackgroundColor)]; |
+ |
+ permanentErrorLabel_.reset([constrained_window::CreateLabel() retain]); |
+ [permanentErrorLabel_ setTextColor:gfx::SkColorToCalibratedNSColor( |
+ kPermanentErrorTextColor)]; |
+ |
+ [permanentErrorBox_ addSubview:permanentErrorLabel_]; |
+ [[self view] addSubview:permanentErrorBox_]; |
+ } |
+ |
+ NSAttributedString* attributedString = |
+ constrained_window::GetAttributedLabelString( |
+ SysUTF16ToNSString(text), kErrorFontStyle, NSNaturalTextAlignment, |
+ NSLineBreakByWordWrapping); |
+ [permanentErrorLabel_ setAttributedStringValue:attributedString]; |
+ } |
+ |
+ [permanentErrorBox_ setHidden:text.empty()]; |
} |
- (void)updateVerifyButtonEnabled { |
@@ -283,7 +321,25 @@ void CardUnmaskPromptViewBridge::PerformClose() { |
return view; |
} |
-// TODO(bondd): Add an ASCII diagram of the layout. |
+// +------------------------------------------------+ |
+// | titleLabel_ (Single line.) | |
+// |------------------------------------------------| |
+// | permanentErrorBox_ (Multiline, may be hidden.) | |
+// |------------------------------------------------| |
+// | instructionsLabel_ (Multiline.) | |
+// |------------------------------------------------| |
+// | monthPopup_ yearPopup_ cvcInput_ cvcImage | |
+// | (All enclosed in inputRowView_. Month and | |
+// | year may be hidden.) | |
+// |------------------------------------------------| |
+// | errorLabel_ (Multiline. Always takes up space | |
+// | for one line even if empty.) | |
+// |------------------------------------------------| |
+// | [Cancel] [Verify] | |
+// |------------------------------------------------| |
+// | storageCheckbox_ storageTooltip_ | |
+// | (Both enclosed in storageView_.) | |
groby-ooo-7-16
2015/03/25 19:32:35
Yay! +1 for ASCII diagrams! (No, really - this is
bondd
2015/03/26 00:17:59
Woo!
|
+// +------------------------------------------------+ |
- (void)performLayoutAndDisplay:(BOOL)display { |
// Calculate dialog content width. |
CGFloat contentWidth = |
@@ -316,9 +372,22 @@ void CardUnmaskPromptViewBridge::PerformClose() { |
[CardUnmaskPromptViewCocoa sizeTextField:instructionsLabel_ |
toFitWidth:contentWidth]; |
- [titleLabel_ |
- setFrameOrigin:NSMakePoint(0, NSMaxY([instructionsLabel_ frame]) + |
- chrome_style::kRowPadding)]; |
+ // Layout permanent error box. |
+ CGFloat minY = NSMaxY([instructionsLabel_ frame]) + chrome_style::kRowPadding; |
groby-ooo-7-16
2015/03/25 19:32:35
[permanentErrorBox_ setFrame:NSMakeRect(0, minY, c
bondd
2015/03/26 00:17:59
Nice! Done.
|
+ if (permanentErrorBox_ && ![permanentErrorBox_ isHidden]) { |
+ CGFloat errorBoxContentWidth = |
+ contentWidth - [permanentErrorBox_ contentViewMargins].width * 2.0; |
+ [CardUnmaskPromptViewCocoa sizeTextField:permanentErrorLabel_ |
groby-ooo-7-16
2015/03/25 19:32:35
Sorry. My brain was stuck. This functionality exis
bondd
2015/03/26 00:17:59
Done.
|
+ toFitWidth:errorBoxContentWidth]; |
+ |
+ [permanentErrorBox_ sizeToFit]; |
+ [permanentErrorBox_ |
+ setFrame:NSMakeRect(0, minY, contentWidth, |
+ NSHeight([permanentErrorBox_ frame]))]; |
+ minY = NSMaxY([permanentErrorBox_ frame]) + chrome_style::kRowPadding; |
groby-ooo-7-16
2015/03/25 19:32:35
I'm tempted to suggest a "NextRow" helper.
bondd
2015/03/26 00:17:59
Acknowledged. This layout code is in flux right no
|
+ } |
+ |
+ [titleLabel_ setFrameOrigin:NSMakePoint(0, minY)]; |
// Center progressOverlayLabel_ vertically within inputRowView_ frame. |
CGFloat progressHeight = ui::ResourceBundle::GetSharedInstance() |
@@ -341,6 +410,10 @@ void CardUnmaskPromptViewBridge::PerformClose() { |
[[[self view] window] setFrame:frameRect display:display]; |
} |
+- (void)performLayout { |
+ [self performLayoutAndDisplay:YES]; |
+} |
+ |
- (void)loadView { |
autofill::CardUnmaskPromptController* controller = bridge_->GetController(); |
DCHECK(controller); |