// Copyright 2017 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.

// This file includes Safe Browsing WebUI protocol buffer.

syntax = "proto2";

package safe_browsing;

option optimize_for = LITE_RUNTIME;

// Describes the state of the database manager.
message DatabaseManagerInfo {
  // Describes the status of the last update request sent to SafeBrowsing.
  message UpdateInfo {
    // Network status code for the last update request sent to SafeBrowsing.
    optional int32 network_status_code = 1;

    // The time, since epoch, when the last update request was sent to
    // SafeBrowsing.
    optional uint64 last_update_time_millis = 2;
  }

  optional UpdateInfo update_info = 1;

  // Describes the state of the database.
  message DatabaseInfo {
    // Was the last update applied successfully?
    optional bool update_successful = 1;

    // Sum of the store sizes in the database.
    optional uint64 database_size_bytes = 2;

    // Describes the state of a store in the database.
    message StoreInfo {
      // The store file name.
      optional string file_name = 1;

      // The store file size.
      optional int64 file_size_bytes = 2;

      // The status of applying the updates fetched from the server to the
      // store. The values of update_status corresponds to the enum
      // ApplyUpdateResult in V4Store.
      optional int32 update_status = 3;

      // The time, since epoch, of applying the updates to the store.
      optional uint64 last_apply_update_time_millis = 4;

      // The number of times the store has been queried for a prefix.
      optional uint32 checks_attempted = 5;
    }

    // Information about each of the stores managed by the database.
    repeated StoreInfo store_info = 3;
  }

  optional DatabaseInfo database_info = 2;
}

// The information about the list of prefixes for which the full hashes have
// been stored in the cache.
message FullHashCacheInfo {
  // Records number of cache hits since the beginning of the session.
  optional int32 number_of_hits = 1;
  // Cached full hashes received from the server for the corresponding hash
  // prefixes.
  message FullHashCache {
    // The hash prefix for which the full hashes are stored in the cache.
    optional string hash_prefix = 1;
    // The information about a hash prefix stored in the cache.
    message CachedHashPrefixInfo {
      // The negative ttl for the hash prefix.
      optional int64 negative_expiry = 1;
      // The information about a particular full hash.
      message FullHashInfo {
        // The expiration time of the full hash for a particular store.
        optional int64 positive_expiry = 1;
        // A variable-length SHA256 hash with size between 4 and 32 bytes
        // inclusive.
        optional string full_hash = 2;
        // The list for which this full hash is applicable.
        message ListIdentifier {
          // Types of platforms. The value of platform_type corresponds to the
          // PlatformType enum in safebrowsing_proto.
          optional int32 platform_type = 1;
          // Types of entries that pose threats. The value of threat_entry_type
          // corresponds to the ThreatEntryType enum in safebrowsing_proto.
          optional int32 threat_entry_type = 2;
          // Types of threats. The value of threat_type corresponds to the
          // ThreatType enum in safebrowsing_proto.
          optional int32 threat_type = 3;
        }
        optional ListIdentifier list_identifier = 3;
      }
      // The list of all full hashes (and related info) that start with a
      // particular hash prefix and are known to be unsafe.
      repeated FullHashInfo full_hash_info = 2;
    }
    // Information about the cached hash prefix for each hash prefix in the
    // cache.
    optional CachedHashPrefixInfo cached_hash_prefix_info = 2;
  }
  repeated FullHashCache full_hash_cache = 2;
}
