1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_PRELOADING_SEARCH_PRELOAD_SEARCH_PRELOAD_PIPELINE_H_
#define CHROME_BROWSER_PRELOADING_SEARCH_PRELOAD_SEARCH_PRELOAD_PIPELINE_H_
#include "chrome/browser/preloading/search_preload/search_preload_signal_result.h"
#include "content/public/browser/prefetch_handle.h"
#include "content/public/browser/preload_pipeline_info.h"
#include "content/public/browser/prerender_handle.h"
#include "url/gurl.h"
class SearchPreloadService;
namespace content {
class WebContents;
}
// Represents a pipeline for Default Search Engine preloads.
class SearchPreloadPipeline {
public:
explicit SearchPreloadPipeline(GURL canonical_url);
~SearchPreloadPipeline();
// Not movable nor copyable.
SearchPreloadPipeline(const SearchPreloadPipeline&&) = delete;
SearchPreloadPipeline& operator=(const SearchPreloadPipeline&&) = delete;
SearchPreloadPipeline(const SearchPreloadPipeline&) = delete;
SearchPreloadPipeline& operator=(const SearchPreloadPipeline&) = delete;
void UpdateConfidence(content::WebContents& web_contents, int confidence);
// Starts prefetch if not triggered yet.
//
// Returns true iff prefetch is triggered, i.e. `WebContents::StartPrefetch()`
// is called.
SearchPreloadSignalResult StartPrefetch(
content::WebContents& web_contents,
base::WeakPtr<SearchPreloadService> search_preload_service,
const GURL& prefetch_url,
content::PreloadingPredictor predictor,
const std::optional<net::HttpNoVarySearchData>& no_vary_search_hint,
bool is_navigation_likely);
// Starts prerender if not triggered yet and prefetch is alive.
SearchPreloadSignalResult StartPrerender(
content::WebContents& web_contents,
const GURL& prerernder_url,
content::PreloadingPredictor predictor);
// Cancels prerender if triggered.
void CancelPrerender();
bool IsPrefetchAlive() const;
bool IsPrerenderValid() const;
private:
const scoped_refptr<content::PreloadPipelineInfo> pipeline_info_;
const GURL canonical_url_;
int confidence_ = 0;
std::unique_ptr<content::PrefetchHandle> prefetch_handle_;
std::unique_ptr<content::PrerenderHandle> prerender_handle_;
};
#endif // CHROME_BROWSER_PRELOADING_SEARCH_PRELOAD_SEARCH_PRELOAD_PIPELINE_H_
|