chromium/content/browser/web_package/signed_exchange_subresource_prefetch_browsertest.cc

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifdef UNSAFE_BUFFERS_BUILD
// TODO(crbug.com/342213636): Remove this and spanify to fix the errors.
#pragma allow_unsafe_buffers
#endif

#include <string>
#include <vector>

#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/format_macros.h"
#include "base/no_destructor.h"
#include "base/path_service.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/task/single_thread_task_runner.h"
#include "base/task/task_runner.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/run_until.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/scoped_mock_clock_override.h"
#include "base/test/test_timeouts.h"
#include "base/threading/thread_restrictions.h"
#include "base/time/time_override.h"
#include "build/build_config.h"
#include "content/browser/blob_storage/chrome_blob_storage_context.h"
#include "content/browser/loader/prefetch_browsertest_base.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
#include "content/browser/web_package/mock_signed_exchange_handler.h"
#include "content/browser/web_package/prefetched_signed_exchange_cache.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/browsing_data_remover.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/network_service_util.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/browsing_data_remover_test_util.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/shell/browser/shell.h"
#include "content/shell/common/shell_switches.h"
#include "content/test/content_browser_test_utils_internal.h"
#include "net/base/features.h"
#include "net/dns/mock_host_resolver.h"
#include "net/http/http_cache.h"
#include "net/test/embedded_test_server/controllable_http_response.h"
#include "services/network/public/cpp/features.h"
#include "storage/browser/blob/blob_storage_context.h"
#include "third_party/blink/public/common/switches.h"

namespace content {

namespace {

std::string GetHeaderIntegrityString(const net::SHA256HashValue& hash) {}

PrefetchedSignedExchangeCache::EntryMap GetCachedExchanges(Shell* shell) {}

PrefetchBrowserTestBase::ResponseEntry CreateSignedExchangeResponseEntry(
    const std::string& content,
    const std::vector<std::pair<std::string, std::string>>& additional_headers =
        {}

std::string CreateAlternateLinkHeader(const GURL& sxg_url,
                                      const GURL& inner_url) {}

std::string CreateAllowedAltSxgLinkHeader(
    const GURL& inner_url,
    const net::SHA256HashValue& header_integrity) {}

std::string CreatePreloadLinkHeader(const GURL& url, const char* as) {}

// This class supplies a mock time which flies faster than the actual time
// using ScopedTimeClockOverrides. This is used to check the cache expiration
// logic.
class MockClock {};

MockClock* MockClock::mock_clock_ =;

class NavigationHandleSXGAttributeObserver : public WebContentsObserver {};

}  // namespace

class SignedExchangePrefetchBrowserTest : public PrefetchBrowserTestBase {};

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_SameOrigin) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_CrossOrigin) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_SameURL) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_BlobStorageLimit) {}

IN_PROC_BROWSER_TEST_F(
    SignedExchangePrefetchBrowserTest,
    PrefetchMainResourceSXG_BlobStorageLimitWithContentLength) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_CacheControlNoStore) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_VaryAsteriskHeader) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_VaryAcceptEncodingHeader) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_ExceedPrefetchReuseMins) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_CacheControlPublic) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       PrefetchMainResourceSXG_CacheControlPublicExpire) {}

// Flaky on Linux TSan, http://crbug.com/1050879
#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && defined(THREAD_SANITIZER)
#define MAYBE_PrefetchMainResourceSXG_SignatureExpire
#else
#define MAYBE_PrefetchMainResourceSXG_SignatureExpire
#endif
IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest,
                       MAYBE_PrefetchMainResourceSXG_SignatureExpire) {}

IN_PROC_BROWSER_TEST_F(SignedExchangePrefetchBrowserTest, ClearAll) {}

class SignedExchangeSubresourcePrefetchBrowserTest
    : public PrefetchBrowserTestBase {};

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_SameOrigin) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_SameUrl) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_CrossOrigin) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_CrossOrigin_CorsError) {}

// Flaky. See https://crbug.com/1415204 and https://crbug.com/1494880.
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID)
#define MAYBE_MainResourceSXGAndScriptSXG_CrossOrigin_AsDocument
#else
#define MAYBE_MainResourceSXGAndScriptSXG_CrossOrigin_AsDocument
#endif
IN_PROC_BROWSER_TEST_F(
    SignedExchangeSubresourcePrefetchBrowserTest,
    MAYBE_MainResourceSXGAndScriptSXG_CrossOrigin_AsDocument) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_DifferentOriginScriptSXG) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_CacheControlNoStore) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_VaryAsteriskHeader) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_VaryAcceptEncodingHeader) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_ExceedPrefetchReuseMins) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_CacheControlPublic) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MainResourceSXGAndScriptSXG_CacheControlPublicExpire) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       ImageSrcsetAndSizes) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MultipleResources) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       IntegrityMismatch) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       IntegrityMismatchSendsReport) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       MultipleResources_IntegrityMismatch) {}

// TODO(crbug.com/40856259): Flaky.
IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       DISABLED_CORS) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       OpaqueResponseBlocking_AllowedAfterSniffing) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       OpaqueResponseBlocking_BlockedAfterSniffing) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       OpaqueResponseBlocking_AllowedWithoutSniffing) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       OpaqueResponseBlocking_BlockedWithoutSniffing) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       ScriptSXGNotGCed) {}

IN_PROC_BROWSER_TEST_F(SignedExchangeSubresourcePrefetchBrowserTest,
                       DoNotSendUnrelatedSXG) {}

}  // namespace content