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

Unified Diff: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc

Issue 22623002: Extract AutofillDialogController interface and common utilities. (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 side-by-side diff with in-line comments
Download patch
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 703eff92ada72037547428e864a52527fd801cb9..194ae26dbc03885c5ba65102e893321beebeacc7 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -26,6 +26,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_common.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"
@@ -110,50 +111,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,
- const AutofillType& field_type) {
- // If any credit card expiration info is asked for, show both month and year
- // inputs.
- ServerFieldType server_type = field_type.GetStorableType();
- if (server_type == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
- server_type == CREDIT_CARD_EXP_2_DIGIT_YEAR ||
- server_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR ||
- server_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR ||
- server_type == CREDIT_CARD_EXP_MONTH) {
- return input.type == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
- input.type == CREDIT_CARD_EXP_MONTH;
- }
-
- if (server_type == CREDIT_CARD_TYPE)
- return input.type == CREDIT_CARD_NUMBER;
-
- // Check the groups to distinguish billing types from shipping ones.
- AutofillType input_type = AutofillType(input.type);
- return input_type.GetStorableType() == server_type &&
- input_type.group() == field_type.group();
-}
-
-// 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) {
- AutofillType field_type = field.Type();
-
- // The credit card name is filled from the billing section's data.
- if (field_type.GetStorableType() == CREDIT_CARD_NAME &&
- (section == SECTION_BILLING || section == SECTION_CC_BILLING)) {
- return input.type == NAME_BILLING_FULL;
- }
-
- return InputTypeMatchesFieldType(input, field_type);
-}
-
-bool IsCreditCardType(ServerFieldType type) {
- return AutofillType(type).group() == 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.
@@ -168,16 +125,6 @@ bool DetailInputMatchesShippingField(const DetailInput& input,
return InputTypeMatchesFieldType(input, AutofillType(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);
- }
-}
-
// Initializes |form_group| from user-entered data.
void FillFormGroupFromOutputs(const DetailOutputMap& detail_outputs,
FormGroup* form_group) {
@@ -225,7 +172,7 @@ void GetBillingInfoFromOutputs(const DetailOutputMap& output,
if (card && it->first->type == NAME_FULL)
card->SetRawInfo(CREDIT_CARD_NAME, trimmed);
- if (IsCreditCardType(it->first->type)) {
+ if (common::IsCreditCardType(it->first->type)) {
if (card)
card->SetRawInfo(it->first->type, trimmed);
} else if (profile) {
@@ -432,7 +379,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?
@@ -446,7 +392,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);
@@ -470,7 +415,6 @@ AutofillDialogControllerImpl::~AutofillDialogControllerImpl() {
}
}
-#if !defined(OS_ANDROID)
// static
base::WeakPtr<AutofillDialogControllerImpl>
AutofillDialogControllerImpl::Create(
@@ -489,7 +433,6 @@ base::WeakPtr<AutofillDialogControllerImpl>
callback);
return autofill_dialog_controller->weak_ptr_factory_.GetWeakPtr();
}
-#endif // !defined(OS_ANDROID)
// static
void AutofillDialogControllerImpl::RegisterProfilePrefs(
@@ -511,6 +454,27 @@ void AutofillDialogControllerImpl::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
}
+// static
+base::WeakPtr<AutofillDialogController> AutofillDialogController::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 AutofillDialogController::RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ AutofillDialogControllerImpl::RegisterProfilePrefs(registry);
+}
+
void AutofillDialogControllerImpl::Show() {
dialog_shown_timestamp_ = base::Time::Now();
@@ -550,70 +514,16 @@ 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_BILLING_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_);
+ common::BuildInputsForSection(SECTION_EMAIL,
+ &requested_email_fields_);
+ common::BuildInputsForSection(SECTION_CC,
+ &requested_cc_fields_);
+ common::BuildInputsForSection(SECTION_BILLING,
+ &requested_billing_fields_);
+ common::BuildInputsForSection(SECTION_CC_BILLING,
+ &requested_cc_billing_fields_);
+ common::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.
@@ -621,7 +531,7 @@ void AutofillDialogControllerImpl::Show() {
EmptyDataModelWrapper empty_wrapper;
cares_about_shipping_ = empty_wrapper.FillFormStructure(
inputs,
- base::Bind(DetailInputMatchesField, SECTION_SHIPPING),
+ base::Bind(common::DetailInputMatchesField, SECTION_SHIPPING),
&form_structure_);
SuggestionsUpdated();
@@ -848,10 +758,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()) {
@@ -1756,7 +1663,7 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
}
std::vector<string16> popup_values, popup_labels, popup_icons;
- if (IsCreditCardType(input->type)) {
+ if (common::IsCreditCardType(input->type)) {
GetManager()->GetCreditCardSuggestions(AutofillType(input->type),
field_contents,
&popup_values,
@@ -2058,7 +1965,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 (common::IsCreditCardType(input_showing_popup_->type)) {
wrapper.reset(new AutofillCreditCardWrapper(
GetManager()->GetCreditCardByGUID(pair.first)));
} else {
@@ -2333,7 +2240,7 @@ bool AutofillDialogControllerImpl::RequestingCreditCardInfo() const {
for (size_t i = 0; i < form_structure_.field_count(); ++i) {
AutofillType type = form_structure_.field(i)->Type();
- if (IsCreditCardType(type.GetStorableType()))
+ if (common::IsCreditCardType(type.GetStorableType()))
return true;
}
@@ -2411,9 +2318,7 @@ void AutofillDialogControllerImpl::LoadRiskFingerprintData() {
DCHECK(success);
gfx::Rect window_bounds;
-#if !defined(OS_ANDROID)
window_bounds = GetBaseWindowForWebContents(web_contents())->GetBounds();
-#endif
PrefService* user_prefs = profile_->GetPrefs();
std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
@@ -2443,14 +2348,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(&params);
-#endif
}
bool AutofillDialogControllerImpl::IsEditingExistingData(
@@ -2777,7 +2680,7 @@ void AutofillDialogControllerImpl::FillOutputForSectionWithComparator(
void AutofillDialogControllerImpl::FillOutputForSection(DialogSection section) {
FillOutputForSectionWithComparator(
- section, base::Bind(DetailInputMatchesField, section));
+ section, base::Bind(common::DetailInputMatchesField, section));
}
bool AutofillDialogControllerImpl::FormStructureCaresAboutSection(

Powered by Google App Engine
This is Rietveld 408576698