Index: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
index 4c4d6526fd0546c348448188592a1b086e849202..2f689ee1cb938734c13efa0b523587c11c3a11b9 100644 |
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
@@ -25,6 +25,7 @@ |
#include "chrome/browser/prefs/scoped_user_pref_update.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h" |
+#include "chrome/browser/ui/autofill/autofill_dialog_utils.h" |
#include "chrome/browser/ui/autofill/autofill_dialog_view.h" |
#include "chrome/browser/ui/autofill/data_model_wrapper.h" |
#include "chrome/browser/ui/browser.h" |
@@ -111,44 +112,6 @@ bool IsWalletSupportedCard(const std::string& card_type) { |
card_type == autofill::kDiscoverCard; |
} |
-// Returns true if |input| should be shown when |field_type| has been requested. |
-bool InputTypeMatchesFieldType(const DetailInput& input, |
- AutofillFieldType field_type) { |
- // If any credit card expiration info is asked for, show both month and year |
- // inputs. |
- if (field_type == CREDIT_CARD_EXP_4_DIGIT_YEAR || |
- field_type == CREDIT_CARD_EXP_2_DIGIT_YEAR || |
- field_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR || |
- field_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || |
- field_type == CREDIT_CARD_EXP_MONTH) { |
- return input.type == CREDIT_CARD_EXP_4_DIGIT_YEAR || |
- input.type == CREDIT_CARD_EXP_MONTH; |
- } |
- |
- if (field_type == CREDIT_CARD_TYPE) |
- return input.type == CREDIT_CARD_NUMBER; |
- |
- return input.type == field_type; |
-} |
- |
-// Returns true if |input| in the given |section| should be used for a |
-// site-requested |field|. |
-bool DetailInputMatchesField(DialogSection section, |
- const DetailInput& input, |
- const AutofillField& field) { |
- // The credit card name is filled from the billing section's data. |
- if (field.type() == CREDIT_CARD_NAME && |
- (section == SECTION_BILLING || section == SECTION_CC_BILLING)) { |
- return input.type == NAME_FULL; |
- } |
- |
- return InputTypeMatchesFieldType(input, field.type()); |
-} |
- |
-bool IsCreditCardType(AutofillFieldType type) { |
- return AutofillType(type).group() == AutofillType::CREDIT_CARD; |
-} |
- |
// Returns true if |input| should be used to fill a site-requested |field| which |
// is notated with a "shipping" tag, for use when the user has decided to use |
// the billing address as the shipping address. |
@@ -159,17 +122,7 @@ bool DetailInputMatchesShippingField(const DetailInput& input, |
AutofillFieldType field_type = |
AutofillType::GetEquivalentBillingFieldType(field.type()); |
- return InputTypeMatchesFieldType(input, field_type); |
-} |
- |
-// Constructs |inputs| from template data. |
-void BuildInputs(const DetailInput* input_template, |
- size_t template_size, |
- DetailInputs* inputs) { |
- for (size_t i = 0; i < template_size; ++i) { |
- const DetailInput* input = &input_template[i]; |
- inputs->push_back(*input); |
- } |
+ return utils::InputTypeMatchesFieldType(input, field_type); |
} |
// Initializes |form_group| from user-entered data. |
@@ -427,7 +380,6 @@ gfx::Image GetGeneratedCardImage(const string16& card_number) { |
gfx::Canvas canvas(card->size(), ui::SCALE_FACTOR_100P, false); |
canvas.DrawImageInt(*card, 0, 0); |
-#if !defined(OS_ANDROID) |
gfx::Rect display_rect(gfx::Point(), card->size()); |
display_rect.Inset(14, 0, 14, 0); |
// TODO(estade): fallback font for systems that don't have Helvetica? |
@@ -441,7 +393,6 @@ gfx::Image GetGeneratedCardImage(const string16& card_number) { |
helvetica, |
SK_ColorWHITE, |
display_rect, 0, 0, shadows); |
-#endif |
gfx::ImageSkia skia(canvas.ExtractImageRep()); |
return gfx::Image(skia); |
@@ -466,8 +417,30 @@ AutofillDialogControllerImpl::~AutofillDialogControllerImpl() { |
} |
// static |
-base::WeakPtr<AutofillDialogControllerImpl> |
- AutofillDialogControllerImpl::Create( |
+base::WeakPtr<AutofillDialogTabManagerDelegate> |
+AutofillDialogTabManagerDelegate::Create( |
+ content::WebContents* contents, |
+ const FormData& form_structure, |
+ const GURL& source_url, |
+ const DialogType dialog_type, |
+ const base::Callback<void(const FormStructure*, |
+ const std::string&)>& callback) { |
+ return AutofillDialogControllerImpl::Create(contents, |
+ form_structure, |
+ source_url, |
+ dialog_type, |
+ callback); |
+} |
+ |
+// static |
+void AutofillDialogTabManagerDelegate::RegisterProfilePrefs( |
+ user_prefs::PrefRegistrySyncable* registry) { |
+ AutofillDialogControllerImpl::RegisterProfilePrefs(registry); |
+} |
+ |
+// static |
+base::WeakPtr<AutofillDialogTabManagerDelegate> |
+AutofillDialogControllerImpl::Create( |
content::WebContents* contents, |
const FormData& form_structure, |
const GURL& source_url, |
@@ -543,70 +516,12 @@ void AutofillDialogControllerImpl::Show() { |
return; |
} |
- const DetailInput kEmailInputs[] = { |
- { 1, EMAIL_ADDRESS, IDS_AUTOFILL_DIALOG_PLACEHOLDER_EMAIL }, |
- }; |
- |
- const DetailInput kCCInputs[] = { |
- { 2, CREDIT_CARD_NUMBER, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARD_NUMBER }, |
- { 3, CREDIT_CARD_EXP_MONTH }, |
- { 3, CREDIT_CARD_EXP_4_DIGIT_YEAR }, |
- { 3, CREDIT_CARD_VERIFICATION_CODE, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC, |
- 1.5 }, |
- }; |
- |
- const DetailInput kBillingInputs[] = { |
- { 4, NAME_FULL, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARDHOLDER_NAME }, |
- { 5, ADDRESS_BILLING_LINE1, |
- IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_1 }, |
- { 6, ADDRESS_BILLING_LINE2, |
- IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_2 }, |
- { 7, ADDRESS_BILLING_CITY, |
- IDS_AUTOFILL_DIALOG_PLACEHOLDER_LOCALITY }, |
- // TODO(estade): state placeholder should depend on locale. |
- { 8, ADDRESS_BILLING_STATE, IDS_AUTOFILL_FIELD_LABEL_STATE }, |
- { 8, ADDRESS_BILLING_ZIP, |
- IDS_AUTOFILL_DIALOG_PLACEHOLDER_POSTAL_CODE }, |
- // We don't allow the user to change the country: http://crbug.com/247518 |
- { -1, ADDRESS_BILLING_COUNTRY, 0 }, |
- { 10, PHONE_BILLING_WHOLE_NUMBER, |
- IDS_AUTOFILL_DIALOG_PLACEHOLDER_PHONE_NUMBER }, |
- }; |
- |
- const DetailInput kShippingInputs[] = { |
- { 11, NAME_FULL, IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESSEE_NAME }, |
- { 12, ADDRESS_HOME_LINE1, IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_1 }, |
- { 13, ADDRESS_HOME_LINE2, IDS_AUTOFILL_DIALOG_PLACEHOLDER_ADDRESS_LINE_2 }, |
- { 14, ADDRESS_HOME_CITY, IDS_AUTOFILL_DIALOG_PLACEHOLDER_LOCALITY }, |
- { 15, ADDRESS_HOME_STATE, IDS_AUTOFILL_FIELD_LABEL_STATE }, |
- { 15, ADDRESS_HOME_ZIP, IDS_AUTOFILL_DIALOG_PLACEHOLDER_POSTAL_CODE }, |
- { -1, ADDRESS_HOME_COUNTRY, 0 }, |
- { 17, PHONE_HOME_WHOLE_NUMBER, |
- IDS_AUTOFILL_DIALOG_PLACEHOLDER_PHONE_NUMBER }, |
- }; |
- |
- BuildInputs(kEmailInputs, |
- arraysize(kEmailInputs), |
- &requested_email_fields_); |
- |
- BuildInputs(kCCInputs, |
- arraysize(kCCInputs), |
- &requested_cc_fields_); |
- |
- BuildInputs(kBillingInputs, |
- arraysize(kBillingInputs), |
- &requested_billing_fields_); |
- |
- BuildInputs(kCCInputs, |
- arraysize(kCCInputs), |
- &requested_cc_billing_fields_); |
- BuildInputs(kBillingInputs, |
- arraysize(kBillingInputs), |
- &requested_cc_billing_fields_); |
- |
- BuildInputs(kShippingInputs, |
- arraysize(kShippingInputs), |
- &requested_shipping_fields_); |
+ utils::BuildInputsForSection(SECTION_EMAIL, &requested_email_fields_); |
+ utils::BuildInputsForSection(SECTION_CC, &requested_cc_fields_); |
+ utils::BuildInputsForSection(SECTION_BILLING, &requested_billing_fields_); |
+ utils::BuildInputsForSection(SECTION_CC_BILLING, |
+ &requested_cc_billing_fields_); |
+ utils::BuildInputsForSection(SECTION_SHIPPING, &requested_shipping_fields_); |
// Test whether we need to show the shipping section. If filling that section |
// would be a no-op, don't show it. |
@@ -614,7 +529,7 @@ void AutofillDialogControllerImpl::Show() { |
EmptyDataModelWrapper empty_wrapper; |
cares_about_shipping_ = empty_wrapper.FillFormStructure( |
inputs, |
- base::Bind(DetailInputMatchesField, SECTION_SHIPPING), |
+ base::Bind(utils::DetailInputMatchesField, SECTION_SHIPPING), |
&form_structure_); |
SuggestionsUpdated(); |
@@ -841,10 +756,7 @@ DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const { |
state.strings.push_back(DialogOverlayString()); |
DialogOverlayString& string = state.strings.back(); |
-#if !defined(OS_ANDROID) |
- // gfx::Font isn't implemented on Android; DeriveFont() causes a null deref. |
string.font = rb.GetFont(ui::ResourceBundle::BaseFont).DeriveFont(4); |
-#endif |
// First-run, post-submit, Wallet expository page. |
if (full_wallet_ && full_wallet_->required_actions().empty()) { |
@@ -1745,7 +1657,7 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput( |
} |
std::vector<string16> popup_values, popup_labels, popup_icons; |
- if (IsCreditCardType(input->type)) { |
+ if (utils::IsCreditCardType(input->type)) { |
GetManager()->GetCreditCardSuggestions(input->type, |
field_contents, |
&popup_values, |
@@ -2047,7 +1959,7 @@ void AutofillDialogControllerImpl::DidAcceptSuggestion(const string16& value, |
const PersonalDataManager::GUIDPair& pair = popup_guids_[identifier]; |
scoped_ptr<DataModelWrapper> wrapper; |
- if (IsCreditCardType(input_showing_popup_->type)) { |
+ if (utils::IsCreditCardType(input_showing_popup_->type)) { |
wrapper.reset(new AutofillCreditCardWrapper( |
GetManager()->GetCreditCardByGUID(pair.first))); |
} else { |
@@ -2331,7 +2243,7 @@ bool AutofillDialogControllerImpl::RequestingCreditCardInfo() const { |
DCHECK_GT(form_structure_.field_count(), 0U); |
for (size_t i = 0; i < form_structure_.field_count(); ++i) { |
- if (IsCreditCardType(form_structure_.field(i)->type())) |
+ if (utils::IsCreditCardType(form_structure_.field(i)->type())) |
return true; |
} |
@@ -2385,7 +2297,12 @@ AutofillDialogControllerImpl::AutofillDialogControllerImpl( |
} |
AutofillDialogView* AutofillDialogControllerImpl::CreateView() { |
+#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.
|
return AutofillDialogView::Create(this); |
+#else |
+ NOTIMPLEMENTED(); |
+ return NULL; |
+#endif // defined(TOOLKIT_VIEWS) |
} |
PersonalDataManager* AutofillDialogControllerImpl::GetManager() { |
@@ -2409,13 +2326,8 @@ void AutofillDialogControllerImpl::LoadRiskFingerprintData() { |
&obfuscated_gaia_id); |
DCHECK(success); |
- gfx::Rect window_bounds; |
-#if !defined(OS_ANDROID) |
- window_bounds = GetBaseWindowForWebContents(web_contents())->GetBounds(); |
-#else |
- // TODO(dbeam): figure out the correct browser window size to pass along for |
- // android. |
-#endif |
+ gfx::Rect window_bounds = |
+ GetBaseWindowForWebContents(web_contents())->GetBounds(); |
PrefService* user_prefs = profile_->GetPrefs(); |
std::string charset = user_prefs->GetString(::prefs::kDefaultCharset); |
@@ -2445,16 +2357,12 @@ void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( |
} |
void AutofillDialogControllerImpl::OpenTabWithUrl(const GURL& url) { |
-#if !defined(OS_ANDROID) |
chrome::NavigateParams params( |
chrome::FindBrowserWithWebContents(web_contents()), |
url, |
content::PAGE_TRANSITION_AUTO_BOOKMARK); |
params.disposition = NEW_FOREGROUND_TAB; |
chrome::Navigate(¶ms); |
-#else |
- // TODO(estade): use TabModelList? |
-#endif |
} |
bool AutofillDialogControllerImpl::IsEditingExistingData( |
@@ -2608,7 +2516,7 @@ void AutofillDialogControllerImpl::SuggestionsUpdated() { |
const std::string app_locale = g_browser_process->GetApplicationLocale(); |
for (size_t i = 0; i < profiles.size(); ++i) { |
if (!HasCompleteAndVerifiedData(*profiles[i], |
- requested_shipping_fields_) || |
+ requested_shipping_fields_) || |
aruslan
2013/07/31 02:43:19
indent.
aruslan
2013/08/07 23:17:03
Done.
|
HasInvalidAddress(*profiles[i])) { |
continue; |
} |
@@ -2780,7 +2688,7 @@ void AutofillDialogControllerImpl::FillOutputForSectionWithComparator( |
void AutofillDialogControllerImpl::FillOutputForSection(DialogSection section) { |
FillOutputForSectionWithComparator( |
- section, base::Bind(DetailInputMatchesField, section)); |
+ section, base::Bind(utils::DetailInputMatchesField, section)); |
} |
bool AutofillDialogControllerImpl::FormStructureCaresAboutSection( |