1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// found in the LICENSE file. 4ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/autofill/autofill_dialog_common.h" 6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/browser_process.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_country.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/autofill_field.h" 11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/autofill_type.h" 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace autofill { 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace common { 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool ServerTypeEncompassesFieldType(ServerFieldType type, 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const AutofillType& field_type) { 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // If any credit card expiration info is asked for, show both month and year 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // inputs. 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ServerFieldType server_type = field_type.GetStorableType(); 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (server_type == CREDIT_CARD_EXP_4_DIGIT_YEAR || 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch server_type == CREDIT_CARD_EXP_2_DIGIT_YEAR || 23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch server_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR || 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch server_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch server_type == CREDIT_CARD_EXP_MONTH) { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return type == CREDIT_CARD_EXP_4_DIGIT_YEAR || 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) type == CREDIT_CARD_EXP_MONTH; 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (server_type == CREDIT_CARD_TYPE) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return type == CREDIT_CARD_NUMBER; 32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 33ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Check the groups to distinguish billing types from shipping ones. 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutofillType autofill_type = AutofillType(type); 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (autofill_type.group() != field_type.group()) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The page may ask for individual address lines; this roughly matches the 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // street address blob. 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (server_type == ADDRESS_HOME_LINE1 || 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) server_type == ADDRESS_HOME_LINE2 || 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) server_type == ADDRESS_HOME_LINE3) { 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return autofill_type.GetStorableType() == ADDRESS_HOME_STREET_ADDRESS; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // First, middle and last name are parsed from full name. 476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (field_type.group() == NAME || field_type.group() == NAME_BILLING) 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return autofill_type.GetStorableType() == NAME_FULL; 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return autofill_type.GetStorableType() == server_type; 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ServerTypeMatchesField(DialogSection section, 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ServerFieldType type, 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const AutofillField& field) { 56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillType field_type = field.Type(); 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The credit card name is filled from the billing section's data. 59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (field_type.GetStorableType() == CREDIT_CARD_NAME && 60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (section == SECTION_BILLING || section == SECTION_CC_BILLING)) { 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return type == NAME_BILLING_FULL; 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return ServerTypeEncompassesFieldType(type, field_type); 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbool IsCreditCardType(ServerFieldType type) { 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillType(type).group() == CREDIT_CARD; 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid BuildInputs(const DetailInput* input_template, 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch size_t template_size, 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DetailInputs* inputs) { 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (size_t i = 0; i < template_size; ++i) { 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const DetailInput* input = &input_template[i]; 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch inputs->push_back(*input); 77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochAutofillMetrics::DialogUiEvent DialogSectionToUiItemAddedEvent( 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DialogSection section) { 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch switch (section) { 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_BILLING: 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_BILLING_ITEM_ADDED; 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_CC_BILLING: 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_CC_BILLING_ITEM_ADDED; 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_SHIPPING: 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_SHIPPING_ITEM_ADDED; 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_CC: 93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_CC_ITEM_ADDED; 94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NOTREACHED(); 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::NUM_DIALOG_UI_EVENTS; 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochAutofillMetrics::DialogUiEvent DialogSectionToUiSelectionChangedEvent( 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DialogSection section) { 102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch switch (section) { 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_BILLING: 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_BILLING_SELECTED_SUGGESTION_CHANGED; 105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_CC_BILLING: 107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_CC_BILLING_SELECTED_SUGGESTION_CHANGED; 108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_SHIPPING: 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_SHIPPING_SELECTED_SUGGESTION_CHANGED; 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch case SECTION_CC: 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::DIALOG_UI_CC_SELECTED_SUGGESTION_CHANGED; 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NOTREACHED(); 117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return AutofillMetrics::NUM_DIALOG_UI_EVENTS; 118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::vector<ServerFieldType> TypesFromInputs(const DetailInputs& inputs) { 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<ServerFieldType> types; 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < inputs.size(); ++i) { 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) types.push_back(inputs[i].type); 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return types; 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace common 129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace autofill 130