// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // 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 "entity_specifics.proto"; import "unique_position.proto"; // Sync proto to store entity metadata in model type storage. message EntityMetadata { // A hash based on the client tag and model type. // Used for various map lookups. Should always be available. // Sent to the server as SyncEntity::client_tag_hash. optional string client_tag_hash = 1; // The entity's server-assigned ID. // // Prior to the item's first commit, we leave this value as an empty string. // The initial ID for a newly created item has to meet certain uniqueness // requirements, and we handle those on the sync thread. optional string server_id = 2; // Whether or not the entity is deleted. optional bool is_deleted = 3; // A version number used to track in-progress commits. Each local change // increments this number. optional int64 sequence_number = 4; // The sequence number of the last item known to be successfully committed. optional int64 acked_sequence_number = 5; // The server version on which this item is based. // // If there are no local changes, this is the version of the entity as we see // it here. // // If there are local changes, this is the version of the entity on which // those changes are based. optional int64 server_version = 6 [default = -1]; // Entity creation and modification timestamps. Assigned by the client and // synced by the server, though the server usually doesn't bother to inspect // their values. They are encoded as milliseconds since the Unix epoch. optional int64 creation_time = 7; optional int64 modification_time = 8; // A hash of the current entity specifics value. Used to detect whether // entity's specifics value has changed without having to keep specifics in // memory. optional string specifics_hash = 9; // A hash of the last specifics known by both the client and server. Used to // detect when local commits and remote updates are just for encryption. This // value will be the empty string only in the following cases: the entity is // in sync with the server, has never been synced, or is deleted. optional string base_specifics_hash = 10; // Used for positioning entities among their siblings. Relevant only for data // types that support positions (e.g bookmarks). Refer to its definition in // unique_position.proto for more information about its internal // representation. optional UniquePosition unique_position = 11; // Used only for bookmarks. It's analogous to |specifics_hash| but it // exclusively hashes the content of the favicon image, as represented in // proto field BookmarkSpecifics.favicon, using base::PersistentHash(). optional fixed32 bookmark_favicon_hash = 12; // Last specifics known by both the client and server. Used during commits to // the server in order to prevent data loss caused by older clients dealing // with unknown proto fields (fields that were introduced later). Datatypes // (ModelTypeSyncBridge) may implement logic to trim down (or fully clear) // this proto prior to caching, to avoid the memory and I/O overhead of // dealing with an extra copy of the data. Introduced in M101. optional EntitySpecifics possibly_trimmed_base_specifics = 13; // If the entity is deleted, this field will record the chromium version // (e.g. 117.0.5875.1) that originated the deletion. Introduced in M117. optional string deleted_by_version = 14; // Metadata used for shared data types. Must not be present for regular data // types. // Introduced in M124. message CollaborationMetadata { // Collaboration ID which the current entity belongs to. optional string collaboration_id = 1; } optional CollaborationMetadata collaboration = 15; }