// Copyright 2023 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package cobalt.browser.metrics;

import "histogram_event.proto";
import "reporting_info.proto";
import "user_action_event.proto";

// CobaltUMAEvent is a trimmed down version of the Chrome UMA
// ChromeUserMetricsExtension proto suitable for consumption by systems other
// than "official" UMA backends.
//
// IMPORTANT!! READ THIS BEFORE MODIFYING THIS PROTO!!
//
// As this proto definition is copied and reused downstream from Cobalt, this
// proto must be kept backwards compatible indefinitely. In short it means these
// rules must be followed:
//
//   - Do not rename anything. Fields, messages, enums, etc. should always
//     maintain their original names.
//   - Do not reuse field numbers. Once a field number has been used, it can
//     never used for a different field.
//   - Do not change the "optional" or "required" status of a field.
//   - Do not change the default value of a field.
//
// If you need to delete a field (including enum fields), reserve both the id
// and field name like so:
//
//     BEFORE:
//
//       optional int32 id = 42;
//       enum MyEnum {
//         FOO = 1;
//         BAR = 2;
//       }
//
//     AFTER:
//
//       // Deleted field "id", do not reuse tag numbers or field name.
//       reserved 42;
//       reserved "id";
//
//       enum MyEnum {
//         FOO = 1;
//         // Deleted "BAR", do not reuse the field number or nname.
//         reserved 2;
//         reserved "BAR";
//       }
//
// To deprecate a field use the "deprecated" tag as follows:
//
//     // Deprecated, use bar_count instead.
//     optional int32 foo_count = 7 [deprecated = true];
//
// Next ID: 4
message CobaltUMAEvent {
  // Stores information about an event that occurs in response to a user action.
  repeated .metrics.UserActionEventProto user_action_event = 1;

  // Histogram-collected metrics.
  repeated .metrics.HistogramEventProto histogram_event = 2;

  // Extra information attached to reports by client at upload time. For
  // example, failed attempt count, error codes, etc.
  optional .metrics.ReportingInfo reporting_info = 3;
}
