blob: 5a3777764ce588711f601c27acfed546c1b62712 [file] [log] [blame]
// 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.
#ifndef NET_DEVICE_BOUND_SESSIONS_SESSION_H_
#define NET_DEVICE_BOUND_SESSIONS_SESSION_H_
#include <optional>
#include <string>
#include "base/types/strong_alias.h"
#include "components/unexportable_keys/unexportable_key_id.h"
#include "net/base/net_export.h"
#include "net/device_bound_sessions/cookie_craving.h"
#include "net/device_bound_sessions/session_inclusion_rules.h"
#include "net/device_bound_sessions/session_params.h"
#include "url/gurl.h"
namespace net {
class URLRequest;
}
namespace net::device_bound_sessions {
// This class represents a DBSC (Device Bound Session Credentials) session.
class NET_EXPORT Session {
public:
using Id = base::StrongAlias<class IdTag, std::string>;
static std::unique_ptr<Session> CreateIfValid(const SessionParams& params,
GURL url);
// this bool could also be an enum for UMA, eventually devtools, etc.
bool ShouldDeferRequest(URLRequest* request) const;
const Id& id() const { return id_; }
const GURL& refresh_url() const { return refresh_url_; }
~Session();
private:
Session(Id id, url::Origin origin, GURL refresh);
Session(const Session& other) = delete;
Session& operator=(const Session& other) = delete;
Session(Session&& other) = delete;
Session& operator=(Session&& other) = delete;
// The unique server-issued identifier of the session.
const Id id_;
// The URL to use for refresh requests made on behalf of this session.
// Note: This probably also needs to store its IsolationInfo, so that the
// correct IsolationInfo can be used when sending refresh requests.
// If requests are not deferred when missing a craving, this should still
// be set as this URL must be able to set all cravings.
const GURL refresh_url_;
// Determines which requests are potentially subject to deferral on behalf of
// this session.
SessionInclusionRules inclusion_rules_;
// The set of credentials required by this session. Derived from the
// "credentials" array in the session config.
std::vector<CookieCraving> cookie_cravings_;
// Unexportable key for this session, this will never change for a given
// session.
unexportable_keys::UnexportableKeyId key_id_;
// Precached challenge, if any. Should not be persisted.
std::optional<std::string> cached_challenge_;
// If this session should defer requests when cookies are not present.
// Default is true, and strongly recommended.
// If this is false, requests will still be sent when cookies are not present,
// and will be signed using the cached challenge if present, if not signed
// using a default value for challenge.
bool should_defer_when_expired = true;
// Expiry date for session, 400 days from last refresh similar to cookies.
base::Time expiry_date_;
};
} // namespace net::device_bound_sessions
#endif // NET_DEVICE_BOUND_SESSIONS_SESSION_H_