blob: e703acc2e5140d2ab21d10022a80f4bb33f3cdf5 [file] [log] [blame]
// Copyright 2022 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 history entries.
// 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;
import "components/sync/protocol/sync_enums.proto";
// A history sync entity - this roughly represents one navigation, including its
// full redirect chain (but not referrals). Fields correspond to similarly named
// fields in history::VisitRow and history::URLRow.
message HistorySpecifics {
// Timestamp, also called "global ID" in some places (e.g. in delete
// directives). This uniquely identifies the entity.
optional int64 visit_time_windows_epoch_micros = 1;
// Cache GUID of the client that produced this entity, aka the "originator".
optional string originator_cache_guid = 2;
message RedirectEntry {
// ID of the visit on the originator client, unique within that client.
optional int64 originator_visit_id = 1;
// URL that was visited.
optional string url = 2;
// Title of the page corresponding to this URL.
optional string title = 3;
// True if the URL should NOT be used for auto-complete.
optional bool hidden = 4;
// The redirect type (if any).
optional SyncEnums.PageTransitionRedirectType redirect_type = 5;
}
// The redirect chain. The first entry is the URL the user originally
// navigated to; the last one is where they ended up. If there were no
// redirects, this has only one entry.
repeated RedirectEntry redirect_entries = 3;
// Whether the redirect chain in this entity is the continuation of a prior
// chain, and whether a continuation of this chain exists, in other entities.
// These are effectively the inverse of the CHAIN_START/CHAIN_END page
// transition qualifiers in Chrome. They are typically both false, since the
// whole chain is included in `redirect_entries`, but in some cases (notably,
// client redirects) a redirect chain may be split up across multiple
// entities.
optional bool redirect_chain_start_incomplete = 19;
optional bool redirect_chain_end_incomplete = 20;
// If this is set to true, then the redirect chain was too long and some
// entries were trimmed from the middle, so `redirect_entries` only
// corresponds to some of the first plus some of the last entries of the
// actual redirect chain.
optional bool redirect_chain_middle_trimmed = 21;
message PageTransition {
// The core transition type.
optional SyncEnums.PageTransition core_transition = 1 [default = LINK];
// Qualifiers:
// A supervised user tried to access this URL but was blocked.
optional bool blocked = 2;
// User used the Forward or Back button to navigate among browsing history.
optional bool forward_back = 3;
// User used the address bar to trigger this navigation.
optional bool from_address_bar = 4;
// User is navigating to the home page.
optional bool home_page = 5;
}
// The PageTransition for the navigation.
optional PageTransition page_transition = 4;
// The ID of the visit, on the originator client, that was a referrer for
// this one, or 0 if no referrer exists.
optional int64 originator_referring_visit_id = 5;
// The ID of the visit, on the originator client, that opened this one, or 0
// if no opener exists.
optional int64 originator_opener_visit_id = 6;
// The ID of the cluster that this visit belongs to on the originator client,
// or 0 if the originator client does not support setting this field or the
// visit does not belong to any cluster.
optional int64 originator_cluster_id = 22;
// The duration of the visit, in microseconds. Zero if the visit hasn't been
// finished (or the duration wasn't updated for some other reason).
optional int64 visit_duration_micros = 7;
// The kind of browser where this visit happened.
optional SyncEnums.BrowserType browser_type = 8;
// The SessionID of the window and tab where the visit happened. Can be used
// to link together possibly-related visits.
// Note: These are only unique per-client, so always use together with
// `originator_cache_guid`.
optional int32 window_id = 9;
optional int32 tab_id = 10;
// The ID for the task associated with this navigation, which is globally
// unique with high probability.
optional int64 task_id = 11;
// The IDs of ancestor tasks. These can be used to construct a tree of related
// visits.
optional int64 root_task_id = 12;
optional int64 parent_task_id = 13;
// The HTTP response code of the navigation.
optional int32 http_response_code = 14;
// The language of the content on the page, as an ISO 639 language code
// (usually two letters). May be "und" if the language couldn't be determined.
optional string page_language = 15;
// Whether a password field was found on the page.
optional SyncEnums.PasswordState password_state = 16;
// URL of the favicon for this page.
optional string favicon_url = 17;
// The URL of the referrer (indicated by `originator_referring_visit_id`), if
// any.
optional string referrer_url = 18;
}