• 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 #ifndef CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_TYPES_H_
6 #define CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_TYPES_H_
7 
8 #include <map>
9 #include <vector>
10 
11 #include "base/callback_forward.h"
12 #include "base/strings/string16.h"
13 #include "base/time/time.h"
14 #include "components/autofill/core/browser/autofill_metrics.h"
15 #include "components/autofill/core/browser/field_types.h"
16 #include "third_party/skia/include/core/SkColor.h"
17 #include "ui/gfx/font_list.h"
18 #include "ui/gfx/image/image.h"
19 #include "ui/gfx/range/range.h"
20 #include "ui/gfx/text_constants.h"
21 #include "url/gurl.h"
22 
23 namespace autofill {
24 
25 class AutofillField;
26 
27 // This struct describes a single input control for the imperative autocomplete
28 // dialog.
29 struct DetailInput {
30   enum Length {
31     SHORT,      // Shares a line with other short inputs, like display: inline.
32     SHORT_EOL,  // Like SHORT but starts a new line directly afterward. Used to
33                 // separate groups of short inputs into different lines.
34     LONG,       // Will be given its own full line, like display: block.
35     NONE,       // Input will not be shown.
36   };
37 
38   // Returns whether this input can spread across multiple lines.
39   bool IsMultiline() const;
40 
41   // Used to determine which inputs share lines when laying out.
42   Length length;
43 
44   ServerFieldType type;
45 
46   // Text shown when the input is at its default state (e.g. empty).
47   base::string16 placeholder_text;
48 
49   // A number between 0 and 1.0 that describes how much of the horizontal space
50   // in the row should be allotted to this input. 0 is equivalent to 1.
51   float expand_weight;
52 
53   // When non-empty, indicates the starting value for this input. This will be
54   // used when the user is editing existing data.
55   base::string16 initial_value;
56 };
57 
58 // Sections of the dialog --- all fields that may be shown to the user fit under
59 // one of these sections.
60 enum DialogSection {
61   // Lower boundary value for looping over all sections.
62   SECTION_MIN,
63 
64   // The Autofill-backed dialog uses separate CC and billing sections.
65   SECTION_CC = SECTION_MIN,
66   SECTION_BILLING,
67   // The wallet-backed dialog uses a combined CC and billing section.
68   SECTION_CC_BILLING,
69   SECTION_SHIPPING,
70 
71   // Upper boundary value for looping over all sections.
72   SECTION_MAX = SECTION_SHIPPING
73 };
74 
75 // A notification to show in the autofill dialog. Ranges from information to
76 // seriously scary security messages, and will give you the color it should be
77 // displayed (if you ask it).
78 class DialogNotification {
79  public:
80   enum Type {
81     NONE,
82     DEVELOPER_WARNING,
83     REQUIRED_ACTION,
84     SECURITY_WARNING,
85     WALLET_ERROR,
86     WALLET_USAGE_CONFIRMATION,
87   };
88 
89   DialogNotification();
90   DialogNotification(Type type, const base::string16& display_text);
91   ~DialogNotification();
92 
93   // Returns the appropriate background, border, or text color for the view's
94   // notification area based on |type_|.
95   SkColor GetBackgroundColor() const;
96   SkColor GetBorderColor() const;
97   SkColor GetTextColor() const;
98 
99   // Whether this notification has an arrow pointing up at the account chooser.
100   bool HasArrow() const;
101 
102   // Whether this notifications has the "Save details to wallet" checkbox.
103   bool HasCheckbox() const;
104 
type()105   Type type() const { return type_; }
display_text()106   const base::string16& display_text() const { return display_text_; }
107 
set_link_url(const GURL & link_url)108   void set_link_url(const GURL& link_url) { link_url_ = link_url; }
link_url()109   const GURL& link_url() const { return link_url_; }
110 
link_range()111   const gfx::Range& link_range() const { return link_range_; }
112 
set_tooltip_text(const base::string16 & tooltip_text)113   void set_tooltip_text(const base::string16& tooltip_text) {
114     tooltip_text_ = tooltip_text;
115   }
tooltip_text()116   const base::string16& tooltip_text() const { return tooltip_text_; }
117 
set_checked(bool checked)118   void set_checked(bool checked) { checked_ = checked; }
checked()119   bool checked() const { return checked_; }
120 
121  private:
122   Type type_;
123   base::string16 display_text_;
124 
125   // If the notification includes a link, these describe the destination and
126   // which part of |display_text_| is the anchor text.
127   GURL link_url_;
128   gfx::Range link_range_;
129 
130   // When non-empty, indicates that a tooltip should be shown on the end of
131   // the notification.
132   base::string16 tooltip_text_;
133 
134   // Whether the dialog notification's checkbox should be checked. Only applies
135   // when |HasCheckbox()| is true.
136   bool checked_;
137 };
138 
139 extern SkColor const kWarningColor;
140 
141 struct SuggestionState {
142   SuggestionState();
143   SuggestionState(bool visible,
144                   const base::string16& vertically_compact_text,
145                   const base::string16& horizontally_compact_text,
146                   const gfx::Image& icon,
147                   const base::string16& extra_text,
148                   const gfx::Image& extra_icon);
149   ~SuggestionState();
150 
151   // Whether a suggestion should be shown.
152   bool visible;
153 
154   // Text to be shown for the suggestion. This should be preferred over
155   // |horizontally_compact_text| when there's enough horizontal space available
156   // to display it. When there's not enough space, fall back to
157   // |horizontally_compact_text|.
158   base::string16 vertically_compact_text;
159   base::string16 horizontally_compact_text;
160 
161   gfx::Image icon;
162   base::string16 extra_text;
163   gfx::Image extra_icon;
164 };
165 
166 // A struct to describe a textual message within a dialog overlay.
167 struct DialogOverlayString {
168   DialogOverlayString();
169   ~DialogOverlayString();
170 
171   // Text content of the message.
172   base::string16 text;
173 
174   // Font list to render the message's text in.
175   gfx::FontList font_list;
176 };
177 
178 // A struct to describe a dialog overlay. If |image| is empty, no overlay should
179 // be shown.
180 struct DialogOverlayState {
181   DialogOverlayState();
182   ~DialogOverlayState();
183 
184   // If empty, there should not be an overlay. If non-empty, an image that is
185   // more or less front and center.
186   gfx::Image image;
187 
188   // Message to display.
189   DialogOverlayString string;
190 };
191 
192 enum ValidationType {
193   VALIDATE_EDIT,   // Validate user edits. Allow for empty fields.
194   VALIDATE_FINAL,  // Full form validation. Required fields can't be empty.
195 };
196 
197 typedef std::vector<DetailInput> DetailInputs;
198 typedef std::map<ServerFieldType, base::string16> FieldValueMap;
199 
200 // A validity message for a single input field.
201 struct ValidityMessage {
202   ValidityMessage(const base::string16& text, bool sure);
203   ~ValidityMessage();
204 
205   // Message text. If not empty, error text. If empty, indicates valid field.
206   base::string16 text;
207 
208   // If |sure| is true, always display message. If it is false,
209   // only display on final validation (i.e. after the user has attempted to
210   // submit).
211   bool sure;
212 };
213 
214 // A mapping of field types to their corresponding ValidityMessage results.
215 class ValidityMessages {
216  public:
217   ValidityMessages();
218   ~ValidityMessages();
219 
220   // Sets the message for |field|, but will not overwrite a previous, invalid
221   // message.
222   void Set(ServerFieldType field, const ValidityMessage& message);
223   const ValidityMessage& GetMessageOrDefault(ServerFieldType field) const;
224 
225   bool HasSureError(ServerFieldType field) const;
226   bool HasErrors() const;
227   bool HasSureErrors() const;
228 
229  private:
230   typedef std::map<ServerFieldType, ValidityMessage> MessageMap;
231   MessageMap messages_;
232   ValidityMessage default_message_;
233 };
234 
235 }  // namespace autofill
236 
237 #endif  // CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_TYPES_H_
238