910e62b5创建于 1月15日历史提交
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "android_webview/browser/prefetch/aw_prefetch_service_delegate.h"

#include "android_webview/browser/aw_browser_context.h"
#include "base/notreached.h"

namespace android_webview {

AwPrefetchServiceDelegate::AwPrefetchServiceDelegate(
    AwBrowserContext* browser_context)
    : browser_context_(*browser_context) {
  accept_language_header_ = browser_context->GetDefaultAcceptLanguageHeader();
}

AwPrefetchServiceDelegate::~AwPrefetchServiceDelegate() = default;

void AwPrefetchServiceDelegate::SetAcceptLanguageHeader(
    std::string accept_language_header) {
  accept_language_header_ = accept_language_header;
}

std::string AwPrefetchServiceDelegate::GetAcceptLanguageHeader() {
  return accept_language_header_;
}

GURL AwPrefetchServiceDelegate::GetDefaultPrefetchProxyHost() {
  // Used for prefetch proxy config (which is always constructed). WebView
  // doesn't use a proxy for app triggered prefetching. If WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return GURL("");
}

std::string AwPrefetchServiceDelegate::GetAPIKey() {
  // Used for prefetch proxy config (which is always constructed). WebView
  // doesn't use a proxy for app triggered prefetching. If WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return "";
}

GURL AwPrefetchServiceDelegate::GetDefaultDNSCanaryCheckURL() {
  // Used for prefetch proxy config (which is always constructed). WebView
  // doesn't use a proxy for app triggered prefetching. If WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return GURL("");
}

GURL AwPrefetchServiceDelegate::GetDefaultTLSCanaryCheckURL() {
  // Used for prefetch proxy config (which is always constructed). WebView
  // doesn't use a proxy for app triggered prefetching. If WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return GURL("");
}

void AwPrefetchServiceDelegate::ReportOriginRetryAfter(
    const GURL& url,
    base::TimeDelta retry_after) {
  // TODO (crbug.com/369313220) : Implement retry-after logic.
}

bool AwPrefetchServiceDelegate::IsOriginOutsideRetryAfterWindow(
    const GURL& url) {
  // TODO (crbug.com/369313220) : Implement retry-after logic.
  return true;
}

void AwPrefetchServiceDelegate::ClearData() {
  // TODO (crbug.com/369313220) : Implement retry-after logic.
}

bool AwPrefetchServiceDelegate::DisableDecoysBasedOnUserSettings() {
  // Decoys are not supported within app-triggered prefetching.
  // However, if WebView ever adds support for non-app triggered prefetching, we
  // may need to revisit the value returned here.
  return true;
}

content::PreloadingEligibility
AwPrefetchServiceDelegate::IsSomePreloadingEnabled() {
  // Prefetching within WebView is currently only app-triggered so by default we
  // return |PreloadingEligibility::kEligible|. However, if WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return content::PreloadingEligibility::kEligible;
}

bool AwPrefetchServiceDelegate::IsPreloadingPrefEnabled() {
  // This flag is not used within app triggered prefetching (which is the only
  // prefetching WebView currently supports). However, if WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return false;
}

bool AwPrefetchServiceDelegate::IsDataSaverEnabled() {
  // Data saver is not considered within app triggered prefetching (which is the
  // only prefetching WebView currently supports). However, if WebView ever adds
  // support for non-app triggered prefetching, we may need to revisit the value
  // returned here.
  return false;
}

bool AwPrefetchServiceDelegate::IsBatterySaverEnabled() {
  // Battery saver is not considered within app triggered prefetching (which is
  // the only prefetching WebView currently supports). However, if WebView ever
  // adds support for non-app triggered prefetching, we may need to revisit the
  // value returned here.
  return false;
}

bool AwPrefetchServiceDelegate::IsExtendedPreloadingEnabled() {
  // WebView app initiated prefetching does no support extended preloading.
  // However, if WebView ever adds support for non-app triggered prefetching, we
  // may need to revisit the value returned here.
  return false;
}

bool AwPrefetchServiceDelegate::IsDomainInPrefetchAllowList(
    const GURL& referring_url) {
  // WebView app initiated prefetching does not use prefetch allow lists.
  // However, if WebView ever adds support for non-app triggered prefetching, we
  // may need to revisit the value returned here.
  return false;
}

bool AwPrefetchServiceDelegate::IsContaminationExempt(
    const url::Origin& referring_origin) {
  // WebView app initiated prefetching does not use an isolated network context.
  // However, if WebView ever adds support for non-app triggered prefetching, we
  // may need to revisit the value returned here.
  return false;
}

void AwPrefetchServiceDelegate::OnPrefetchLikely(
    content::WebContents* web_contents) {
  // Only used for renderer initiated prefetching which WebView doesn't
  // currently support.
}

}  // namespace android_webview