#ifndef SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_ACCESS_CHECKER_H_
#define SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_ACCESS_CHECKER_H_
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ref.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/cookies/cookie_partition_key.h"
#include "services/network/public/mojom/shared_dictionary_access_observer.mojom.h"
class GURL;
namespace net {
class IsolationInfo;
class SiteForCookies;
}
namespace network {
class NetworkContext;
class COMPONENT_EXPORT(NETWORK_SERVICE) SharedDictionaryAccessChecker final {
public:
SharedDictionaryAccessChecker(
NetworkContext& context,
mojo::PendingRemote<mojom::SharedDictionaryAccessObserver>
shared_dictionary_observer_remote);
SharedDictionaryAccessChecker(
NetworkContext& context,
mojom::SharedDictionaryAccessObserver* shared_dictionary_observer);
~SharedDictionaryAccessChecker();
SharedDictionaryAccessChecker(const SharedDictionaryAccessChecker&) = delete;
SharedDictionaryAccessChecker& operator=(
const SharedDictionaryAccessChecker&) = delete;
bool CheckAllowedToWriteAndReport(const GURL& dictionary_url,
const net::SiteForCookies& site_for_cookies,
const net::IsolationInfo& isolation_info);
bool CheckAllowedToReadAndReport(
const GURL& target_resource_url,
const net::SiteForCookies& site_for_cookies,
const net::IsolationInfo& isolation_info,
base::optional_ref<const net::CookiePartitionKey> cookie_partition_key);
private:
bool IsAllowedToUseSharedDictionary(
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const net::IsolationInfo& isolation_info,
base::optional_ref<const net::CookiePartitionKey> cookie_partition_key);
const raw_ref<NetworkContext> context_;
mojo::Remote<mojom::SharedDictionaryAccessObserver>
shared_dictionary_observer_remote_;
raw_ptr<mojom::SharedDictionaryAccessObserver> shared_dictionary_observer_;
};
}
#endif