// 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 nigori keys. // If you change or add any fields in this file, update proto_visitors.h and // potentially proto_enum_conversions.{h, cc}. syntax = "proto2"; option go_package = "./sync_pb"; option java_multiple_files = true; option java_package = "org.chromium.components.sync.protocol"; option optimize_for = LITE_RUNTIME; package sync_pb; import "sync_enums.proto"; import "brave_device_info_specifics.proto"; // Information about a device that is running a sync-enabled Chrome browser. We // are mapping the per-client cache guid to more specific information about the // device. message DeviceInfoSpecifics { // The cache_guid created to identify a sync client on this device. optional string cache_guid = 1; // A non-unique but human readable name to describe this client. optional string client_name = 2; // The platform of the device. // Deprecated in M110, but still populated for backwards compatibility. // Replaced by os_type + device_form_factor. optional SyncEnums.DeviceType device_type = 3 [deprecated = true]; // The UserAgent used when contacting the Chrome Sync server. // Only present when talking to the HTTP server. optional string sync_user_agent = 4; // The Chrome instance's version. Updated (if necessary) on every startup. // DEPRECATED in M92. Still populated for backward compatibility. optional string chrome_version = 5 [deprecated = true]; // Last time when pre-sync data on the device was saved. The device can be // restored to state back to this time. In millisecond since UNIX epoch. // DEPRECATED in M50. optional int64 deprecated_backup_timestamp = 6 [deprecated = true]; // Device_id that is stable until user signs out. This device_id is used for // annotating login scoped refresh token. Present only for Chrome Clients. optional string signin_scoped_device_id = 7; // This field is updated to be the current time periodically, and is also set // to the current time whenever another field changes. By examining the // difference between this field and the current time, it should be possible // to reason about the inactivity of any device that was syncing at one time. optional int64 last_updated_timestamp = 8; // Device info fields that are specific to a feature. This is information that // can not be derived from the other fields in the proto and are not general // enough to be used by another feature. optional FeatureSpecificFields feature_fields = 9; // Device specific information for Sharing feature. optional SharingSpecificFields sharing_fields = 10; // Model of device. optional string model = 11; // Name of device manufacturer. optional string manufacturer = 12; // The interval in minutes with which |last_updated_timestamp| is updated to // the sync servers if online and while sync is actively running (e.g. // excludes backgrounded apps on Android). Introduced in M81. The legacy // default was 1 day. optional int32 pulse_interval_in_minutes = 13; // Device specific information for Sync invalidations. optional InvalidationSpecificFields invalidation_fields = 14; // Information for contacting this device in order to perform security key // operations. optional PhoneAsASecurityKeySpecificFields paask_fields = 15; // Unique hardware identifier string which details the HW combination of // a ChromeOS device. This field will be empty on other OS devices. optional string full_hardware_class = 16; // Version information to pin-point which client implementation this is. oneof client_version_info { ChromeVersionInfo chrome_version_info = 17; GooglePlayServicesVersionInfo google_play_services_version_info = 18; } // The OS type the device. optional SyncEnums.OsType os_type = 19; // The form factor of the device. optional SyncEnums.DeviceFormFactor device_form_factor = 20; optional BraveSpecificFields brave_fields = 1000; } // Feature specific information about the device that is running a sync-enabled // Chrome browser. Adding to this proto is discouraged and should only be added // when the information can not be derived more generally. message FeatureSpecificFields { // Tracks whether the SendTabToSelf feature is enabled on the device. For this // to be true, two things must be true: (1) The receiving side of the feature // must be enabled on the device (2) The user has enabled sync for this // feature optional bool send_tab_to_self_receiving_enabled = 1; } // Device specific information for Sharing feature. Used to send end-to-end // encrypted message through FCM to other devices. message SharingSpecificFields { // FCM registration token of device subscribed using VAPID key. // TODO(crbug.com/1012226): Deprecate when VAPID migration is over. optional string vapid_fcm_token = 1; // Public key for message encryption [RFC8291] using VAPID key. // TODO(crbug.com/1012226): Deprecate when VAPID migration is over. optional bytes vapid_p256dh = 2; // Auth secret for message encryption [RFC8291] using VAPID key. // TODO(crbug.com/1012226): Deprecate when VAPID migration is over. optional bytes vapid_auth_secret = 3; // Enum defining available Sharing features. enum EnabledFeatures { reserved 5; reserved "PEER_CONNECTION"; UNKNOWN = 0; // Supports Click to Call only via VAPID. CLICK_TO_CALL_VAPID = 1; // Supports Shared Clipboard only via VAPID. SHARED_CLIPBOARD_VAPID = 2; SMS_FETCHER = 3; REMOTE_COPY = 4; DISCOVERY = 6; // Suppots Click to Call via both VAPID and sender ID. CLICK_TO_CALL_V2 = 7; // Suppots Shared Clipboard via both VAPID and sender ID. SHARED_CLIPBOARD_V2 = 8; // Supports optimization guide push notification. OPTIMIZATION_GUIDE_PUSH_NOTIFICATION = 9; } // A list of enabled Sharing features. repeated EnabledFeatures enabled_features = 4; // Deprecated. Use sender_id_fcm_token_v2 for new clients. optional string sender_id_fcm_token_deprecated = 5 [deprecated = true]; // Deprecated. Use sender_id_p256dh_v2 for new clients. optional bytes sender_id_p256dh_deprecated = 6 [deprecated = true]; // Deprecated. Use sender_id_auth_secret_v2 for new clients. optional bytes sender_id_auth_secret_deprecated = 7 [deprecated = true]; // FCM registration token of device subscribed using Sharing sender ID. optional string sender_id_fcm_token_v2 = 8; // Public key for message encryption [RFC8291] using Sharing sender ID. optional bytes sender_id_p256dh_v2 = 9; // Auth secret for message encryption [RFC8291] using Sharing sender ID. optional bytes sender_id_auth_secret_v2 = 10; } // Device specific information telling how to send invalidations to this device. message InvalidationSpecificFields { // FCM registration token of device (using Sync sender ID). optional string instance_id_token = 1; // This device wants to receive only invalidations which are related to these // types. The legitimate values of this field correspond to the protobuf field // numbers of all EntitySpecifics fields supported by the server (see // components/sync/protocol/sync.proto). repeated int32 interested_data_type_ids = 2; } message PhoneAsASecurityKeySpecificFields { // The encoded tunnel server in the same format as in the BLE advert. See // device::cablev2::tunnelserver::DecodeDomain. (Actually a uint16 but // proto doesn't have that as a type.) optional uint32 tunnel_server_domain = 1; // An FCM token that can be presented to the tunnel server to contact this // device. optional bytes contact_id = 2; // A shared secret key, used to enable communication across devices via // unauthenticated channels. Knowledge of this secret acts as proof that the // remote end is authorized to talk to the device publishing this secret. optional bytes secret = 3; // An id that identifies |secret|. This, and |secret|, will be rotated and // the ID allows this device to know which |secret| the counterparty is // using. optional fixed32 id = 4; // A P-256, X9.62-encoded public key for this device. Specific to the Chrome // instance. optional bytes peer_public_key_x962 = 5; // The credential ID for use when signing into accounts.google.com. This // credential ID isn't published as a WebauthnCredentialSpecifics, unlike // other passkeys, because it's auto-generated. optional bytes google_credential_id = 6; } message ChromeVersionInfo { // Version number as per https://www.chromium.org/developers/version-numbers. optional string version_number = 1; } message GooglePlayServicesVersionInfo { optional string apk_version_name = 1; }