blob: 71d59fd89989176f5b12a21150235ba43d12f48d [file] [log] [blame]
// Copyright 2018 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 "third_party/blink/public/platform/web_canonical_cookie.h"
#include <initializer_list>
#include "base/optional.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
TEST(WebCanonicalCookieTest, Defaults) {
WebCanonicalCookie cookie;
EXPECT_EQ(WebString(), cookie.Name());
EXPECT_EQ(WebString(), cookie.Value());
EXPECT_EQ(WebString(), cookie.Domain());
EXPECT_EQ(WebString(), cookie.Path());
EXPECT_EQ(base::Time(), cookie.CreationDate());
EXPECT_EQ(base::Time(), cookie.ExpiryDate());
EXPECT_EQ(base::Time(), cookie.LastAccessDate());
EXPECT_FALSE(cookie.IsSecure());
EXPECT_FALSE(cookie.IsHttpOnly());
EXPECT_EQ(WebCanonicalCookie::kDefaultSameSiteMode, cookie.SameSite());
EXPECT_EQ(WebCanonicalCookie::kDefaultPriority, cookie.Priority());
}
TEST(WebCanonicalCookieTest, CreationFailure) {
const WebURL url(KURL("http://example.com"));
// Invalid cookie lines cause nullopt to be returned.
EXPECT_FALSE(
WebCanonicalCookie::Create(url, "\x01", base::Time::Now()).has_value());
// Invalid names cause nullopt to be returned.
EXPECT_FALSE(WebCanonicalCookie::Create(
"\x01", "value", "domain", "/path", base::Time::Now(),
base::Time::Now(), base::Time::Now(), false, false,
WebCanonicalCookie::kDefaultSameSiteMode,
WebCanonicalCookie::kDefaultPriority)
.has_value());
}
TEST(WebCanonicalCookieTest, Properties) {
const base::Time t1 = base::Time::FromDoubleT(1);
const base::Time t2 = base::Time::FromDoubleT(2);
const base::Time t3 = base::Time::FromDoubleT(3);
ASSERT_NE(t1, t2);
ASSERT_NE(t1, t3);
ASSERT_NE(t2, t3);
base::Optional<WebCanonicalCookie> cookie_opt = WebCanonicalCookie::Create(
"name", "value", "domain", "/path", t1, t2, t3, true, true,
network::mojom::CookieSameSite::STRICT_MODE,
network::mojom::CookiePriority::HIGH);
ASSERT_TRUE(cookie_opt);
WebCanonicalCookie& cookie = cookie_opt.value();
EXPECT_EQ("name", cookie.Name());
EXPECT_EQ("value", cookie.Value());
EXPECT_EQ("domain", cookie.Domain());
EXPECT_EQ("/path", cookie.Path());
EXPECT_EQ(t1, cookie.CreationDate());
EXPECT_EQ(t2, cookie.ExpiryDate());
EXPECT_EQ(t3, cookie.LastAccessDate());
EXPECT_TRUE(cookie.IsSecure());
EXPECT_TRUE(cookie.IsHttpOnly());
EXPECT_EQ(network::mojom::CookieSameSite::STRICT_MODE, cookie.SameSite());
EXPECT_EQ(network::mojom::CookiePriority::HIGH, cookie.Priority());
// Exercise WebCookieSameSite values.
for (auto same_site : {network::mojom::CookieSameSite::NO_RESTRICTION,
network::mojom::CookieSameSite::LAX_MODE,
network::mojom::CookieSameSite::STRICT_MODE,
WebCanonicalCookie::kDefaultSameSiteMode}) {
EXPECT_EQ(same_site,
WebCanonicalCookie::Create("name", "value", "domain", "/path", t1,
t2, t3, false, false, same_site,
WebCanonicalCookie::kDefaultPriority)
->SameSite());
}
// Exercise WebCookiePriority values.
for (auto priority : {network::mojom::CookiePriority::LOW,
network::mojom::CookiePriority::MEDIUM,
network::mojom::CookiePriority::HIGH,
WebCanonicalCookie::kDefaultPriority}) {
EXPECT_EQ(priority,
WebCanonicalCookie::Create(
"name", "value", "domain", "/path", t1, t2, t3, false, false,
WebCanonicalCookie::kDefaultSameSiteMode, priority)
->Priority());
}
}
TEST(WebCanonicalCookieTest, BuildLine) {
const WebURL url(KURL("http://example.com"));
Vector<WebCanonicalCookie> cookies;
cookies.push_back(
WebCanonicalCookie::Create(url, "a=1", base::Time::Now()).value());
EXPECT_EQ("a=1", WebCanonicalCookie::BuildCookieLine(cookies));
cookies.push_back(
WebCanonicalCookie::Create(url, "b=2", base::Time::Now()).value());
EXPECT_EQ("a=1; b=2", WebCanonicalCookie::BuildCookieLine(cookies));
}
} // namespace blink