// 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 for debug info clients can send to the sync server.

// 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/get_updates_caller_info.proto";
import "components/sync/protocol/sync_enums.proto";

// Per-type hint information.
message TypeHint {
  // The data type this hint applied to.
  optional int32 data_type_id = 1;

  // Whether or not a valid hint is provided.
  optional bool has_valid_hint = 2;
}

// The additional info here is from the StatusController. They get sent when
// the event SYNC_CYCLE_COMPLETED  is sent.
message SyncCycleCompletedEventInfo {
  reserved 1;
  reserved "syncer_stuck";
  reserved 2;
  reserved "num_blocking_conflicts";
  reserved 3;
  reserved "num_non_blocking_conflicts";

  // These new conflict counters replace the ones above.
  // TODO(crbug.com/40833583): Deprecated in M103.
  optional int32 num_encryption_conflicts = 4 [deprecated = true];
  optional int32 num_hierarchy_conflicts = 5 [deprecated = true];
  optional int32 num_simple_conflicts = 6;  // No longer sent since M24.
  optional int32 num_server_conflicts = 7;

  // Counts to track the effective usefulness of our GetUpdate requests.
  optional int32 num_updates_downloaded = 8;
  // TODO(crbug.com/40833583): Deprecated in M103.
  optional int32 num_reflected_updates_downloaded = 9 [deprecated = true];

  // `caller_info` was mostly replaced by `get_updates_origin`; now it only
  // contains the `notifications_enabled` flag.
  optional GetUpdatesCallerInfo caller_info = 10;

  // Deprecated in M67.
  reserved 11;
  reserved "source_info";

  optional SyncEnums.GetUpdatesOrigin get_updates_origin = 12;
}

message DebugEventInfo {
  // Each of the following fields correspond to different kinds of events. as
  // a result, only one is set during any single DebugEventInfo.
  // A singleton event. See enum definition.
  optional SyncEnums.SingletonDebugEventType singleton_event = 1;
  // A sync cycle completed.
  optional SyncCycleCompletedEventInfo sync_cycle_completed_event_info = 2;
  // A datatype triggered a nudge.
  optional int32 nudging_datatype = 3;
  // A notification triggered a nudge.
  repeated int32 datatypes_notified_from_server = 4;

  reserved "datatype_association_stats";
  reserved 5;
}

message DebugInfo {
  repeated DebugEventInfo events = 1;

  // Whether cryptographer is ready to encrypt and decrypt data.
  optional bool cryptographer_ready = 2;

  // Cryptographer has pending keys which indicates the correct passphrase
  // has not been provided yet.
  optional bool cryptographer_has_pending_keys = 3;

  // Indicates client has dropped some events to save bandwidth.
  optional bool events_dropped = 4;
}
