#include "content/browser/service_worker/service_worker_version.h"
#include <stddef.h>
#include <stdint.h>
#include <map>
#include <memory>
#include <string>
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/metrics/statistics_recorder.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/task_traits.h"
#include "base/test/bind.h"
#include "base/test/values_test_util.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/service_worker_client.h"
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_context_core_observer.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
#include "content/browser/service_worker/service_worker_host.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/browser/service_worker/service_worker_test_utils.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/common/content_client.h"
#include "content/public/common/result_codes.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_content_browser_client.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/public/test/test_utils.h"
#include "content/shell/browser/shell.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "services/network/public/mojom/fetch_api.mojom.h"
#include "storage/browser/test/blob_test_utils.h"
#include "third_party/blink/public/common/service_worker/embedded_worker_status.h"
#include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
#include "third_party/blink/public/common/service_worker/service_worker_type_converters.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom.h"
#include "url/origin.h"
CacheStorageError;
namespace content {
namespace {
Eq;
Pointee;
const int kV8CacheTimeStampDataSize = …;
size_t BlobSideDataLength(blink::mojom::Blob* actual_blob) { … }
struct FetchResult { … };
void RunWithDelay(base::OnceClosure closure, base::TimeDelta delay) { … }
void ReceivePrepareResult(bool* is_prepared) { … }
base::OnceClosure CreatePrepareReceiver(bool* is_prepared) { … }
void ExpectRegisterResultAndRun(blink::ServiceWorkerStatusCode expected,
base::RepeatingClosure continuation,
blink::ServiceWorkerStatusCode actual) { … }
void ExpectUnregisterResultAndRun(
blink::ServiceWorkerStatusCode expected_status,
base::RepeatingClosure continuation,
blink::ServiceWorkerStatusCode actual_status) { … }
class WorkerActivatedObserver
: public ServiceWorkerContextCoreObserver,
public base::RefCountedThreadSafe<WorkerActivatedObserver> { … };
std::unique_ptr<net::test_server::HttpResponse>
VerifyServiceWorkerHeaderInRequest(
const net::test_server::HttpRequest& request) { … }
std::unique_ptr<net::test_server::HttpResponse> VerifySaveDataHeaderInRequest(
const net::test_server::HttpRequest& request) { … }
std::unique_ptr<net::test_server::HttpResponse>
VerifySaveDataHeaderNotInRequest(const net::test_server::HttpRequest& request) { … }
std::unique_ptr<ServiceWorkerVersion::MainScriptResponse>
CreateMainScriptResponse() { … }
std::unique_ptr<net::test_server::HttpResponse> RequestHandlerForUpdateWorker(
const net::test_server::HttpRequest& request) { … }
std::unique_ptr<net::test_server::HttpResponse>
RequestHandlerForBigWorkerScript(const net::test_server::HttpRequest& request) { … }
std::unique_ptr<net::test_server::HttpResponse>
RequestHandlerForWorkerScriptWithCoep(
std::optional<network::mojom::CrossOriginEmbedderPolicyValue> coep,
const net::test_server::HttpRequest& request) { … }
network::CrossOriginEmbedderPolicy CrossOriginEmbedderPolicyRequireCorp() { … }
}
class ConsoleListener : public EmbeddedWorkerInstance::Listener { … };
class ServiceWorkerVersionBrowserTest : public ContentBrowserTest { … };
class WaitForLoaded : public EmbeddedWorkerInstance::Listener { … };
class MockContentBrowserClient : public ContentBrowserTestContentBrowserClient { … };
class StopObserver : public ServiceWorkerVersion::Observer { … };
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, StartAndStop) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
DropCountsOnBlinkUseCounter) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, StartNotFound) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, ReadResourceFailure) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
ReadResourceFailure_WaitingWorker) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Install) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
InstallWithWaitUntil_Fulfilled) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
InstallWithFetchHandler) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
InstallWithoutFetchHandler) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
InstallEmptyFetchHandler) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
NonFunctionFetchHandler) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
NonFunctionFetchHandlerWithHandleEventProperty) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
RemoveFetchEventListenersInGet) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
FetchHandlerSetInInstallEvent) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
ServiceWorkerScriptHeader) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
Activate_NoEventListener) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Activate_Rejected) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
InstallWithWaitUntil_Rejected) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
InstallWithWaitUntil_RejectConsoleMessage) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
StartInstalledClassicScriptWhileOffline) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
StartInstalledModuleScriptWhileOffline) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, TimeoutStartingWorker) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, TimeoutWorkerInEvent) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { … }
#if BUILDFLAG(IS_ANDROID)
#define MAYBE_FetchEvent_ResponseNetwork …
#else
#define MAYBE_FetchEvent_ResponseNetwork …
#endif
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
MAYBE_FetchEvent_ResponseNetwork) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
FetchEvent_ResponseViaCache) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
FetchEvent_respondWithRejection) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
UpdateBypassesCacheAfter24Hours) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
UpdateWithScriptLargerThanMojoDataPipeBuffer) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchWithSaveData) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
RequestWorkerScriptWithSaveData) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchWithoutSaveData) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, RendererCrash) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
CrossOriginEmbedderPolicyValue_Install) { … }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
ExecuteScriptForTesting) { … }
class ServiceWorkerVersionBrowserV8FullCodeCacheTest
: public ServiceWorkerVersionBrowserTest,
public ServiceWorkerVersion::Observer { … };
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserV8FullCodeCacheTest,
FullCode) { … }
class CacheStorageEagerReadingTest : public ServiceWorkerVersionBrowserTest { … };
IN_PROC_BROWSER_TEST_F(CacheStorageEagerReadingTest,
CacheMatchInRelatedFetchEvent) { … }
IN_PROC_BROWSER_TEST_F(CacheStorageEagerReadingTest,
CacheMatchInUnrelatedFetchEvent) { … }
IN_PROC_BROWSER_TEST_F(CacheStorageEagerReadingTest,
CacheMatchInRelatedFetchEventWithRangeRequest) { … }
}