#include "chrome/browser/predictors/prefetch_manager.h"
#include <utility>
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/not_fatal_until.h"
#include "base/task/single_thread_task_runner.h"
#include "chrome/browser/predictors/predictors_features.h"
#include "chrome/browser/predictors/predictors_switches.h"
#include "chrome/browser/predictors/resource_prefetch_predictor.h"
#include "chrome/browser/prefetch/prefetch_headers.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/global_request_id.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/url_loader_throttles.h"
#include "extensions/buildflags/buildflags.h"
#include "net/base/load_flags.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/network/public/cpp/empty_url_loader_client.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/url_loader_factory_builder.h"
#include "services/network/public/mojom/fetch_api.mojom.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
#include "third_party/blink/public/common/loader/throttling_url_loader.h"
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/browser/api/web_request/web_request_api.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#endif
namespace predictors {
namespace {
const net::NetworkTrafficAnnotationTag kPrefetchTrafficAnnotation = …;
}
struct PrefetchInfo { … };
struct PrefetchJob { … };
PrefetchStats::PrefetchStats(const GURL& url)
: … { … }
PrefetchStats::~PrefetchStats() = default;
PrefetchManager::PrefetchManager(base::WeakPtr<Delegate> delegate,
Profile* profile)
: … { … }
PrefetchManager::~PrefetchManager() = default;
void PrefetchManager::Start(const GURL& url,
std::vector<PrefetchRequest> requests) { … }
void PrefetchManager::Stop(const GURL& url) { … }
blink::mojom::ResourceType GetResourceType(
network::mojom::RequestDestination destination) { … }
void PrefetchManager::PrefetchUrl(
std::unique_ptr<PrefetchJob> job,
scoped_refptr<network::SharedURLLoaderFactory> factory) { … }
void PrefetchManager::OnPrefetchFinished(
std::unique_ptr<PrefetchJob> job,
std::unique_ptr<blink::ThrottlingURLLoader> loader,
std::unique_ptr<network::mojom::URLLoaderClient> client,
const network::URLLoaderCompletionStatus& status) { … }
void PrefetchManager::TryToLaunchPrefetchJobs() { … }
void PrefetchManager::AllPrefetchJobsForUrlFinished(PrefetchInfo& info) { … }
}