• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/ui/autofill/autofill_dialog_types.h"
6 
7 #include "base/logging.h"
8 #include "base/strings/string_split.h"
9 #include "base/strings/string_util.h"
10 
11 namespace {
12 
IsSureError(const autofill::ValidityMessage & message)13 bool IsSureError(const autofill::ValidityMessage& message) {
14   return message.sure && !message.text.empty();
15 }
16 
17 }  // namespace
18 
19 namespace autofill {
20 
21 static const base::char16 kRangeSeparator = '|';
22 
23 // Street address is multi-line, except in countries where it shares a line
24 // with other inputs (such as Coite d'Ivoire).
IsMultiline() const25 bool DetailInput::IsMultiline() const {
26   return (type == ADDRESS_HOME_STREET_ADDRESS ||
27           type == ADDRESS_BILLING_STREET_ADDRESS) &&
28       length == DetailInput::LONG;
29 }
30 
DialogNotification()31 DialogNotification::DialogNotification() : type_(NONE) {}
32 
DialogNotification(Type type,const base::string16 & display_text)33 DialogNotification::DialogNotification(Type type,
34                                        const base::string16& display_text)
35     : type_(type),
36       display_text_(display_text),
37       checked_(false) {
38   // If there's a range separated by bars, mark that as the anchor text.
39   std::vector<base::string16> pieces;
40   base::SplitStringDontTrim(display_text, kRangeSeparator, &pieces);
41   if (pieces.size() > 1) {
42     size_t start = pieces[0].size();
43     size_t end = start + pieces[1].size();
44     link_range_ = gfx::Range(start, end);
45     display_text_ = JoinString(pieces, base::string16());
46   }
47 }
48 
~DialogNotification()49 DialogNotification::~DialogNotification() {}
50 
GetBackgroundColor() const51 SkColor DialogNotification::GetBackgroundColor() const {
52   switch (type_) {
53     case DialogNotification::WALLET_USAGE_CONFIRMATION:
54       return SkColorSetRGB(0xf5, 0xf5, 0xf5);
55     case DialogNotification::REQUIRED_ACTION:
56     case DialogNotification::WALLET_ERROR:
57       return SkColorSetRGB(0xfc, 0xf3, 0xbf);
58     case DialogNotification::DEVELOPER_WARNING:
59     case DialogNotification::SECURITY_WARNING:
60       return kWarningColor;
61     case DialogNotification::NONE:
62       return SK_ColorTRANSPARENT;
63   }
64 
65   NOTREACHED();
66   return SK_ColorTRANSPARENT;
67 }
68 
GetBorderColor() const69 SkColor DialogNotification::GetBorderColor() const {
70   switch (type_) {
71     case DialogNotification::WALLET_USAGE_CONFIRMATION:
72       return SkColorSetRGB(0xe5, 0xe5, 0xe5);
73     case DialogNotification::REQUIRED_ACTION:
74     case DialogNotification::WALLET_ERROR:
75     case DialogNotification::DEVELOPER_WARNING:
76     case DialogNotification::SECURITY_WARNING:
77     case DialogNotification::NONE:
78       return GetBackgroundColor();
79   }
80 
81   NOTREACHED();
82   return SK_ColorTRANSPARENT;
83 }
84 
GetTextColor() const85 SkColor DialogNotification::GetTextColor() const {
86   switch (type_) {
87     case DialogNotification::REQUIRED_ACTION:
88     case DialogNotification::WALLET_ERROR:
89     case DialogNotification::WALLET_USAGE_CONFIRMATION:
90       return SkColorSetRGB(102, 102, 102);
91     case DialogNotification::DEVELOPER_WARNING:
92     case DialogNotification::SECURITY_WARNING:
93       return SK_ColorWHITE;
94     case DialogNotification::NONE:
95       return SK_ColorTRANSPARENT;
96   }
97 
98   NOTREACHED();
99   return SK_ColorTRANSPARENT;
100 }
101 
HasArrow() const102 bool DialogNotification::HasArrow() const {
103   return type_ == DialogNotification::WALLET_ERROR ||
104          type_ == DialogNotification::WALLET_USAGE_CONFIRMATION;
105 }
106 
HasCheckbox() const107 bool DialogNotification::HasCheckbox() const {
108   return type_ == DialogNotification::WALLET_USAGE_CONFIRMATION;
109 }
110 
111 SkColor const kWarningColor = SkColorSetRGB(0xde, 0x49, 0x32);
112 
SuggestionState()113 SuggestionState::SuggestionState()
114     : visible(false) {}
SuggestionState(bool visible,const base::string16 & vertically_compact_text,const base::string16 & horizontally_compact_text,const gfx::Image & icon,const base::string16 & extra_text,const gfx::Image & extra_icon)115 SuggestionState::SuggestionState(
116     bool visible,
117     const base::string16& vertically_compact_text,
118     const base::string16& horizontally_compact_text,
119     const gfx::Image& icon,
120     const base::string16& extra_text,
121     const gfx::Image& extra_icon)
122     : visible(visible),
123       vertically_compact_text(vertically_compact_text),
124       horizontally_compact_text(horizontally_compact_text),
125       icon(icon),
126       extra_text(extra_text),
127       extra_icon(extra_icon) {}
~SuggestionState()128 SuggestionState::~SuggestionState() {}
129 
DialogOverlayString()130 DialogOverlayString::DialogOverlayString() {}
~DialogOverlayString()131 DialogOverlayString::~DialogOverlayString() {}
132 
DialogOverlayState()133 DialogOverlayState::DialogOverlayState() {}
~DialogOverlayState()134 DialogOverlayState::~DialogOverlayState() {}
135 
ValidityMessage(const base::string16 & text,bool sure)136 ValidityMessage::ValidityMessage(const base::string16& text, bool sure)
137     : text(text), sure(sure) {}
~ValidityMessage()138 ValidityMessage::~ValidityMessage() {}
139 
ValidityMessages()140 ValidityMessages::ValidityMessages()
141     : default_message_(ValidityMessage(base::string16(), false)) {}
~ValidityMessages()142 ValidityMessages::~ValidityMessages() {}
143 
Set(ServerFieldType field,const ValidityMessage & message)144 void ValidityMessages::Set(
145     ServerFieldType field, const ValidityMessage& message) {
146   MessageMap::iterator iter = messages_.find(field);
147   if (iter != messages_.end()) {
148     if (!iter->second.text.empty())
149       return;
150 
151     messages_.erase(iter);
152   }
153 
154   messages_.insert(MessageMap::value_type(field, message));
155 }
156 
GetMessageOrDefault(ServerFieldType field) const157 const ValidityMessage& ValidityMessages::GetMessageOrDefault(
158     ServerFieldType field) const {
159   MessageMap::const_iterator iter = messages_.find(field);
160   return iter != messages_.end() ? iter->second : default_message_;
161 }
162 
HasSureError(ServerFieldType field) const163 bool ValidityMessages::HasSureError(ServerFieldType field) const {
164   return IsSureError(GetMessageOrDefault(field));
165 }
166 
HasErrors() const167 bool ValidityMessages::HasErrors() const {
168   for (MessageMap::const_iterator iter = messages_.begin();
169        iter != messages_.end(); ++iter) {
170     if (!iter->second.text.empty())
171       return true;
172   }
173   return false;
174 }
175 
HasSureErrors() const176 bool ValidityMessages::HasSureErrors() const {
177  for (MessageMap::const_iterator iter = messages_.begin();
178       iter != messages_.end(); ++iter) {
179     if (IsSureError(iter->second))
180       return true;
181   }
182   return false;
183 }
184 
185 }  // namespace autofill
186