#ifndef CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_NETWORK_CONTEXT_H_
#define CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_NETWORK_CONTEXT_H_
#include "base/memory/scoped_refptr.h"
#include "content/browser/preloading/prefetch/prefetch_type.h"
#include "content/common/content_export.h"
#include "content/public/browser/global_routing_id.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/mojom/cookie_manager.mojom.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "url/origin.h"
#if BUILDFLAG(ARKWEB_NO_STATE_PREFETCH)
#include "content/public/browser/render_frame_host.h"
#endif
namespace content {
class BrowserContext;
class PrefetchService;
class CONTENT_EXPORT PrefetchNetworkContext {
public:
PrefetchNetworkContext(
bool use_isolated_network_context,
const PrefetchType& prefetch_type,
const GlobalRenderFrameHostId& referring_render_frame_host_id,
const std::optional<url::Origin>& referring_origin);
~PrefetchNetworkContext();
PrefetchNetworkContext(const PrefetchNetworkContext&) = delete;
const PrefetchNetworkContext operator=(const PrefetchNetworkContext&) =
delete;
scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory(
PrefetchService* service);
network::mojom::CookieManager* GetCookieManager();
#if BUILDFLAG(ARKWEB_NO_STATE_PREFETCH)
bool IsReferringRenderFrameHostValid() {
return RenderFrameHost::FromID(referring_render_frame_host_id_) != nullptr;
}
#endif
void CloseIdleConnections();
private:
scoped_refptr<network::SharedURLLoaderFactory> CreateNewURLLoaderFactory(
BrowserContext* browser_context,
network::mojom::NetworkContext* network_context);
void CreateIsolatedURLLoaderFactory(PrefetchService* service);
const bool use_isolated_network_context_;
const PrefetchType prefetch_type_;
const GlobalRenderFrameHostId referring_render_frame_host_id_;
const std::optional<url::Origin> referring_origin_;
mojo::Remote<network::mojom::NetworkContext> network_context_;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
mojo::Remote<network::mojom::CookieManager> cookie_manager_;
};
}
#endif