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

Side by Side Diff: chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc

Issue 2895473005: [Payments] Have expiration date be on the same line in CC editor (Closed)
Patch Set: addressed comments + rebase Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/payments/credit_card_editor_view_controller.h" 5 #include "chrome/browser/ui/views/payments/credit_card_editor_view_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 years.reserve(kNumberOfExpirationYears); 80 years.reserve(kNumberOfExpirationYears);
81 81
82 base::Time::Exploded now_exploded; 82 base::Time::Exploded now_exploded;
83 autofill::AutofillClock::Now().LocalExplode(&now_exploded); 83 autofill::AutofillClock::Now().LocalExplode(&now_exploded);
84 for (int i = 0; i < kNumberOfExpirationYears; i++) { 84 for (int i = 0; i < kNumberOfExpirationYears; i++) {
85 years.push_back(base::UTF8ToUTF16(std::to_string(now_exploded.year + i))); 85 years.push_back(base::UTF8ToUTF16(std::to_string(now_exploded.year + i)));
86 } 86 }
87 return years; 87 return years;
88 } 88 }
89 89
90 bool IsCardExpired(const base::string16& month,
91 base::string16& year,
92 const std::string& app_locale) {
93 autofill::CreditCard card;
94 card.SetExpirationMonthFromString(month, app_locale);
95 card.SetExpirationYearFromString(year);
96 return card.IsExpired(autofill::AutofillClock::Now());
97 }
98
99 // Validates the two comboboxes used for expiration date.
100 class ExpirationDateValidationDelegate : public ValidationDelegate {
101 public:
102 ExpirationDateValidationDelegate(EditorViewController* controller,
103 const std::string& app_locale)
104 : controller_(controller), app_locale_(app_locale) {}
105
106 bool IsValidTextfield(views::Textfield* textfield) override { return true; }
anthonyvd 2017/05/22 13:18:17 nit: NOTREACHED() ?
Mathieu 2017/05/22 16:30:40 Done.
107
108 bool IsValidCombobox(views::Combobox* combobox) override {
109 // Get the combined date from the month and year dropdowns.
110 views::View* view_parent = combobox->parent();
111
112 views::Combobox* month_combobox = static_cast<views::Combobox*>(
113 view_parent->GetViewByID(EditorViewController::GetInputFieldViewId(
114 autofill::CREDIT_CARD_EXP_MONTH)));
115 base::string16 month =
116 month_combobox->model()->GetItemAt(month_combobox->selected_index());
117
118 views::Combobox* year_combobox = static_cast<views::Combobox*>(
119 view_parent->GetViewByID(EditorViewController::GetInputFieldViewId(
120 autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR)));
121 base::string16 year =
122 year_combobox->model()->GetItemAt(year_combobox->selected_index());
123
124 bool is_expired = IsCardExpired(month, year, app_locale_);
125 month_combobox->SetInvalid(is_expired);
126 year_combobox->SetInvalid(is_expired);
127
128 return !is_expired;
129 }
130
131 bool TextfieldValueChanged(views::Textfield* textfield) override {
132 return true;
anthonyvd 2017/05/22 13:18:17 nit NOTREACHED() ?
Mathieu 2017/05/22 16:30:40 Done.
133 }
134
135 bool ComboboxValueChanged(views::Combobox* combobox) override {
136 bool is_valid = IsValidCombobox(combobox);
137 controller_->DisplayErrorMessageForField(
138 autofill::CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
139 is_valid ? base::string16()
140 : l10n_util::GetStringUTF16(
141 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED));
142 return is_valid;
143 }
144
145 void ComboboxModelChanged(views::Combobox* combobox) override {}
146
147 private:
148 EditorViewController* controller_;
149 const std::string app_locale_;
150
151 DISALLOW_COPY_AND_ASSIGN(ExpirationDateValidationDelegate);
152 };
153
90 } // namespace 154 } // namespace
91 155
92 CreditCardEditorViewController::CreditCardEditorViewController( 156 CreditCardEditorViewController::CreditCardEditorViewController(
93 PaymentRequestSpec* spec, 157 PaymentRequestSpec* spec,
94 PaymentRequestState* state, 158 PaymentRequestState* state,
95 PaymentRequestDialogView* dialog, 159 PaymentRequestDialogView* dialog,
96 BackNavigationType back_navigation, 160 BackNavigationType back_navigation,
97 int next_ui_tag, 161 int next_ui_tag,
98 base::OnceClosure on_edited, 162 base::OnceClosure on_edited,
99 base::OnceCallback<void(const autofill::CreditCard&)> on_added, 163 base::OnceCallback<void(const autofill::CreditCard&)> on_added,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 card_icon_view->SetImageSize(kCardIconSize); 222 card_icon_view->SetImageSize(kCardIconSize);
159 223
160 icons_row->AddChildView(card_icon_view.release()); 224 icons_row->AddChildView(card_icon_view.release());
161 } 225 }
162 view->AddChildView(icons_row.release()); 226 view->AddChildView(icons_row.release());
163 227
164 return view; 228 return view;
165 } 229 }
166 230
167 std::unique_ptr<views::View> 231 std::unique_ptr<views::View>
232 CreditCardEditorViewController::CreateCustomFieldView(
233 autofill::ServerFieldType type,
234 views::View** focusable_field,
235 bool* valid) {
236 DCHECK_EQ(type, autofill::CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR);
237
238 std::unique_ptr<views::View> view = base::MakeUnique<views::View>();
239 std::unique_ptr<views::GridLayout> combobox_layout =
240 base::MakeUnique<views::GridLayout>(view.get());
241 // Column set for short fields.
anthonyvd 2017/05/22 13:18:17 nit: not sure this comment is relevant anymore
Mathieu 2017/05/22 16:30:40 Done.
242 views::ColumnSet* columns = combobox_layout->AddColumnSet(0);
243 columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1,
244 views::GridLayout::USE_PREF, 0, 0);
245 // Space between the two comboboxes.
246 constexpr int kHorizontalSpacing = 8;
247 columns->AddPaddingColumn(0, kHorizontalSpacing);
248 columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1,
249 views::GridLayout::USE_PREF, 0, 0);
250
251 combobox_layout->StartRow(0, 0);
252 constexpr int kInputFieldHeight = 28;
253 EditorField tmp_month{autofill::CREDIT_CARD_EXP_MONTH, base::string16(),
254 EditorField::LengthHint::HINT_SHORT,
255 /*required=*/true, EditorField::ControlType::COMBOBOX};
256 std::unique_ptr<ValidatingCombobox> month_combobox =
257 CreateComboboxForField(tmp_month);
258 *focusable_field = month_combobox.get();
259 combobox_layout->AddView(month_combobox.release(), 1, 1,
260 views::GridLayout::FILL, views::GridLayout::FILL, 0,
261 kInputFieldHeight);
262
263 EditorField tmp_year{autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, base::string16(),
264 EditorField::LengthHint::HINT_SHORT,
265 /*required=*/true, EditorField::ControlType::COMBOBOX};
266 std::unique_ptr<ValidatingCombobox> year_combobox =
267 CreateComboboxForField(tmp_year);
268 combobox_layout->AddView(year_combobox.release(), 1, 1,
269 views::GridLayout::FILL, views::GridLayout::FILL, 0,
270 kInputFieldHeight);
271
272 view->SetLayoutManager(combobox_layout.release());
273
274 // Set the initial validity of the custom view.
275 base::string16 month =
276 GetInitialValueForType(autofill::CREDIT_CARD_EXP_MONTH);
277 base::string16 year =
278 GetInitialValueForType(autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR);
279 *valid = IsCardExpired(month, year, state()->GetApplicationLocale());
280 return view;
281 }
282
283 std::unique_ptr<views::View>
168 CreditCardEditorViewController::CreateExtraViewForField( 284 CreditCardEditorViewController::CreateExtraViewForField(
169 autofill::ServerFieldType type) { 285 autofill::ServerFieldType type) {
170 if (type != kBillingAddressType) 286 if (type != kBillingAddressType)
171 return nullptr; 287 return nullptr;
172 288
173 std::unique_ptr<views::View> button_view = base::MakeUnique<views::View>(); 289 std::unique_ptr<views::View> button_view = base::MakeUnique<views::View>();
174 button_view->SetLayoutManager(new views::FillLayout); 290 button_view->SetLayoutManager(new views::FillLayout);
175 291
176 // The button to add new billing addresses. 292 // The button to add new billing addresses.
177 std::unique_ptr<views::Button> add_button( 293 std::unique_ptr<views::Button> add_button(
178 views::MdTextButton::Create(this, l10n_util::GetStringUTF16(IDS_ADD))); 294 views::MdTextButton::Create(this, l10n_util::GetStringUTF16(IDS_ADD)));
179 add_button->set_id( 295 add_button->set_id(
180 static_cast<int>(DialogViewID::ADD_BILLING_ADDRESS_BUTTON)); 296 static_cast<int>(DialogViewID::ADD_BILLING_ADDRESS_BUTTON));
181 add_button->set_tag(add_billing_address_button_tag_); 297 add_button->set_tag(add_billing_address_button_tag_);
182 button_view->AddChildView(add_button.release()); 298 button_view->AddChildView(add_button.release());
183 return button_view; 299 return button_view;
184 } 300 }
185 301
186 std::vector<EditorField> CreditCardEditorViewController::GetFieldDefinitions() { 302 std::vector<EditorField> CreditCardEditorViewController::GetFieldDefinitions() {
187 return std::vector<EditorField>{ 303 return std::vector<EditorField>{
188 {autofill::CREDIT_CARD_NUMBER, 304 {autofill::CREDIT_CARD_NUMBER,
189 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_CREDIT_CARD_NUMBER), 305 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_CREDIT_CARD_NUMBER),
190 EditorField::LengthHint::HINT_SHORT, /* required= */ true, 306 EditorField::LengthHint::HINT_SHORT, /*required=*/true,
191 EditorField::ControlType::TEXTFIELD_NUMBER}, 307 EditorField::ControlType::TEXTFIELD_NUMBER},
192 {autofill::CREDIT_CARD_NAME_FULL, 308 {autofill::CREDIT_CARD_NAME_FULL,
193 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_NAME_ON_CARD), 309 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_NAME_ON_CARD),
194 EditorField::LengthHint::HINT_SHORT, /* required= */ true}, 310 EditorField::LengthHint::HINT_SHORT, /*required=*/true},
195 {autofill::CREDIT_CARD_EXP_MONTH, 311 {autofill::CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
196 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_EXPIRATION_MONTH), 312 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_EXPIRATION_DATE),
197 EditorField::LengthHint::HINT_SHORT, /* required= */ true, 313 EditorField::LengthHint::HINT_SHORT, /*required=*/true,
198 EditorField::ControlType::COMBOBOX}, 314 EditorField::ControlType::CUSTOMFIELD},
199 {autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR,
200 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_EXPIRATION_YEAR),
201 EditorField::LengthHint::HINT_SHORT, /* required= */ true,
202 EditorField::ControlType::COMBOBOX},
203 {kBillingAddressType, 315 {kBillingAddressType,
204 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_BILLING_ADDRESS), 316 l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_BILLING_ADDRESS),
205 EditorField::LengthHint::HINT_SHORT, /* required= */ true, 317 EditorField::LengthHint::HINT_SHORT, /*required=*/true,
206 EditorField::ControlType::COMBOBOX}}; 318 EditorField::ControlType::COMBOBOX}};
207 } 319 }
208 320
209 base::string16 CreditCardEditorViewController::GetInitialValueForType( 321 base::string16 CreditCardEditorViewController::GetInitialValueForType(
210 autofill::ServerFieldType type) { 322 autofill::ServerFieldType type) {
211 if (!credit_card_to_edit_ || type == kBillingAddressType) 323 if (!credit_card_to_edit_ || type == kBillingAddressType)
212 return base::string16(); 324 return base::string16();
213 325
214 return credit_card_to_edit_->GetInfo(autofill::AutofillType(type), 326 return credit_card_to_edit_->GetInfo(autofill::AutofillType(type),
215 state()->GetApplicationLocale()); 327 state()->GetApplicationLocale());
(...skipping 16 matching lines...) Expand all
232 field.first->text(), locale); 344 field.first->text(), locale);
233 } 345 }
234 for (const auto& field : comboboxes()) { 346 for (const auto& field : comboboxes()) {
235 // ValidatingCombobox* is the key, EditorField is the value. 347 // ValidatingCombobox* is the key, EditorField is the value.
236 ValidatingCombobox* combobox = field.first; 348 ValidatingCombobox* combobox = field.first;
237 if (combobox->invalid()) 349 if (combobox->invalid())
238 return false; 350 return false;
239 351
240 if (field.second.type == kBillingAddressType) { 352 if (field.second.type == kBillingAddressType) {
241 views::Combobox* address_combobox = static_cast<views::Combobox*>( 353 views::Combobox* address_combobox = static_cast<views::Combobox*>(
242 dialog()->GetViewByID(kBillingAddressType)); 354 dialog()->GetViewByID(GetInputFieldViewId(kBillingAddressType)));
243 autofill::AddressComboboxModel* model = 355 autofill::AddressComboboxModel* model =
244 static_cast<autofill::AddressComboboxModel*>( 356 static_cast<autofill::AddressComboboxModel*>(
245 address_combobox->model()); 357 address_combobox->model());
246 358
247 credit_card.set_billing_address_id( 359 credit_card.set_billing_address_id(
248 model->GetItemIdentifierAt(address_combobox->selected_index())); 360 model->GetItemIdentifierAt(address_combobox->selected_index()));
249 } else { 361 } else {
250 credit_card.SetInfo(autofill::AutofillType(field.second.type), 362 credit_card.SetInfo(autofill::AutofillType(field.second.type),
251 combobox->GetTextForRow(combobox->selected_index()), 363 combobox->GetTextForRow(combobox->selected_index()),
252 locale); 364 locale);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 } 405 }
294 406
295 return true; 407 return true;
296 } 408 }
297 409
298 std::unique_ptr<ValidationDelegate> 410 std::unique_ptr<ValidationDelegate>
299 CreditCardEditorViewController::CreateValidationDelegate( 411 CreditCardEditorViewController::CreateValidationDelegate(
300 const EditorField& field) { 412 const EditorField& field) {
301 // The supported card networks for non-cc-number types are not passed to avoid 413 // The supported card networks for non-cc-number types are not passed to avoid
302 // the data copy in the delegate. 414 // the data copy in the delegate.
415 if (field.type == autofill::CREDIT_CARD_EXP_MONTH ||
416 field.type == autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR)
417 return base::MakeUnique<ExpirationDateValidationDelegate>(
418 this, state()->GetApplicationLocale());
303 return base::MakeUnique< 419 return base::MakeUnique<
304 CreditCardEditorViewController::CreditCardValidationDelegate>( 420 CreditCardEditorViewController::CreditCardValidationDelegate>(
305 field, this, 421 field, this,
306 field.type == autofill::CREDIT_CARD_NUMBER 422 field.type == autofill::CREDIT_CARD_NUMBER
307 ? spec()->supported_card_networks() 423 ? spec()->supported_card_networks()
308 : std::vector<std::string>()); 424 : std::vector<std::string>());
309 } 425 }
310 426
311 std::unique_ptr<ui::ComboboxModel> 427 std::unique_ptr<ui::ComboboxModel>
312 CreditCardEditorViewController::GetComboboxModelForType( 428 CreditCardEditorViewController::GetComboboxModelForType(
(...skipping 22 matching lines...) Expand all
335 } 451 }
336 return std::unique_ptr<ui::ComboboxModel>(); 452 return std::unique_ptr<ui::ComboboxModel>();
337 } 453 }
338 454
339 void CreditCardEditorViewController::FillContentView( 455 void CreditCardEditorViewController::FillContentView(
340 views::View* content_view) { 456 views::View* content_view) {
341 EditorViewController::FillContentView(content_view); 457 EditorViewController::FillContentView(content_view);
342 // We need to search from the content view here, since the dialog may not have 458 // We need to search from the content view here, since the dialog may not have
343 // the content view added to it yet. 459 // the content view added to it yet.
344 views::Combobox* combobox = static_cast<views::Combobox*>( 460 views::Combobox* combobox = static_cast<views::Combobox*>(
345 content_view->GetViewByID(kBillingAddressType)); 461 content_view->GetViewByID(GetInputFieldViewId(kBillingAddressType)));
346 // When the combobox has a single item, it's because it has no addresses 462 // When the combobox has a single item, it's because it has no addresses
347 // (otherwise, it would have the select header, and a separator before the 463 // (otherwise, it would have the select header, and a separator before the
348 // first address to choose from). 464 // first address to choose from).
349 DCHECK(combobox); 465 DCHECK(combobox);
350 combobox->SetEnabled(combobox->GetRowCount() > 1); 466 combobox->SetEnabled(combobox->GetRowCount() > 1);
351 } 467 }
352 468
353 base::string16 CreditCardEditorViewController::GetSheetTitle() { 469 base::string16 CreditCardEditorViewController::GetSheetTitle() {
354 if (!credit_card_to_edit_) 470 if (!credit_card_to_edit_)
355 return l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_CARD); 471 return l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_CARD);
(...skipping 19 matching lines...) Expand all
375 &CreditCardEditorViewController::AddAndSelectNewBillingAddress, 491 &CreditCardEditorViewController::AddAndSelectNewBillingAddress,
376 base::Unretained(this)), 492 base::Unretained(this)),
377 /*profile=*/nullptr); 493 /*profile=*/nullptr);
378 } else { 494 } else {
379 EditorViewController::ButtonPressed(sender, event); 495 EditorViewController::ButtonPressed(sender, event);
380 } 496 }
381 } 497 }
382 498
383 void CreditCardEditorViewController::AddAndSelectNewBillingAddress( 499 void CreditCardEditorViewController::AddAndSelectNewBillingAddress(
384 const autofill::AutofillProfile& profile) { 500 const autofill::AutofillProfile& profile) {
385 views::Combobox* address_combobox = 501 views::Combobox* address_combobox = static_cast<views::Combobox*>(
386 static_cast<views::Combobox*>(dialog()->GetViewByID(kBillingAddressType)); 502 dialog()->GetViewByID(GetInputFieldViewId(kBillingAddressType)));
387 autofill::AddressComboboxModel* model = 503 autofill::AddressComboboxModel* model =
388 static_cast<autofill::AddressComboboxModel*>(address_combobox->model()); 504 static_cast<autofill::AddressComboboxModel*>(address_combobox->model());
389 int index = model->AddNewProfile(profile); 505 int index = model->AddNewProfile(profile);
390 // SetSelectedIndex doesn't trigger a perform action notification, which is 506 // SetSelectedIndex doesn't trigger a perform action notification, which is
391 // needed to update the valid state. 507 // needed to update the valid state.
392 address_combobox->SetSelectedRow(index); 508 address_combobox->SetSelectedRow(index);
393 // But it needs to be blured at least once. 509 // But it needs to be blured at least once.
394 address_combobox->OnBlur(); 510 address_combobox->OnBlur();
395 } 511 }
396 512
(...skipping 16 matching lines...) Expand all
413 529
414 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 530 bool CreditCardEditorViewController::CreditCardValidationDelegate::
415 IsValidCombobox(views::Combobox* combobox) { 531 IsValidCombobox(views::Combobox* combobox) {
416 return ValidateCombobox(combobox, nullptr); 532 return ValidateCombobox(combobox, nullptr);
417 } 533 }
418 534
419 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 535 bool CreditCardEditorViewController::CreditCardValidationDelegate::
420 TextfieldValueChanged(views::Textfield* textfield) { 536 TextfieldValueChanged(views::Textfield* textfield) {
421 base::string16 error_message; 537 base::string16 error_message;
422 bool is_valid = ValidateValue(textfield->text(), &error_message); 538 bool is_valid = ValidateValue(textfield->text(), &error_message);
423 controller_->DisplayErrorMessageForField(field_, error_message); 539 controller_->DisplayErrorMessageForField(field_.type, error_message);
424 return is_valid; 540 return is_valid;
425 } 541 }
426 542
427 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 543 bool CreditCardEditorViewController::CreditCardValidationDelegate::
428 ComboboxValueChanged(views::Combobox* combobox) { 544 ComboboxValueChanged(views::Combobox* combobox) {
429 base::string16 error_message; 545 base::string16 error_message;
430 bool is_valid = ValidateCombobox(combobox, nullptr); 546 bool is_valid = ValidateCombobox(combobox, nullptr);
431 controller_->DisplayErrorMessageForField(field_, error_message); 547 controller_->DisplayErrorMessageForField(field_.type, error_message);
432 return is_valid; 548 return is_valid;
433 } 549 }
434 550
435 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 551 bool CreditCardEditorViewController::CreditCardValidationDelegate::
436 ValidateValue(const base::string16& value, base::string16* error_message) { 552 ValidateValue(const base::string16& value, base::string16* error_message) {
437 if (!value.empty()) { 553 if (!value.empty()) {
438 base::string16 local_error_message; 554 base::string16 local_error_message;
439 bool is_valid = 555 bool is_valid =
440 field_.type == autofill::CREDIT_CARD_NUMBER 556 field_.type == autofill::CREDIT_CARD_NUMBER
441 ? autofill::IsValidCreditCardNumberForBasicCardNetworks( 557 ? autofill::IsValidCreditCardNumberForBasicCardNetworks(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 return ValidateValue(combobox->GetTextForRow(combobox->selected_index()), 591 return ValidateValue(combobox->GetTextForRow(combobox->selected_index()),
476 error_message); 592 error_message);
477 } 593 }
478 594
479 bool CreditCardEditorViewController::GetSheetId(DialogViewID* sheet_id) { 595 bool CreditCardEditorViewController::GetSheetId(DialogViewID* sheet_id) {
480 *sheet_id = DialogViewID::CREDIT_CARD_EDITOR_SHEET; 596 *sheet_id = DialogViewID::CREDIT_CARD_EDITOR_SHEET;
481 return true; 597 return true;
482 } 598 }
483 599
484 } // namespace payments 600 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698