Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: ios/net/cookies/system_cookie_util_unittest.mm

Issue 994823004: [iOS] Upstream //ios/net (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/net/cookies/system_cookie_util_unittest.mm
diff --git a/ios/net/cookies/system_cookie_util_unittest.mm b/ios/net/cookies/system_cookie_util_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..ebfd6af78593179b6b23ad79c3321192343fd9e1
--- /dev/null
+++ b/ios/net/cookies/system_cookie_util_unittest.mm
@@ -0,0 +1,136 @@
+// 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 "ios/net/cookies/system_cookie_util.h"
+
+#import <Foundation/Foundation.h>
+
+#include "base/mac/scoped_nsobject.h"
+#include "base/strings/sys_string_conversions.h"
+#include "base/time/time.h"
+#include "net/cookies/cookie_constants.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gtest_mac.h"
+#include "url/gurl.h"
+
+namespace net {
+
+namespace {
+
+const char kCookieDomain[] = "domain";
+const char kCookieName[] = "name";
+const char kCookiePath[] = "path/";
+const char kCookieValue[] = "value";
+const char kCookieValueInvalidUtf8[] = "\x81r\xe4\xbd\xa0\xe5\xa5\xbd";
+
+void CheckSystemCookie(const base::Time& expires, bool secure, bool httponly) {
+ // Generate a canonical cookie.
+ net::CanonicalCookie canonical_cookie = net::CanonicalCookie(
+ GURL(), kCookieName, kCookieValue, kCookieDomain, kCookiePath,
+ base::Time(), // creation
+ expires,
+ base::Time(), // last_access
+ secure, httponly,
+ false, // first_party_only
+ net::COOKIE_PRIORITY_DEFAULT);
+ // Convert it to system cookie.
+ base::scoped_nsobject<NSHTTPCookie> system_cookie(
+ [SystemCookieFromCanonicalCookie(canonical_cookie) retain]);
+
+ // Check the attributes.
+ EXPECT_TRUE(system_cookie);
+ EXPECT_NSEQ(base::SysUTF8ToNSString(kCookieName), [system_cookie name]);
+ EXPECT_NSEQ(base::SysUTF8ToNSString(kCookieValue), [system_cookie value]);
+ EXPECT_NSEQ(base::SysUTF8ToNSString(kCookieDomain), [system_cookie domain]);
+ EXPECT_NSEQ(base::SysUTF8ToNSString(kCookiePath), [system_cookie path]);
+ EXPECT_EQ(secure, [system_cookie isSecure]);
+ EXPECT_EQ(httponly, [system_cookie isHTTPOnly]);
+ EXPECT_EQ(expires.is_null(), [system_cookie isSessionOnly]);
+ // Allow 1 second difference as iOS rounds expiry time to the nearest second.
+ base::Time system_cookie_expire_date = base::Time::FromDoubleT(
+ [[system_cookie expiresDate] timeIntervalSince1970]);
+ EXPECT_LE(expires - base::TimeDelta::FromSeconds(1),
+ system_cookie_expire_date);
+ EXPECT_GE(expires + base::TimeDelta::FromSeconds(1),
+ system_cookie_expire_date);
+}
+
+} // namespace
+
+TEST(CookieUtil, CanonicalCookieFromSystemCookie) {
+ base::Time creation_time = base::Time::Now();
+ base::Time expire_date = creation_time + base::TimeDelta::FromHours(2);
+ NSDate* system_expire_date =
+ [NSDate dateWithTimeIntervalSince1970:expire_date.ToDoubleT()];
+ base::scoped_nsobject<NSHTTPCookie> system_cookie(
+ [[NSHTTPCookie alloc] initWithProperties:@{
+ NSHTTPCookieDomain : @"foo",
+ NSHTTPCookieName : @"a",
+ NSHTTPCookiePath : @"/",
+ NSHTTPCookieValue : @"b",
+ NSHTTPCookieExpires : system_expire_date,
+ @"HttpOnly" : @YES,
+ }]);
+ ASSERT_TRUE(system_cookie);
+ net::CanonicalCookie chrome_cookie =
+ CanonicalCookieFromSystemCookie(system_cookie, creation_time);
+ EXPECT_TRUE(chrome_cookie.Source().empty());
+ EXPECT_EQ("a", chrome_cookie.Name());
+ EXPECT_EQ("b", chrome_cookie.Value());
+ EXPECT_EQ("foo", chrome_cookie.Domain());
+ EXPECT_EQ("/", chrome_cookie.Path());
+ EXPECT_EQ(creation_time, chrome_cookie.CreationDate());
+ EXPECT_TRUE(chrome_cookie.LastAccessDate().is_null());
+ EXPECT_TRUE(chrome_cookie.IsPersistent());
+ // Allow 1 second difference as iOS rounds expiry time to the nearest second.
+ EXPECT_LE(expire_date - base::TimeDelta::FromSeconds(1),
+ chrome_cookie.ExpiryDate());
+ EXPECT_GE(expire_date + base::TimeDelta::FromSeconds(1),
+ chrome_cookie.ExpiryDate());
+ EXPECT_FALSE(chrome_cookie.IsSecure());
+ EXPECT_TRUE(chrome_cookie.IsHttpOnly());
+ EXPECT_EQ(net::COOKIE_PRIORITY_DEFAULT, chrome_cookie.Priority());
+
+ // Test session and secure cookie.
+ system_cookie.reset([[NSHTTPCookie alloc] initWithProperties:@{
+ NSHTTPCookieDomain : @"foo",
+ NSHTTPCookieName : @"a",
+ NSHTTPCookiePath : @"/",
+ NSHTTPCookieValue : @"b",
+ NSHTTPCookieSecure : @"Y",
+ }]);
+ ASSERT_TRUE(system_cookie);
+ chrome_cookie = CanonicalCookieFromSystemCookie(system_cookie, creation_time);
+ EXPECT_FALSE(chrome_cookie.IsPersistent());
+ EXPECT_TRUE(chrome_cookie.IsSecure());
+}
+
+TEST(CookieUtil, SystemCookieFromCanonicalCookie) {
+ base::Time expire_date = base::Time::Now() + base::TimeDelta::FromHours(2);
+
+ // Test various combinations of session, secure and httponly attributes.
+ CheckSystemCookie(expire_date, false, false);
+ CheckSystemCookie(base::Time(), true, false);
+ CheckSystemCookie(expire_date, false, true);
+ CheckSystemCookie(base::Time(), true, true);
+}
+
+TEST(CookieUtil, SystemCookieFromBadCanonicalCookie) {
+ // Generate a bad canonical cookie (value is invalid utf8).
+ net::CanonicalCookie bad_canonical_cookie = net::CanonicalCookie(
+ GURL(), kCookieName, kCookieValueInvalidUtf8, kCookieDomain, kCookiePath,
+ base::Time(), // creation
+ base::Time(), // expires
+ base::Time(), // last_access
+ false, // secure
+ false, // httponly
+ false, // first_party_only
+ net::COOKIE_PRIORITY_DEFAULT);
+ // Convert it to system cookie.
+ base::scoped_nsobject<NSHTTPCookie> system_cookie(
+ [SystemCookieFromCanonicalCookie(bad_canonical_cookie) retain]);
+ EXPECT_TRUE(system_cookie == nil);
+}
+
+} // namespace net

Powered by Google App Engine
This is Rietveld 408576698