// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Cast-enabled device specific log data included in ChromeUserMetricsExtension.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;
option java_outer_classname = "CastLogsProtos";
option java_package = "org.chromium.components.metrics";

package metrics;

// Next tag: 7
message CastLogsProto {
  // Cast specific device information.
  // Next tag: 7
  message CastDeviceInfo {
    // The product type of Cast device sent from Cast-enabled devices.
    // Next tag: 8
    enum CastProductType {
      CAST_PRODUCT_TYPE_UNKNOWN = 0;
      CAST_PRODUCT_TYPE_CHROMECAST = 1;
      CAST_PRODUCT_TYPE_TV = 2;
      CAST_PRODUCT_TYPE_AUDIO = 3;
      CAST_PRODUCT_TYPE_ANDROID_TV = 4;
      CAST_PRODUCT_TYPE_ASSISTANT = 5;
      CAST_PRODUCT_TYPE_ANDROID_THINGS = 6;
      CAST_PRODUCT_TYPE_CHROME_OS = 7;
    }
    optional CastProductType type = 1;

    // The hardware revision of each product.
    optional string hardware_revision = 2;

    // The manufacturer of Cast device, this value is empty when the device
    // is manufactured by Google.
    optional string manufacturer = 3;

    // The model of the Cast device.
    optional string model = 4;

    // The serial number.
    optional string serial_number = 5;

    // Hardware information of the device.
    message HardwareInfo {
      optional string color = 1;
      optional string mic = 2;
      optional string memory = 3;
      optional string nand = 4;
    }
    optional HardwareInfo hardware_info = 6;
  }
  // The device sends this information at least once per day.
  optional CastDeviceInfo cast_device_info = 1;

  // Information about Cast connection between sender application and
  // Cast-enabled device.
  // Next tag: 4
  message CastConnectionInfo {
    optional fixed32 transport_connection_id = 1;

    optional fixed32 virtual_connection_id = 2;

    // This message describes a detail sender device and sdk. Those are
    // parsed from the user agent string sent from sender sdk during connection.
    // Next tag: 10
    message SenderInfo {
      // The identifier for the sender device, that is not tied any kind of
      // device id outside of UMA, and this id is reset when user resets sender
      // device.
      optional fixed64 sender_device_id = 1;

      // SDK type the sender application was using.
      // Next tag: 3
      enum SDKType {
        SDK_UNKNOWN = 0;

        // Native SDK type,
        // E.G. Android sdk, iOS sdk.
        SDK_NATIVE = 1;

        // SDK via Chrome extension.
        SDK_CHROME_EXTENSION = 2;
      }
      optional SDKType sdk_type = 2;

      // Version of sender sdk/extension used to connection.
      optional string version = 3;

      // Chrome browser version where the Chrome extension running.
      // Only Chrome extension sends this information.
      optional string chrome_browser_version = 4;

      // Platform of sender device.
      // Next tag: 8
      enum Platform {
        // Any platform other then cases below.
        PLATFORM_OTHER = 0;

        PLATFORM_ANDROID = 1;
        PLATFORM_IOS = 2;
        PLATFORM_WINDOWS = 3;
        PLATFORM_OSX = 4;
        PLATFORM_CHROMEOS = 5;
        PLATFORM_LINUX = 6;

        // The sender is Cast device - including itself.
        PLATFORM_CAST = 7;
      }
      optional Platform platform = 5;

      // Sender device system version.
      optional string system_version = 6;

      // What type of connection type used to establish between sender and
      // receiver.
      enum ConnectionType {
        CONNECTION_TYPE_UNKNOWN = 0;
        CONNECTION_TYPE_LOCAL = 1;
        CONNECTION_TYPE_RELAY = 2;
        // A connection created by receiver itself internally.
        CONNECTION_TYPE_INTERNAL = 3;
      }
      optional ConnectionType transport_connection_type = 7;

      // Sender device model.
      optional string model = 8;

      // Last 2 bytes of the sender’s local IP addresses (both IP4/IP6) when
      // the sender connected. This field stores ip fragment to last 2 bytes and
      // first 2 bytes won't be used.
      optional int32 sender_local_ip_fragment = 9;
    }
    optional SenderInfo sender_info = 3;
  }

  // Virtual connection established between sender application and Cast device.
  repeated CastConnectionInfo cast_connection_info = 2;

  // Stores Cast-enabled device specific events with a various context data.
  // Next tag: 16
  message CastEventProto {
    // The name of the action, hashed by same logic used to hash user action
    // event and histogram.
    optional fixed64 name_hash = 1;

    // The timestamp for the event, in milliseconds.
    optional int64 time_msec = 2;

    // The Cast receiver app ID related with this event.
    optional fixed32 app_id = 3;

    // The identifier for receiver application session.
    optional fixed64 application_session_id = 4;

    // Receiver side Cast SDK version.
    optional fixed64 cast_receiver_version = 5;

    // Cast MPL version.
    optional fixed64 cast_mpl_version = 9;

    // transport_connection_id related with this event.
    optional fixed32 transport_connection_id = 6;

    // virtual_connection_id related with this event.
    optional fixed32 virtual_connection_id = 7;

    // An optional value for the associated event
    optional int64 value = 8;

    // An optional value for the multi-room group uuid.
    optional fixed64 group_uuid = 10;

    // For application events associated with an assistant session, identifies
    // the assistant conversation.
    optional string conversation_key = 11;

    // Request ID of V2 Application Protocol, identifies a pair of request
    // and response.
    optional fixed32 request_id = 12;

    // Optional values associated with the event.
    repeated float feature_vector = 15;
  }
  repeated CastEventProto cast_event = 3;

  // Virtual release track for device.
  optional fixed32 virtual_release_track = 4;

  // Cast specific device information which is expected to change over time.
  // Next tag: 6
  message CastDeviceMutableInfo {
    // This is the last type of reboot the device encountered
    // Next tag: 9
    enum RebootType {
      REBOOT_TYPE_UNKNOWN = 0;
      REBOOT_TYPE_FORCED = 1;
      REBOOT_TYPE_API = 2;
      REBOOT_TYPE_NIGHTLY = 3;
      REBOOT_TYPE_OTA = 4;
      REBOOT_TYPE_WATCHDOG = 5;
      REBOOT_TYPE_PROCESS_MANAGER = 6;
      REBOOT_TYPE_CRASH_UPLOADER = 7;
      REBOOT_TYPE_FDR = 8;
    }
    optional RebootType last_reboot_type = 1;

    // System version which the cast_shell is running.
    optional fixed64 system_build_number = 2;

    // An identifier that is specific to the combination of app and device, in
    // this case the one used by backdrop.
    optional string backdrop_app_device_id = 3;

    // IP version of the primary network interface.
    enum NetifIPVersion {
      IP_UNKNOWN = 0;
      IP_V4 = 1;
      IP_V6 = 2;
      IP_DUAL_STACK = 3;
    }
    optional NetifIPVersion netif_ip_version = 4;

    // True if the system which cast_shell is running on, supports ip dual stack
    // sockets.
    optional bool ip_dual_stack_supported = 5;
  }
  optional CastDeviceMutableInfo cast_device_mutable_info = 5;

  // Unique identifier that is randomly generated on first setup, on re-setup
  // (FDR), and when user opted-in from opted-out status. If user is opted-out
  // then this field should not be set.
  // This is used for joining logs from Cast sender SDK to evaluate Cast
  // sender/receiver communication quality.
  optional fixed64 receiver_metrics_id = 6;
}
