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

Side by Side Diff: net/cookies/cookie_monster_unittest.cc

Issue 1893083002: Change scoped_ptr to std::unique_ptr in //net. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptr-net-all: iwyu Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « net/cookies/cookie_monster_store_test.cc ('k') | net/cookies/cookie_store.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/cookies/cookie_store_unittest.h" 5 #include "net/cookies/cookie_monster.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory>
8 #include <string> 9 #include <string>
9 #include <vector> 10 #include <vector>
10 11
11 #include "base/bind.h" 12 #include "base/bind.h"
12 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/memory/ptr_util.h"
13 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
16 #include "base/metrics/histogram.h" 17 #include "base/metrics/histogram.h"
17 #include "base/metrics/histogram_samples.h" 18 #include "base/metrics/histogram_samples.h"
18 #include "base/single_thread_task_runner.h" 19 #include "base/single_thread_task_runner.h"
19 #include "base/strings/string_number_conversions.h" 20 #include "base/strings/string_number_conversions.h"
20 #include "base/strings/string_piece.h" 21 #include "base/strings/string_piece.h"
21 #include "base/strings/string_split.h" 22 #include "base/strings/string_split.h"
22 #include "base/strings/string_tokenizer.h" 23 #include "base/strings/string_tokenizer.h"
23 #include "base/strings/stringprintf.h" 24 #include "base/strings/stringprintf.h"
24 #include "base/test/histogram_tester.h" 25 #include "base/test/histogram_tester.h"
25 #include "base/thread_task_runner_handle.h" 26 #include "base/thread_task_runner_handle.h"
26 #include "base/threading/thread.h" 27 #include "base/threading/thread.h"
27 #include "base/time/time.h" 28 #include "base/time/time.h"
28 #include "net/cookies/canonical_cookie.h" 29 #include "net/cookies/canonical_cookie.h"
29 #include "net/cookies/cookie_constants.h" 30 #include "net/cookies/cookie_constants.h"
30 #include "net/cookies/cookie_monster.h"
31 #include "net/cookies/cookie_monster_store_test.h" // For CookieStore mock 31 #include "net/cookies/cookie_monster_store_test.h" // For CookieStore mock
32 #include "net/cookies/cookie_store_unittest.h"
32 #include "net/cookies/cookie_util.h" 33 #include "net/cookies/cookie_util.h"
33 #include "net/cookies/parsed_cookie.h" 34 #include "net/cookies/parsed_cookie.h"
34 #include "testing/gmock/include/gmock/gmock.h" 35 #include "testing/gmock/include/gmock/gmock.h"
35 #include "testing/gtest/include/gtest/gtest.h" 36 #include "testing/gtest/include/gtest/gtest.h"
36 #include "url/gurl.h" 37 #include "url/gurl.h"
37 38
38 namespace net { 39 namespace net {
39 40
40 using CookiePredicate = CookieStore::CookiePredicate; 41 using CookiePredicate = CookieStore::CookiePredicate;
41 using base::Time; 42 using base::Time;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 *to_save = cookie; 90 *to_save = cookie;
90 return false; 91 return false;
91 } 92 }
92 93
93 bool CookieValuePredicate(const std::string& true_value, 94 bool CookieValuePredicate(const std::string& true_value,
94 const CanonicalCookie& cookie) { 95 const CanonicalCookie& cookie) {
95 return cookie.Value() == true_value; 96 return cookie.Value() == true_value;
96 } 97 }
97 98
98 struct CookieMonsterTestTraits { 99 struct CookieMonsterTestTraits {
99 static scoped_ptr<CookieStore> Create() { 100 static std::unique_ptr<CookieStore> Create() {
100 return make_scoped_ptr(new CookieMonster(nullptr, nullptr)); 101 return base::WrapUnique(new CookieMonster(nullptr, nullptr));
101 } 102 }
102 103
103 static const bool supports_http_only = true; 104 static const bool supports_http_only = true;
104 static const bool supports_non_dotted_domains = true; 105 static const bool supports_non_dotted_domains = true;
105 static const bool preserves_trailing_dots = true; 106 static const bool preserves_trailing_dots = true;
106 static const bool filters_schemes = true; 107 static const bool filters_schemes = true;
107 static const bool has_path_prefix_bug = false; 108 static const bool has_path_prefix_bug = false;
108 static const int creation_time_granularity_in_ms = 0; 109 static const int creation_time_granularity_in_ms = 0;
109 static const bool enforce_strict_secure = false; 110 static const bool enforce_strict_secure = false;
110 }; 111 };
111 112
112 struct CookieMonsterEnforcingStrictSecure { 113 struct CookieMonsterEnforcingStrictSecure {
113 static scoped_ptr<CookieStore> Create() { 114 static std::unique_ptr<CookieStore> Create() {
114 return make_scoped_ptr(new CookieMonster(nullptr, nullptr)); 115 return base::WrapUnique(new CookieMonster(nullptr, nullptr));
115 } 116 }
116 117
117 static const bool supports_http_only = true; 118 static const bool supports_http_only = true;
118 static const bool supports_non_dotted_domains = true; 119 static const bool supports_non_dotted_domains = true;
119 static const bool preserves_trailing_dots = true; 120 static const bool preserves_trailing_dots = true;
120 static const bool filters_schemes = true; 121 static const bool filters_schemes = true;
121 static const bool has_path_prefix_bug = false; 122 static const bool has_path_prefix_bug = false;
122 static const int creation_time_granularity_in_ms = 0; 123 static const int creation_time_granularity_in_ms = 0;
123 static const bool enforce_strict_secure = true; 124 static const bool enforce_strict_secure = true;
124 }; 125 };
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 return std::count(str.begin(), str.end(), c); 303 return std::count(str.begin(), str.end(), c);
303 } 304 }
304 305
305 void TestHostGarbageCollectHelper() { 306 void TestHostGarbageCollectHelper() {
306 int domain_max_cookies = CookieMonster::kDomainMaxCookies; 307 int domain_max_cookies = CookieMonster::kDomainMaxCookies;
307 int domain_purge_cookies = CookieMonster::kDomainPurgeCookies; 308 int domain_purge_cookies = CookieMonster::kDomainPurgeCookies;
308 const int more_than_enough_cookies = 309 const int more_than_enough_cookies =
309 (domain_max_cookies + domain_purge_cookies) * 2; 310 (domain_max_cookies + domain_purge_cookies) * 2;
310 // Add a bunch of cookies on a single host, should purge them. 311 // Add a bunch of cookies on a single host, should purge them.
311 { 312 {
312 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 313 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
313 for (int i = 0; i < more_than_enough_cookies; ++i) { 314 for (int i = 0; i < more_than_enough_cookies; ++i) {
314 std::string cookie = base::StringPrintf("a%03d=b", i); 315 std::string cookie = base::StringPrintf("a%03d=b", i);
315 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), cookie)); 316 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), cookie));
316 std::string cookies = 317 std::string cookies =
317 this->GetCookies(cm.get(), http_www_google_.url()); 318 this->GetCookies(cm.get(), http_www_google_.url());
318 // Make sure we find it in the cookies. 319 // Make sure we find it in the cookies.
319 EXPECT_NE(cookies.find(cookie), std::string::npos); 320 EXPECT_NE(cookies.find(cookie), std::string::npos);
320 // Count the number of cookies. 321 // Count the number of cookies.
321 EXPECT_LE(CountInString(cookies, '='), domain_max_cookies); 322 EXPECT_LE(CountInString(cookies, '='), domain_max_cookies);
322 } 323 }
323 } 324 }
324 325
325 // Add a bunch of cookies on multiple hosts within a single eTLD. 326 // Add a bunch of cookies on multiple hosts within a single eTLD.
326 // Should keep at least kDomainMaxCookies - kDomainPurgeCookies 327 // Should keep at least kDomainMaxCookies - kDomainPurgeCookies
327 // between them. We shouldn't go above kDomainMaxCookies for both together. 328 // between them. We shouldn't go above kDomainMaxCookies for both together.
328 GURL url_google_specific(http_www_google_.Format("http://www.gmail.%D")); 329 GURL url_google_specific(http_www_google_.Format("http://www.gmail.%D"));
329 { 330 {
330 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 331 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
331 for (int i = 0; i < more_than_enough_cookies; ++i) { 332 for (int i = 0; i < more_than_enough_cookies; ++i) {
332 std::string cookie_general = base::StringPrintf("a%03d=b", i); 333 std::string cookie_general = base::StringPrintf("a%03d=b", i);
333 EXPECT_TRUE( 334 EXPECT_TRUE(
334 SetCookie(cm.get(), http_www_google_.url(), cookie_general)); 335 SetCookie(cm.get(), http_www_google_.url(), cookie_general));
335 std::string cookie_specific = base::StringPrintf("c%03d=b", i); 336 std::string cookie_specific = base::StringPrintf("c%03d=b", i);
336 EXPECT_TRUE(SetCookie(cm.get(), url_google_specific, cookie_specific)); 337 EXPECT_TRUE(SetCookie(cm.get(), url_google_specific, cookie_specific));
337 std::string cookies_general = 338 std::string cookies_general =
338 this->GetCookies(cm.get(), http_www_google_.url()); 339 this->GetCookies(cm.get(), http_www_google_.url());
339 EXPECT_NE(cookies_general.find(cookie_general), std::string::npos); 340 EXPECT_NE(cookies_general.find(cookie_general), std::string::npos);
340 std::string cookies_specific = 341 std::string cookies_specific =
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 // of cookies to create. Cookies are created in the order they appear in 465 // of cookies to create. Cookies are created in the order they appear in
465 // cookie_entries. The value of cookie_entries[x].num_cookies specifies how 466 // cookie_entries. The value of cookie_entries[x].num_cookies specifies how
466 // many cookies of that type to create consecutively, while if 467 // many cookies of that type to create consecutively, while if
467 // cookie_entries[x].is_secure is |true|, those cookies will be marke as 468 // cookie_entries[x].is_secure is |true|, those cookies will be marke as
468 // Secure. 469 // Secure.
469 void TestSecureCookieEviction(const CookiesEntry* cookie_entries, 470 void TestSecureCookieEviction(const CookiesEntry* cookie_entries,
470 size_t num_cookie_entries, 471 size_t num_cookie_entries,
471 size_t expected_secure_cookies, 472 size_t expected_secure_cookies,
472 size_t expected_non_secure_cookies, 473 size_t expected_non_secure_cookies,
473 const AltHosts* alt_host_entries) { 474 const AltHosts* alt_host_entries) {
474 scoped_ptr<CookieMonster> cm; 475 std::unique_ptr<CookieMonster> cm;
475 476
476 if (alt_host_entries == nullptr) { 477 if (alt_host_entries == nullptr) {
477 cm.reset(new CookieMonster(nullptr, nullptr)); 478 cm.reset(new CookieMonster(nullptr, nullptr));
478 } else { 479 } else {
479 // When generating all of these cookies on alternate hosts, they need to 480 // When generating all of these cookies on alternate hosts, they need to
480 // be all older than the max "safe" date for GC, which is currently 30 481 // be all older than the max "safe" date for GC, which is currently 30
481 // days, so we set them to 60. 482 // days, so we set them to 60.
482 cm = CreateMonsterFromStoreForGC( 483 cm = CreateMonsterFromStoreForGC(
483 alt_host_entries->first, alt_host_entries->first, 484 alt_host_entries->first, alt_host_entries->first,
484 alt_host_entries->second, alt_host_entries->second, 60); 485 alt_host_entries->second, alt_host_entries->second, 60);
(...skipping 30 matching lines...) Expand all
515 516
516 void TestPriorityAwareGarbageCollectHelper() { 517 void TestPriorityAwareGarbageCollectHelper() {
517 // Hard-coding limits in the test, but use DCHECK_EQ to enforce constraint. 518 // Hard-coding limits in the test, but use DCHECK_EQ to enforce constraint.
518 DCHECK_EQ(180U, CookieMonster::kDomainMaxCookies); 519 DCHECK_EQ(180U, CookieMonster::kDomainMaxCookies);
519 DCHECK_EQ(150U, CookieMonster::kDomainMaxCookies - 520 DCHECK_EQ(150U, CookieMonster::kDomainMaxCookies -
520 CookieMonster::kDomainPurgeCookies); 521 CookieMonster::kDomainPurgeCookies);
521 DCHECK_EQ(30U, CookieMonster::kDomainCookiesQuotaLow); 522 DCHECK_EQ(30U, CookieMonster::kDomainCookiesQuotaLow);
522 DCHECK_EQ(50U, CookieMonster::kDomainCookiesQuotaMedium); 523 DCHECK_EQ(50U, CookieMonster::kDomainCookiesQuotaMedium);
523 DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh); 524 DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh);
524 525
525 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 526 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
526 527
527 // Each test case adds 181 cookies, so 31 cookies are evicted. 528 // Each test case adds 181 cookies, so 31 cookies are evicted.
528 // Cookie same priority, repeated for each priority. 529 // Cookie same priority, repeated for each priority.
529 TestPriorityCookieCase(cm.get(), "181L", 150U, 0U, 0U); 530 TestPriorityCookieCase(cm.get(), "181L", 150U, 0U, 0U);
530 TestPriorityCookieCase(cm.get(), "181M", 0U, 150U, 0U); 531 TestPriorityCookieCase(cm.get(), "181M", 0U, 150U, 0U);
531 TestPriorityCookieCase(cm.get(), "181H", 0U, 0U, 150U); 532 TestPriorityCookieCase(cm.get(), "181H", 0U, 0U, 150U);
532 533
533 // Pairwise scenarios. 534 // Pairwise scenarios.
534 // Round 1 => none; round2 => 31M; round 3 => none. 535 // Round 1 => none; round2 => 31M; round 3 => none.
535 TestPriorityCookieCase(cm.get(), "10H 171M", 0U, 140U, 10U); 536 TestPriorityCookieCase(cm.get(), "10H 171M", 0U, 140U, 10U);
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; 823 CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_;
823 // Stores the callback passed from the CookieMonster to the 824 // Stores the callback passed from the CookieMonster to the
824 // PersistentCookieStore::LoadCookiesForKey 825 // PersistentCookieStore::LoadCookiesForKey
825 std::queue<CookieMonster::PersistentCookieStore::LoadedCallback> 826 std::queue<CookieMonster::PersistentCookieStore::LoadedCallback>
826 loaded_for_key_callbacks_; 827 loaded_for_key_callbacks_;
827 // base::RunLoop used to wait for PersistentCookieStore::Load to be called. 828 // base::RunLoop used to wait for PersistentCookieStore::Load to be called.
828 base::RunLoop load_run_loop_; 829 base::RunLoop load_run_loop_;
829 // Indicates whether ExpectLoadCall() has been called. 830 // Indicates whether ExpectLoadCall() has been called.
830 bool expect_load_called_; 831 bool expect_load_called_;
831 // Stores the CookieMonster under test. 832 // Stores the CookieMonster under test.
832 scoped_ptr<CookieMonster> cookie_monster_; 833 std::unique_ptr<CookieMonster> cookie_monster_;
833 // Stores the mock PersistentCookieStore. 834 // Stores the mock PersistentCookieStore.
834 scoped_refptr<NewMockPersistentCookieStore> persistent_store_; 835 scoped_refptr<NewMockPersistentCookieStore> persistent_store_;
835 }; 836 };
836 837
837 TEST_F(DeferredCookieTaskTest, DeferredGetCookies) { 838 TEST_F(DeferredCookieTaskTest, DeferredGetCookies) {
838 DeclareLoadedCookie(http_www_google_.url(), 839 DeclareLoadedCookie(http_www_google_.url(),
839 "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 840 "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT",
840 Time::Now() + TimeDelta::FromDays(3)); 841 Time::Now() + TimeDelta::FromDays(3));
841 842
842 MockGetCookiesCallback get_cookies_callback; 843 MockGetCookiesCallback get_cookies_callback;
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 &delete_callback)); 1094 &delete_callback));
1094 base::RunLoop loop; 1095 base::RunLoop loop;
1095 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop)); 1096 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
1096 1097
1097 CompleteLoading(); 1098 CompleteLoading();
1098 loop.Run(); 1099 loop.Run();
1099 } 1100 }
1100 1101
1101 TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) { 1102 TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) {
1102 std::vector<CanonicalCookie*> cookies; 1103 std::vector<CanonicalCookie*> cookies;
1103 scoped_ptr<CanonicalCookie> cookie = BuildCanonicalCookie( 1104 std::unique_ptr<CanonicalCookie> cookie = BuildCanonicalCookie(
1104 http_www_google_.url(), "X=1; path=/", base::Time::Now()); 1105 http_www_google_.url(), "X=1; path=/", base::Time::Now());
1105 1106
1106 MockDeleteCallback delete_cookie_callback; 1107 MockDeleteCallback delete_cookie_callback;
1107 1108
1108 BeginWith(DeleteCanonicalCookieAction(&cookie_monster(), *cookie, 1109 BeginWith(DeleteCanonicalCookieAction(&cookie_monster(), *cookie,
1109 &delete_cookie_callback)); 1110 &delete_cookie_callback));
1110 1111
1111 WaitForLoadCall(); 1112 WaitForLoadCall();
1112 1113
1113 EXPECT_CALL(delete_cookie_callback, Invoke(0)) 1114 EXPECT_CALL(delete_cookie_callback, Invoke(0))
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 base::RunLoop loop; 1168 base::RunLoop loop;
1168 EXPECT_CALL(get_cookies_callback_deferred, Invoke("A=B; X=1")) 1169 EXPECT_CALL(get_cookies_callback_deferred, Invoke("A=B; X=1"))
1169 .WillOnce(QuitRunLoop(&loop)); 1170 .WillOnce(QuitRunLoop(&loop));
1170 1171
1171 CompleteLoading(); 1172 CompleteLoading();
1172 loop.Run(); 1173 loop.Run();
1173 } 1174 }
1174 1175
1175 TEST_F(CookieMonsterTest, TestCookieDeleteAll) { 1176 TEST_F(CookieMonsterTest, TestCookieDeleteAll) {
1176 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 1177 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
1177 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 1178 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
1178 CookieOptions options; 1179 CookieOptions options;
1179 options.set_include_httponly(); 1180 options.set_include_httponly();
1180 1181
1181 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), kValidCookieLine)); 1182 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), kValidCookieLine));
1182 EXPECT_EQ("A=B", GetCookies(cm.get(), http_www_google_.url())); 1183 EXPECT_EQ("A=B", GetCookies(cm.get(), http_www_google_.url()));
1183 1184
1184 EXPECT_TRUE(SetCookieWithOptions(cm.get(), http_www_google_.url(), 1185 EXPECT_TRUE(SetCookieWithOptions(cm.get(), http_www_google_.url(),
1185 "C=D; httponly", options)); 1186 "C=D; httponly", options));
1186 EXPECT_EQ("A=B; C=D", 1187 EXPECT_EQ("A=B; C=D",
1187 GetCookiesWithOptions(cm.get(), http_www_google_.url(), options)); 1188 GetCookiesWithOptions(cm.get(), http_www_google_.url(), options));
(...skipping 12 matching lines...) Expand all
1200 1201
1201 EXPECT_EQ(1, DeleteAll(cm.get())); // sync_to_store = true. 1202 EXPECT_EQ(1, DeleteAll(cm.get())); // sync_to_store = true.
1202 ASSERT_EQ(2u, store->commands().size()); 1203 ASSERT_EQ(2u, store->commands().size());
1203 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); 1204 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type);
1204 1205
1205 EXPECT_EQ("", 1206 EXPECT_EQ("",
1206 GetCookiesWithOptions(cm.get(), http_www_google_.url(), options)); 1207 GetCookiesWithOptions(cm.get(), http_www_google_.url(), options));
1207 } 1208 }
1208 1209
1209 TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) { 1210 TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) {
1210 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1211 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1211 Time now = Time::Now(); 1212 Time now = Time::Now();
1212 1213
1213 // Nothing has been added so nothing should be deleted. 1214 // Nothing has been added so nothing should be deleted.
1214 EXPECT_EQ(0, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), 1215 EXPECT_EQ(0, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99),
1215 Time())); 1216 Time()));
1216 1217
1217 // Create 5 cookies with different creation dates. 1218 // Create 5 cookies with different creation dates.
1218 EXPECT_TRUE( 1219 EXPECT_TRUE(
1219 cm->SetCookieWithCreationTime(http_www_google_.url(), "T-0=Now", now)); 1220 cm->SetCookieWithCreationTime(http_www_google_.url(), "T-0=Now", now));
1220 EXPECT_TRUE(cm->SetCookieWithCreationTime( 1221 EXPECT_TRUE(cm->SetCookieWithCreationTime(
(...skipping 20 matching lines...) Expand all
1241 1242
1242 // Delete the last (now) item. 1243 // Delete the last (now) item.
1243 EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), Time(), Time())); 1244 EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), Time(), Time()));
1244 1245
1245 // Really make sure everything is gone. 1246 // Really make sure everything is gone.
1246 EXPECT_EQ(0, DeleteAll(cm.get())); 1247 EXPECT_EQ(0, DeleteAll(cm.get()));
1247 } 1248 }
1248 1249
1249 TEST_F(CookieMonsterTest, 1250 TEST_F(CookieMonsterTest,
1250 TestCookieDeleteAllCreatedBetweenTimestampsWithPredicate) { 1251 TestCookieDeleteAllCreatedBetweenTimestampsWithPredicate) {
1251 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1252 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1252 Time now = Time::Now(); 1253 Time now = Time::Now();
1253 1254
1254 CanonicalCookie test_cookie; 1255 CanonicalCookie test_cookie;
1255 CookiePredicate true_predicate = 1256 CookiePredicate true_predicate =
1256 base::Bind(&AlwaysTrueCookiePredicate, &test_cookie); 1257 base::Bind(&AlwaysTrueCookiePredicate, &test_cookie);
1257 1258
1258 CookiePredicate false_predicate = 1259 CookiePredicate false_predicate =
1259 base::Bind(&AlwaysFalseCookiePredicate, &test_cookie); 1260 base::Bind(&AlwaysFalseCookiePredicate, &test_cookie);
1260 1261
1261 // Nothing has been added so nothing should be deleted. 1262 // Nothing has been added so nothing should be deleted.
(...skipping 29 matching lines...) Expand all
1291 1292
1292 // Try to delete yesterday, also make sure that delete_end is not 1293 // Try to delete yesterday, also make sure that delete_end is not
1293 // inclusive. 1294 // inclusive.
1294 EXPECT_EQ(0, 1295 EXPECT_EQ(0,
1295 DeleteAllCreatedBetweenWithPredicate( 1296 DeleteAllCreatedBetweenWithPredicate(
1296 cm.get(), now - TimeDelta::FromDays(2), now, false_predicate)); 1297 cm.get(), now - TimeDelta::FromDays(2), now, false_predicate));
1297 EXPECT_EQ(1, 1298 EXPECT_EQ(1,
1298 DeleteAllCreatedBetweenWithPredicate( 1299 DeleteAllCreatedBetweenWithPredicate(
1299 cm.get(), now - TimeDelta::FromDays(2), now, true_predicate)); 1300 cm.get(), now - TimeDelta::FromDays(2), now, true_predicate));
1300 // Check our cookie values. 1301 // Check our cookie values.
1301 scoped_ptr<CanonicalCookie> expected_cookie = 1302 std::unique_ptr<CanonicalCookie> expected_cookie =
1302 CanonicalCookie::Create(http_www_google_.url(), "T-1=Yesterday", 1303 CanonicalCookie::Create(http_www_google_.url(), "T-1=Yesterday",
1303 now - TimeDelta::FromDays(1), CookieOptions()); 1304 now - TimeDelta::FromDays(1), CookieOptions());
1304 EXPECT_THAT(test_cookie, CookieEquals(*expected_cookie)) 1305 EXPECT_THAT(test_cookie, CookieEquals(*expected_cookie))
1305 << "Actual:\n" 1306 << "Actual:\n"
1306 << test_cookie.DebugString() << "\nExpected:\n" 1307 << test_cookie.DebugString() << "\nExpected:\n"
1307 << expected_cookie->DebugString(); 1308 << expected_cookie->DebugString();
1308 1309
1309 // Make sure the delete_begin is inclusive. 1310 // Make sure the delete_begin is inclusive.
1310 EXPECT_EQ(0, 1311 EXPECT_EQ(0,
1311 DeleteAllCreatedBetweenWithPredicate( 1312 DeleteAllCreatedBetweenWithPredicate(
(...skipping 14 matching lines...) Expand all
1326 << test_cookie.DebugString() << "\nExpected:\n" 1327 << test_cookie.DebugString() << "\nExpected:\n"
1327 << expected_cookie->DebugString(); 1328 << expected_cookie->DebugString();
1328 1329
1329 // Really make sure everything is gone. 1330 // Really make sure everything is gone.
1330 EXPECT_EQ(0, DeleteAll(cm.get())); 1331 EXPECT_EQ(0, DeleteAll(cm.get()));
1331 } 1332 }
1332 1333
1333 static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20; 1334 static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20;
1334 1335
1335 TEST_F(CookieMonsterTest, TestLastAccess) { 1336 TEST_F(CookieMonsterTest, TestLastAccess) {
1336 scoped_ptr<CookieMonster> cm( 1337 std::unique_ptr<CookieMonster> cm(
1337 new CookieMonster(nullptr, nullptr, kLastAccessThresholdMilliseconds)); 1338 new CookieMonster(nullptr, nullptr, kLastAccessThresholdMilliseconds));
1338 1339
1339 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); 1340 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B"));
1340 const Time last_access_date(GetFirstCookieAccessDate(cm.get())); 1341 const Time last_access_date(GetFirstCookieAccessDate(cm.get()));
1341 1342
1342 // Reading the cookie again immediately shouldn't update the access date, 1343 // Reading the cookie again immediately shouldn't update the access date,
1343 // since we're inside the threshold. 1344 // since we're inside the threshold.
1344 EXPECT_EQ("A=B", GetCookies(cm.get(), http_www_google_.url())); 1345 EXPECT_EQ("A=B", GetCookies(cm.get(), http_www_google_.url()));
1345 EXPECT_EQ(last_access_date, GetFirstCookieAccessDate(cm.get())); 1346 EXPECT_EQ(last_access_date, GetFirstCookieAccessDate(cm.get()));
1346 1347
(...skipping 27 matching lines...) Expand all
1374 1375
1375 TEST_F(CookieMonsterTest, TestHostGarbageCollection) { 1376 TEST_F(CookieMonsterTest, TestHostGarbageCollection) {
1376 TestHostGarbageCollectHelper(); 1377 TestHostGarbageCollectHelper();
1377 } 1378 }
1378 1379
1379 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollection) { 1380 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollection) {
1380 TestPriorityAwareGarbageCollectHelper(); 1381 TestPriorityAwareGarbageCollectHelper();
1381 } 1382 }
1382 1383
1383 TEST_F(CookieMonsterTest, SetCookieableSchemes) { 1384 TEST_F(CookieMonsterTest, SetCookieableSchemes) {
1384 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1385 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1385 scoped_ptr<CookieMonster> cm_foo(new CookieMonster(nullptr, nullptr)); 1386 std::unique_ptr<CookieMonster> cm_foo(new CookieMonster(nullptr, nullptr));
1386 1387
1387 // Only cm_foo should allow foo:// cookies. 1388 // Only cm_foo should allow foo:// cookies.
1388 std::vector<std::string> schemes; 1389 std::vector<std::string> schemes;
1389 schemes.push_back("foo"); 1390 schemes.push_back("foo");
1390 cm_foo->SetCookieableSchemes(schemes); 1391 cm_foo->SetCookieableSchemes(schemes);
1391 1392
1392 GURL foo_url("foo://host/path"); 1393 GURL foo_url("foo://host/path");
1393 GURL http_url("http://host/path"); 1394 GURL http_url("http://host/path");
1394 1395
1395 EXPECT_TRUE(SetCookie(cm.get(), http_url, "x=1")); 1396 EXPECT_TRUE(SetCookie(cm.get(), http_url, "x=1"));
1396 EXPECT_FALSE(SetCookie(cm.get(), foo_url, "x=1")); 1397 EXPECT_FALSE(SetCookie(cm.get(), foo_url, "x=1"));
1397 EXPECT_TRUE(SetCookie(cm_foo.get(), foo_url, "x=1")); 1398 EXPECT_TRUE(SetCookie(cm_foo.get(), foo_url, "x=1"));
1398 EXPECT_FALSE(SetCookie(cm_foo.get(), http_url, "x=1")); 1399 EXPECT_FALSE(SetCookie(cm_foo.get(), http_url, "x=1"));
1399 } 1400 }
1400 1401
1401 TEST_F(CookieMonsterTest, GetAllCookiesForURL) { 1402 TEST_F(CookieMonsterTest, GetAllCookiesForURL) {
1402 scoped_ptr<CookieMonster> cm( 1403 std::unique_ptr<CookieMonster> cm(
1403 new CookieMonster(nullptr, nullptr, kLastAccessThresholdMilliseconds)); 1404 new CookieMonster(nullptr, nullptr, kLastAccessThresholdMilliseconds));
1404 1405
1405 // Create an httponly cookie. 1406 // Create an httponly cookie.
1406 CookieOptions options; 1407 CookieOptions options;
1407 options.set_include_httponly(); 1408 options.set_include_httponly();
1408 1409
1409 EXPECT_TRUE(SetCookieWithOptions(cm.get(), http_www_google_.url(), 1410 EXPECT_TRUE(SetCookieWithOptions(cm.get(), http_www_google_.url(),
1410 "A=B; httponly", options)); 1411 "A=B; httponly", options));
1411 EXPECT_TRUE(SetCookieWithOptions(cm.get(), http_www_google_.url(), 1412 EXPECT_TRUE(SetCookieWithOptions(cm.get(), http_www_google_.url(),
1412 http_www_google_.Format("C=D; domain=.%D"), 1413 http_www_google_.Format("C=D; domain=.%D"),
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 EXPECT_EQ(http_www_google_.Format(".%D"), it->Domain()); 1462 EXPECT_EQ(http_www_google_.Format(".%D"), it->Domain());
1462 EXPECT_EQ("E", it->Name()); 1463 EXPECT_EQ("E", it->Name());
1463 1464
1464 ASSERT_TRUE(++it == cookies.end()); 1465 ASSERT_TRUE(++it == cookies.end());
1465 1466
1466 // Reading after a short wait should not update the access date. 1467 // Reading after a short wait should not update the access date.
1467 EXPECT_EQ(last_access_date, GetFirstCookieAccessDate(cm.get())); 1468 EXPECT_EQ(last_access_date, GetFirstCookieAccessDate(cm.get()));
1468 } 1469 }
1469 1470
1470 TEST_F(CookieMonsterTest, GetAllCookiesForURLPathMatching) { 1471 TEST_F(CookieMonsterTest, GetAllCookiesForURLPathMatching) {
1471 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1472 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1472 CookieOptions options; 1473 CookieOptions options;
1473 1474
1474 EXPECT_TRUE(SetCookieWithOptions(cm.get(), www_google_foo_.url(), 1475 EXPECT_TRUE(SetCookieWithOptions(cm.get(), www_google_foo_.url(),
1475 "A=B; path=/foo;", options)); 1476 "A=B; path=/foo;", options));
1476 EXPECT_TRUE(SetCookieWithOptions(cm.get(), www_google_bar_.url(), 1477 EXPECT_TRUE(SetCookieWithOptions(cm.get(), www_google_bar_.url(),
1477 "C=D; path=/bar;", options)); 1478 "C=D; path=/bar;", options));
1478 EXPECT_TRUE( 1479 EXPECT_TRUE(
1479 SetCookieWithOptions(cm.get(), http_www_google_.url(), "E=F;", options)); 1480 SetCookieWithOptions(cm.get(), http_www_google_.url(), "E=F;", options));
1480 1481
1481 CookieList cookies = GetAllCookiesForURL(cm.get(), www_google_foo_.url()); 1482 CookieList cookies = GetAllCookiesForURL(cm.get(), www_google_foo_.url());
(...skipping 17 matching lines...) Expand all
1499 EXPECT_EQ("/bar", it->Path()); 1500 EXPECT_EQ("/bar", it->Path());
1500 1501
1501 ASSERT_TRUE(++it != cookies.end()); 1502 ASSERT_TRUE(++it != cookies.end());
1502 EXPECT_EQ("E", it->Name()); 1503 EXPECT_EQ("E", it->Name());
1503 EXPECT_EQ("/", it->Path()); 1504 EXPECT_EQ("/", it->Path());
1504 1505
1505 ASSERT_TRUE(++it == cookies.end()); 1506 ASSERT_TRUE(++it == cookies.end());
1506 } 1507 }
1507 1508
1508 TEST_F(CookieMonsterTest, CookieSorting) { 1509 TEST_F(CookieMonsterTest, CookieSorting) {
1509 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1510 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1510 1511
1511 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B1; path=/")); 1512 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B1; path=/"));
1512 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B2; path=/foo")); 1513 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B2; path=/foo"));
1513 EXPECT_TRUE( 1514 EXPECT_TRUE(
1514 SetCookie(cm.get(), http_www_google_.url(), "B=B3; path=/foo/bar")); 1515 SetCookie(cm.get(), http_www_google_.url(), "B=B3; path=/foo/bar"));
1515 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A1; path=/")); 1516 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A1; path=/"));
1516 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A2; path=/foo")); 1517 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A2; path=/foo"));
1517 EXPECT_TRUE( 1518 EXPECT_TRUE(
1518 SetCookie(cm.get(), http_www_google_.url(), "A=A3; path=/foo/bar")); 1519 SetCookie(cm.get(), http_www_google_.url(), "A=A3; path=/foo/bar"));
1519 1520
1520 // Re-set cookie which should not change sort order. 1521 // Re-set cookie which should not change sort order.
1521 EXPECT_TRUE( 1522 EXPECT_TRUE(
1522 SetCookie(cm.get(), http_www_google_.url(), "B=B3; path=/foo/bar")); 1523 SetCookie(cm.get(), http_www_google_.url(), "B=B3; path=/foo/bar"));
1523 1524
1524 CookieList cookies = GetAllCookies(cm.get()); 1525 CookieList cookies = GetAllCookies(cm.get());
1525 ASSERT_EQ(6u, cookies.size()); 1526 ASSERT_EQ(6u, cookies.size());
1526 // According to RFC 6265 5.3 (11) re-setting this cookie should retain the 1527 // According to RFC 6265 5.3 (11) re-setting this cookie should retain the
1527 // initial creation-time from above, and the sort order should not change. 1528 // initial creation-time from above, and the sort order should not change.
1528 // Chrome's current implementation deviates from the spec so capturing this to 1529 // Chrome's current implementation deviates from the spec so capturing this to
1529 // avoid any inadvertent changes to this behavior. 1530 // avoid any inadvertent changes to this behavior.
1530 EXPECT_EQ("A3", cookies[0].Value()); 1531 EXPECT_EQ("A3", cookies[0].Value());
1531 EXPECT_EQ("B3", cookies[1].Value()); 1532 EXPECT_EQ("B3", cookies[1].Value());
1532 EXPECT_EQ("B2", cookies[2].Value()); 1533 EXPECT_EQ("B2", cookies[2].Value());
1533 EXPECT_EQ("A2", cookies[3].Value()); 1534 EXPECT_EQ("A2", cookies[3].Value());
1534 EXPECT_EQ("B1", cookies[4].Value()); 1535 EXPECT_EQ("B1", cookies[4].Value());
1535 EXPECT_EQ("A1", cookies[5].Value()); 1536 EXPECT_EQ("A1", cookies[5].Value());
1536 } 1537 }
1537 1538
1538 TEST_F(CookieMonsterTest, DeleteCookieByName) { 1539 TEST_F(CookieMonsterTest, DeleteCookieByName) {
1539 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1540 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1540 1541
1541 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A1; path=/")); 1542 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A1; path=/"));
1542 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A2; path=/foo")); 1543 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A2; path=/foo"));
1543 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A3; path=/bar")); 1544 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=A3; path=/bar"));
1544 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B1; path=/")); 1545 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B1; path=/"));
1545 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B2; path=/foo")); 1546 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B2; path=/foo"));
1546 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B3; path=/bar")); 1547 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "B=B3; path=/bar"));
1547 1548
1548 DeleteCookie(cm.get(), http_www_google_.AppendPath("foo/bar"), "A"); 1549 DeleteCookie(cm.get(), http_www_google_.AppendPath("foo/bar"), "A");
1549 1550
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1605 Time::Now() + TimeDelta::FromDays(2), &initial_cookies); 1606 Time::Now() + TimeDelta::FromDays(2), &initial_cookies);
1606 1607
1607 // Insert 1 cookie with name "Y" on path "/". 1608 // Insert 1 cookie with name "Y" on path "/".
1608 AddCookieToList(GURL("http://www.google.com"), 1609 AddCookieToList(GURL("http://www.google.com"),
1609 "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 1610 "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT",
1610 Time::Now() + TimeDelta::FromDays(10), &initial_cookies); 1611 Time::Now() + TimeDelta::FromDays(10), &initial_cookies);
1611 1612
1612 // Inject our initial cookies into the mock PersistentCookieStore. 1613 // Inject our initial cookies into the mock PersistentCookieStore.
1613 store->SetLoadExpectation(true, initial_cookies); 1614 store->SetLoadExpectation(true, initial_cookies);
1614 1615
1615 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 1616 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
1616 1617
1617 // Verify that duplicates were not imported for path "/". 1618 // Verify that duplicates were not imported for path "/".
1618 // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4). 1619 // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4).
1619 EXPECT_EQ("X=3; Y=a", GetCookies(cm.get(), GURL("http://www.google.com/"))); 1620 EXPECT_EQ("X=3; Y=a", GetCookies(cm.get(), GURL("http://www.google.com/")));
1620 1621
1621 // Verify that same-named cookie on a different path ("/x2") didn't get 1622 // Verify that same-named cookie on a different path ("/x2") didn't get
1622 // messed up. 1623 // messed up.
1623 EXPECT_EQ("X=a1; X=3; Y=a", 1624 EXPECT_EQ("X=a1; X=3; Y=a",
1624 GetCookies(cm.get(), GURL("http://www.google.com/2/x"))); 1625 GetCookies(cm.get(), GURL("http://www.google.com/2/x")));
1625 1626
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1661 AddCookieToList(GURL("http://www.google.com"), "Y=2; path=/", earlier, 1662 AddCookieToList(GURL("http://www.google.com"), "Y=2; path=/", earlier,
1662 &initial_cookies); 1663 &initial_cookies);
1663 AddCookieToList(GURL("http://www.google.com"), "Y=3; path=/", earlier, 1664 AddCookieToList(GURL("http://www.google.com"), "Y=3; path=/", earlier,
1664 &initial_cookies); 1665 &initial_cookies);
1665 AddCookieToList(GURL("http://www.google.com"), "Y=4; path=/", earlier, 1666 AddCookieToList(GURL("http://www.google.com"), "Y=4; path=/", earlier,
1666 &initial_cookies); 1667 &initial_cookies);
1667 1668
1668 // Inject our initial cookies into the mock PersistentCookieStore. 1669 // Inject our initial cookies into the mock PersistentCookieStore.
1669 store->SetLoadExpectation(true, initial_cookies); 1670 store->SetLoadExpectation(true, initial_cookies);
1670 1671
1671 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 1672 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
1672 1673
1673 CookieList list(GetAllCookies(cm.get())); 1674 CookieList list(GetAllCookies(cm.get()));
1674 EXPECT_EQ(2U, list.size()); 1675 EXPECT_EQ(2U, list.size());
1675 // Confirm that we have one of each. 1676 // Confirm that we have one of each.
1676 std::string name1(list[0].Name()); 1677 std::string name1(list[0].Name());
1677 std::string name2(list[1].Name()); 1678 std::string name2(list[1].Name());
1678 EXPECT_TRUE(name1 == "X" || name2 == "X"); 1679 EXPECT_TRUE(name1 == "X" || name2 == "X");
1679 EXPECT_TRUE(name1 == "Y" || name2 == "Y"); 1680 EXPECT_TRUE(name1 == "Y" || name2 == "Y");
1680 EXPECT_NE(name1, name2); 1681 EXPECT_NE(name1, name2);
1681 } 1682 }
1682 1683
1683 TEST_F(CookieMonsterTest, CookieMonsterDelegate) { 1684 TEST_F(CookieMonsterTest, CookieMonsterDelegate) {
1684 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 1685 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
1685 scoped_refptr<MockCookieMonsterDelegate> delegate( 1686 scoped_refptr<MockCookieMonsterDelegate> delegate(
1686 new MockCookieMonsterDelegate); 1687 new MockCookieMonsterDelegate);
1687 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), delegate.get())); 1688 std::unique_ptr<CookieMonster> cm(
1689 new CookieMonster(store.get(), delegate.get()));
1688 1690
1689 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); 1691 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B"));
1690 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "C=D")); 1692 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "C=D"));
1691 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "E=F")); 1693 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "E=F"));
1692 EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm.get(), http_www_google_.url())); 1694 EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm.get(), http_www_google_.url()));
1693 ASSERT_EQ(3u, delegate->changes().size()); 1695 ASSERT_EQ(3u, delegate->changes().size());
1694 EXPECT_FALSE(delegate->changes()[0].second); 1696 EXPECT_FALSE(delegate->changes()[0].second);
1695 EXPECT_EQ(http_www_google_.url().host(), 1697 EXPECT_EQ(http_www_google_.url().host(),
1696 delegate->changes()[0].first.Domain()); 1698 delegate->changes()[0].first.Domain());
1697 EXPECT_EQ("A", delegate->changes()[0].first.Name()); 1699 EXPECT_EQ("A", delegate->changes()[0].first.Name());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1757 EXPECT_EQ(http_www_google_.url().host(), 1759 EXPECT_EQ(http_www_google_.url().host(),
1758 delegate->changes()[1].first.Domain()); 1760 delegate->changes()[1].first.Domain());
1759 EXPECT_FALSE(delegate->changes()[1].second); 1761 EXPECT_FALSE(delegate->changes()[1].second);
1760 EXPECT_EQ("a", delegate->changes()[1].first.Name()); 1762 EXPECT_EQ("a", delegate->changes()[1].first.Name());
1761 EXPECT_EQ("val2", delegate->changes()[1].first.Value()); 1763 EXPECT_EQ("val2", delegate->changes()[1].first.Value());
1762 delegate->reset(); 1764 delegate->reset();
1763 } 1765 }
1764 1766
1765 TEST_F(CookieMonsterTest, PredicateSeesAllCookies) { 1767 TEST_F(CookieMonsterTest, PredicateSeesAllCookies) {
1766 const std::string kTrueValue = "A"; 1768 const std::string kTrueValue = "A";
1767 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1769 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1768 // We test that we can see all cookies with our predicated. This includes 1770 // We test that we can see all cookies with our predicated. This includes
1769 // host, http_only, host secure, and all domain cookies. 1771 // host, http_only, host secure, and all domain cookies.
1770 CookiePredicate value_matcher = base::Bind(&CookieValuePredicate, kTrueValue); 1772 CookiePredicate value_matcher = base::Bind(&CookieValuePredicate, kTrueValue);
1771 1773
1772 PopulateCmForPredicateCheck(cm.get()); 1774 PopulateCmForPredicateCheck(cm.get());
1773 EXPECT_EQ(7, DeleteAllCreatedBetweenWithPredicate( 1775 EXPECT_EQ(7, DeleteAllCreatedBetweenWithPredicate(
1774 cm.get(), base::Time(), base::Time::Now(), value_matcher)); 1776 cm.get(), base::Time(), base::Time::Now(), value_matcher));
1775 1777
1776 EXPECT_EQ("dom_2=B; dom_3=C; host_3=C", 1778 EXPECT_EQ("dom_2=B; dom_3=C; host_3=C",
1777 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); 1779 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3)));
1778 EXPECT_EQ("dom_2=B; host_2=B; sec_host=B", 1780 EXPECT_EQ("dom_2=B; host_2=B; sec_host=B",
1779 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1781 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure)));
1780 EXPECT_EQ("", GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); 1782 EXPECT_EQ("", GetCookies(cm.get(), GURL(kTopLevelDomainPlus1)));
1781 EXPECT_EQ("dom_path_2=B; host_path_2=B; dom_2=B; host_2=B; sec_host=B", 1783 EXPECT_EQ("dom_path_2=B; host_path_2=B; dom_2=B; host_2=B; sec_host=B",
1782 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure + 1784 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure +
1783 std::string("/dir1/dir2/xxx")))); 1785 std::string("/dir1/dir2/xxx"))));
1784 } 1786 }
1785 1787
1786 TEST_F(CookieMonsterTest, UniqueCreationTime) { 1788 TEST_F(CookieMonsterTest, UniqueCreationTime) {
1787 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1789 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1788 CookieOptions options; 1790 CookieOptions options;
1789 1791
1790 // Add in three cookies through every public interface to the 1792 // Add in three cookies through every public interface to the
1791 // CookieMonster and confirm that none of them have duplicate 1793 // CookieMonster and confirm that none of them have duplicate
1792 // creation times. 1794 // creation times.
1793 1795
1794 // SetCookieWithCreationTime and SetCookieWithCreationTimeAndOptions 1796 // SetCookieWithCreationTime and SetCookieWithCreationTimeAndOptions
1795 // are not included as they aren't going to be public for very much 1797 // are not included as they aren't going to be public for very much
1796 // longer. 1798 // longer.
1797 1799
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 if (existing_cookie_it == check_map.end()) { 1842 if (existing_cookie_it == check_map.end()) {
1841 check_map.insert( 1843 check_map.insert(
1842 TimeCookieMap::value_type(it->CreationDate().ToInternalValue(), *it)); 1844 TimeCookieMap::value_type(it->CreationDate().ToInternalValue(), *it));
1843 } 1845 }
1844 } 1846 }
1845 } 1847 }
1846 1848
1847 // Mainly a test of GetEffectiveDomain, or more specifically, of the 1849 // Mainly a test of GetEffectiveDomain, or more specifically, of the
1848 // expected behavior of GetEffectiveDomain within the CookieMonster. 1850 // expected behavior of GetEffectiveDomain within the CookieMonster.
1849 TEST_F(CookieMonsterTest, GetKey) { 1851 TEST_F(CookieMonsterTest, GetKey) {
1850 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1852 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1851 1853
1852 // This test is really only interesting if GetKey() actually does something. 1854 // This test is really only interesting if GetKey() actually does something.
1853 EXPECT_EQ("google.com", cm->GetKey("www.google.com")); 1855 EXPECT_EQ("google.com", cm->GetKey("www.google.com"));
1854 EXPECT_EQ("google.izzie", cm->GetKey("www.google.izzie")); 1856 EXPECT_EQ("google.izzie", cm->GetKey("www.google.izzie"));
1855 EXPECT_EQ("google.izzie", cm->GetKey(".google.izzie")); 1857 EXPECT_EQ("google.izzie", cm->GetKey(".google.izzie"));
1856 EXPECT_EQ("bbc.co.uk", cm->GetKey("bbc.co.uk")); 1858 EXPECT_EQ("bbc.co.uk", cm->GetKey("bbc.co.uk"));
1857 EXPECT_EQ("bbc.co.uk", cm->GetKey("a.b.c.d.bbc.co.uk")); 1859 EXPECT_EQ("bbc.co.uk", cm->GetKey("a.b.c.d.bbc.co.uk"));
1858 EXPECT_EQ("apple.com", cm->GetKey("a.b.c.d.apple.com")); 1860 EXPECT_EQ("apple.com", cm->GetKey("a.b.c.d.apple.com"));
1859 EXPECT_EQ("apple.izzie", cm->GetKey("a.b.c.d.apple.izzie")); 1861 EXPECT_EQ("apple.izzie", cm->GetKey("a.b.c.d.apple.izzie"));
1860 1862
(...skipping 23 matching lines...) Expand all
1884 {GURL("https://www.google.com"), "b", "2", ".google.com", 1886 {GURL("https://www.google.com"), "b", "2", ".google.com",
1885 "/path/from/cookie", expires + TimeDelta::FromSeconds(10), true, true, 1887 "/path/from/cookie", expires + TimeDelta::FromSeconds(10), true, true,
1886 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT}, 1888 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT},
1887 {GURL("https://google.com"), "c", "3", "", "/another/path/to/cookie", 1889 {GURL("https://google.com"), "c", "3", "", "/another/path/to/cookie",
1888 base::Time::Now() + base::TimeDelta::FromSeconds(100), true, false, 1890 base::Time::Now() + base::TimeDelta::FromSeconds(100), true, false,
1889 CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT}}; 1891 CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT}};
1890 const int INPUT_DELETE = 1; 1892 const int INPUT_DELETE = 1;
1891 1893
1892 // Create new cookies and flush them to the store. 1894 // Create new cookies and flush them to the store.
1893 { 1895 {
1894 scoped_ptr<CookieMonster> cmout(new CookieMonster(store.get(), nullptr)); 1896 std::unique_ptr<CookieMonster> cmout(
1897 new CookieMonster(store.get(), nullptr));
1895 for (const CookiesInputInfo* p = input_info; 1898 for (const CookiesInputInfo* p = input_info;
1896 p < &input_info[arraysize(input_info)]; p++) { 1899 p < &input_info[arraysize(input_info)]; p++) {
1897 EXPECT_TRUE(SetCookieWithDetails( 1900 EXPECT_TRUE(SetCookieWithDetails(
1898 cmout.get(), p->url, p->name, p->value, p->domain, p->path, 1901 cmout.get(), p->url, p->name, p->value, p->domain, p->path,
1899 base::Time(), p->expiration_time, base::Time(), p->secure, 1902 base::Time(), p->expiration_time, base::Time(), p->secure,
1900 p->http_only, p->same_site, p->priority)); 1903 p->http_only, p->same_site, p->priority));
1901 } 1904 }
1902 GURL del_url(input_info[INPUT_DELETE] 1905 GURL del_url(input_info[INPUT_DELETE]
1903 .url.Resolve(input_info[INPUT_DELETE].path) 1906 .url.Resolve(input_info[INPUT_DELETE].path)
1904 .spec()); 1907 .spec());
1905 DeleteCookie(cmout.get(), del_url, input_info[INPUT_DELETE].name); 1908 DeleteCookie(cmout.get(), del_url, input_info[INPUT_DELETE].name);
1906 } 1909 }
1907 1910
1908 // Create a new cookie monster and make sure that everything is correct 1911 // Create a new cookie monster and make sure that everything is correct
1909 { 1912 {
1910 scoped_ptr<CookieMonster> cmin(new CookieMonster(store.get(), nullptr)); 1913 std::unique_ptr<CookieMonster> cmin(
1914 new CookieMonster(store.get(), nullptr));
1911 CookieList cookies(GetAllCookies(cmin.get())); 1915 CookieList cookies(GetAllCookies(cmin.get()));
1912 ASSERT_EQ(2u, cookies.size()); 1916 ASSERT_EQ(2u, cookies.size());
1913 // Ordering is path length, then creation time. So second cookie 1917 // Ordering is path length, then creation time. So second cookie
1914 // will come first, and we need to swap them. 1918 // will come first, and we need to swap them.
1915 std::swap(cookies[0], cookies[1]); 1919 std::swap(cookies[0], cookies[1]);
1916 for (int output_index = 0; output_index < 2; output_index++) { 1920 for (int output_index = 0; output_index < 2; output_index++) {
1917 int input_index = output_index * 2; 1921 int input_index = output_index * 2;
1918 const CookiesInputInfo* input = &input_info[input_index]; 1922 const CookiesInputInfo* input = &input_info[input_index];
1919 const CanonicalCookie* output = &cookies[output_index]; 1923 const CanonicalCookie* output = &cookies[output_index];
1920 1924
1921 EXPECT_EQ(input->name, output->Name()); 1925 EXPECT_EQ(input->name, output->Name());
1922 EXPECT_EQ(input->value, output->Value()); 1926 EXPECT_EQ(input->value, output->Value());
1923 EXPECT_EQ(input->url.host(), output->Domain()); 1927 EXPECT_EQ(input->url.host(), output->Domain());
1924 EXPECT_EQ(input->path, output->Path()); 1928 EXPECT_EQ(input->path, output->Path());
1925 EXPECT_LE(current.ToInternalValue(), 1929 EXPECT_LE(current.ToInternalValue(),
1926 output->CreationDate().ToInternalValue()); 1930 output->CreationDate().ToInternalValue());
1927 EXPECT_EQ(input->secure, output->IsSecure()); 1931 EXPECT_EQ(input->secure, output->IsSecure());
1928 EXPECT_EQ(input->http_only, output->IsHttpOnly()); 1932 EXPECT_EQ(input->http_only, output->IsHttpOnly());
1929 EXPECT_EQ(input->same_site, output->SameSite()); 1933 EXPECT_EQ(input->same_site, output->SameSite());
1930 EXPECT_TRUE(output->IsPersistent()); 1934 EXPECT_TRUE(output->IsPersistent());
1931 EXPECT_EQ(input->expiration_time.ToInternalValue(), 1935 EXPECT_EQ(input->expiration_time.ToInternalValue(),
1932 output->ExpiryDate().ToInternalValue()); 1936 output->ExpiryDate().ToInternalValue());
1933 } 1937 }
1934 } 1938 }
1935 } 1939 }
1936 1940
1937 TEST_F(CookieMonsterTest, CookieListOrdering) { 1941 TEST_F(CookieMonsterTest, CookieListOrdering) {
1938 // Put a random set of cookies into a monster and make sure 1942 // Put a random set of cookies into a monster and make sure
1939 // they're returned in the right order. 1943 // they're returned in the right order.
1940 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1944 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1941 EXPECT_TRUE( 1945 EXPECT_TRUE(
1942 SetCookie(cm.get(), GURL("http://d.c.b.a.google.com/aa/x.html"), "c=1")); 1946 SetCookie(cm.get(), GURL("http://d.c.b.a.google.com/aa/x.html"), "c=1"));
1943 EXPECT_TRUE(SetCookie(cm.get(), GURL("http://b.a.google.com/aa/bb/cc/x.html"), 1947 EXPECT_TRUE(SetCookie(cm.get(), GURL("http://b.a.google.com/aa/bb/cc/x.html"),
1944 "d=1; domain=b.a.google.com")); 1948 "d=1; domain=b.a.google.com"));
1945 EXPECT_TRUE(SetCookie(cm.get(), GURL("http://b.a.google.com/aa/bb/cc/x.html"), 1949 EXPECT_TRUE(SetCookie(cm.get(), GURL("http://b.a.google.com/aa/bb/cc/x.html"),
1946 "a=4; domain=b.a.google.com")); 1950 "a=4; domain=b.a.google.com"));
1947 EXPECT_TRUE(SetCookie(cm.get(), 1951 EXPECT_TRUE(SetCookie(cm.get(),
1948 GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), 1952 GURL("http://c.b.a.google.com/aa/bb/cc/x.html"),
1949 "e=1; domain=c.b.a.google.com")); 1953 "e=1; domain=c.b.a.google.com"));
1950 EXPECT_TRUE(SetCookie(cm.get(), 1954 EXPECT_TRUE(SetCookie(cm.get(),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1987 #if defined(OS_WIN) 1991 #if defined(OS_WIN)
1988 #define MAYBE_GarbageCollectionTriggers DISABLED_GarbageCollectionTriggers 1992 #define MAYBE_GarbageCollectionTriggers DISABLED_GarbageCollectionTriggers
1989 #else 1993 #else
1990 #define MAYBE_GarbageCollectionTriggers GarbageCollectionTriggers 1994 #define MAYBE_GarbageCollectionTriggers GarbageCollectionTriggers
1991 #endif 1995 #endif
1992 1996
1993 TEST_F(CookieMonsterTest, MAYBE_GarbageCollectionTriggers) { 1997 TEST_F(CookieMonsterTest, MAYBE_GarbageCollectionTriggers) {
1994 // First we check to make sure that a whole lot of recent cookies 1998 // First we check to make sure that a whole lot of recent cookies
1995 // doesn't get rid of anything after garbage collection is checked for. 1999 // doesn't get rid of anything after garbage collection is checked for.
1996 { 2000 {
1997 scoped_ptr<CookieMonster> cm( 2001 std::unique_ptr<CookieMonster> cm(
1998 CreateMonsterForGC(CookieMonster::kMaxCookies * 2)); 2002 CreateMonsterForGC(CookieMonster::kMaxCookies * 2));
1999 EXPECT_EQ(CookieMonster::kMaxCookies * 2, GetAllCookies(cm.get()).size()); 2003 EXPECT_EQ(CookieMonster::kMaxCookies * 2, GetAllCookies(cm.get()).size());
2000 SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2"); 2004 SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2");
2001 EXPECT_EQ(CookieMonster::kMaxCookies * 2 + 1, 2005 EXPECT_EQ(CookieMonster::kMaxCookies * 2 + 1,
2002 GetAllCookies(cm.get()).size()); 2006 GetAllCookies(cm.get()).size());
2003 } 2007 }
2004 2008
2005 // Now we explore a series of relationships between cookie last access 2009 // Now we explore a series of relationships between cookie last access
2006 // time and size of store to make sure we only get rid of cookies when 2010 // time and size of store to make sure we only get rid of cookies when
2007 // we really should. 2011 // we really should.
(...skipping 21 matching lines...) Expand all
2029 CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies}, 2033 CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies},
2030 {// Old cookies enough to bring below our purge line (which we 2034 {// Old cookies enough to bring below our purge line (which we
2031 // shouldn't do). 2035 // shouldn't do).
2032 CookieMonster::kMaxCookies * 2, 2036 CookieMonster::kMaxCookies * 2,
2033 CookieMonster::kMaxCookies * 3 / 2, 2037 CookieMonster::kMaxCookies * 3 / 2,
2034 CookieMonster::kMaxCookies * 2, 2038 CookieMonster::kMaxCookies * 2,
2035 CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies}}; 2039 CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies}};
2036 2040
2037 for (int ci = 0; ci < static_cast<int>(arraysize(test_cases)); ++ci) { 2041 for (int ci = 0; ci < static_cast<int>(arraysize(test_cases)); ++ci) {
2038 const TestCase* test_case = &test_cases[ci]; 2042 const TestCase* test_case = &test_cases[ci];
2039 scoped_ptr<CookieMonster> cm = CreateMonsterFromStoreForGC( 2043 std::unique_ptr<CookieMonster> cm = CreateMonsterFromStoreForGC(
2040 test_case->num_cookies, test_case->num_old_cookies, 0, 0, 2044 test_case->num_cookies, test_case->num_old_cookies, 0, 0,
2041 CookieMonster::kSafeFromGlobalPurgeDays * 2); 2045 CookieMonster::kSafeFromGlobalPurgeDays * 2);
2042 EXPECT_EQ(test_case->expected_initial_cookies, 2046 EXPECT_EQ(test_case->expected_initial_cookies,
2043 GetAllCookies(cm.get()).size()) 2047 GetAllCookies(cm.get()).size())
2044 << "For test case " << ci; 2048 << "For test case " << ci;
2045 // Will trigger GC 2049 // Will trigger GC
2046 SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2"); 2050 SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2");
2047 EXPECT_EQ(test_case->expected_cookies_after_set, 2051 EXPECT_EQ(test_case->expected_cookies_after_set,
2048 GetAllCookies(cm.get()).size()) 2052 GetAllCookies(cm.get()).size())
2049 << "For test case " << ci; 2053 << "For test case " << ci;
2050 } 2054 }
2051 } 2055 }
2052 2056
2053 // Tests that if the main load event happens before the loaded event for a 2057 // Tests that if the main load event happens before the loaded event for a
2054 // particular key, the tasks for that key run first. 2058 // particular key, the tasks for that key run first.
2055 TEST_F(CookieMonsterTest, WhileLoadingLoadCompletesBeforeKeyLoadCompletes) { 2059 TEST_F(CookieMonsterTest, WhileLoadingLoadCompletesBeforeKeyLoadCompletes) {
2056 const GURL kUrl = GURL(kTopLevelDomainPlus1); 2060 const GURL kUrl = GURL(kTopLevelDomainPlus1);
2057 2061
2058 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2062 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2059 store->set_store_load_commands(true); 2063 store->set_store_load_commands(true);
2060 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2064 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2061 2065
2062 // Get all cookies task that queues a task to set a cookie when executed. 2066 // Get all cookies task that queues a task to set a cookie when executed.
2063 ResultSavingCookieCallback<bool> set_cookie_callback; 2067 ResultSavingCookieCallback<bool> set_cookie_callback;
2064 cm->SetCookieWithOptionsAsync( 2068 cm->SetCookieWithOptionsAsync(
2065 kUrl, "a=b", CookieOptions(), 2069 kUrl, "a=b", CookieOptions(),
2066 base::Bind(&ResultSavingCookieCallback<bool>::Run, 2070 base::Bind(&ResultSavingCookieCallback<bool>::Run,
2067 base::Unretained(&set_cookie_callback))); 2071 base::Unretained(&set_cookie_callback)));
2068 2072
2069 GetCookieListCallback get_cookie_list_callback1; 2073 GetCookieListCallback get_cookie_list_callback1;
2070 cm->GetAllCookiesAsync( 2074 cm->GetAllCookiesAsync(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2102 } 2106 }
2103 2107
2104 // Tests that case that DeleteAll is waiting for load to complete, and then a 2108 // Tests that case that DeleteAll is waiting for load to complete, and then a
2105 // get is queued. The get should wait to run until after all the cookies are 2109 // get is queued. The get should wait to run until after all the cookies are
2106 // retrieved, and should return nothing, since all cookies were just deleted. 2110 // retrieved, and should return nothing, since all cookies were just deleted.
2107 TEST_F(CookieMonsterTest, WhileLoadingDeleteAllGetForURL) { 2111 TEST_F(CookieMonsterTest, WhileLoadingDeleteAllGetForURL) {
2108 const GURL kUrl = GURL(kTopLevelDomainPlus1); 2112 const GURL kUrl = GURL(kTopLevelDomainPlus1);
2109 2113
2110 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2114 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2111 store->set_store_load_commands(true); 2115 store->set_store_load_commands(true);
2112 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2116 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2113 2117
2114 ResultSavingCookieCallback<int> delete_callback; 2118 ResultSavingCookieCallback<int> delete_callback;
2115 cm->DeleteAllAsync(base::Bind(&ResultSavingCookieCallback<int>::Run, 2119 cm->DeleteAllAsync(base::Bind(&ResultSavingCookieCallback<int>::Run,
2116 base::Unretained(&delete_callback))); 2120 base::Unretained(&delete_callback)));
2117 2121
2118 GetCookieListCallback get_cookie_list_callback; 2122 GetCookieListCallback get_cookie_list_callback;
2119 cm->GetCookieListWithOptionsAsync( 2123 cm->GetCookieListWithOptionsAsync(
2120 kUrl, CookieOptions(), 2124 kUrl, CookieOptions(),
2121 base::Bind(&GetCookieListCallback::Run, 2125 base::Bind(&GetCookieListCallback::Run,
2122 base::Unretained(&get_cookie_list_callback))); 2126 base::Unretained(&get_cookie_list_callback)));
(...skipping 20 matching lines...) Expand all
2143 2147
2144 // Tests that a set cookie call sandwiched between two get all cookies, all 2148 // Tests that a set cookie call sandwiched between two get all cookies, all
2145 // before load completes, affects the first but not the second. The set should 2149 // before load completes, affects the first but not the second. The set should
2146 // also not trigger a LoadCookiesForKey (As that could complete only after the 2150 // also not trigger a LoadCookiesForKey (As that could complete only after the
2147 // main load for the store). 2151 // main load for the store).
2148 TEST_F(CookieMonsterTest, WhileLoadingGetAllSetGetAll) { 2152 TEST_F(CookieMonsterTest, WhileLoadingGetAllSetGetAll) {
2149 const GURL kUrl = GURL(kTopLevelDomainPlus1); 2153 const GURL kUrl = GURL(kTopLevelDomainPlus1);
2150 2154
2151 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2155 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2152 store->set_store_load_commands(true); 2156 store->set_store_load_commands(true);
2153 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2157 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2154 2158
2155 GetCookieListCallback get_cookie_list_callback1; 2159 GetCookieListCallback get_cookie_list_callback1;
2156 cm->GetAllCookiesAsync( 2160 cm->GetAllCookiesAsync(
2157 base::Bind(&GetCookieListCallback::Run, 2161 base::Bind(&GetCookieListCallback::Run,
2158 base::Unretained(&get_cookie_list_callback1))); 2162 base::Unretained(&get_cookie_list_callback1)));
2159 2163
2160 ResultSavingCookieCallback<bool> set_cookie_callback; 2164 ResultSavingCookieCallback<bool> set_cookie_callback;
2161 cm->SetCookieWithOptionsAsync( 2165 cm->SetCookieWithOptionsAsync(
2162 kUrl, "a=b", CookieOptions(), 2166 kUrl, "a=b", CookieOptions(),
2163 base::Bind(&ResultSavingCookieCallback<bool>::Run, 2167 base::Bind(&ResultSavingCookieCallback<bool>::Run,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2195 } // namespace 2199 } // namespace
2196 2200
2197 // Tests that if a single cookie task is queued as a result of a task performed 2201 // Tests that if a single cookie task is queued as a result of a task performed
2198 // on all cookies when loading completes, it will be run after any already 2202 // on all cookies when loading completes, it will be run after any already
2199 // queued tasks. 2203 // queued tasks.
2200 TEST_F(CookieMonsterTest, CheckOrderOfCookieTaskQueueWhenLoadingCompletes) { 2204 TEST_F(CookieMonsterTest, CheckOrderOfCookieTaskQueueWhenLoadingCompletes) {
2201 const GURL kUrl = GURL(kTopLevelDomainPlus1); 2205 const GURL kUrl = GURL(kTopLevelDomainPlus1);
2202 2206
2203 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2207 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2204 store->set_store_load_commands(true); 2208 store->set_store_load_commands(true);
2205 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2209 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2206 2210
2207 // Get all cookies task that queues a task to set a cookie when executed. 2211 // Get all cookies task that queues a task to set a cookie when executed.
2208 ResultSavingCookieCallback<bool> set_cookie_callback; 2212 ResultSavingCookieCallback<bool> set_cookie_callback;
2209 cm->GetAllCookiesAsync(base::Bind( 2213 cm->GetAllCookiesAsync(base::Bind(
2210 &RunClosureOnCookieListReceived, 2214 &RunClosureOnCookieListReceived,
2211 base::Bind(&CookieStore::SetCookieWithOptionsAsync, 2215 base::Bind(&CookieStore::SetCookieWithOptionsAsync,
2212 base::Unretained(cm.get()), kUrl, "a=b", CookieOptions(), 2216 base::Unretained(cm.get()), kUrl, "a=b", CookieOptions(),
2213 base::Bind(&ResultSavingCookieCallback<bool>::Run, 2217 base::Bind(&ResultSavingCookieCallback<bool>::Run,
2214 base::Unretained(&set_cookie_callback))))); 2218 base::Unretained(&set_cookie_callback)))));
2215 2219
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2297 2301
2298 volatile int callback_count_; 2302 volatile int callback_count_;
2299 }; 2303 };
2300 2304
2301 } // namespace 2305 } // namespace
2302 2306
2303 // Test that FlushStore() is forwarded to the store and callbacks are posted. 2307 // Test that FlushStore() is forwarded to the store and callbacks are posted.
2304 TEST_F(CookieMonsterTest, FlushStore) { 2308 TEST_F(CookieMonsterTest, FlushStore) {
2305 scoped_refptr<CallbackCounter> counter(new CallbackCounter()); 2309 scoped_refptr<CallbackCounter> counter(new CallbackCounter());
2306 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); 2310 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
2307 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2311 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2308 2312
2309 ASSERT_EQ(0, store->flush_count()); 2313 ASSERT_EQ(0, store->flush_count());
2310 ASSERT_EQ(0, counter->callback_count()); 2314 ASSERT_EQ(0, counter->callback_count());
2311 2315
2312 // Before initialization, FlushStore() should just run the callback. 2316 // Before initialization, FlushStore() should just run the callback.
2313 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 2317 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get()));
2314 base::MessageLoop::current()->RunUntilIdle(); 2318 base::MessageLoop::current()->RunUntilIdle();
2315 2319
2316 ASSERT_EQ(0, store->flush_count()); 2320 ASSERT_EQ(0, store->flush_count());
2317 ASSERT_EQ(1, counter->callback_count()); 2321 ASSERT_EQ(1, counter->callback_count());
(...skipping 29 matching lines...) Expand all
2347 ASSERT_EQ(2, counter->callback_count()); 2351 ASSERT_EQ(2, counter->callback_count());
2348 2352
2349 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 2353 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get()));
2350 base::MessageLoop::current()->RunUntilIdle(); 2354 base::MessageLoop::current()->RunUntilIdle();
2351 2355
2352 ASSERT_EQ(3, counter->callback_count()); 2356 ASSERT_EQ(3, counter->callback_count());
2353 } 2357 }
2354 2358
2355 TEST_F(CookieMonsterTest, SetAllCookies) { 2359 TEST_F(CookieMonsterTest, SetAllCookies) {
2356 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); 2360 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
2357 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2361 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2358 cm->SetPersistSessionCookies(true); 2362 cm->SetPersistSessionCookies(true);
2359 2363
2360 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "U=V; path=/")); 2364 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "U=V; path=/"));
2361 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "W=X; path=/foo")); 2365 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "W=X; path=/foo"));
2362 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "Y=Z; path=/")); 2366 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "Y=Z; path=/"));
2363 2367
2364 CookieList list; 2368 CookieList list;
2365 list.push_back(*CanonicalCookie::Create( 2369 list.push_back(*CanonicalCookie::Create(
2366 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/", 2370 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/",
2367 base::Time::Now(), base::Time(), false, false, 2371 base::Time::Now(), base::Time(), false, false,
(...skipping 25 matching lines...) Expand all
2393 ASSERT_TRUE(++it != cookies.end()); 2397 ASSERT_TRUE(++it != cookies.end());
2394 EXPECT_EQ("A", it->Name()); 2398 EXPECT_EQ("A", it->Name());
2395 EXPECT_EQ("B", it->Value()); 2399 EXPECT_EQ("B", it->Value());
2396 2400
2397 ASSERT_TRUE(++it != cookies.end()); 2401 ASSERT_TRUE(++it != cookies.end());
2398 EXPECT_EQ("Y", it->Name()); 2402 EXPECT_EQ("Y", it->Name());
2399 EXPECT_EQ("Z", it->Value()); 2403 EXPECT_EQ("Z", it->Value());
2400 } 2404 }
2401 2405
2402 TEST_F(CookieMonsterTest, ComputeCookieDiff) { 2406 TEST_F(CookieMonsterTest, ComputeCookieDiff) {
2403 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 2407 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
2404 2408
2405 base::Time now = base::Time::Now(); 2409 base::Time now = base::Time::Now();
2406 base::Time creation_time = now - base::TimeDelta::FromSeconds(1); 2410 base::Time creation_time = now - base::TimeDelta::FromSeconds(1);
2407 2411
2408 scoped_ptr<CanonicalCookie> cookie1(CanonicalCookie::Create( 2412 std::unique_ptr<CanonicalCookie> cookie1(CanonicalCookie::Create(
2409 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/", 2413 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/",
2410 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2414 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2411 false, COOKIE_PRIORITY_DEFAULT)); 2415 false, COOKIE_PRIORITY_DEFAULT));
2412 scoped_ptr<CanonicalCookie> cookie2(CanonicalCookie::Create( 2416 std::unique_ptr<CanonicalCookie> cookie2(CanonicalCookie::Create(
2413 http_www_google_.url(), "C", "D", http_www_google_.url().host(), "/", 2417 http_www_google_.url(), "C", "D", http_www_google_.url().host(), "/",
2414 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2418 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2415 false, COOKIE_PRIORITY_DEFAULT)); 2419 false, COOKIE_PRIORITY_DEFAULT));
2416 scoped_ptr<CanonicalCookie> cookie3(CanonicalCookie::Create( 2420 std::unique_ptr<CanonicalCookie> cookie3(CanonicalCookie::Create(
2417 http_www_google_.url(), "E", "F", http_www_google_.url().host(), "/", 2421 http_www_google_.url(), "E", "F", http_www_google_.url().host(), "/",
2418 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2422 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2419 false, COOKIE_PRIORITY_DEFAULT)); 2423 false, COOKIE_PRIORITY_DEFAULT));
2420 scoped_ptr<CanonicalCookie> cookie4(CanonicalCookie::Create( 2424 std::unique_ptr<CanonicalCookie> cookie4(CanonicalCookie::Create(
2421 http_www_google_.url(), "G", "H", http_www_google_.url().host(), "/", 2425 http_www_google_.url(), "G", "H", http_www_google_.url().host(), "/",
2422 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2426 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2423 false, COOKIE_PRIORITY_DEFAULT)); 2427 false, COOKIE_PRIORITY_DEFAULT));
2424 scoped_ptr<CanonicalCookie> cookie4_with_new_value(CanonicalCookie::Create( 2428 std::unique_ptr<CanonicalCookie> cookie4_with_new_value(
2425 http_www_google_.url(), "G", "iamnew", http_www_google_.url().host(), "/", 2429 CanonicalCookie::Create(
2426 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2430 http_www_google_.url(), "G", "iamnew", http_www_google_.url().host(),
2427 false, COOKIE_PRIORITY_DEFAULT)); 2431 "/", creation_time, base::Time(), false, false,
2428 scoped_ptr<CanonicalCookie> cookie5(CanonicalCookie::Create( 2432 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT));
2433 std::unique_ptr<CanonicalCookie> cookie5(CanonicalCookie::Create(
2429 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/", 2434 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/",
2430 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2435 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2431 false, COOKIE_PRIORITY_DEFAULT)); 2436 false, COOKIE_PRIORITY_DEFAULT));
2432 scoped_ptr<CanonicalCookie> cookie5_with_new_creation_time( 2437 std::unique_ptr<CanonicalCookie> cookie5_with_new_creation_time(
2433 CanonicalCookie::Create( 2438 CanonicalCookie::Create(
2434 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/", 2439 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/",
2435 now, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, false, 2440 now, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, false,
2436 COOKIE_PRIORITY_DEFAULT)); 2441 COOKIE_PRIORITY_DEFAULT));
2437 scoped_ptr<CanonicalCookie> cookie6(CanonicalCookie::Create( 2442 std::unique_ptr<CanonicalCookie> cookie6(CanonicalCookie::Create(
2438 http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/foo", 2443 http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/foo",
2439 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2444 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2440 false, COOKIE_PRIORITY_DEFAULT)); 2445 false, COOKIE_PRIORITY_DEFAULT));
2441 scoped_ptr<CanonicalCookie> cookie6_with_new_path(CanonicalCookie::Create( 2446 std::unique_ptr<CanonicalCookie> cookie6_with_new_path(
2442 http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/bar", 2447 CanonicalCookie::Create(
2443 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2448 http_www_google_.url(), "K", "L", http_www_google_.url().host(),
2444 false, COOKIE_PRIORITY_DEFAULT)); 2449 "/bar", creation_time, base::Time(), false, false,
2445 scoped_ptr<CanonicalCookie> cookie7(CanonicalCookie::Create( 2450 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT));
2451 std::unique_ptr<CanonicalCookie> cookie7(CanonicalCookie::Create(
2446 http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/foo", 2452 http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/foo",
2447 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2453 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2448 false, COOKIE_PRIORITY_DEFAULT)); 2454 false, COOKIE_PRIORITY_DEFAULT));
2449 scoped_ptr<CanonicalCookie> cookie7_with_new_path(CanonicalCookie::Create( 2455 std::unique_ptr<CanonicalCookie> cookie7_with_new_path(
2450 http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/bar", 2456 CanonicalCookie::Create(
2451 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2457 http_www_google_.url(), "M", "N", http_www_google_.url().host(),
2452 false, COOKIE_PRIORITY_DEFAULT)); 2458 "/bar", creation_time, base::Time(), false, false,
2459 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT));
2453 2460
2454 CookieList old_cookies; 2461 CookieList old_cookies;
2455 old_cookies.push_back(*cookie1); 2462 old_cookies.push_back(*cookie1);
2456 old_cookies.push_back(*cookie2); 2463 old_cookies.push_back(*cookie2);
2457 old_cookies.push_back(*cookie4); 2464 old_cookies.push_back(*cookie4);
2458 old_cookies.push_back(*cookie5); 2465 old_cookies.push_back(*cookie5);
2459 old_cookies.push_back(*cookie6); 2466 old_cookies.push_back(*cookie6);
2460 old_cookies.push_back(*cookie7); 2467 old_cookies.push_back(*cookie7);
2461 2468
2462 CookieList new_cookies; 2469 CookieList new_cookies;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2512 EXPECT_FALSE(IsCookieInList(*cookie7, cookies_to_add)); 2519 EXPECT_FALSE(IsCookieInList(*cookie7, cookies_to_add));
2513 EXPECT_FALSE(IsCookieInList(*cookie7, cookies_to_delete)); 2520 EXPECT_FALSE(IsCookieInList(*cookie7, cookies_to_delete));
2514 EXPECT_TRUE(IsCookieInList(*cookie7_with_new_path, cookies_to_add)); 2521 EXPECT_TRUE(IsCookieInList(*cookie7_with_new_path, cookies_to_add));
2515 EXPECT_FALSE(IsCookieInList(*cookie7_with_new_path, cookies_to_delete)); 2522 EXPECT_FALSE(IsCookieInList(*cookie7_with_new_path, cookies_to_delete));
2516 } 2523 }
2517 2524
2518 // Check that DeleteAll does flush (as a sanity check that flush_count() 2525 // Check that DeleteAll does flush (as a sanity check that flush_count()
2519 // works). 2526 // works).
2520 TEST_F(CookieMonsterTest, DeleteAll) { 2527 TEST_F(CookieMonsterTest, DeleteAll) {
2521 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); 2528 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
2522 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2529 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2523 cm->SetPersistSessionCookies(true); 2530 cm->SetPersistSessionCookies(true);
2524 2531
2525 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "X=Y; path=/")); 2532 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "X=Y; path=/"));
2526 2533
2527 ASSERT_EQ(0, store->flush_count()); 2534 ASSERT_EQ(0, store->flush_count());
2528 EXPECT_EQ(1, DeleteAll(cm.get())); 2535 EXPECT_EQ(1, DeleteAll(cm.get()));
2529 EXPECT_EQ(1, store->flush_count()); 2536 EXPECT_EQ(1, store->flush_count());
2530 } 2537 }
2531 2538
2532 TEST_F(CookieMonsterTest, HistogramCheck) { 2539 TEST_F(CookieMonsterTest, HistogramCheck) {
2533 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 2540 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
2534 // Should match call in InitializeHistograms, but doesn't really matter 2541 // Should match call in InitializeHistograms, but doesn't really matter
2535 // since the histogram should have been initialized by the CM construction 2542 // since the histogram should have been initialized by the CM construction
2536 // above. 2543 // above.
2537 base::HistogramBase* expired_histogram = base::Histogram::FactoryGet( 2544 base::HistogramBase* expired_histogram = base::Histogram::FactoryGet(
2538 "Cookie.ExpirationDurationMinutes", 1, 10 * 365 * 24 * 60, 50, 2545 "Cookie.ExpirationDurationMinutes", 1, 10 * 365 * 24 * 60, 50,
2539 base::Histogram::kUmaTargetedHistogramFlag); 2546 base::Histogram::kUmaTargetedHistogramFlag);
2540 2547
2541 scoped_ptr<base::HistogramSamples> samples1( 2548 std::unique_ptr<base::HistogramSamples> samples1(
2542 expired_histogram->SnapshotSamples()); 2549 expired_histogram->SnapshotSamples());
2543 ASSERT_TRUE(SetCookieWithDetails( 2550 ASSERT_TRUE(SetCookieWithDetails(
2544 cm.get(), GURL("http://fake.a.url"), "a", "b", "a.url", "/", base::Time(), 2551 cm.get(), GURL("http://fake.a.url"), "a", "b", "a.url", "/", base::Time(),
2545 base::Time::Now() + base::TimeDelta::FromMinutes(59), base::Time(), false, 2552 base::Time::Now() + base::TimeDelta::FromMinutes(59), base::Time(), false,
2546 false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 2553 false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2547 2554
2548 scoped_ptr<base::HistogramSamples> samples2( 2555 std::unique_ptr<base::HistogramSamples> samples2(
2549 expired_histogram->SnapshotSamples()); 2556 expired_histogram->SnapshotSamples());
2550 EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount()); 2557 EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount());
2551 2558
2552 // kValidCookieLine creates a session cookie. 2559 // kValidCookieLine creates a session cookie.
2553 ASSERT_TRUE(SetCookie(cm.get(), http_www_google_.url(), kValidCookieLine)); 2560 ASSERT_TRUE(SetCookie(cm.get(), http_www_google_.url(), kValidCookieLine));
2554 2561
2555 scoped_ptr<base::HistogramSamples> samples3( 2562 std::unique_ptr<base::HistogramSamples> samples3(
2556 expired_histogram->SnapshotSamples()); 2563 expired_histogram->SnapshotSamples());
2557 EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount()); 2564 EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount());
2558 } 2565 }
2559 2566
2560 TEST_F(CookieMonsterTest, InvalidExpiryTime) { 2567 TEST_F(CookieMonsterTest, InvalidExpiryTime) {
2561 std::string cookie_line = 2568 std::string cookie_line =
2562 std::string(kValidCookieLine) + "; expires=Blarg arg arg"; 2569 std::string(kValidCookieLine) + "; expires=Blarg arg arg";
2563 scoped_ptr<CanonicalCookie> cookie(CanonicalCookie::Create( 2570 std::unique_ptr<CanonicalCookie> cookie(CanonicalCookie::Create(
2564 http_www_google_.url(), cookie_line, Time::Now(), CookieOptions())); 2571 http_www_google_.url(), cookie_line, Time::Now(), CookieOptions()));
2565 ASSERT_FALSE(cookie->IsPersistent()); 2572 ASSERT_FALSE(cookie->IsPersistent());
2566 } 2573 }
2567 2574
2568 // Test that CookieMonster writes session cookies into the underlying 2575 // Test that CookieMonster writes session cookies into the underlying
2569 // CookieStore if the "persist session cookies" option is on. 2576 // CookieStore if the "persist session cookies" option is on.
2570 TEST_F(CookieMonsterTest, PersistSessionCookies) { 2577 TEST_F(CookieMonsterTest, PersistSessionCookies) {
2571 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2578 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2572 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2579 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2573 cm->SetPersistSessionCookies(true); 2580 cm->SetPersistSessionCookies(true);
2574 2581
2575 // All cookies set with SetCookie are session cookies. 2582 // All cookies set with SetCookie are session cookies.
2576 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); 2583 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B"));
2577 EXPECT_EQ("A=B", GetCookies(cm.get(), http_www_google_.url())); 2584 EXPECT_EQ("A=B", GetCookies(cm.get(), http_www_google_.url()));
2578 2585
2579 // The cookie was written to the backing store. 2586 // The cookie was written to the backing store.
2580 EXPECT_EQ(1u, store->commands().size()); 2587 EXPECT_EQ(1u, store->commands().size());
2581 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); 2588 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type);
2582 EXPECT_EQ("A", store->commands()[0].cookie.Name()); 2589 EXPECT_EQ("A", store->commands()[0].cookie.Name());
(...skipping 15 matching lines...) Expand all
2598 EXPECT_EQ("", GetCookies(cm.get(), http_www_google_.url())); 2605 EXPECT_EQ("", GetCookies(cm.get(), http_www_google_.url()));
2599 EXPECT_EQ(4u, store->commands().size()); 2606 EXPECT_EQ(4u, store->commands().size());
2600 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); 2607 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type);
2601 EXPECT_EQ("A", store->commands()[3].cookie.Name()); 2608 EXPECT_EQ("A", store->commands()[3].cookie.Name());
2602 EXPECT_EQ("C", store->commands()[3].cookie.Value()); 2609 EXPECT_EQ("C", store->commands()[3].cookie.Value());
2603 } 2610 }
2604 2611
2605 // Test the commands sent to the persistent cookie store. 2612 // Test the commands sent to the persistent cookie store.
2606 TEST_F(CookieMonsterTest, PersisentCookieStorageTest) { 2613 TEST_F(CookieMonsterTest, PersisentCookieStorageTest) {
2607 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2614 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2608 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2615 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2609 2616
2610 // Add a cookie. 2617 // Add a cookie.
2611 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), 2618 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(),
2612 "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); 2619 "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT"));
2613 this->MatchCookieLines("A=B", GetCookies(cm.get(), http_www_google_.url())); 2620 this->MatchCookieLines("A=B", GetCookies(cm.get(), http_www_google_.url()));
2614 ASSERT_EQ(1u, store->commands().size()); 2621 ASSERT_EQ(1u, store->commands().size());
2615 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); 2622 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type);
2616 // Remove it. 2623 // Remove it.
2617 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B; max-age=0")); 2624 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B; max-age=0"));
2618 this->MatchCookieLines(std::string(), 2625 this->MatchCookieLines(std::string(),
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2654 const std::string path("/path"); 2661 const std::string path("/path");
2655 2662
2656 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2663 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2657 2664
2658 std::vector<CanonicalCookie*> initial_cookies; 2665 std::vector<CanonicalCookie*> initial_cookies;
2659 2666
2660 AddCookieToList(url, "foo=bar; path=" + path, now1, &initial_cookies); 2667 AddCookieToList(url, "foo=bar; path=" + path, now1, &initial_cookies);
2661 2668
2662 // We have to manually build this cookie because it contains a control 2669 // We have to manually build this cookie because it contains a control
2663 // character, and our cookie line parser rejects control characters. 2670 // character, and our cookie line parser rejects control characters.
2664 scoped_ptr<CanonicalCookie> cc = CanonicalCookie::Create( 2671 std::unique_ptr<CanonicalCookie> cc = CanonicalCookie::Create(
2665 url, "baz", 2672 url, "baz",
2666 "\x05" 2673 "\x05"
2667 "boo", 2674 "boo",
2668 domain, path, now2, later, false, false, CookieSameSite::DEFAULT_MODE, 2675 domain, path, now2, later, false, false, CookieSameSite::DEFAULT_MODE,
2669 false, COOKIE_PRIORITY_DEFAULT); 2676 false, COOKIE_PRIORITY_DEFAULT);
2670 initial_cookies.push_back(cc.release()); 2677 initial_cookies.push_back(cc.release());
2671 2678
2672 AddCookieToList(url, "hello=world; path=" + path, now3, &initial_cookies); 2679 AddCookieToList(url, "hello=world; path=" + path, now3, &initial_cookies);
2673 2680
2674 // Inject our initial cookies into the mock PersistentCookieStore. 2681 // Inject our initial cookies into the mock PersistentCookieStore.
2675 store->SetLoadExpectation(true, initial_cookies); 2682 store->SetLoadExpectation(true, initial_cookies);
2676 2683
2677 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2684 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2678 2685
2679 EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url)); 2686 EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url));
2680 } 2687 }
2681 2688
2682 // Test that cookie source schemes are histogrammed correctly. 2689 // Test that cookie source schemes are histogrammed correctly.
2683 TEST_F(CookieMonsterTest, CookieSourceHistogram) { 2690 TEST_F(CookieMonsterTest, CookieSourceHistogram) {
2684 base::HistogramTester histograms; 2691 base::HistogramTester histograms;
2685 const std::string cookie_source_histogram = "Cookie.CookieSourceScheme"; 2692 const std::string cookie_source_histogram = "Cookie.CookieSourceScheme";
2686 2693
2687 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2694 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2688 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2695 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2689 2696
2690 histograms.ExpectTotalCount(cookie_source_histogram, 0); 2697 histograms.ExpectTotalCount(cookie_source_histogram, 0);
2691 2698
2692 // Set a secure cookie on a cryptographic scheme. 2699 // Set a secure cookie on a cryptographic scheme.
2693 EXPECT_TRUE( 2700 EXPECT_TRUE(
2694 SetCookie(cm.get(), https_www_google_.url(), "A=B; path=/; Secure")); 2701 SetCookie(cm.get(), https_www_google_.url(), "A=B; path=/; Secure"));
2695 histograms.ExpectTotalCount(cookie_source_histogram, 1); 2702 histograms.ExpectTotalCount(cookie_source_histogram, 1);
2696 histograms.ExpectBucketCount( 2703 histograms.ExpectBucketCount(
2697 cookie_source_histogram, 2704 cookie_source_histogram,
2698 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1); 2705 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 CookieMonster::COOKIE_SOURCE_NONSECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 1); 2752 CookieMonster::COOKIE_SOURCE_NONSECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 1);
2746 } 2753 }
2747 2754
2748 // Test that cookie delete equivalent histograms are recorded correctly when 2755 // Test that cookie delete equivalent histograms are recorded correctly when
2749 // strict secure cookies are not enabled. 2756 // strict secure cookies are not enabled.
2750 TEST_F(CookieMonsterTest, CookieDeleteEquivalentHistogramTest) { 2757 TEST_F(CookieMonsterTest, CookieDeleteEquivalentHistogramTest) {
2751 base::HistogramTester histograms; 2758 base::HistogramTester histograms;
2752 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent"; 2759 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent";
2753 2760
2754 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2761 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2755 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2762 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2756 2763
2757 // Set a secure cookie from a secure origin 2764 // Set a secure cookie from a secure origin
2758 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure")); 2765 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure"));
2759 histograms.ExpectTotalCount(cookie_source_histogram, 1); 2766 histograms.ExpectTotalCount(cookie_source_histogram, 1);
2760 histograms.ExpectBucketCount(cookie_source_histogram, 2767 histograms.ExpectBucketCount(cookie_source_histogram,
2761 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2768 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2762 1); 2769 1);
2763 2770
2764 // Set a new cookie with a different name from a variety of origins (including 2771 // Set a new cookie with a different name from a variety of origins (including
2765 // the same one). 2772 // the same one).
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2810 // already existing cookie and is not equivalent. 2817 // already existing cookie and is not equivalent.
2811 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), 2818 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(),
2812 "A=E; secure; path=/some/other/path")); 2819 "A=E; secure; path=/some/other/path"));
2813 histograms.ExpectTotalCount(cookie_source_histogram, 9); 2820 histograms.ExpectTotalCount(cookie_source_histogram, 9);
2814 histograms.ExpectBucketCount(cookie_source_histogram, 2821 histograms.ExpectBucketCount(cookie_source_histogram,
2815 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2822 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2816 7); 2823 7);
2817 } 2824 }
2818 2825
2819 TEST_F(CookieMonsterStrictSecureTest, SetSecureCookies) { 2826 TEST_F(CookieMonsterStrictSecureTest, SetSecureCookies) {
2820 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 2827 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
2821 GURL http_url("http://www.google.com"); 2828 GURL http_url("http://www.google.com");
2822 GURL http_superdomain_url("http://google.com"); 2829 GURL http_superdomain_url("http://google.com");
2823 GURL https_url("https://www.google.com"); 2830 GURL https_url("https://www.google.com");
2824 2831
2825 // A non-secure cookie can be created from either a URL with a secure or 2832 // A non-secure cookie can be created from either a URL with a secure or
2826 // insecure scheme. 2833 // insecure scheme.
2827 EXPECT_TRUE(SetCookie(cm.get(), http_url, "A=C;")); 2834 EXPECT_TRUE(SetCookie(cm.get(), http_url, "A=C;"));
2828 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B;")); 2835 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B;"));
2829 2836
2830 // A secure cookie cannot be created from a URL with an insecure scheme. 2837 // A secure cookie cannot be created from a URL with an insecure scheme.
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
3003 // global purge goal (3000), but the secure cookies are not evicted. 3010 // global purge goal (3000), but the secure cookies are not evicted.
3004 const CookiesEntry test14[] = {{1U, true}}; 3011 const CookiesEntry test14[] = {{1U, true}};
3005 const AltHosts test14_alt_hosts(1500, 1800); 3012 const AltHosts test14_alt_hosts(1500, 1800);
3006 TestSecureCookieEviction(test14, arraysize(test14), 1501U, 1499, 3013 TestSecureCookieEviction(test14, arraysize(test14), 1501U, 1499,
3007 &test14_alt_hosts); 3014 &test14_alt_hosts);
3008 } 3015 }
3009 3016
3010 // Tests that strict secure cookies doesn't trip equivalent cookie checks 3017 // Tests that strict secure cookies doesn't trip equivalent cookie checks
3011 // accidentally. Regression test for https://crbug.com/569943. 3018 // accidentally. Regression test for https://crbug.com/569943.
3012 TEST_F(CookieMonsterStrictSecureTest, EquivalentCookies) { 3019 TEST_F(CookieMonsterStrictSecureTest, EquivalentCookies) {
3013 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 3020 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
3014 GURL http_url("http://www.google.com"); 3021 GURL http_url("http://www.google.com");
3015 GURL http_superdomain_url("http://google.com"); 3022 GURL http_superdomain_url("http://google.com");
3016 GURL https_url("https://www.google.com"); 3023 GURL https_url("https://www.google.com");
3017 3024
3018 // Tests that non-equivalent cookies because of the path attribute can be set 3025 // Tests that non-equivalent cookies because of the path attribute can be set
3019 // successfully. 3026 // successfully.
3020 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure")); 3027 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure"));
3021 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; path=/some/other/path")); 3028 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; path=/some/other/path"));
3022 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; path=/some/other/path")); 3029 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; path=/some/other/path"));
3023 3030
3024 // Tests that non-equivalent cookies because of the domain attribute can be 3031 // Tests that non-equivalent cookies because of the domain attribute can be
3025 // set successfully. 3032 // set successfully.
3026 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure")); 3033 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure"));
3027 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; domain=google.com")); 3034 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; domain=google.com"));
3028 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; domain=google.com")); 3035 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; domain=google.com"));
3029 } 3036 }
3030 3037
3031 // Test that cookie delete equivalent histograms are recorded correctly for 3038 // Test that cookie delete equivalent histograms are recorded correctly for
3032 // strict secure cookies. 3039 // strict secure cookies.
3033 TEST_F(CookieMonsterStrictSecureTest, CookieDeleteEquivalentHistogramTest) { 3040 TEST_F(CookieMonsterStrictSecureTest, CookieDeleteEquivalentHistogramTest) {
3034 base::HistogramTester histograms; 3041 base::HistogramTester histograms;
3035 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent"; 3042 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent";
3036 3043
3037 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 3044 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
3038 scoped_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 3045 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
3039 3046
3040 // Set a secure cookie from a secure origin 3047 // Set a secure cookie from a secure origin
3041 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure")); 3048 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure"));
3042 histograms.ExpectTotalCount(cookie_source_histogram, 1); 3049 histograms.ExpectTotalCount(cookie_source_histogram, 1);
3043 histograms.ExpectBucketCount(cookie_source_histogram, 3050 histograms.ExpectBucketCount(cookie_source_histogram,
3044 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 3051 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3045 1); 3052 1);
3046 3053
3047 // Set a new cookie with a different name from a variety of origins (including 3054 // Set a new cookie with a different name from a variety of origins (including
3048 // the same one). 3055 // the same one).
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
3114 3121
3115 ~CookieMonsterNotificationTest() override {} 3122 ~CookieMonsterNotificationTest() override {}
3116 3123
3117 CookieMonster* monster() { return monster_.get(); } 3124 CookieMonster* monster() { return monster_.get(); }
3118 3125
3119 protected: 3126 protected:
3120 const GURL test_url_; 3127 const GURL test_url_;
3121 3128
3122 private: 3129 private:
3123 scoped_refptr<MockPersistentCookieStore> store_; 3130 scoped_refptr<MockPersistentCookieStore> store_;
3124 scoped_ptr<CookieMonster> monster_; 3131 std::unique_ptr<CookieMonster> monster_;
3125 }; 3132 };
3126 3133
3127 void RecordCookieChanges(std::vector<CanonicalCookie>* out_cookies, 3134 void RecordCookieChanges(std::vector<CanonicalCookie>* out_cookies,
3128 std::vector<bool>* out_removes, 3135 std::vector<bool>* out_removes,
3129 const CanonicalCookie& cookie, 3136 const CanonicalCookie& cookie,
3130 bool removed) { 3137 bool removed) {
3131 DCHECK(out_cookies); 3138 DCHECK(out_cookies);
3132 out_cookies->push_back(cookie); 3139 out_cookies->push_back(cookie);
3133 if (out_removes) 3140 if (out_removes)
3134 out_removes->push_back(removed); 3141 out_removes->push_back(removed);
3135 } 3142 }
3136 3143
3137 TEST_F(CookieMonsterNotificationTest, NoNotifyWithNoCookie) { 3144 TEST_F(CookieMonsterNotificationTest, NoNotifyWithNoCookie) {
3138 std::vector<CanonicalCookie> cookies; 3145 std::vector<CanonicalCookie> cookies;
3139 scoped_ptr<CookieStore::CookieChangedSubscription> sub( 3146 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3140 monster()->AddCallbackForCookie( 3147 monster()->AddCallbackForCookie(
3141 test_url_, "abc", 3148 test_url_, "abc",
3142 base::Bind(&RecordCookieChanges, &cookies, nullptr))); 3149 base::Bind(&RecordCookieChanges, &cookies, nullptr)));
3143 base::MessageLoop::current()->RunUntilIdle(); 3150 base::MessageLoop::current()->RunUntilIdle();
3144 EXPECT_EQ(0U, cookies.size()); 3151 EXPECT_EQ(0U, cookies.size());
3145 } 3152 }
3146 3153
3147 TEST_F(CookieMonsterNotificationTest, NoNotifyWithInitialCookie) { 3154 TEST_F(CookieMonsterNotificationTest, NoNotifyWithInitialCookie) {
3148 std::vector<CanonicalCookie> cookies; 3155 std::vector<CanonicalCookie> cookies;
3149 SetCookie(monster(), test_url_, "abc=def"); 3156 SetCookie(monster(), test_url_, "abc=def");
3150 base::MessageLoop::current()->RunUntilIdle(); 3157 base::MessageLoop::current()->RunUntilIdle();
3151 scoped_ptr<CookieStore::CookieChangedSubscription> sub( 3158 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3152 monster()->AddCallbackForCookie( 3159 monster()->AddCallbackForCookie(
3153 test_url_, "abc", 3160 test_url_, "abc",
3154 base::Bind(&RecordCookieChanges, &cookies, nullptr))); 3161 base::Bind(&RecordCookieChanges, &cookies, nullptr)));
3155 base::MessageLoop::current()->RunUntilIdle(); 3162 base::MessageLoop::current()->RunUntilIdle();
3156 EXPECT_EQ(0U, cookies.size()); 3163 EXPECT_EQ(0U, cookies.size());
3157 } 3164 }
3158 3165
3159 TEST_F(CookieMonsterNotificationTest, NotifyOnSet) { 3166 TEST_F(CookieMonsterNotificationTest, NotifyOnSet) {
3160 std::vector<CanonicalCookie> cookies; 3167 std::vector<CanonicalCookie> cookies;
3161 std::vector<bool> removes; 3168 std::vector<bool> removes;
3162 scoped_ptr<CookieStore::CookieChangedSubscription> sub( 3169 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3163 monster()->AddCallbackForCookie( 3170 monster()->AddCallbackForCookie(
3164 test_url_, "abc", 3171 test_url_, "abc",
3165 base::Bind(&RecordCookieChanges, &cookies, &removes))); 3172 base::Bind(&RecordCookieChanges, &cookies, &removes)));
3166 SetCookie(monster(), test_url_, "abc=def"); 3173 SetCookie(monster(), test_url_, "abc=def");
3167 base::MessageLoop::current()->RunUntilIdle(); 3174 base::MessageLoop::current()->RunUntilIdle();
3168 EXPECT_EQ(1U, cookies.size()); 3175 EXPECT_EQ(1U, cookies.size());
3169 EXPECT_EQ(1U, removes.size()); 3176 EXPECT_EQ(1U, removes.size());
3170 3177
3171 EXPECT_EQ("abc", cookies[0].Name()); 3178 EXPECT_EQ("abc", cookies[0].Name());
3172 EXPECT_EQ("def", cookies[0].Value()); 3179 EXPECT_EQ("def", cookies[0].Value());
3173 EXPECT_FALSE(removes[0]); 3180 EXPECT_FALSE(removes[0]);
3174 } 3181 }
3175 3182
3176 TEST_F(CookieMonsterNotificationTest, NotifyOnDelete) { 3183 TEST_F(CookieMonsterNotificationTest, NotifyOnDelete) {
3177 std::vector<CanonicalCookie> cookies; 3184 std::vector<CanonicalCookie> cookies;
3178 std::vector<bool> removes; 3185 std::vector<bool> removes;
3179 scoped_ptr<CookieStore::CookieChangedSubscription> sub( 3186 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3180 monster()->AddCallbackForCookie( 3187 monster()->AddCallbackForCookie(
3181 test_url_, "abc", 3188 test_url_, "abc",
3182 base::Bind(&RecordCookieChanges, &cookies, &removes))); 3189 base::Bind(&RecordCookieChanges, &cookies, &removes)));
3183 SetCookie(monster(), test_url_, "abc=def"); 3190 SetCookie(monster(), test_url_, "abc=def");
3184 base::MessageLoop::current()->RunUntilIdle(); 3191 base::MessageLoop::current()->RunUntilIdle();
3185 EXPECT_EQ(1U, cookies.size()); 3192 EXPECT_EQ(1U, cookies.size());
3186 EXPECT_EQ(1U, removes.size()); 3193 EXPECT_EQ(1U, removes.size());
3187 3194
3188 DeleteCookie(monster(), test_url_, "abc"); 3195 DeleteCookie(monster(), test_url_, "abc");
3189 base::MessageLoop::current()->RunUntilIdle(); 3196 base::MessageLoop::current()->RunUntilIdle();
3190 EXPECT_EQ(2U, cookies.size()); 3197 EXPECT_EQ(2U, cookies.size());
3191 EXPECT_EQ(2U, removes.size()); 3198 EXPECT_EQ(2U, removes.size());
3192 3199
3193 EXPECT_EQ("abc", cookies[1].Name()); 3200 EXPECT_EQ("abc", cookies[1].Name());
3194 EXPECT_EQ("def", cookies[1].Value()); 3201 EXPECT_EQ("def", cookies[1].Value());
3195 EXPECT_TRUE(removes[1]); 3202 EXPECT_TRUE(removes[1]);
3196 } 3203 }
3197 3204
3198 TEST_F(CookieMonsterNotificationTest, NotifyOnUpdate) { 3205 TEST_F(CookieMonsterNotificationTest, NotifyOnUpdate) {
3199 std::vector<CanonicalCookie> cookies; 3206 std::vector<CanonicalCookie> cookies;
3200 std::vector<bool> removes; 3207 std::vector<bool> removes;
3201 scoped_ptr<CookieStore::CookieChangedSubscription> sub( 3208 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3202 monster()->AddCallbackForCookie( 3209 monster()->AddCallbackForCookie(
3203 test_url_, "abc", 3210 test_url_, "abc",
3204 base::Bind(&RecordCookieChanges, &cookies, &removes))); 3211 base::Bind(&RecordCookieChanges, &cookies, &removes)));
3205 SetCookie(monster(), test_url_, "abc=def"); 3212 SetCookie(monster(), test_url_, "abc=def");
3206 base::MessageLoop::current()->RunUntilIdle(); 3213 base::MessageLoop::current()->RunUntilIdle();
3207 EXPECT_EQ(1U, cookies.size()); 3214 EXPECT_EQ(1U, cookies.size());
3208 3215
3209 // Replacing an existing cookie is actually a two-phase delete + set 3216 // Replacing an existing cookie is actually a two-phase delete + set
3210 // operation, so we get an extra notification. 3217 // operation, so we get an extra notification.
3211 SetCookie(monster(), test_url_, "abc=ghi"); 3218 SetCookie(monster(), test_url_, "abc=ghi");
3212 base::MessageLoop::current()->RunUntilIdle(); 3219 base::MessageLoop::current()->RunUntilIdle();
3213 3220
3214 EXPECT_EQ(3U, cookies.size()); 3221 EXPECT_EQ(3U, cookies.size());
3215 EXPECT_EQ(3U, removes.size()); 3222 EXPECT_EQ(3U, removes.size());
3216 3223
3217 EXPECT_EQ("abc", cookies[1].Name()); 3224 EXPECT_EQ("abc", cookies[1].Name());
3218 EXPECT_EQ("def", cookies[1].Value()); 3225 EXPECT_EQ("def", cookies[1].Value());
3219 EXPECT_TRUE(removes[1]); 3226 EXPECT_TRUE(removes[1]);
3220 3227
3221 EXPECT_EQ("abc", cookies[2].Name()); 3228 EXPECT_EQ("abc", cookies[2].Name());
3222 EXPECT_EQ("ghi", cookies[2].Value()); 3229 EXPECT_EQ("ghi", cookies[2].Value());
3223 EXPECT_FALSE(removes[2]); 3230 EXPECT_FALSE(removes[2]);
3224 } 3231 }
3225 3232
3226 TEST_F(CookieMonsterNotificationTest, MultipleNotifies) { 3233 TEST_F(CookieMonsterNotificationTest, MultipleNotifies) {
3227 std::vector<CanonicalCookie> cookies0; 3234 std::vector<CanonicalCookie> cookies0;
3228 std::vector<CanonicalCookie> cookies1; 3235 std::vector<CanonicalCookie> cookies1;
3229 scoped_ptr<CookieStore::CookieChangedSubscription> sub0( 3236 std::unique_ptr<CookieStore::CookieChangedSubscription> sub0(
3230 monster()->AddCallbackForCookie( 3237 monster()->AddCallbackForCookie(
3231 test_url_, "abc", 3238 test_url_, "abc",
3232 base::Bind(&RecordCookieChanges, &cookies0, nullptr))); 3239 base::Bind(&RecordCookieChanges, &cookies0, nullptr)));
3233 scoped_ptr<CookieStore::CookieChangedSubscription> sub1( 3240 std::unique_ptr<CookieStore::CookieChangedSubscription> sub1(
3234 monster()->AddCallbackForCookie( 3241 monster()->AddCallbackForCookie(
3235 test_url_, "def", 3242 test_url_, "def",
3236 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); 3243 base::Bind(&RecordCookieChanges, &cookies1, nullptr)));
3237 SetCookie(monster(), test_url_, "abc=def"); 3244 SetCookie(monster(), test_url_, "abc=def");
3238 base::MessageLoop::current()->RunUntilIdle(); 3245 base::MessageLoop::current()->RunUntilIdle();
3239 EXPECT_EQ(1U, cookies0.size()); 3246 EXPECT_EQ(1U, cookies0.size());
3240 EXPECT_EQ(0U, cookies1.size()); 3247 EXPECT_EQ(0U, cookies1.size());
3241 SetCookie(monster(), test_url_, "def=abc"); 3248 SetCookie(monster(), test_url_, "def=abc");
3242 base::MessageLoop::current()->RunUntilIdle(); 3249 base::MessageLoop::current()->RunUntilIdle();
3243 EXPECT_EQ(1U, cookies0.size()); 3250 EXPECT_EQ(1U, cookies0.size());
3244 EXPECT_EQ(1U, cookies1.size()); 3251 EXPECT_EQ(1U, cookies1.size());
3245 } 3252 }
3246 3253
3247 TEST_F(CookieMonsterNotificationTest, MultipleSameNotifies) { 3254 TEST_F(CookieMonsterNotificationTest, MultipleSameNotifies) {
3248 std::vector<CanonicalCookie> cookies0; 3255 std::vector<CanonicalCookie> cookies0;
3249 std::vector<CanonicalCookie> cookies1; 3256 std::vector<CanonicalCookie> cookies1;
3250 scoped_ptr<CookieStore::CookieChangedSubscription> sub0( 3257 std::unique_ptr<CookieStore::CookieChangedSubscription> sub0(
3251 monster()->AddCallbackForCookie( 3258 monster()->AddCallbackForCookie(
3252 test_url_, "abc", 3259 test_url_, "abc",
3253 base::Bind(&RecordCookieChanges, &cookies0, nullptr))); 3260 base::Bind(&RecordCookieChanges, &cookies0, nullptr)));
3254 scoped_ptr<CookieStore::CookieChangedSubscription> sub1( 3261 std::unique_ptr<CookieStore::CookieChangedSubscription> sub1(
3255 monster()->AddCallbackForCookie( 3262 monster()->AddCallbackForCookie(
3256 test_url_, "abc", 3263 test_url_, "abc",
3257 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); 3264 base::Bind(&RecordCookieChanges, &cookies1, nullptr)));
3258 SetCookie(monster(), test_url_, "abc=def"); 3265 SetCookie(monster(), test_url_, "abc=def");
3259 base::MessageLoop::current()->RunUntilIdle(); 3266 base::MessageLoop::current()->RunUntilIdle();
3260 EXPECT_EQ(1U, cookies0.size()); 3267 EXPECT_EQ(1U, cookies0.size());
3261 EXPECT_EQ(1U, cookies0.size()); 3268 EXPECT_EQ(1U, cookies0.size());
3262 } 3269 }
3263 3270
3264 } // namespace net 3271 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster_store_test.cc ('k') | net/cookies/cookie_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698