// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file was exported from google3, do not edit manually.
// See README.chromium for details.

edition = "2023";

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

option java_outer_classname = "CastLogsProtos";

package metrics;  // Cast-enabled device specific log data included in ChromeUserMetricsExtension.

option features.enum_type = CLOSED;
option features.utf8_validation = NONE;

// Next tag: 9
message CastLogsProto {
  // Cast specific device information.
  // Next tag: 8
  message CastDeviceInfo {
    // The product type of Cast device sent from Cast-enabled devices.
    // Next tag: 15
    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;
      CAST_PRODUCT_TYPE_FUCHSIA_OS = 8;
      CAST_PRODUCT_TYPE_LITE = 9;
      CAST_PRODUCT_TYPE_CORE = 10;
      CAST_PRODUCT_TYPE_ANDROID_TABLET = 11;
      CAST_PRODUCT_TYPE_ANDROID_AUTOMOTIVE = 12;
      CAST_PRODUCT_TYPE_ANDROID = 13;
      CAST_PRODUCT_TYPE_AOSP_TV = 14;
    }

    CastProductType type = 1;

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

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

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

    // The serial number.
    string serial_number = 5;

    // Hardware information stored in factory partition.
    // Next Tag: 12
    message HardwareInfo {
      string color = 1;

      string mic = 2;

      string memory = 3;

      string nand = 4;

      string mfg_date = 5;

      string build_name = 6;

      string config = 7;

      string emmc = 8;

      string display = 9;

      string amp = 10;

      string board_name = 11;
    }

    HardwareInfo hardware_info = 6;

    // The environment of the device indicates where the device is being used,
    // i.e., hotel, home, car etc. Next tag: 4
    enum DeviceEnvironment {
      DEVICE_ENVIRONMENT_UNKNOWN = 0;
      DEVICE_ENVIRONMENT_HOTEL = 1;
      DEVICE_ENVIRONMENT_HOME = 2;
      DEVICE_ENVIRONMENT_AUTOMOTIVE = 3;
    }

    DeviceEnvironment device_environment = 7;
  }

  // The device sends this information at least once per day.
  CastDeviceInfo cast_device_info = 1;

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

    fixed32 virtual_connection_id = 2;

    // This message describes a detail sender device and sdk.
    // Next tag: 10
    message SenderInfo {
      // The identifier for the sender device, that is pseudonymous and can be
      // reset.  This id has no link to a specific user or device.
      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;
      }

      SDKType sdk_type = 2;

      // Version of sender sdk/extension used to connection. The format varies
      // by each platform.
      string version = 3;

      // Chrome browser version where the Chrome extension running.
      // Only Chrome extension sends this information.
      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;
      }

      Platform platform = 5;

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

      // What type of connection type used to establish between sender and
      // receiver.
      enum ConnectionType {
        CONNECTION_TYPE_UNKNOWN = 0;

        // A connection established directly between sender and receiver.
        CONNECTION_TYPE_LOCAL = 1;

        // A connection created by opencast to the device via the cloud relay.
        CONNECTION_TYPE_RELAY = 2;

        // A connection created by receiver itself internally.
        CONNECTION_TYPE_INTERNAL = 3;
      }

      ConnectionType transport_connection_type = 7;

      // Sender device model.
      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.
      int32 sender_local_ip_fragment = 9;
    }

    SenderInfo sender_info = 3;

    enum V2ConnectionType {
      V2_CONNECTION_TYPE_STRONG = 0;
      V2_CONNECTION_TYPE_WEAK = 1;
      V2_CONNECTION_TYPE_INVISIBLE = 2;
      V2_CONNECTION_TYPE_UNKNOWN = 3;
    }

    V2ConnectionType v2_connection_type = 4;
  }

  // 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: 31
  message CastEventProto {
    // The name of the action, hashed by same logic used to hash user action
    // event and histogram.
    fixed64 name_hash = 1;

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

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

    enum AppType {
      APP_TYPE_UNKNOWN = 0;
      // App is launched on Cast Web Runtime.
      APP_TYPE_CAST_WEB = 1;
      // App is an ATV native application.
      APP_TYPE_ANDROID_TV = 2;
      // App is a 'other' native application (Cast Connect 2 app).
      APP_TYPE_NATIVE = 3;
    }

    // The type of app launched.
    AppType app_type = 30;

    // The app ID of a remote Cast receiver associated with this event.
    fixed32 remote_app_id = 19;

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

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

    // Cast MPL version.
    fixed64 cast_mpl_version = 9;

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

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

    // An optional value for the associated event, often a measurement in
    // milliseconds.
    int64 value = 8;

    // Group id of Multizone Audio.
    fixed64 group_uuid = 10;

    string conversation_key = 11;

    // Request id of V2 Application Protocol
    fixed32 request_id = 12;

    string event_id = 13;

    string aogh_request_id = 16;

    int64 aogh_local_device_id = 18;

    string aogh_agent_id = 21;

    string aogh_standard_agent_id = 28;

    // Optional value associated with the event. For example, may be used for
    // error codes.
    message Metadata {
      fixed64 name_hash = 1;
      int64 value = 2;
    }

    repeated Metadata metadata = 14;

    // Optional values associated with the event.
    repeated float feature_vector = 15;

    // Optional value associated with timezone update event.
    string timezone_id = 17;

    // Optional value to log ui version.
    string ui_version = 20;

    // Optional field to log SELINUX audit detail.
    string selinux_audit_detail = 22;

    // List of event ids belonging to a particular interaction. One interaction
    // could receive multiple assistant outputs, hence multiple event ids.
    repeated string event_id_list = 23;

    // Duo core version.
    fixed64 duo_core_version = 24;

    // Model version of hotword detector.
    string hotword_model_id = 25;

    enum LaunchFrom {
      FROM_UNKNOWN = 0;

      // Launched by itself, or by the user interacting directly with the
      // receiver device (e.g. use a TV remote to launch an app on Android TV).
      FROM_LOCAL = 1;

      // Launched by a Cast V1 sender using DIAL.
      FROM_DIAL = 2;

      // Launched by a Cast V2 sender device.
      FROM_CAST_V2 = 3;

      // Launched from the cloud.
      FROM_CCS = 4;
    }

    LaunchFrom launch_from = 26;

    enum RuntimeType {
      RUNTIME_TYPE_UNKNOWN = 0;

      RUNTIME_TYPE_CAST_WEB = 1;

      RUNTIME_TYPE_CAST_LITE = 2;

      RUNTIME_TYPE_NATIVE = 3;
    }

    // The Cast Core runtime type associated with this event.
    RuntimeType runtime_type = 27;

    // Serialized CastBridgeEvent message.
    // //depot/google3/third_party/castlite/bridge_app/bootstrap/cast_bridge_event.proto
    bytes cast_bridge_event_metadata = 29;
  }

  repeated CastEventProto cast_event = 3;

  // Virtual release track for releases sent to partners, trusted beta
  // testers, developers, etc.
  fixed32 virtual_release_track = 4;

  // Cast specific device information which is expected to change over time.
  // Next tag: 13
  message CastDeviceMutableInfo {
    // This is the last type of reboot the device encountered
    // Next tag: 22
    enum RebootType {
      REBOOT_TYPE_UNKNOWN = 0;  // Fail to get reboot type from system property
      REBOOT_TYPE_FORCED = 1;   // Power removed from device
      REBOOT_TYPE_API = 2;      // Requested from reboot setup api
      REBOOT_TYPE_NIGHTLY = 3;
      REBOOT_TYPE_OTA = 4;
      REBOOT_TYPE_WATCHDOG = 5;  // Reboot caused by a watchdog process.
      REBOOT_TYPE_PROCESS_MANAGER = 6;
      REBOOT_TYPE_CRASH_UPLOADER = 7;
      REBOOT_TYPE_FDR = 8;

      REBOOT_TYPE_HW_WATCHDOG = 9;

      REBOOT_TYPE_SW_OTHER = 10;

      REBOOT_TYPE_OVERHEAT = 11;

      // The device got into a state such that it needs to regenerate the cloud
      // device id.
      REBOOT_TYPE_REGENERATE_CLOUD_ID = 12;

      // Reboot triggered due to successive OOM events.
      REBOOT_TYPE_REPEATED_OOM = 13;

      // Reboot triggered when the utility process is found to be in
      // crash loop.
      REBOOT_TYPE_UTILITY_PROCESS_CRASH = 14;

      // design doc go/fuchsia-session-restart-metrics
      // Restart triggered due to graceful component teardown by the Fuchsia
      // platform. Device has not rebooted.
      REBOOT_TYPE_GRACEFUL_RESTART = 15;

      // Restart triggered due to ungraceful component teardown by the Fuchsia
      // platform. Device has not rebooted.
      REBOOT_TYPE_UNGRACEFUL_RESTART = 16;

      MULTI_SERVICE_BUG = 17;

      POWER_MANAGER = 18;

      EXPERIMENT_CHANGE = 19;

      ANOMALY_DETECTION = 20;

      KERNEL_PANIC = 21;
    }

    RebootType last_reboot_type = 1;

    // System version which the cast_shell is running.
    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.
    string backdrop_app_device_id = 3;

    // Chromecast release version like "1.23", "1.24". The format is "X.Y"
    // where X is major version and Y is sub major version.
    fixed32 release_version = 4;

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

    NetifIPVersion netif_ip_version = 5;

    // True if the system which cast_shell is running on, supports ip dual stack
    // sockets.
    bool ip_dual_stack_supported = 6;

    // Current timezone which the device is using.
    string timezone_id = 7;

    // Optional value to log latest ui version.
    string latest_ui_version = 8;

    // Station ID of the device if connected to Google WiFi network
    string google_wifi_station_shmac = 9;

    // Optional field to log installed manifest platform version.
    string installed_manifest_platform_version = 10;

    // Optional field to log installed manifest version.
    uint32 installed_manifest_version = 11;

    // Optional field to log the system bundle version.
    string system_bundle_version = 12;
  }

  // The device sends this information at least once per day.
  CastDeviceMutableInfo cast_device_mutable_info = 5;

  fixed64 receiver_metrics_id = 6;

  // This ID is only ever recorded for Google-internal users (dogfooders). It
  // is never recorded for external users."
  uint64 ephemeral_id = 7;

  fixed32 source_virtual_release_track = 8;
}
