blob: 4c8541f73896fb5f8630581a62603414cbf9305c [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/preloading/prefetcher.h"
#include "content/browser/devtools/devtools_instrumentation.h"
#include "content/browser/preloading/prefetch/prefetch_document_manager.h"
#include "content/browser/preloading/prefetch/prefetch_features.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
#include "services/network/public/mojom/devtools_observer.mojom.h"
namespace content {
Prefetcher::Prefetcher(RenderFrameHost& render_frame_host)
: render_frame_host_(render_frame_host),
render_frame_host_impl_(
static_cast<RenderFrameHostImpl*>(&render_frame_host)) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
delegate_ = GetContentClient()->browser()->CreateSpeculationHostDelegate(
render_frame_host);
}
Prefetcher::~Prefetcher() = default;
bool Prefetcher::IsPrefetchAttemptFailedOrDiscarded(const GURL& url) {
PrefetchDocumentManager* prefetch_document_manager =
PrefetchDocumentManager::GetOrCreateForCurrentDocument(
&render_frame_host());
// TODO(isaboori): Implement |IsPrefetchAttemptFailed| for the delegate case.
return prefetch_document_manager->IsPrefetchAttemptFailedOrDiscarded(url);
}
void Prefetcher::ProcessCandidatesForPrefetch(
std::vector<blink::mojom::SpeculationCandidatePtr>& candidates) {
PrefetchDocumentManager* prefetch_document_manager =
PrefetchDocumentManager::GetOrCreateForCurrentDocument(
&render_frame_host());
prefetch_document_manager->ProcessCandidates(candidates);
// Let `delegate_` process the candidates that it is interested in.
if (delegate_)
delegate_->ProcessCandidates(candidates);
}
bool Prefetcher::MaybePrefetch(blink::mojom::SpeculationCandidatePtr candidate,
const PreloadingPredictor& enacting_predictor) {
PrefetchDocumentManager* prefetch_document_manager =
PrefetchDocumentManager::GetOrCreateForCurrentDocument(
&render_frame_host());
return prefetch_document_manager->MaybePrefetch(std::move(candidate),
enacting_predictor);
}
} // namespace content