| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Sync protocol datatype extension for autofill. |
| |
| // If you change or add any fields in this file, update proto_visitors.h and |
| // potentially proto_enum_conversions.{h, cc}. |
| |
| syntax = "proto2"; |
| |
| option java_multiple_files = true; |
| option java_package = "org.chromium.components.sync.protocol"; |
| |
| option optimize_for = LITE_RUNTIME; |
| |
| package sync_pb; |
| |
| // Properties of autofill sync objects. |
| |
| // An AutofillProfile. |
| message AutofillProfileSpecifics { |
| // Represents the validation status of value stored in the AutofillProfile. |
| enum VerificationStatus { |
| // No verification status assigned. |
| VERIFICATION_STATUS_UNSPECIFIED = 0; |
| // The value token was parsed from a parent token. |
| // For example, the first name was derived by splitting a full name into |
| // its components. |
| PARSED = 1; |
| // Value was built from its subcomponents. |
| // For example, the full name was built from the first, middle and last |
| // name. |
| FORMATTED = 2; |
| // The value was observed in a form transmission. |
| // For example, the user filled a form that contained at NAME_FULL field. |
| // The value of NAME_FULL will be stored as OBSERVED. |
| OBSERVED = 3; |
| // The user used the autofill settings to verify and store this token. |
| // This is currently only applicable to the full name, since users cannot |
| // edit individual components of their name. |
| USER_VERIFIED = 4; |
| // The token was parsed remotely. |
| SERVER_PARSED = 5; |
| } |
| |
| optional string guid = 15; |
| // Starting from M115, Autofill ignores the origin and doesn't distinguish |
| // between verified (meaning `deprecated_origin == kSettingsOrigin`) and |
| // unverified profiles anymore. However, clients prior to this milestone only |
| // accept updates to verified profiles through Sync if the remote profile is |
| // verified as well. For this reason, M115 clients and above always set the |
| // origin to kSettingsOrigin. |
| // TODO(crbug.com/1441905): Remove in a few milestones. |
| optional string deprecated_origin = 16; |
| optional int64 use_count = 22; |
| |
| // The time_t value of the last time this profile was used. This |
| // value makes sense wrt base::Time::To/FromTimeT, which measures |
| // from the Windows epoch. |
| optional int64 use_date = 23; |
| |
| // A user chosen profile label that is used to identify the profile. |
| // The value of the label can be freely chosen by the user. Two possible label |
| // values are '$HOME$' or '$WORK$' which have a special meaning. |
| optional string profile_label = 62; |
| |
| // Contact info name fields. |
| repeated string name_first = 2; |
| repeated string name_middle = 3; |
| repeated string name_last = 4; |
| // Sometimes the last name is composed of two names as it is common for |
| // Hispanic/Latinx names. In the unstructured representation of the last name, |
| // there may be even a conjunction between the first and the second last |
| // name. For example, the more-complete version of Pablo Picasso's surname is |
| // "Ruiz y Picasso" containing a first last name, a conjunction (the y) and a |
| // second last name. |
| repeated string name_last_first = 27; |
| repeated string name_last_conjunction = 28; |
| repeated string name_last_second = 29; |
| repeated string name_full = 21; |
| |
| reserved 60; |
| reserved "name_full_with_honorific"; |
| |
| // Validation status records for name fields. |
| reserved 30; |
| reserved "name_honorific_status"; |
| repeated VerificationStatus name_first_status = 31; |
| repeated VerificationStatus name_middle_status = 32; |
| repeated VerificationStatus name_last_status = 33; |
| repeated VerificationStatus name_last_first_status = 34; |
| repeated VerificationStatus name_last_conjunction_status = 35; |
| repeated VerificationStatus name_last_second_status = 36; |
| repeated VerificationStatus name_full_status = 37; |
| reserved 61; |
| reserved "name_full_with_honorific_status"; |
| |
| // Contact info additional fields. |
| repeated string email_address = 5; |
| optional string company_name = 6; |
| |
| // Address field. |
| // The address_home_line1/2 fields are deprecated and |
| // address_home_street_address should be used instead by |
| // joining address_home_line1/2 with a newline ("\n"). |
| // Full deprecation can not be achieved before all sync profiles have been |
| // updated with a M86+ client. |
| // TODO(crbug/1111740): Remove usages of address_home_line1/2 and mark field |
| // as deprecated. |
| optional string address_home_line1 = 7; |
| optional string address_home_line2 = 8; |
| optional string address_home_city = 9; |
| optional string address_home_state = 10; |
| optional string address_home_zip = 11; |
| optional string address_home_country = 12; |
| optional string address_home_admin_level_2 = 71; |
| |
| // Additional address fields for i18n. |
| optional string address_home_street_address = 17; |
| optional string address_home_sorting_code = 18; |
| optional string address_home_dependent_locality = 19; |
| optional string address_home_language_code = 20; |
| optional string address_home_thoroughfare_name = 38; |
| optional string address_home_thoroughfare_number = 39; |
| optional string address_home_street_location = 73; |
| optional string address_home_subpremise_name = 42; |
| // All the information related to the apartment. Normally a combination of the |
| // apartment type (address_home_apt_type) and number (address_home_apt_num). |
| // E.g. "Apt 5". |
| optional string address_home_apt = 85; |
| // The raw number (or identifier) of an apartment (e.g. "5") but without a |
| // prefix. The value "apt 5" would correspond to the address_home_apt. |
| optional string address_home_apt_num = 56; |
| // Information describing the type of apartment (e.g. Apt, Apartamento, Sala, |
| // Departamento). |
| optional string address_home_apt_type = 87; |
| optional string address_home_floor = 57; |
| optional string address_home_landmark = 67; |
| // The type indicates that the address is at the intersection between two |
| // streets. This is a common way of writing addresses in Mexico. |
| optional string address_home_between_streets = 69; |
| // The meaning of the field is similar to address_home_between_streets. The |
| // type should be used for "Entre calle 1" in MX addresses which also |
| // contain the "Entre calle 2" field. |
| optional string address_home_between_streets_1 = 77; |
| // The meaning of the field is similar to address_home_between_streets. The |
| // type should be used for "Entre calle 2" in MX addresses which also |
| // contain the "Entre calle 1" field. |
| optional string address_home_between_streets_2 = 79; |
| optional string address_home_overflow = 75; |
| // Combination of types address_home_between_streets or address_home_landmark. |
| // Note that some address forms require the combination of both in a single |
| // field as opposed to each one separately. |
| optional string address_home_between_streets_or_landmark = 81; |
| // Combination of types address_home_overflow and address_home_landmark. |
| // Note that some address forms require the combination of both in a single |
| // field as opposed to each one separately. |
| optional string address_home_overflow_and_landmark = 83; |
| // Combination of types address_home_street_location and |
| // address_home_dependent_locality. Note that some address forms require the |
| // combination of both in a single field as opposed to each one separately. |
| optional string address_home_street_location_and_locality = 89; |
| |
| // Validation status records for address fields. |
| optional VerificationStatus address_home_city_status = 43; |
| optional VerificationStatus address_home_state_status = 44; |
| optional VerificationStatus address_home_zip_status = 45; |
| optional VerificationStatus address_home_country_status = 46; |
| optional VerificationStatus address_home_landmark_status = 68; |
| optional VerificationStatus address_home_between_streets_status = 70; |
| optional VerificationStatus address_home_between_streets_1_status = 78; |
| optional VerificationStatus address_home_between_streets_2_status = 80; |
| optional VerificationStatus address_home_admin_level_2_status = 72; |
| optional VerificationStatus address_home_overflow_status = 76; |
| optional VerificationStatus address_home_between_streets_or_landmark_status = |
| 82; |
| optional VerificationStatus address_home_overflow_and_landmark_status = 84; |
| optional VerificationStatus address_home_street_location_and_locality_status = |
| 90; |
| optional VerificationStatus address_home_street_address_status = 47; |
| optional VerificationStatus address_home_sorting_code_status = 48; |
| optional VerificationStatus address_home_dependent_locality_status = 49; |
| optional VerificationStatus address_home_language_code_status = 50; |
| optional VerificationStatus address_home_thoroughfare_name_status = 51; |
| optional VerificationStatus address_home_thoroughfare_number_status = 52; |
| optional VerificationStatus address_home_street_location_status = 74; |
| optional VerificationStatus address_home_subpremise_name_status = 55; |
| optional VerificationStatus address_home_apt_status = 86; |
| optional VerificationStatus address_home_apt_num_status = 58; |
| optional VerificationStatus address_home_apt_type_status = 88; |
| optional VerificationStatus address_home_floor_status = 59; |
| |
| // Phone. |
| repeated string phone_home_whole_number = 13; |
| |
| reserved 63; |
| reserved "disallow_settings_visible_updates"; |
| |
| // Removed in M123. |
| reserved 64; |
| reserved "birthdate_day"; |
| reserved 65; |
| reserved "birthdate_month"; |
| reserved 66; |
| reserved "birthdate_year"; |
| |
| // Deprecated. |
| optional string deprecated_label = 1 [deprecated = true]; |
| optional string phone_fax_whole_number = 14 [deprecated = true]; |
| // The following validity-related fields have only been used in combination |
| // with an experimental features that are disabled for all clients and have |
| // been removed in M100. |
| optional int64 validity_state_bitfield = 24 [deprecated = true]; |
| optional bool is_client_validity_states_updated = 25 [deprecated = true]; |
| // Removed in M118. |
| reserved 40; |
| reserved "address_home_dependent_thoroughfare_name"; |
| reserved 41; |
| reserved "address_home_premise_name"; |
| reserved 53; |
| reserved "address_home_dependent_thoroughfare_name_status"; |
| reserved 54; |
| reserved "address_home_premise_name_status"; |
| // Removed in M122. |
| reserved 26; |
| reserved "name_honorific"; |
| } |
| |
| message AutofillSpecifics { |
| // If any of these 3 fields are present, then all 3 should be, and it implies |
| // that this entity represents a classic autofill object. In this case, |
| // none of the autofill++ objects below should be present. |
| optional string name = 1; |
| optional string value = 2; |
| repeated int64 usage_timestamp = 3; |
| |
| // An autofill++ profile object. If present, indicates this entity |
| // represents an AutofillProfile exclusively, and no other fields (such as |
| // name/value or credit_card) should be present. |
| optional AutofillProfileSpecifics profile = 4; |
| |
| reserved 5; |
| reserved "encrypted_credit_card"; |
| reserved 6; |
| reserved "credit_card"; |
| } |
| |
| // TODO(crbug.com/1020740): Deprecated, remove this once dependent change is |
| // done. Use WalletCreditCardCloudTokenData instead. |
| message CloudTokenData { |
| // Last 4-5 digits of the Cloud Primary Account Number (CPAN). |
| optional string suffix = 1; |
| |
| // CPAN Month number 1-12. |
| optional int32 exp_month = 2; |
| |
| // CPAN Four-digit year (e.g. 2017). |
| optional int32 exp_year = 3; |
| |
| // URL of the card art to be displayed for CPAN. |
| optional string art_fife_url = 4; |
| |
| // Opaque identifier for the cloud token associated with the payment |
| // instrument. |
| optional string instrument_token = 5; |
| } |
| |
| // Next id: 8 |
| message CardBenefit { |
| // The unique identifier of the benefit. Generated originally in Chrome Sync |
| // server. |
| optional string benefit_id = 7; |
| |
| // The benefit description (Engligh only currently) to be shown in the UI. |
| optional string benefit_description = 1; |
| |
| // When the benefit should be displayed, in UTC time. |
| optional int64 start_time_unix_epoch_milliseconds = 2; |
| optional int64 end_time_unix_epoch_milliseconds = 3; |
| |
| // Proto containing data specific to a flat rate benefit. Empty as flat rate |
| // benefits don't have unique fields. The actual benefit (e.g. "2% cash back") |
| // is already included in the `benefit_description`. |
| message FlatRateBenefit {} |
| |
| // For category benefits, represents the category of purchases that the |
| // benefit can be applied to. |
| enum CategoryBenefitType { |
| CATEGORY_BENEFIT_TYPE_UNKNOWN = 0; |
| SUBSCRIPTION = 1; |
| FLIGHTS = 2; |
| DINING = 3; |
| ENTERTAINMENT = 4; |
| STREAMING = 5; |
| GROCERY_STORES = 6; |
| } |
| |
| // Proto containing data specific to a category benefit. |
| message CategoryBenefit { |
| // The type of category purchases the benefit is eligible on. |
| optional CategoryBenefitType category_benefit_type = 1; |
| } |
| |
| // Proto containing data specific to a merchant benefit. |
| message MerchantBenefit { |
| // The merchant domain that the benefit is eligible on. |
| // Example: https://www.acme.com |
| repeated string merchant_domain = 1; |
| } |
| |
| // Proto data representing the actual data of the credit card benefit, |
| // depending on the benefit type. |
| oneof DomainSpecificBenefit { |
| FlatRateBenefit flat_rate_benefit = 4; |
| CategoryBenefit category_benefit = 5; |
| MerchantBenefit merchant_benefit = 6; |
| } |
| } |
| |
| message CardIssuer { |
| enum Issuer { |
| ISSUER_UNKNOWN = 0; |
| // Card where the issuer is Google. |
| GOOGLE = 1; |
| // Card where the issuer is external. |
| EXTERNAL_ISSUER = 2; |
| } |
| optional Issuer issuer = 1; |
| |
| // Uniquely identifies the issuer of the card. This field is required when |
| // Issuer is EXTERNAL_ISSUER. |
| // Example: capitalone, amex. |
| optional string issuer_id = 2; |
| } |
| |
| message WalletMaskedCreditCard { |
| reserved 9, 14; |
| reserved "card_class"; |
| |
| enum WalletCardStatus { |
| VALID = 0; |
| EXPIRED = 1; |
| } |
| |
| enum WalletCardType { |
| UNKNOWN = 0; |
| AMEX = 1; |
| DISCOVER = 2; |
| JCB = 3; |
| MAESTRO = 4; |
| MASTER_CARD = 5; |
| SOLO = 6; |
| SWITCH = 7; |
| VISA = 8; |
| UNIONPAY = 9; |
| ELO = 10; |
| } |
| |
| enum VirtualCardEnrollmentState { |
| UNSPECIFIED = 0; |
| UNENROLLED = 1 [deprecated = true]; |
| ENROLLED = 2; |
| UNENROLLED_AND_NOT_ELIGIBLE = 3; |
| UNENROLLED_AND_ELIGIBLE = 4; |
| } |
| |
| enum VirtualCardEnrollmentType { |
| TYPE_UNSPECIFIED = 0; |
| ISSUER = 1; |
| NETWORK = 2; |
| } |
| |
| // Server-generated unique ID string. This is opaque to the client. |
| // This is the legacy version of |instrument_id|. |
| optional string id = 1; |
| |
| // What the server thinks of this card. |
| optional WalletCardStatus status = 2; |
| |
| optional string name_on_card = 3; |
| |
| optional WalletCardType type = 4; |
| |
| // Last 4 digits of the credit card number. |
| optional string last_four = 5; |
| |
| // Month number 1-12. |
| optional int32 exp_month = 6; |
| |
| // Four-digit year (e.g. 2017). |
| optional int32 exp_year = 7; |
| |
| // The WalletPostalAddress.id of the billing address. |
| optional string billing_address_id = 8; |
| |
| // Issuing Bank name which is internationalized (e.g. "Chase", "工商银行") |
| optional string bank_name = 10; |
| |
| // TODO(crbug.com/1020740): Deprecated, remove this once dependent change is |
| // done. |
| // Use WalletCreditCardCloudTokenData instead. This field will be set if |
| // a cloud token is available for the instrument. |
| optional CloudTokenData cloud_token_data = 11; |
| |
| // The card's nickname, if it exists. |
| optional string nickname = 12; |
| |
| // Issuer of the card. |
| optional CardIssuer card_issuer = 13; |
| |
| // Server-generated unique ID. This is opaque to the client. |
| // |id| is the legacy version of this. |
| optional int64 instrument_id = 15; |
| |
| // The state of virtual card enrollment. |
| optional VirtualCardEnrollmentState virtual_card_enrollment_state = 16; |
| |
| // The URL for the client to fetch the card art image. |
| optional string card_art_url = 17; |
| |
| // The product description for the card. Used to be shown in the UI. |
| optional string product_description = 18; |
| |
| // The type of virtual card enrollment. kTypeUnspecified indicates that the |
| // card is unenrolled. |
| optional VirtualCardEnrollmentType virtual_card_enrollment_type = 19; |
| |
| // The benefits (e.g. points or discounts) associated with purchases made |
| // with the card. |
| repeated CardBenefit card_benefit = 20; |
| |
| // Separate link from the card issuer which provides additional context or |
| // terms and conditions regarding the credit card product and its benefits. |
| optional string product_terms_url = 21; |
| } |
| |
| // Unused by the client since M121. |
| // TODO(crbug.com/1457187): Some server-side code still relies on this message. |
| // To keep the protos in sync, it is kept until that code is cleaned up. |
| // Different than an AutofillProfile because this represents some known address |
| // on the server that is pulled down rather than synced between Chromes. |
| message WalletPostalAddress { |
| optional string id = 1; |
| |
| optional string recipient_name = 12; |
| optional string company_name = 2; |
| |
| // This is the street address, of which there may be multiple lines. This |
| // corresponds to "address_home_line[1|2] in the AutofillProfileSpecifics |
| // message above. In some locales there may be more than two lines. |
| repeated string street_address = 3; |
| |
| // Also known as "administrative area". This is normally the state or |
| // province in most countries. |
| optional string address_1 = 4; |
| |
| // Also known as "locality". In the US this is the city. |
| optional string address_2 = 5; |
| |
| // A sub-classification beneath the city, e.g. an inner-city district or |
| // suburb. Also known as "dependent_locality" |
| optional string address_3 = 6; |
| |
| // Used in certain countries. Also known as "sub_dependent_locality". |
| optional string address_4 = 7; |
| |
| optional string postal_code = 8; |
| |
| // Similar to the zipcode column, but used for businesses or organizations |
| // that might not be geographically contiguous. The canonical example is |
| // CEDEX in France. |
| optional string sorting_code = 9; |
| |
| optional string country_code = 10; |
| optional string language_code = 11; |
| |
| // Phone number. The format is unspecified and will be explicitly ignored. |
| optional string phone_number = 13; |
| } |
| |
| // Contains information about a Payments Customer. |
| message PaymentsCustomerData { |
| // The billable customer ID associated with the account. |
| optional string id = 1; |
| } |
| |
| // Contains information about the cloud token data of server credit cards. |
| message WalletCreditCardCloudTokenData { |
| // Server-generated ID string for the card this cloud token data is related |
| // to. This should match the id in WalletMaskedCreditCard for to fetch the |
| // corresponding actual card data. Note this is not unique across all cloud |
| // token data, which means one card can have multiple sets of cloud token data |
| // with the same masked_card_id. |
| optional string masked_card_id = 1; |
| |
| // Last 4-5 digits of the Cloud Primary Account Number (CPAN). |
| optional string suffix = 2; |
| |
| // CPAN Month number 1-12. |
| optional int32 exp_month = 3; |
| |
| // CPAN Four-digit year (e.g. 2017). |
| optional int32 exp_year = 4; |
| |
| // URL of the card art to be displayed for CPAN. |
| optional string art_fife_url = 5; |
| |
| // Opaque identifier for the cloud token. |
| optional string instrument_token = 6; |
| } |
| |
| // Contains information of payment instruments that can be used by the user. |
| message PaymentInstrument { |
| // Opaque identifier for the account stored in Payments Platform. |
| // This will be used to initiate the payment. |
| optional int64 instrument_id = 1; |
| |
| // Supported payment infrastructures (rail) that allow users to send money |
| // between the payer and the payee. https://en.wikipedia.org/wiki/Payment_rail |
| enum SupportedRail { |
| SUPPORTED_RAIL_UNKNOWN = 0; |
| // Payment rails for Brazil Open Banking. |
| PIX = 1; |
| } |
| // The supported rails for which a payment can be made for the given account. |
| // For example, Pix is the open-banking rail in Brazil, UPI is the |
| // open-banking rail in India. |
| repeated SupportedRail supported_rails = 2; |
| |
| // The URL for the image to be displayed when showing the account to the |
| // user. |
| optional string display_icon_url = 3; |
| |
| // Nickname for the instrument. |
| optional string nickname = 4; |
| |
| // The backing source for the applicable rails. |
| oneof instrument_details { |
| BankAccountDetails bank_account = 5; |
| } |
| } |
| |
| // Contains information of server IBAN (International Bank Account Number). |
| message WalletMaskedIban { |
| // Opaque identifier for the account stored in Payments Platform. |
| optional string instrument_id = 1; |
| |
| // Prefix of the full IBAN value, if available. |
| optional string prefix = 2; |
| |
| // Suffix of the full IBAN value, if available. |
| optional string suffix = 3; |
| |
| // Length of the full IBAN value, if available. |
| optional int32 length = 4; |
| |
| // Nickname for the IBAN, if available. |
| optional string nickname = 5; |
| } |
| |
| // Details of a bank account required to show it in the payment instrument |
| // selector. |
| message BankAccountDetails { |
| // The name of the bank where the user has an account. |
| optional string bank_name = 1; |
| |
| // The last four digits of the account number to help the user identify their |
| // account. |
| optional string account_number_suffix = 2; |
| |
| enum AccountType { |
| ACCOUNT_TYPE_UNSPECIFIED = 0; |
| CHECKING = 1; |
| SAVINGS = 2; |
| CURRENT = 3; |
| SALARY = 4; |
| TRANSACTING_ACCOUNT = 5; |
| } |
| // The type of bank account. |
| optional AccountType account_type = 3; |
| } |
| |
| message AutofillWalletSpecifics { |
| enum WalletInfoType { |
| UNKNOWN = 0; |
| MASKED_CREDIT_CARD = 1; |
| // POSTAL_ADDRESS is unused by the client since M121. |
| POSTAL_ADDRESS = 2; |
| CUSTOMER_DATA = 3; |
| CREDIT_CARD_CLOUD_TOKEN_DATA = 4; |
| PAYMENT_INSTRUMENT = 5; |
| MASKED_IBAN = 6; |
| } |
| |
| optional WalletInfoType type = 1; |
| |
| // This field exists if and only if the "type" field equals to |
| // MASKED_CREDIT_CARD. |
| optional WalletMaskedCreditCard masked_card = 2; |
| |
| // Unused by the client since M121. |
| // This field exists if and only if the `type` equals POSTAL_ADDRESS. |
| // TODO(crbug.com/1457187): Some server-side code still relies on this field. |
| // To keep the protos in sync, it is kept until that code is cleaned up. |
| optional WalletPostalAddress address = 3; |
| |
| // This field exists if and only if the "type" field equals to CUSTOMER_DATA. |
| optional PaymentsCustomerData customer_data = 4; |
| |
| // This field exists if and only if the "type" field equals to |
| // CREDIT_CARD_CLOUD_TOKEN_DATA. |
| optional WalletCreditCardCloudTokenData cloud_token_data = 5; |
| |
| // This field exists if and only if the "type" field equals to |
| // PAYMENT_INSTRUMENT. |
| optional PaymentInstrument payment_instrument = 6; |
| |
| // This field exists if and only if the `type` field equals to |
| // MASKED_IBAN. |
| optional WalletMaskedIban masked_iban = 7; |
| } |
| |
| // Wallet card usage information that can be synced. |
| message WalletMetadataSpecifics { |
| enum Type { |
| UNKNOWN = 0; |
| CARD = 1; |
| // Unused by the client since M121. |
| // TODO(crbug.com/1457187): Some server-side code still relies on this. |
| // To keep the protos in sync, it is kept until that code is cleaned up. |
| ADDRESS = 2; |
| IBAN = 3; |
| } |
| |
| // The type of the Wallet metadata. |
| optional Type type = 1; |
| |
| // Base64 encoding of the unique ID string of the corresponding |
| // AutofillMetadata. |
| // For Wallet cards, this value is WalletMaskedCreditCard::id. |
| // For Wallet IBANs, this value is WalletMaskedIban::instrument_id. |
| optional string id = 2; |
| |
| // The number of times that this Wallet card or address was used. |
| optional int64 use_count = 3; |
| |
| // The last use date of this Wallet card or address. Measured in microseconds |
| // since the Windows epoch (1601). |
| optional int64 use_date = 4; |
| |
| // The id of the profile/address that represents the billing address of this |
| // Wallet card. |
| optional string card_billing_address_id = 5; |
| |
| // Unused by the client since M121. |
| // TODO(crbug.com/1457187): Some server-side code still relies on this field. |
| // To keep the protos in sync, it is kept until that code is cleaned up. |
| optional bool address_has_converted = 6; |
| } |