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

Unified Diff: ios/chrome/browser/autofill/autofill_agent_utils.mm

Issue 1022463002: [iOS] Upstream files in //ios/chrome/browser/autofill (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 9 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: ios/chrome/browser/autofill/autofill_agent_utils.mm
diff --git a/ios/chrome/browser/autofill/autofill_agent_utils.mm b/ios/chrome/browser/autofill/autofill_agent_utils.mm
new file mode 100644
index 0000000000000000000000000000000000000000..33e7dddf6c21b7f0b78203590e291ce4e59b1d1f
--- /dev/null
+++ b/ios/chrome/browser/autofill/autofill_agent_utils.mm
@@ -0,0 +1,139 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/autofill/autofill_agent_utils.h"
+
+#include "base/bind.h"
+#include "base/macros.h"
+#include "components/autofill/core/browser/autofill_manager.h"
+#include "components/autofill/core/browser/detail_input.h"
+#include "components/autofill/core/browser/dialog_section.h"
+#include "components/autofill/core/browser/server_field_types_util.h"
+#include "grit/components_strings.h"
+#include "ios/chrome/browser/application_context.h"
+#include "ui/base/l10n/l10n_util.h"
+
+// TODO (sgrant): Switch to componentized version of this code when
+// http://crbug/328070 is fixed.
+// This code was largely copied from autofill_dialog_controller_android.cc
+
+namespace {
+
+// Returns true if |input_type| in |section| is needed for |form_structure|.
+bool IsSectionInputUsedInFormStructure(
+ autofill::DialogSection section,
+ autofill::ServerFieldType input_type,
+ const autofill::FormStructure& form_structure) {
+ autofill::DetailInput input;
+ input.length = autofill::DetailInput::SHORT;
+ input.type = input_type;
+ input.placeholder_text = base::string16();
+ input.expand_weight = 0;
+
+ for (size_t i = 0; i < form_structure.field_count(); ++i) {
+ const autofill::AutofillField* field = form_structure.field(i);
+ if (field && autofill::ServerTypeMatchesField(section, input.type, *field))
+ return true;
+ }
+ return false;
+}
+
+} // namespace
+
+namespace autofill_agent_util {
+
+// Determines if the |structure| has any fields that are of type
+// autofill::CREDIT_CARD and thus asking for credit card info.
+bool RequestingCreditCardInfo(const autofill::FormStructure* structure) {
+ DCHECK(structure);
+
+ size_t field_count = structure->field_count();
+ for (size_t i = 0; i < field_count; ++i) {
+ autofill::AutofillType type(structure->field(i)->Type().GetStorableType());
+ if (type.group() == autofill::CREDIT_CARD)
+ return true;
+ }
+
+ return false;
+}
+
+// Returns true if one of the nodes in |structure| request information related
+// to a billing address.
+bool RequestFullBillingAddress(autofill::FormStructure* structure) {
+ const autofill::ServerFieldType fieldsToCheckFor[] = {
+ autofill::ADDRESS_BILLING_LINE1,
+ autofill::ADDRESS_BILLING_LINE2,
+ autofill::ADDRESS_BILLING_CITY,
+ autofill::ADDRESS_BILLING_STATE,
+ autofill::PHONE_BILLING_WHOLE_NUMBER};
+
+ for (size_t i = 0; i < arraysize(fieldsToCheckFor); ++i) {
+ if (IsSectionInputUsedInFormStructure(autofill::SECTION_BILLING,
+ fieldsToCheckFor[i], *structure)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+// Return empty info string for fill fields method.
+base::string16 ReturnEmptyInfo(const autofill::AutofillType& type) {
+ return base::string16();
+}
+
+// Returns true if one of the nodes in |structure| request information related
+// to a shipping address. To determine this actually attempt to fill the form
+// using an empty data model that tracks which fields are requested.
+bool RequestShippingAddress(autofill::FormStructure* structure) {
+ // Country code is unused for iOS and Android, so it
+ // doesn't matter what's passed.
+ std::string country_code;
+ autofill::DetailInputs inputs;
+ // TODO(eugenebut): Clean up kShippingInputs definition, unify with
+ // android codebase. crbug.com/371074
+ const autofill::DetailInput kShippingInputs[] = {
+ {autofill::DetailInput::LONG, autofill::NAME_FULL},
+ {autofill::DetailInput::LONG, autofill::ADDRESS_HOME_LINE1},
+ {autofill::DetailInput::LONG, autofill::ADDRESS_HOME_LINE2},
+ {autofill::DetailInput::LONG, autofill::ADDRESS_HOME_CITY},
+ {autofill::DetailInput::SHORT,
+ autofill::ADDRESS_HOME_STATE,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_STATE)},
+ {autofill::DetailInput::SHORT_EOL, autofill::ADDRESS_HOME_ZIP},
+ {autofill::DetailInput::NONE, autofill::ADDRESS_HOME_COUNTRY},
+ };
+ autofill::BuildInputs(kShippingInputs, arraysize(kShippingInputs), &inputs);
+
+ // TODO(ios): [Merge r284576]: The 4th argument to FillFields()
+ // is the language code based on either the billing or shipping address.
+ // See implementation in upstream's autofill_dialog_controller_impl.cc
+ // AutofillDialogControllerImpl::MutableAddressLanguageCodeForSection()
+ // Temporarily using std::string here to complete merge.
+ // See http://crbug/363063.
+ return structure->FillFields(
+ autofill::TypesFromInputs(inputs),
+ base::Bind(autofill::ServerTypeMatchesField, autofill::SECTION_SHIPPING),
+ base::Bind(&ReturnEmptyInfo), std::string(),
+ GetApplicationContext()->GetApplicationLocale());
+}
+
+// Returns true if one of the nodes in |structure| request information related
+// to a phone number.
+bool RequestPhoneNumber(autofill::FormStructure* structure) {
+ if (IsSectionInputUsedInFormStructure(autofill::SECTION_BILLING,
+ autofill::PHONE_BILLING_WHOLE_NUMBER,
+ *structure)) {
+ return true;
+ }
+
+ if (IsSectionInputUsedInFormStructure(autofill::SECTION_SHIPPING,
+ autofill::PHONE_HOME_WHOLE_NUMBER,
+ *structure)) {
+ return true;
+ }
+
+ return false;
+}
+}
« no previous file with comments | « ios/chrome/browser/autofill/autofill_agent_utils.h ('k') | ios/chrome/browser/autofill/form_input_accessory_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698