chromium/net/device_bound_sessions/proto/storage.proto

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

syntax = "proto2";

package net.device_bound_sessions.proto;

option optimize_for = LITE_RUNTIME;

// Protobuf messages that represent a Device Bound Session Credentials
// (DBSC) session's state that can be saved to disk.

// Specifies whether a URL request should be deferred or not based
// on matching a specific rule.
// The numbering is different compared to the
// `net::device_bound_sessions::SessionInclusionRules::InclusionResult`
// enum since the style guide asks to use UNSPECIFIED for the zero value
// enum (https://protobuf.dev/programming-guides/style/#enums).
enum RuleType {
  RULE_TYPE_UNSPECIFIED = 0;
  EXCLUDE = 1;
  INCLUDE = 2;
}

// A rule that determines whether a URL request should be deferred.
// See declaration of `SessionInclusionRules::UrlRule` in
// //net/device_bound_sessions/session_inclusion_rules.cc for more details.
message UrlRule {
  // Whether the request should be included/excluded if there is a match.
  optional RuleType rule_type = 1;
  // Domain or pattern the URL must match.
  optional string host_matcher_rule = 2;
  // Prefix consisting of path components that the URL must match.
  optional string path_prefix = 3;
}

// Represents a set of rules that defines which URL requests may
// potentially be deferred on account of an active DBSC session.
// See //net/device_bound_sessions/session_inclusion_rules.h for
// more details.
message SessionInclusionRules {
  // The origin that created/set the DBSC session.
  optional string origin = 1;
  // Whether the rules should apply to the whole site.
  optional bool do_include_site = 2;
  // A list of rules that add to the basic include rule
  // (specified by the origin or site). These rules may specify
  // inclusion or exclusion for URLs that match.
  repeated UrlRule url_rules = 3;
}

// The numbering is different compared to the `net::CookieSameSite` enum since
// the style guide asks to use UNSPECIFIED for the zero value enum
// (https://protobuf.dev/programming-guides/style/#enums).
enum CookieSameSite {
  COOKIE_SAME_SITE_UNSPECIFIED = 0;
  NO_RESTRICTION = 1;
  LAX_MODE = 2;
  STRICT_MODE = 3;
}

enum CookieSourceScheme {
  UNSET = 0;
  NON_SECURE = 1;
  SECURE = 2;
}

// Serialized data for a partitioned cookie.
message SerializedCookiePartitionKey {
  optional string top_level_site = 1;
  optional bool has_cross_site_ancestor = 2;
}

// Represents the need for a certain cookie to be present.
// See //net/device_bound_sessions/cookie_craving.h for details.
message CookieCraving {
  optional string name = 1;
  optional string domain = 2;
  optional string path = 3;
  optional bool secure = 4;
  optional bool httponly = 5;
  optional int32 source_port = 6;
  optional int64 creation_time = 7;
  optional CookieSameSite same_site = 8;
  optional CookieSourceScheme source_scheme = 9;
  optional SerializedCookiePartitionKey serialized_partition_key = 10;
}

// A Session represents persistent state scoped to a single DBSC session.
// See //net/device_bound_sessions/session.h for details.
message Session {
  // The unique server-issued session identifier.
  optional string id = 1;
  // The URL to use for refresh requests on behalf of this session.
  optional string refresh_url = 2;
  // If this session should defer requests when cookies are not present.
  optional bool should_defer_when_expired = 3;
  // Expiry date for session (encoded as microseconds since the Windows epoch).
  optional int64 expiry_time = 4;
  // Wrapped binding key used for this session.
  optional bytes wrapped_key = 5;
  // Session inclusion rules.
  optional SessionInclusionRules session_inclusion_rules = 6;
  // Set of credentials required by this session.
  repeated CookieCraving cookie_cravings = 7;
}