| // 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_SERVICE_IMPL_H_ |
| #define NET_DEVICE_BOUND_SESSIONS_SESSION_SERVICE_IMPL_H_ |
| |
| #include <map> |
| #include <optional> |
| |
| #include "base/memory/weak_ptr.h" |
| #include "net/base/net_export.h" |
| #include "net/device_bound_sessions/registration_fetcher.h" |
| #include "net/device_bound_sessions/registration_fetcher_param.h" |
| #include "net/device_bound_sessions/session.h" |
| #include "net/device_bound_sessions/session_service.h" |
| |
| namespace net { |
| class URLRequest; |
| class URLRequestContext; |
| class SchemefulSite; |
| } // namespace net |
| |
| namespace unexportable_keys { |
| class UnexportableKeyService; |
| } |
| |
| namespace net::device_bound_sessions { |
| |
| class NET_EXPORT SessionServiceImpl : public SessionService { |
| public: |
| SessionServiceImpl(unexportable_keys::UnexportableKeyService& key_service, |
| const URLRequestContext* request_context); |
| ~SessionServiceImpl() override; |
| |
| void RegisterBoundSession(RegistrationFetcherParam registration_params, |
| const IsolationInfo& isolation_info) override; |
| |
| std::optional<Session::Id> GetAnySessionRequiringDeferral( |
| URLRequest* request) override; |
| |
| void DeferRequestForRefresh( |
| URLRequest* request, |
| Session::Id session_id, |
| RefreshCompleteCallback restart_callback, |
| RefreshCompleteCallback continue_callback) override; |
| |
| private: |
| // The key is the site (eTLD+1) of the session's origin. |
| using SessionsMap = std::multimap<SchemefulSite, std::unique_ptr<Session>>; |
| |
| void OnRegistrationComplete( |
| std::optional<RegistrationFetcher::RegistrationCompleteParams> params); |
| |
| const raw_ref<unexportable_keys::UnexportableKeyService> key_service_; |
| raw_ptr<const URLRequestContext> context_; |
| |
| // Storage is similar to how CookieMonster stores its cookies. |
| SessionsMap unpartitioned_sessions_; |
| |
| base::WeakPtrFactory<SessionServiceImpl> weak_factory_{this}; |
| }; |
| |
| } // namespace net::device_bound_sessions |
| |
| #endif // NET_DEVICE_BOUND_SESSIONS_SESSION_SERVICE_IMPL_H_ |