#ifndef CONTENT_BROWSER_PRELOADING_PREFETCHER_H_
#define CONTENT_BROWSER_PRELOADING_PREFETCHER_H_
#include "content/public/browser/speculation_host_delegate.h"
#include "services/network/public/mojom/devtools_observer.mojom-forward.h"
namespace content {
class RenderFrameHost;
class RenderFrameHostImpl;
class PreloadingPredictor;
class CONTENT_EXPORT Prefetcher {
public:
Prefetcher() = delete;
explicit Prefetcher(RenderFrameHost& render_frame_host);
~Prefetcher();
RenderFrameHost& render_frame_host() const { return *render_frame_host_; }
RenderFrameHostImpl* render_frame_host_impl() const {
return render_frame_host_impl_;
}
void ProcessCandidatesForPrefetch(
std::vector<blink::mojom::SpeculationCandidatePtr>& candidates);
bool MaybePrefetch(blink::mojom::SpeculationCandidatePtr candidate,
const PreloadingPredictor& enacting_predictor);
bool IsPrefetchAttemptFailedOrDiscarded(const GURL& url);
private:
const raw_ref<content::RenderFrameHost> render_frame_host_;
const raw_ptr<content::RenderFrameHostImpl> render_frame_host_impl_;
std::unique_ptr<SpeculationHostDelegate> delegate_;
base::WeakPtrFactory<Prefetcher> weak_ptr_factory_{this};
};
}
#endif