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

// Protocol buffers used for storing in SQLite.
// CAUTION: When any change is done here, bump kDatabaseVersion in
//          resource_prefetch_predictor_tables.h.

syntax = "proto2";

package predictors;

// Required in Chrome.
option optimize_for = LITE_RUNTIME;

// Represents a single redirect chain endpoint.
// When adding a field here, please also update the equality operator and the
// output operator in
// chrome/browser/predictors/loading_test_util.cc.
message RedirectStat {
  // Represents the host for RedirectData in a host-based table.
  //
  // Note that the |url| field contains only the origin portion of the full URL.
  // The full URL is not available, because in some cases the path and query may
  // be sanitized away - see https://crbug.com/40095391.
  optional string url = 1;
  optional uint32 number_of_hits = 2;
  optional uint32 number_of_misses = 3;
  optional uint32 consecutive_misses = 4;
  // |url_scheme| is typically either "http" or "https". This field was added
  // in M-77 without wiping the database. As such, it may be empty in some
  // cases even when originally |url| had a non-empty scheme.
  optional string url_scheme = 5;
  // |url_port| field was added in M-77 without wiping the database. As such,
  // it may be empty in some cases even when originally |url| had a non-empty
  // port number.
  optional int32 url_port = 6;
}

// Represents a mapping from URL or host to a list of redirect endpoints.
message RedirectData {
  // Main frame URL or host.
  optional string primary_key = 1;
  optional uint64 last_visit_time = 2;
  repeated RedirectStat redirect_endpoints = 3;
}

// Historical data for a single origin accessed from a host.
message OriginStat {
  optional string origin = 1;
  optional uint32 number_of_hits = 2;
  optional uint32 number_of_misses = 3;
  optional uint32 consecutive_misses = 4;
  optional double average_position = 5;
  optional bool always_access_network = 6;
  optional bool accessed_network = 7;
}

// Collection of origins accessed from a host.
message OriginData {
  optional string host = 1;
  optional uint64 last_visit_time = 2;
  repeated OriginStat origins = 3;
}
