// 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 bookmarks. // 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 "unique_position.proto"; // Corresponds to a single meta info key/value pair for a bookmark node. message MetaInfo { optional string key = 1; optional string value = 2; } // Properties of bookmark sync objects. message BookmarkSpecifics { // URL of the bookmarked page (unset for folders). optional string url = 1; // PNG-encoded content of the favicon image (in practice 16x16, as determined // by |kFaviconSize|). Empty if the bookmark has no favicon (which includes // bookmark folders). optional bytes favicon = 2; // Contains legacy title which is truncated and may contain escaped symbols. optional string legacy_canonicalized_title = 3; // Corresponds to BookmarkNode::date_added() represented as microseconds since // the Windows epoch. optional int64 creation_time_us = 4; // The URL of the favicon image encoded in field |favicon|. Note that there // are various cases where this URL may be missing (field unset or empty) even // if the |favicon| field (image content) is populated: // 1. WebUI pages such as "chrome://bookmarks/" are missing a favicon URL but // they have a favicon. // 2. Data generated by ancient clients (prior to M25) may not contain the // favicon URL. // 3. If the favicon URL is too large (determined by |kMaxFaviconUrlSize|) it // may be omitted by clients to avoid running into the max-entity-size // limit. Most notably, this includes URLs prefixed with the data: scheme // that may encode the image content itself in the URL. optional string icon_url = 5; repeated MetaInfo meta_info = 6; reserved 7; reserved 8; reserved 9; // Introduced in M81, it represents a globally unique and immutable ID. // // If present, it must be the same as originator_client_item_id in lowercase, // unless originator client item ID is not a valid GUID. In such cases (which // is the case for bookmarks created before 2015), this GUID must match the // value inferred from the combination of originator cache GUID and // originator client item ID, see InferGuidForLegacyBookmark(). // // If not present, the value can be safely inferred using the very same // methods listed above. optional string guid = 10; // Contains full title as is. |legacy_canonicalized_title| is a prefix of // |full_title| with escaped symbols. optional string full_title = 11; reserved 12; reserved 13; // Introduced in M94, represents the GUID (field |guid|) of the parent. optional string parent_guid = 14; // Introduced in M94, determines whether this entity represents a bookmark // folder. This field is redundant to the similar field in SyncEntity. If this // field in specifics is set, it takes precedence over the one in SyncEntity. enum Type { // |UNSPECIFIED| is relevant only for the case where the field is not set. // M94 and above should not use this value. UNSPECIFIED = 0; URL = 1; FOLDER = 2; } optional Type type = 15; // Introduced in M94, determines ordering among siblings. This field is // redundant to the similar field in SyncEntity. If this field in specifics is // set, it takes precedence over the one in SyncEntity. optional UniquePosition unique_position = 16; // Introduced in M106, corresponds to BookmarkNode::date_last_used() // represented as microseconds since the Windows epoch. optional int64 last_used_time_us = 17; }