1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_COUNTRY_H_
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_COUNTRY_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// The minimal required fields for an address to be complete for a given
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// country.
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum AddressRequiredFields {
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_CITY  = 1 << 0,
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_STATE = 1 << 1,
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_ZIP   = 1 << 2,
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Composite versions (for data).
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_CITY_STATE =
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ADDRESS_REQUIRES_CITY | ADDRESS_REQUIRES_STATE,
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_STATE_ZIP =
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ADDRESS_REQUIRES_STATE | ADDRESS_REQUIRES_ZIP,
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_CITY_ZIP =
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ADDRESS_REQUIRES_CITY |ADDRESS_REQUIRES_ZIP,
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_CITY_STATE_ZIP =
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ADDRESS_REQUIRES_CITY | ADDRESS_REQUIRES_STATE | ADDRESS_REQUIRES_ZIP,
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Policy for countries that don't have city, state or zip requirements.
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIRES_ADDRESS_LINE_1_ONLY = 0,
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Policy for countries for which we do not have information about valid
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // address format.
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ADDRESS_REQUIREMENTS_UNKNOWN = ADDRESS_REQUIRES_CITY_STATE_ZIP,
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Stores data associated with a country. Strings are localized to the app
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// locale.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillCountry {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns country data corresponding to the two-letter ISO code
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |country_code|.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillCountry(const std::string& country_code, const std::string& locale);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~AutofillCountry();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fills |country_codes| with a list of the available countries' codes.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void GetAvailableCountries(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::vector<std::string>* country_codes);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the likely country code for |locale|, or "US" as a fallback if no
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // mapping from the locale is available.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const std::string CountryCodeForLocale(const std::string& locale);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the country code corresponding to |country|, which should be a
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // country code or country name localized to |locale|.  This function can
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be expensive so use judiciously.
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static const std::string GetCountryCode(const base::string16& country,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const std::string& locale);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const std::string& country_code() const { return country_code_; }
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const base::string16& name() const { return name_; }
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const base::string16& postal_code_label() const { return postal_code_label_; }
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const base::string16& state_label() const { return state_label_; }
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // City is expected in a complete address for this country.
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool requires_city() const {
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return (address_required_fields_ & ADDRESS_REQUIRES_CITY) != 0;
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // State is expected in a complete address for this country.
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool requires_state() const {
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return (address_required_fields_ & ADDRESS_REQUIRES_STATE) != 0;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Zip is expected in a complete address for this country.
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool requires_zip() const {
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return (address_required_fields_ & ADDRESS_REQUIRES_ZIP) != 0;
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillCountry(const std::string& country_code,
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  const base::string16& name,
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  const base::string16& postal_code_label,
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  const base::string16& state_label);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The two-letter ISO-3166 country code.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string country_code_;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The country's name, localized to the app locale.
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 name_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The localized label for the postal code (or zip code) field.
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 postal_code_label_;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The localized label for the state (or province, district, etc.) field.
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 state_label_;
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Address requirement field codes for the country.
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddressRequiredFields address_required_fields_;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutofillCountry);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_COUNTRY_H_
111