blob: 8a077d53982303f397d98e2bd72aa6121db8567d [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/common/service_worker/service_worker_types.h"
#include "base/guid.h"
#include "content/common/service_worker/service_worker_fetch_response_mojom_traits.h"
#include "mojo/public/cpp/base/time_mojom_traits.h"
#include "mojo/public/cpp/test_support/test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/modules/fetch/fetch_api_response.mojom.h"
#include "url/mojom/url_gurl_mojom_traits.h"
#include "net/base/load_flags.h"
namespace content {
namespace {
using blink::mojom::FetchCacheMode;
TEST(ServiceWorkerFetchRequestTest, CacheModeTest) {
EXPECT_EQ(FetchCacheMode::kDefault,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(0));
EXPECT_EQ(FetchCacheMode::kNoStore,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_DISABLE_CACHE));
EXPECT_EQ(FetchCacheMode::kValidateCache,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_VALIDATE_CACHE));
EXPECT_EQ(FetchCacheMode::kBypassCache,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_BYPASS_CACHE));
EXPECT_EQ(FetchCacheMode::kForceCache,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_SKIP_CACHE_VALIDATION));
EXPECT_EQ(FetchCacheMode::kOnlyIfCached,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_ONLY_FROM_CACHE | net::LOAD_SKIP_CACHE_VALIDATION));
EXPECT_EQ(FetchCacheMode::kUnspecifiedOnlyIfCachedStrict,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_ONLY_FROM_CACHE));
EXPECT_EQ(FetchCacheMode::kUnspecifiedForceCacheMiss,
ServiceWorkerFetchRequest::GetCacheModeFromLoadFlags(
net::LOAD_ONLY_FROM_CACHE | net::LOAD_BYPASS_CACHE));
}
// Tests that mojo serialization/deserialization of ServiceWorkerResponse works.
TEST(ServiceWorkerResponseTest, StructTraits) {
ServiceWorkerResponse input;
ServiceWorkerResponse output;
input.url_list = {GURL("https://www.google.ca/"),
GURL("https://www.google.com")};
input.status_code = 200;
input.status_text = "status_text";
input.response_type = network::mojom::FetchResponseType::kDefault;
input.headers.insert(
std::pair<std::string, std::string>("header1", "value1"));
input.headers.insert(
std::pair<std::string, std::string>("header2", "value2"));
input.error = blink::mojom::ServiceWorkerResponseError::kUnknown;
input.response_time = base::Time::Now();
input.is_in_cache_storage = true;
input.cache_storage_cache_name = "cache_name";
mojo::test::SerializeAndDeserialize<blink::mojom::FetchAPIResponse>(&input,
&output);
EXPECT_EQ(input.url_list, output.url_list);
EXPECT_EQ(input.status_code, output.status_code);
EXPECT_EQ(input.status_text, output.status_text);
EXPECT_EQ(input.response_type, output.response_type);
EXPECT_EQ(input.headers, output.headers);
EXPECT_EQ(input.blob, output.blob);
EXPECT_EQ(input.error, output.error);
EXPECT_EQ(input.response_time, output.response_time);
EXPECT_EQ(input.is_in_cache_storage, output.is_in_cache_storage);
EXPECT_EQ(input.cache_storage_cache_name, output.cache_storage_cache_name);
EXPECT_EQ(input.cors_exposed_header_names, output.cors_exposed_header_names);
EXPECT_EQ(input.side_data_blob, output.side_data_blob);
}
TEST(ServiceWorkerRequestTest, SerialiazeDeserializeRoundTrip) {
ServiceWorkerFetchRequest request(
GURL("foo.com"), "GET", {{"User-Agent", "Chrome"}},
Referrer(
GURL("bar.com"),
blink::WebReferrerPolicy::kWebReferrerPolicyNoReferrerWhenDowngrade),
true);
request.mode = network::mojom::FetchRequestMode::kSameOrigin;
request.is_main_resource_load = true;
request.request_context_type =
RequestContextType::REQUEST_CONTEXT_TYPE_IFRAME;
request.credentials_mode = network::mojom::FetchCredentialsMode::kSameOrigin;
request.cache_mode = blink::mojom::FetchCacheMode::kForceCache;
request.redirect_mode = network::mojom::FetchRedirectMode::kManual;
request.integrity = "integrity";
request.keepalive = true;
request.client_id = "42";
EXPECT_EQ(request.Serialize(),
ServiceWorkerFetchRequest::ParseFromString(request.Serialize())
.Serialize());
}
} // namespace
} // namespace content