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

Side by Side Diff: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc

Issue 21124012: [WIP] Split AutofillDialogControllerImpl + integrate rAc on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/autofill/autofill_dialog_controller_impl.h" 5 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
11 #include "apps/shell_window.h" 11 #include "apps/shell_window.h"
12 #include "base/base64.h" 12 #include "base/base64.h"
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/i18n/rtl.h" 14 #include "base/i18n/rtl.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/prefs/pref_service.h" 16 #include "base/prefs/pref_service.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/strings/string_split.h" 18 #include "base/strings/string_split.h"
19 #include "base/strings/string_util.h" 19 #include "base/strings/string_util.h"
20 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
21 #include "base/time/time.h" 21 #include "base/time/time.h"
22 #include "chrome/browser/autofill/personal_data_manager_factory.h" 22 #include "chrome/browser/autofill/personal_data_manager_factory.h"
23 #include "chrome/browser/browser_process.h" 23 #include "chrome/browser/browser_process.h"
24 #include "chrome/browser/extensions/shell_window_registry.h" 24 #include "chrome/browser/extensions/shell_window_registry.h"
25 #include "chrome/browser/prefs/scoped_user_pref_update.h" 25 #include "chrome/browser/prefs/scoped_user_pref_update.h"
26 #include "chrome/browser/profiles/profile.h" 26 #include "chrome/browser/profiles/profile.h"
27 #include "chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h" 27 #include "chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h"
28 #include "chrome/browser/ui/autofill/autofill_dialog_utils.h"
28 #include "chrome/browser/ui/autofill/autofill_dialog_view.h" 29 #include "chrome/browser/ui/autofill/autofill_dialog_view.h"
29 #include "chrome/browser/ui/autofill/data_model_wrapper.h" 30 #include "chrome/browser/ui/autofill/data_model_wrapper.h"
30 #include "chrome/browser/ui/browser.h" 31 #include "chrome/browser/ui/browser.h"
31 #include "chrome/browser/ui/browser_finder.h" 32 #include "chrome/browser/ui/browser_finder.h"
32 #include "chrome/browser/ui/browser_navigator.h" 33 #include "chrome/browser/ui/browser_navigator.h"
33 #include "chrome/browser/ui/browser_window.h" 34 #include "chrome/browser/ui/browser_window.h"
34 #include "chrome/browser/ui/extensions/native_app_window.h" 35 #include "chrome/browser/ui/extensions/native_app_window.h"
35 #include "chrome/common/chrome_version_info.h" 36 #include "chrome/common/chrome_version_info.h"
36 #include "chrome/common/pref_names.h" 37 #include "chrome/common/pref_names.h"
37 #include "chrome/common/render_messages.h" 38 #include "chrome/common/render_messages.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // Limit Wallet items refresh rate to at most once per minute. 105 // Limit Wallet items refresh rate to at most once per minute.
105 const int kWalletItemsRefreshRateSeconds = 60; 106 const int kWalletItemsRefreshRateSeconds = 60;
106 107
107 // Returns true if |card_type| is supported by Wallet. 108 // Returns true if |card_type| is supported by Wallet.
108 bool IsWalletSupportedCard(const std::string& card_type) { 109 bool IsWalletSupportedCard(const std::string& card_type) {
109 return card_type == autofill::kVisaCard || 110 return card_type == autofill::kVisaCard ||
110 card_type == autofill::kMasterCard || 111 card_type == autofill::kMasterCard ||
111 card_type == autofill::kDiscoverCard; 112 card_type == autofill::kDiscoverCard;
112 } 113 }
113 114
114 // Returns true if |input| should be shown when |field_type| has been requested.
115 bool InputTypeMatchesFieldType(const DetailInput& input,
116 AutofillFieldType field_type) {
117 // If any credit card expiration info is asked for, show both month and year
118 // inputs.
119 if (field_type == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
120 field_type == CREDIT_CARD_EXP_2_DIGIT_YEAR ||
121 field_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR ||
122 field_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR ||
123 field_type == CREDIT_CARD_EXP_MONTH) {
124 return input.type == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
125 input.type == CREDIT_CARD_EXP_MONTH;
126 }
127
128 if (field_type == CREDIT_CARD_TYPE)
129 return input.type == CREDIT_CARD_NUMBER;
130
131 return input.type == field_type;
132 }
133
134 // Returns true if |input| in the given |section| should be used for a
135 // site-requested |field|.
136 bool DetailInputMatchesField(DialogSection section,
137 const DetailInput& input,
138 const AutofillField& field) {
139 // The credit card name is filled from the billing section's data.
140 if (field.type() == CREDIT_CARD_NAME &&
141 (section == SECTION_BILLING || section == SECTION_CC_BILLING)) {
142 return input.type == NAME_FULL;
143 }
144
145 return InputTypeMatchesFieldType(input, field.type());
146 }
147
148 bool IsCreditCardType(AutofillFieldType type) {
149 return AutofillType(type).group() == AutofillType::CREDIT_CARD;
150 }
151
152 // Returns true if |input| should be used to fill a site-requested |field| which 115 // Returns true if |input| should be used to fill a site-requested |field| which
153 // is notated with a "shipping" tag, for use when the user has decided to use 116 // is notated with a "shipping" tag, for use when the user has decided to use
154 // the billing address as the shipping address. 117 // the billing address as the shipping address.
155 bool DetailInputMatchesShippingField(const DetailInput& input, 118 bool DetailInputMatchesShippingField(const DetailInput& input,
156 const AutofillField& field) { 119 const AutofillField& field) {
157 // Equivalent billing field type is used to support UseBillingAsShipping 120 // Equivalent billing field type is used to support UseBillingAsShipping
158 // usecase. 121 // usecase.
159 AutofillFieldType field_type = 122 AutofillFieldType field_type =
160 AutofillType::GetEquivalentBillingFieldType(field.type()); 123 AutofillType::GetEquivalentBillingFieldType(field.type());
161 124
162 return InputTypeMatchesFieldType(input, field_type); 125 return utils::InputTypeMatchesFieldType(input, field_type);
163 }
164
165 // Constructs |inputs| from template data.
166 void BuildInputs(const DetailInput* input_template,
167 size_t template_size,
168 DetailInputs* inputs) {
169 for (size_t i = 0; i < template_size; ++i) {
170 const DetailInput* input = &input_template[i];
171 inputs->push_back(*input);
172 }
173 } 126 }
174 127
175 // Initializes |form_group| from user-entered data. 128 // Initializes |form_group| from user-entered data.
176 void FillFormGroupFromOutputs(const DetailOutputMap& detail_outputs, 129 void FillFormGroupFromOutputs(const DetailOutputMap& detail_outputs,
177 FormGroup* form_group) { 130 FormGroup* form_group) {
178 for (DetailOutputMap::const_iterator iter = detail_outputs.begin(); 131 for (DetailOutputMap::const_iterator iter = detail_outputs.begin();
179 iter != detail_outputs.end(); ++iter) { 132 iter != detail_outputs.end(); ++iter) {
180 if (!iter->second.empty()) { 133 if (!iter->second.empty()) {
181 AutofillFieldType type = iter->first->type; 134 AutofillFieldType type = iter->first->type;
182 if (type == ADDRESS_HOME_COUNTRY || type == ADDRESS_BILLING_COUNTRY) { 135 if (type == ADDRESS_HOME_COUNTRY || type == ADDRESS_BILLING_COUNTRY) {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 return base::string16(); 373 return base::string16();
421 } 374 }
422 375
423 gfx::Image GetGeneratedCardImage(const string16& card_number) { 376 gfx::Image GetGeneratedCardImage(const string16& card_number) {
424 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 377 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
425 const gfx::ImageSkia* card = 378 const gfx::ImageSkia* card =
426 rb.GetImageSkiaNamed(IDR_AUTOFILL_GENERATED_CARD); 379 rb.GetImageSkiaNamed(IDR_AUTOFILL_GENERATED_CARD);
427 gfx::Canvas canvas(card->size(), ui::SCALE_FACTOR_100P, false); 380 gfx::Canvas canvas(card->size(), ui::SCALE_FACTOR_100P, false);
428 canvas.DrawImageInt(*card, 0, 0); 381 canvas.DrawImageInt(*card, 0, 0);
429 382
430 #if !defined(OS_ANDROID)
431 gfx::Rect display_rect(gfx::Point(), card->size()); 383 gfx::Rect display_rect(gfx::Point(), card->size());
432 display_rect.Inset(14, 0, 14, 0); 384 display_rect.Inset(14, 0, 14, 0);
433 // TODO(estade): fallback font for systems that don't have Helvetica? 385 // TODO(estade): fallback font for systems that don't have Helvetica?
434 gfx::Font helvetica("Helvetica", 14); 386 gfx::Font helvetica("Helvetica", 14);
435 gfx::ShadowValues shadows; 387 gfx::ShadowValues shadows;
436 shadows.push_back(gfx::ShadowValue(gfx::Point(0, 1), 388 shadows.push_back(gfx::ShadowValue(gfx::Point(0, 1),
437 0.0, 389 0.0,
438 SkColorSetARGB(85, 0, 0, 0))); 390 SkColorSetARGB(85, 0, 0, 0)));
439 canvas.DrawStringWithShadows( 391 canvas.DrawStringWithShadows(
440 card_number, 392 card_number,
441 helvetica, 393 helvetica,
442 SK_ColorWHITE, 394 SK_ColorWHITE,
443 display_rect, 0, 0, shadows); 395 display_rect, 0, 0, shadows);
444 #endif
445 396
446 gfx::ImageSkia skia(canvas.ExtractImageRep()); 397 gfx::ImageSkia skia(canvas.ExtractImageRep());
447 return gfx::Image(skia); 398 return gfx::Image(skia);
448 } 399 }
449 400
450 } // namespace 401 } // namespace
451 402
452 AutofillDialogController::~AutofillDialogController() {} 403 AutofillDialogController::~AutofillDialogController() {}
453 404
454 AutofillDialogControllerImpl::~AutofillDialogControllerImpl() { 405 AutofillDialogControllerImpl::~AutofillDialogControllerImpl() {
455 if (popup_controller_) 406 if (popup_controller_)
456 popup_controller_->Hide(); 407 popup_controller_->Hide();
457 408
458 GetMetricLogger().LogDialogInitialUserState( 409 GetMetricLogger().LogDialogInitialUserState(
459 GetDialogType(), initial_user_state_); 410 GetDialogType(), initial_user_state_);
460 411
461 if (deemphasized_render_view_) { 412 if (deemphasized_render_view_) {
462 web_contents()->GetRenderViewHost()->Send( 413 web_contents()->GetRenderViewHost()->Send(
463 new ChromeViewMsg_SetVisuallyDeemphasized( 414 new ChromeViewMsg_SetVisuallyDeemphasized(
464 web_contents()->GetRenderViewHost()->GetRoutingID(), false)); 415 web_contents()->GetRenderViewHost()->GetRoutingID(), false));
465 } 416 }
466 } 417 }
467 418
468 // static 419 // static
469 base::WeakPtr<AutofillDialogControllerImpl> 420 base::WeakPtr<AutofillDialogTabManagerDelegate>
470 AutofillDialogControllerImpl::Create( 421 AutofillDialogTabManagerDelegate::Create(
471 content::WebContents* contents, 422 content::WebContents* contents,
472 const FormData& form_structure, 423 const FormData& form_structure,
473 const GURL& source_url, 424 const GURL& source_url,
425 const DialogType dialog_type,
426 const base::Callback<void(const FormStructure*,
427 const std::string&)>& callback) {
428 return AutofillDialogControllerImpl::Create(contents,
429 form_structure,
430 source_url,
431 dialog_type,
432 callback);
433 }
434
435 // static
436 void AutofillDialogTabManagerDelegate::RegisterProfilePrefs(
437 user_prefs::PrefRegistrySyncable* registry) {
438 AutofillDialogControllerImpl::RegisterProfilePrefs(registry);
439 }
440
441 // static
442 base::WeakPtr<AutofillDialogTabManagerDelegate>
443 AutofillDialogControllerImpl::Create(
444 content::WebContents* contents,
445 const FormData& form_structure,
446 const GURL& source_url,
474 const DialogType dialog_type, 447 const DialogType dialog_type,
475 const base::Callback<void(const FormStructure*, 448 const base::Callback<void(const FormStructure*,
476 const std::string&)>& callback) { 449 const std::string&)>& callback) {
477 // AutofillDialogControllerImpl owns itself. 450 // AutofillDialogControllerImpl owns itself.
478 AutofillDialogControllerImpl* autofill_dialog_controller = 451 AutofillDialogControllerImpl* autofill_dialog_controller =
479 new AutofillDialogControllerImpl(contents, 452 new AutofillDialogControllerImpl(contents,
480 form_structure, 453 form_structure,
481 source_url, 454 source_url,
482 dialog_type, 455 dialog_type,
483 callback); 456 callback);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 form_structure_.ParseFieldTypesFromAutocompleteAttributes( 509 form_structure_.ParseFieldTypesFromAutocompleteAttributes(
537 FormStructure::PARSE_FOR_AUTOFILL_DIALOG, &has_types, &has_sections); 510 FormStructure::PARSE_FOR_AUTOFILL_DIALOG, &has_types, &has_sections);
538 511
539 // Fail if the author didn't specify autocomplete types. 512 // Fail if the author didn't specify autocomplete types.
540 if (!has_types) { 513 if (!has_types) {
541 callback_.Run(NULL, std::string()); 514 callback_.Run(NULL, std::string());
542 delete this; 515 delete this;
543 return; 516 return;
544 } 517 }
545 518
546 const DetailInput kEmailInputs[] = { 519 utils::BuildInputsForSection(SECTION_EMAIL, &requested_email_fields_);
547 { 1, EMAIL_ADDRESS, IDS_AUTOFILL_DIALOG_PLACEHOLDER_EMAIL }, 520 utils::BuildInputsForSection(SECTION_CC, &requested_cc_fields_);
548 }; 521 utils::BuildInputsForSection(SECTION_BILLING, &requested_billing_fields_);
549 522 utils::BuildInputsForSection(SECTION_CC_BILLING,
550 const DetailInput kCCInputs[] = { 523 &requested_cc_billing_fields_);
551 { 2, CREDIT_CARD_NUMBER, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARD_NUMBER }, 524 utils::BuildInputsForSection(SECTION_SHIPPING, &requested_shipping_fields_);
552 { 3, CREDIT_CARD_EXP_MONTH },
553 { 3, CREDIT_CARD_EXP_4_DIGIT_YEAR },
554 { 3, CREDIT_CARD_VERIFICATION_CODE, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC,
555 1.5 },
556 };
557
558 const DetailInput kBillingInputs[] = {
559 { 4, NAME_FULL, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARDHOLDER_NAME },
560 { 5, ADDRESS_BILLING_LINE1,
561 IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_1 },
562 { 6, ADDRESS_BILLING_LINE2,
563 IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_2 },
564 { 7, ADDRESS_BILLING_CITY,
565 IDS_AUTOFILL_DIALOG_PLACEHOLDER_LOCALITY },
566 // TODO(estade): state placeholder should depend on locale.
567 { 8, ADDRESS_BILLING_STATE, IDS_AUTOFILL_FIELD_LABEL_STATE },
568 { 8, ADDRESS_BILLING_ZIP,
569 IDS_AUTOFILL_DIALOG_PLACEHOLDER_POSTAL_CODE },
570 // We don't allow the user to change the country: http://crbug.com/247518
571 { -1, ADDRESS_BILLING_COUNTRY, 0 },
572 { 10, PHONE_BILLING_WHOLE_NUMBER,
573 IDS_AUTOFILL_DIALOG_PLACEHOLDER_PHONE_NUMBER },
574 };
575
576 const DetailInput kShippingInputs[] = {
577 { 11, NAME_FULL, IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESSEE_NAME },
578 { 12, ADDRESS_HOME_LINE1, IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_1 },
579 { 13, ADDRESS_HOME_LINE2, IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_2 },
580 { 14, ADDRESS_HOME_CITY, IDS_AUTOFILL_DIALOG_PLACEHOLDER_LOCALITY },
581 { 15, ADDRESS_HOME_STATE, IDS_AUTOFILL_FIELD_LABEL_STATE },
582 { 15, ADDRESS_HOME_ZIP, IDS_AUTOFILL_DIALOG_PLACEHOLDER_POSTAL_CODE },
583 { -1, ADDRESS_HOME_COUNTRY, 0 },
584 { 17, PHONE_HOME_WHOLE_NUMBER,
585 IDS_AUTOFILL_DIALOG_PLACEHOLDER_PHONE_NUMBER },
586 };
587
588 BuildInputs(kEmailInputs,
589 arraysize(kEmailInputs),
590 &requested_email_fields_);
591
592 BuildInputs(kCCInputs,
593 arraysize(kCCInputs),
594 &requested_cc_fields_);
595
596 BuildInputs(kBillingInputs,
597 arraysize(kBillingInputs),
598 &requested_billing_fields_);
599
600 BuildInputs(kCCInputs,
601 arraysize(kCCInputs),
602 &requested_cc_billing_fields_);
603 BuildInputs(kBillingInputs,
604 arraysize(kBillingInputs),
605 &requested_cc_billing_fields_);
606
607 BuildInputs(kShippingInputs,
608 arraysize(kShippingInputs),
609 &requested_shipping_fields_);
610 525
611 // Test whether we need to show the shipping section. If filling that section 526 // Test whether we need to show the shipping section. If filling that section
612 // would be a no-op, don't show it. 527 // would be a no-op, don't show it.
613 const DetailInputs& inputs = RequestedFieldsForSection(SECTION_SHIPPING); 528 const DetailInputs& inputs = RequestedFieldsForSection(SECTION_SHIPPING);
614 EmptyDataModelWrapper empty_wrapper; 529 EmptyDataModelWrapper empty_wrapper;
615 cares_about_shipping_ = empty_wrapper.FillFormStructure( 530 cares_about_shipping_ = empty_wrapper.FillFormStructure(
616 inputs, 531 inputs,
617 base::Bind(DetailInputMatchesField, SECTION_SHIPPING), 532 base::Bind(utils::DetailInputMatchesField, SECTION_SHIPPING),
618 &form_structure_); 533 &form_structure_);
619 534
620 SuggestionsUpdated(); 535 SuggestionsUpdated();
621 536
622 int show_count = 537 int show_count =
623 profile_->GetPrefs()->GetInteger(::prefs::kAutofillDialogShowCount); 538 profile_->GetPrefs()->GetInteger(::prefs::kAutofillDialogShowCount);
624 profile_->GetPrefs()->SetInteger(::prefs::kAutofillDialogShowCount, 539 profile_->GetPrefs()->SetInteger(::prefs::kAutofillDialogShowCount,
625 show_count + 1); 540 show_count + 1);
626 541
627 // TODO(estade): don't show the dialog if the site didn't specify the right 542 // TODO(estade): don't show the dialog if the site didn't specify the right
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 !IsSubmitPausedOn(wallet::VERIFY_CVV) && 749 !IsSubmitPausedOn(wallet::VERIFY_CVV) &&
835 GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE; 750 GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE;
836 if (!show_wallet_interstitial) 751 if (!show_wallet_interstitial)
837 return DialogOverlayState(); 752 return DialogOverlayState();
838 753
839 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 754 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
840 DialogOverlayState state; 755 DialogOverlayState state;
841 756
842 state.strings.push_back(DialogOverlayString()); 757 state.strings.push_back(DialogOverlayString());
843 DialogOverlayString& string = state.strings.back(); 758 DialogOverlayString& string = state.strings.back();
844 #if !defined(OS_ANDROID)
845 // gfx::Font isn't implemented on Android; DeriveFont() causes a null deref.
846 string.font = rb.GetFont(ui::ResourceBundle::BaseFont).DeriveFont(4); 759 string.font = rb.GetFont(ui::ResourceBundle::BaseFont).DeriveFont(4);
847 #endif
848 760
849 // First-run, post-submit, Wallet expository page. 761 // First-run, post-submit, Wallet expository page.
850 if (full_wallet_ && full_wallet_->required_actions().empty()) { 762 if (full_wallet_ && full_wallet_->required_actions().empty()) {
851 string16 cc_number = full_wallet_->GetInfo(CREDIT_CARD_NUMBER); 763 string16 cc_number = full_wallet_->GetInfo(CREDIT_CARD_NUMBER);
852 DCHECK_EQ(16U, cc_number.size()); 764 DCHECK_EQ(16U, cc_number.size());
853 state.image = GetGeneratedCardImage( 765 state.image = GetGeneratedCardImage(
854 ASCIIToUTF16("xxxx xxxx xxxx ") + 766 ASCIIToUTF16("xxxx xxxx xxxx ") +
855 cc_number.substr(cc_number.size() - 4)); 767 cc_number.substr(cc_number.size() - 4));
856 string.text = l10n_util::GetStringUTF16( 768 string.text = l10n_util::GetStringUTF16(
857 IDS_AUTOFILL_DIALOG_CARD_GENERATION_DONE); 769 IDS_AUTOFILL_DIALOG_CARD_GENERATION_DONE);
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after
1738 } 1650 }
1739 1651
1740 // If the user clicks while the popup is already showing, be sure to hide 1652 // If the user clicks while the popup is already showing, be sure to hide
1741 // it. 1653 // it.
1742 if (!was_edit && popup_controller_.get()) { 1654 if (!was_edit && popup_controller_.get()) {
1743 HidePopup(); 1655 HidePopup();
1744 return; 1656 return;
1745 } 1657 }
1746 1658
1747 std::vector<string16> popup_values, popup_labels, popup_icons; 1659 std::vector<string16> popup_values, popup_labels, popup_icons;
1748 if (IsCreditCardType(input->type)) { 1660 if (utils::IsCreditCardType(input->type)) {
1749 GetManager()->GetCreditCardSuggestions(input->type, 1661 GetManager()->GetCreditCardSuggestions(input->type,
1750 field_contents, 1662 field_contents,
1751 &popup_values, 1663 &popup_values,
1752 &popup_labels, 1664 &popup_labels,
1753 &popup_icons, 1665 &popup_icons,
1754 &popup_guids_); 1666 &popup_guids_);
1755 } else { 1667 } else {
1756 std::vector<AutofillFieldType> field_types; 1668 std::vector<AutofillFieldType> field_types;
1757 field_types.push_back(EMAIL_ADDRESS); 1669 field_types.push_back(EMAIL_ADDRESS);
1758 for (DetailInputs::const_iterator iter = requested_shipping_fields_.begin(); 1670 for (DetailInputs::const_iterator iter = requested_shipping_fields_.begin();
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 1952
2041 void AutofillDialogControllerImpl::DidSelectSuggestion(int identifier) { 1953 void AutofillDialogControllerImpl::DidSelectSuggestion(int identifier) {
2042 // TODO(estade): implement. 1954 // TODO(estade): implement.
2043 } 1955 }
2044 1956
2045 void AutofillDialogControllerImpl::DidAcceptSuggestion(const string16& value, 1957 void AutofillDialogControllerImpl::DidAcceptSuggestion(const string16& value,
2046 int identifier) { 1958 int identifier) {
2047 const PersonalDataManager::GUIDPair& pair = popup_guids_[identifier]; 1959 const PersonalDataManager::GUIDPair& pair = popup_guids_[identifier];
2048 1960
2049 scoped_ptr<DataModelWrapper> wrapper; 1961 scoped_ptr<DataModelWrapper> wrapper;
2050 if (IsCreditCardType(input_showing_popup_->type)) { 1962 if (utils::IsCreditCardType(input_showing_popup_->type)) {
2051 wrapper.reset(new AutofillCreditCardWrapper( 1963 wrapper.reset(new AutofillCreditCardWrapper(
2052 GetManager()->GetCreditCardByGUID(pair.first))); 1964 GetManager()->GetCreditCardByGUID(pair.first)));
2053 } else { 1965 } else {
2054 wrapper.reset(new AutofillProfileWrapper( 1966 wrapper.reset(new AutofillProfileWrapper(
2055 GetManager()->GetProfileByGUID(pair.first), pair.second)); 1967 GetManager()->GetProfileByGUID(pair.first), pair.second));
2056 } 1968 }
2057 1969
2058 for (size_t i = SECTION_MIN; i <= SECTION_MAX; ++i) { 1970 for (size_t i = SECTION_MIN; i <= SECTION_MAX; ++i) {
2059 DialogSection section = static_cast<DialogSection>(i); 1971 DialogSection section = static_cast<DialogSection>(i);
2060 wrapper->FillInputs(MutableRequestedFieldsForSection(section)); 1972 wrapper->FillInputs(MutableRequestedFieldsForSection(section));
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
2324 if (popup_controller_.get()) 2236 if (popup_controller_.get())
2325 return popup_controller_->HandleKeyPressEvent(event); 2237 return popup_controller_->HandleKeyPressEvent(event);
2326 2238
2327 return false; 2239 return false;
2328 } 2240 }
2329 2241
2330 bool AutofillDialogControllerImpl::RequestingCreditCardInfo() const { 2242 bool AutofillDialogControllerImpl::RequestingCreditCardInfo() const {
2331 DCHECK_GT(form_structure_.field_count(), 0U); 2243 DCHECK_GT(form_structure_.field_count(), 0U);
2332 2244
2333 for (size_t i = 0; i < form_structure_.field_count(); ++i) { 2245 for (size_t i = 0; i < form_structure_.field_count(); ++i) {
2334 if (IsCreditCardType(form_structure_.field(i)->type())) 2246 if (utils::IsCreditCardType(form_structure_.field(i)->type()))
2335 return true; 2247 return true;
2336 } 2248 }
2337 2249
2338 return false; 2250 return false;
2339 } 2251 }
2340 2252
2341 bool AutofillDialogControllerImpl::TransmissionWillBeSecure() const { 2253 bool AutofillDialogControllerImpl::TransmissionWillBeSecure() const {
2342 return source_url_.SchemeIs(chrome::kHttpsScheme); 2254 return source_url_.SchemeIs(chrome::kHttpsScheme);
2343 } 2255 }
2344 2256
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2378 wallet_server_validation_recoverable_(true), 2290 wallet_server_validation_recoverable_(true),
2379 data_was_passed_back_(false), 2291 data_was_passed_back_(false),
2380 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED), 2292 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED),
2381 was_ui_latency_logged_(false), 2293 was_ui_latency_logged_(false),
2382 deemphasized_render_view_(false) { 2294 deemphasized_render_view_(false) {
2383 // TODO(estade): remove duplicates from |form_structure|? 2295 // TODO(estade): remove duplicates from |form_structure|?
2384 DCHECK(!callback_.is_null()); 2296 DCHECK(!callback_.is_null());
2385 } 2297 }
2386 2298
2387 AutofillDialogView* AutofillDialogControllerImpl::CreateView() { 2299 AutofillDialogView* AutofillDialogControllerImpl::CreateView() {
2300 #if defined(TOOLKIT_VIEWS)
aruslan 2013/07/31 02:43:19 This should be #if defined(ENABLE_AUTOFILL_DIALOG)
aruslan 2013/08/01 19:30:29 Actually, #if should be removed entirely.
aruslan 2013/08/07 23:17:03 Done.
aruslan 2013/08/07 23:17:03 Done: removed entirely.
2388 return AutofillDialogView::Create(this); 2301 return AutofillDialogView::Create(this);
2302 #else
2303 NOTIMPLEMENTED();
2304 return NULL;
2305 #endif // defined(TOOLKIT_VIEWS)
2389 } 2306 }
2390 2307
2391 PersonalDataManager* AutofillDialogControllerImpl::GetManager() { 2308 PersonalDataManager* AutofillDialogControllerImpl::GetManager() {
2392 return PersonalDataManagerFactory::GetForProfile(profile_); 2309 return PersonalDataManagerFactory::GetForProfile(profile_);
2393 } 2310 }
2394 2311
2395 wallet::WalletClient* AutofillDialogControllerImpl::GetWalletClient() { 2312 wallet::WalletClient* AutofillDialogControllerImpl::GetWalletClient() {
2396 return &wallet_client_; 2313 return &wallet_client_;
2397 } 2314 }
2398 2315
2399 bool AutofillDialogControllerImpl::IsPayingWithWallet() const { 2316 bool AutofillDialogControllerImpl::IsPayingWithWallet() const {
2400 return account_chooser_model_.WalletIsSelected() && 2317 return account_chooser_model_.WalletIsSelected() &&
2401 SignedInState() == SIGNED_IN; 2318 SignedInState() == SIGNED_IN;
2402 } 2319 }
2403 2320
2404 void AutofillDialogControllerImpl::LoadRiskFingerprintData() { 2321 void AutofillDialogControllerImpl::LoadRiskFingerprintData() {
2405 risk_data_.clear(); 2322 risk_data_.clear();
2406 2323
2407 uint64 obfuscated_gaia_id = 0; 2324 uint64 obfuscated_gaia_id = 0;
2408 bool success = base::StringToUint64(wallet_items_->obfuscated_gaia_id(), 2325 bool success = base::StringToUint64(wallet_items_->obfuscated_gaia_id(),
2409 &obfuscated_gaia_id); 2326 &obfuscated_gaia_id);
2410 DCHECK(success); 2327 DCHECK(success);
2411 2328
2412 gfx::Rect window_bounds; 2329 gfx::Rect window_bounds =
2413 #if !defined(OS_ANDROID) 2330 GetBaseWindowForWebContents(web_contents())->GetBounds();
2414 window_bounds = GetBaseWindowForWebContents(web_contents())->GetBounds();
2415 #else
2416 // TODO(dbeam): figure out the correct browser window size to pass along for
2417 // android.
2418 #endif
2419 2331
2420 PrefService* user_prefs = profile_->GetPrefs(); 2332 PrefService* user_prefs = profile_->GetPrefs();
2421 std::string charset = user_prefs->GetString(::prefs::kDefaultCharset); 2333 std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
2422 std::string accept_languages = 2334 std::string accept_languages =
2423 user_prefs->GetString(::prefs::kAcceptLanguages); 2335 user_prefs->GetString(::prefs::kAcceptLanguages);
2424 base::Time install_time = base::Time::FromTimeT( 2336 base::Time install_time = base::Time::FromTimeT(
2425 g_browser_process->local_state()->GetInt64(::prefs::kInstallDate)); 2337 g_browser_process->local_state()->GetInt64(::prefs::kInstallDate));
2426 2338
2427 risk::GetFingerprint( 2339 risk::GetFingerprint(
2428 obfuscated_gaia_id, window_bounds, *web_contents(), 2340 obfuscated_gaia_id, window_bounds, *web_contents(),
2429 chrome::VersionInfo().Version(), charset, accept_languages, install_time, 2341 chrome::VersionInfo().Version(), charset, accept_languages, install_time,
2430 dialog_type_, g_browser_process->GetApplicationLocale(), 2342 dialog_type_, g_browser_process->GetApplicationLocale(),
2431 base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData, 2343 base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData,
2432 weak_ptr_factory_.GetWeakPtr())); 2344 weak_ptr_factory_.GetWeakPtr()));
2433 } 2345 }
2434 2346
2435 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( 2347 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData(
2436 scoped_ptr<risk::Fingerprint> fingerprint) { 2348 scoped_ptr<risk::Fingerprint> fingerprint) {
2437 DCHECK(AreLegalDocumentsCurrent()); 2349 DCHECK(AreLegalDocumentsCurrent());
2438 2350
2439 std::string proto_data; 2351 std::string proto_data;
2440 fingerprint->SerializeToString(&proto_data); 2352 fingerprint->SerializeToString(&proto_data);
2441 bool success = base::Base64Encode(proto_data, &risk_data_); 2353 bool success = base::Base64Encode(proto_data, &risk_data_);
2442 DCHECK(success); 2354 DCHECK(success);
2443 2355
2444 SubmitWithWallet(); 2356 SubmitWithWallet();
2445 } 2357 }
2446 2358
2447 void AutofillDialogControllerImpl::OpenTabWithUrl(const GURL& url) { 2359 void AutofillDialogControllerImpl::OpenTabWithUrl(const GURL& url) {
2448 #if !defined(OS_ANDROID)
2449 chrome::NavigateParams params( 2360 chrome::NavigateParams params(
2450 chrome::FindBrowserWithWebContents(web_contents()), 2361 chrome::FindBrowserWithWebContents(web_contents()),
2451 url, 2362 url,
2452 content::PAGE_TRANSITION_AUTO_BOOKMARK); 2363 content::PAGE_TRANSITION_AUTO_BOOKMARK);
2453 params.disposition = NEW_FOREGROUND_TAB; 2364 params.disposition = NEW_FOREGROUND_TAB;
2454 chrome::Navigate(&params); 2365 chrome::Navigate(&params);
2455 #else
2456 // TODO(estade): use TabModelList?
2457 #endif
2458 } 2366 }
2459 2367
2460 bool AutofillDialogControllerImpl::IsEditingExistingData( 2368 bool AutofillDialogControllerImpl::IsEditingExistingData(
2461 DialogSection section) const { 2369 DialogSection section) const {
2462 return section_editing_state_.count(section) > 0; 2370 return section_editing_state_.count(section) > 0;
2463 } 2371 }
2464 2372
2465 bool AutofillDialogControllerImpl::IsManuallyEditingSection( 2373 bool AutofillDialogControllerImpl::IsManuallyEditingSection(
2466 DialogSection section) const { 2374 DialogSection section) const {
2467 return IsEditingExistingData(section) || 2375 return IsEditingExistingData(section) ||
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 suggested_cc_.AddKeyedItemWithIcon( 2509 suggested_cc_.AddKeyedItemWithIcon(
2602 cards[i]->guid(), 2510 cards[i]->guid(),
2603 cards[i]->Label(), 2511 cards[i]->Label(),
2604 rb.GetImageNamed(CreditCard::IconResourceId(cards[i]->type()))); 2512 rb.GetImageNamed(CreditCard::IconResourceId(cards[i]->type())));
2605 } 2513 }
2606 2514
2607 const std::vector<AutofillProfile*>& profiles = manager->GetProfiles(); 2515 const std::vector<AutofillProfile*>& profiles = manager->GetProfiles();
2608 const std::string app_locale = g_browser_process->GetApplicationLocale(); 2516 const std::string app_locale = g_browser_process->GetApplicationLocale();
2609 for (size_t i = 0; i < profiles.size(); ++i) { 2517 for (size_t i = 0; i < profiles.size(); ++i) {
2610 if (!HasCompleteAndVerifiedData(*profiles[i], 2518 if (!HasCompleteAndVerifiedData(*profiles[i],
2611 requested_shipping_fields_) || 2519 requested_shipping_fields_) ||
aruslan 2013/07/31 02:43:19 indent.
aruslan 2013/08/07 23:17:03 Done.
2612 HasInvalidAddress(*profiles[i])) { 2520 HasInvalidAddress(*profiles[i])) {
2613 continue; 2521 continue;
2614 } 2522 }
2615 2523
2616 // Add all email addresses. 2524 // Add all email addresses.
2617 std::vector<string16> values; 2525 std::vector<string16> values;
2618 profiles[i]->GetMultiInfo(EMAIL_ADDRESS, app_locale, &values); 2526 profiles[i]->GetMultiInfo(EMAIL_ADDRESS, app_locale, &values);
2619 for (size_t j = 0; j < values.size(); ++j) { 2527 for (size_t j = 0; j < values.size(); ++j) {
2620 if (IsValidEmailAddress(values[j])) 2528 if (IsValidEmailAddress(values[j]))
2621 suggested_email_.AddKeyedItem(profiles[i]->guid(), values[j]); 2529 suggested_email_.AddKeyedItem(profiles[i]->guid(), values[j]);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
2773 SaveProfileGleanedFromSection(profile, section); 2681 SaveProfileGleanedFromSection(profile, section);
2774 2682
2775 AutofillProfileWrapper profile_wrapper(&profile, 0); 2683 AutofillProfileWrapper profile_wrapper(&profile, 0);
2776 profile_wrapper.FillFormStructure(inputs, compare, &form_structure_); 2684 profile_wrapper.FillFormStructure(inputs, compare, &form_structure_);
2777 } 2685 }
2778 } 2686 }
2779 } 2687 }
2780 2688
2781 void AutofillDialogControllerImpl::FillOutputForSection(DialogSection section) { 2689 void AutofillDialogControllerImpl::FillOutputForSection(DialogSection section) {
2782 FillOutputForSectionWithComparator( 2690 FillOutputForSectionWithComparator(
2783 section, base::Bind(DetailInputMatchesField, section)); 2691 section, base::Bind(utils::DetailInputMatchesField, section));
2784 } 2692 }
2785 2693
2786 bool AutofillDialogControllerImpl::FormStructureCaresAboutSection( 2694 bool AutofillDialogControllerImpl::FormStructureCaresAboutSection(
2787 DialogSection section) const { 2695 DialogSection section) const {
2788 // For now, only SECTION_SHIPPING may be omitted due to a site not asking for 2696 // For now, only SECTION_SHIPPING may be omitted due to a site not asking for
2789 // any of the fields. 2697 // any of the fields.
2790 // TODO(estade): remove !IsPayingWithWallet() check once WalletClient support 2698 // TODO(estade): remove !IsPayingWithWallet() check once WalletClient support
2791 // is added. http://crbug.com/243514 2699 // is added. http://crbug.com/243514
2792 if (section == SECTION_SHIPPING && !IsPayingWithWallet()) 2700 if (section == SECTION_SHIPPING && !IsPayingWithWallet())
2793 return cares_about_shipping_; 2701 return cares_about_shipping_;
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after
3480 view_->GetUserInput(SECTION_CC_BILLING, &output); 3388 view_->GetUserInput(SECTION_CC_BILLING, &output);
3481 CreditCard card; 3389 CreditCard card;
3482 GetBillingInfoFromOutputs(output, &card, NULL, NULL); 3390 GetBillingInfoFromOutputs(output, &card, NULL, NULL);
3483 backing_last_four = card.TypeAndLastFourDigits(); 3391 backing_last_four = card.TypeAndLastFourDigits();
3484 } 3392 }
3485 AutofillCreditCardBubbleController::ShowGeneratedCardBubble( 3393 AutofillCreditCardBubbleController::ShowGeneratedCardBubble(
3486 web_contents(), backing_last_four, full_wallet_->TypeAndLastFourDigits()); 3394 web_contents(), backing_last_four, full_wallet_->TypeAndLastFourDigits());
3487 } 3395 }
3488 3396
3489 } // namespace autofill 3397 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698