#ifndef CHROMECAST_BROWSER_CAST_NETWORK_CONTEXTS_H_
#define CHROMECAST_BROWSER_CAST_NETWORK_CONTEXTS_H_
#include <memory>
#include <string>
#include <vector>
#include "base/memory/scoped_refptr.h"
#include "content/public/browser/browser_thread.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/remote_set.h"
#include "net/proxy_resolution/proxy_config_service.h"
#include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom-forward.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/network_service.mojom.h"
#include "services/network/public/mojom/proxy_config.mojom.h"
#include "services/network/public/mojom/proxy_config_with_annotation.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
class CookieEncryptionProviderImpl;
class PrefProxyConfigTracker;
namespace base {
class FilePath;
}
namespace content {
class BrowserContext;
}
namespace network {
namespace mojom {
class NetworkContext;
class URLLoaderFactory;
}
class SharedURLLoaderFactory;
}
namespace os_crypt_async {
class OSCryptAsync;
}
namespace chromecast {
namespace shell {
class CastNetworkContexts : public net::ProxyConfigService::Observer,
public network::mojom::ProxyConfigPollerClient {
public:
explicit CastNetworkContexts(
std::vector<std::string> cors_exempt_headers_list,
os_crypt_async::OSCryptAsync* os_crypt_async);
CastNetworkContexts(const CastNetworkContexts&) = delete;
CastNetworkContexts& operator=(const CastNetworkContexts&) = delete;
~CastNetworkContexts() override;
network::mojom::NetworkContext* GetSystemContext();
network::mojom::URLLoaderFactory* GetSystemURLLoaderFactory();
scoped_refptr<network::SharedURLLoaderFactory>
GetSystemSharedURLLoaderFactory();
void SetAllowedDomainsForPersistentCookies(
std::vector<std::string> allowed_domains_list);
void OnNetworkServiceCreated(network::mojom::NetworkService* network_service);
void ConfigureNetworkContextParams(
content::BrowserContext* context,
bool in_memory,
const base::FilePath& relative_partition_path,
network::mojom::NetworkContextParams* network_context_params,
cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params);
void OnLocaleUpdate();
void OnPrefServiceShutdown();
private:
class URLLoaderFactoryForSystem;
void ConfigureDefaultNetworkContextParams(
network::mojom::NetworkContextParams* network_context_params);
network::mojom::NetworkContextParamsPtr CreateSystemNetworkContextParams();
network::mojom::CookieManagerParamsPtr CreateCookieManagerParams();
void AddProxyToNetworkContextParams(
network::mojom::NetworkContextParams* network_context_params);
void OnProxyConfigChanged(
const net::ProxyConfigWithAnnotation& config,
net::ProxyConfigService::ConfigAvailability availability) override;
void OnLazyProxyConfigPoll() override;
const std::vector<std::string> cors_exempt_headers_list_;
std::vector<std::string> allowed_domains_for_persistent_cookies_;
std::unique_ptr<CookieEncryptionProviderImpl> cookie_encryption_provider_;
mojo::Remote<network::mojom::NetworkContext> system_network_context_;
scoped_refptr<URLLoaderFactoryForSystem> system_shared_url_loader_factory_;
mojo::Remote<network::mojom::URLLoaderFactory> system_url_loader_factory_;
std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_impl_;
mojo::ReceiverSet<network::mojom::ProxyConfigPollerClient>
poller_receiver_set_;
mojo::RemoteSet<network::mojom::ProxyConfigClient> proxy_config_client_set_;
};
}
}
#endif