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

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

Issue 1844243002: [CookieStore] Upgrading host-based deleting to predicate-based deleting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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.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_store_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 19 matching lines...) Expand all
30 #include "net/cookies/cookie_monster.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_util.h" 32 #include "net/cookies/cookie_util.h"
33 #include "net/cookies/parsed_cookie.h" 33 #include "net/cookies/parsed_cookie.h"
34 #include "testing/gmock/include/gmock/gmock.h" 34 #include "testing/gmock/include/gmock/gmock.h"
35 #include "testing/gtest/include/gtest/gtest.h" 35 #include "testing/gtest/include/gtest/gtest.h"
36 #include "url/gurl.h" 36 #include "url/gurl.h"
37 37
38 namespace net { 38 namespace net {
39 39
40 using CookiePredicate = CookieStore::CookiePredicate;
40 using base::Time; 41 using base::Time;
41 using base::TimeDelta; 42 using base::TimeDelta;
42 43
43 namespace { 44 namespace {
44 45
45 // TODO(erikwright): Replace the pre-existing MockPersistentCookieStore (and 46 // TODO(erikwright): Replace the pre-existing MockPersistentCookieStore (and
46 // brethren) with this one, and remove the 'New' prefix. 47 // brethren) with this one, and remove the 'New' prefix.
47 class NewMockPersistentCookieStore 48 class NewMockPersistentCookieStore
48 : public CookieMonster::PersistentCookieStore { 49 : public CookieMonster::PersistentCookieStore {
49 public: 50 public:
50 MOCK_METHOD1(Load, void(const LoadedCallback& loaded_callback)); 51 MOCK_METHOD1(Load, void(const LoadedCallback& loaded_callback));
51 MOCK_METHOD2(LoadCookiesForKey, 52 MOCK_METHOD2(LoadCookiesForKey,
52 void(const std::string& key, 53 void(const std::string& key,
53 const LoadedCallback& loaded_callback)); 54 const LoadedCallback& loaded_callback));
54 MOCK_METHOD1(AddCookie, void(const CanonicalCookie& cc)); 55 MOCK_METHOD1(AddCookie, void(const CanonicalCookie& cc));
55 MOCK_METHOD1(UpdateCookieAccessTime, void(const CanonicalCookie& cc)); 56 MOCK_METHOD1(UpdateCookieAccessTime, void(const CanonicalCookie& cc));
56 MOCK_METHOD1(DeleteCookie, void(const CanonicalCookie& cc)); 57 MOCK_METHOD1(DeleteCookie, void(const CanonicalCookie& cc));
57 virtual void Flush(const base::Closure& callback) { 58 virtual void Flush(const base::Closure& callback) {
58 if (!callback.is_null()) 59 if (!callback.is_null())
59 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); 60 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
60 } 61 }
61 MOCK_METHOD0(SetForceKeepSessionState, void()); 62 MOCK_METHOD0(SetForceKeepSessionState, void());
62 63
63 private: 64 private:
64 virtual ~NewMockPersistentCookieStore() {} 65 virtual ~NewMockPersistentCookieStore() {}
65 }; 66 };
66 67
68 // False means 'less than or equal', so we test both ways for full equal.
69 MATCHER_P(CookieEquals, expected, "") {
70 return !(arg.FullCompare(expected) || expected.FullCompare(arg));
71 }
72
67 const char kTopLevelDomainPlus1[] = "http://www.harvard.edu"; 73 const char kTopLevelDomainPlus1[] = "http://www.harvard.edu";
68 const char kTopLevelDomainPlus2[] = "http://www.math.harvard.edu"; 74 const char kTopLevelDomainPlus2[] = "http://www.math.harvard.edu";
69 const char kTopLevelDomainPlus2Secure[] = "https://www.math.harvard.edu"; 75 const char kTopLevelDomainPlus2Secure[] = "https://www.math.harvard.edu";
70 const char kTopLevelDomainPlus3[] = "http://www.bourbaki.math.harvard.edu"; 76 const char kTopLevelDomainPlus3[] = "http://www.bourbaki.math.harvard.edu";
71 const char kOtherDomain[] = "http://www.mit.edu"; 77 const char kOtherDomain[] = "http://www.mit.edu";
72 78
79 bool AlwaysTrueCookiePredicate(CanonicalCookie* to_save,
80 const CanonicalCookie& cookie) {
81 if (to_save)
82 *to_save = cookie;
83 return true;
84 }
85
86 bool AlwaysFalseCookiePredicate(CanonicalCookie* to_save,
87 const CanonicalCookie& cookie) {
88 if (to_save)
89 *to_save = cookie;
90 return false;
91 }
92
93 bool CookieValuePredicate(const std::string& true_value,
94 const CanonicalCookie& cookie) {
95 return cookie.Value() == true_value;
96 }
97
73 struct CookieMonsterTestTraits { 98 struct CookieMonsterTestTraits {
74 static scoped_ptr<CookieStore> Create() { 99 static scoped_ptr<CookieStore> Create() {
75 return make_scoped_ptr(new CookieMonster(nullptr, nullptr)); 100 return make_scoped_ptr(new CookieMonster(nullptr, nullptr));
76 } 101 }
77 102
78 static const bool supports_http_only = true; 103 static const bool supports_http_only = true;
79 static const bool supports_non_dotted_domains = true; 104 static const bool supports_non_dotted_domains = true;
80 static const bool preserves_trailing_dots = true; 105 static const bool preserves_trailing_dots = true;
81 static const bool filters_schemes = true; 106 static const bool filters_schemes = true;
82 static const bool has_path_prefix_bug = false; 107 static const bool has_path_prefix_bug = false;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 DCHECK(cm); 168 DCHECK(cm);
144 ResultSavingCookieCallback<int> callback; 169 ResultSavingCookieCallback<int> callback;
145 cm->DeleteAllCreatedBetweenAsync( 170 cm->DeleteAllCreatedBetweenAsync(
146 delete_begin, delete_end, 171 delete_begin, delete_end,
147 base::Bind(&ResultSavingCookieCallback<int>::Run, 172 base::Bind(&ResultSavingCookieCallback<int>::Run,
148 base::Unretained(&callback))); 173 base::Unretained(&callback)));
149 callback.WaitUntilDone(); 174 callback.WaitUntilDone();
150 return callback.result(); 175 return callback.result();
151 } 176 }
152 177
153 int DeleteAllCreatedBetweenForHost(CookieMonster* cm, 178 int DeleteAllCreatedBetweenWithPredicate(CookieMonster* cm,
154 const base::Time delete_begin, 179 const base::Time delete_begin,
155 const base::Time delete_end, 180 const base::Time delete_end,
156 const GURL& url) { 181 const CookiePredicate& predicate) {
157 DCHECK(cm); 182 DCHECK(cm);
158 ResultSavingCookieCallback<int> callback; 183 ResultSavingCookieCallback<int> callback;
159 cm->DeleteAllCreatedBetweenForHostAsync( 184 cm->DeleteAllCreatedBetweenWithPredicateAsync(
160 delete_begin, delete_end, url, 185 delete_begin, delete_end, predicate,
161 base::Bind(&ResultSavingCookieCallback<int>::Run, 186 base::Bind(&ResultSavingCookieCallback<int>::Run,
162 base::Unretained(&callback))); 187 base::Unretained(&callback)));
163 callback.WaitUntilDone(); 188 callback.WaitUntilDone();
164 return callback.result(); 189 return callback.result();
165 } 190 }
166 191
167 // Helper for DeleteAllForHost test; repopulates CM with same layout 192 // Helper for PredicateSeesAllCookies test; repopulates CM with same layout
168 // each time. 193 // each time.
169 void PopulateCmForDeleteAllForHost(CookieMonster* cm) { 194 void PopulateCmForPredicateCheck(CookieMonster* cm) {
170 GURL url_top_level_domain_plus_1(kTopLevelDomainPlus1); 195 GURL url_top_level_domain_plus_1(kTopLevelDomainPlus1);
171 GURL url_top_level_domain_plus_2(kTopLevelDomainPlus2); 196 GURL url_top_level_domain_plus_2(kTopLevelDomainPlus2);
172 GURL url_top_level_domain_plus_2_secure(kTopLevelDomainPlus2Secure); 197 GURL url_top_level_domain_plus_2_secure(kTopLevelDomainPlus2Secure);
173 GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3); 198 GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3);
174 GURL url_other(kOtherDomain); 199 GURL url_other(kOtherDomain);
175 200
176 this->DeleteAll(cm); 201 this->DeleteAll(cm);
177 202
178 // Static population for probe: 203 // Static population for probe:
179 // * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a) 204 // * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a)
180 // * Three levels of host cookie (w.b.a, w.c.b.a, w.d.c.b.a) 205 // * Three levels of host cookie (w.b.a, w.c.b.a, w.d.c.b.a)
181 // * http_only cookie (w.c.b.a) 206 // * http_only cookie (w.c.b.a)
182 // * same_site cookie (w.c.b.a) 207 // * same_site cookie (w.c.b.a)
183 // * Two secure cookies (.c.b.a, w.c.b.a) 208 // * Two secure cookies (.c.b.a, w.c.b.a)
184 // * Two domain path cookies (.c.b.a/dir1, .c.b.a/dir1/dir2) 209 // * Two domain path cookies (.c.b.a/dir1, .c.b.a/dir1/dir2)
185 // * Two host path cookies (w.c.b.a/dir1, w.c.b.a/dir1/dir2) 210 // * Two host path cookies (w.c.b.a/dir1, w.c.b.a/dir1/dir2)
186 211
187 // Domain cookies 212 // Domain cookies
188 EXPECT_TRUE(this->SetCookieWithDetails( 213 EXPECT_TRUE(this->SetCookieWithDetails(
189 cm, url_top_level_domain_plus_1, "dom_1", "X", ".harvard.edu", "/", 214 cm, url_top_level_domain_plus_1, "dom_1", "A", ".harvard.edu", "/",
190 base::Time(), base::Time(), base::Time(), false, false, 215 base::Time(), base::Time(), base::Time(), false, false,
191 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 216 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
192 EXPECT_TRUE(this->SetCookieWithDetails( 217 EXPECT_TRUE(this->SetCookieWithDetails(
193 cm, url_top_level_domain_plus_2, "dom_2", "X", ".math.harvard.edu", "/", 218 cm, url_top_level_domain_plus_2, "dom_2", "B", ".math.harvard.edu", "/",
194 base::Time(), base::Time(), base::Time(), false, false, 219 base::Time(), base::Time(), base::Time(), false, false,
195 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 220 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
196 EXPECT_TRUE(this->SetCookieWithDetails( 221 EXPECT_TRUE(this->SetCookieWithDetails(
197 cm, url_top_level_domain_plus_3, "dom_3", "X", 222 cm, url_top_level_domain_plus_3, "dom_3", "C",
198 ".bourbaki.math.harvard.edu", "/", base::Time(), base::Time(), 223 ".bourbaki.math.harvard.edu", "/", base::Time(), base::Time(),
199 base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 224 base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
200 COOKIE_PRIORITY_DEFAULT)); 225 COOKIE_PRIORITY_DEFAULT));
201 226
202 // Host cookies 227 // Host cookies
203 EXPECT_TRUE(this->SetCookieWithDetails( 228 EXPECT_TRUE(this->SetCookieWithDetails(
204 cm, url_top_level_domain_plus_1, "host_1", "X", std::string(), "/", 229 cm, url_top_level_domain_plus_1, "host_1", "A", std::string(), "/",
205 base::Time(), base::Time(), base::Time(), false, false, 230 base::Time(), base::Time(), base::Time(), false, false,
206 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 231 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
207 EXPECT_TRUE(this->SetCookieWithDetails( 232 EXPECT_TRUE(this->SetCookieWithDetails(
208 cm, url_top_level_domain_plus_2, "host_2", "X", std::string(), "/", 233 cm, url_top_level_domain_plus_2, "host_2", "B", std::string(), "/",
209 base::Time(), base::Time(), base::Time(), false, false, 234 base::Time(), base::Time(), base::Time(), false, false,
210 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 235 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
211 EXPECT_TRUE(this->SetCookieWithDetails( 236 EXPECT_TRUE(this->SetCookieWithDetails(
212 cm, url_top_level_domain_plus_3, "host_3", "X", std::string(), "/", 237 cm, url_top_level_domain_plus_3, "host_3", "C", std::string(), "/",
213 base::Time(), base::Time(), base::Time(), false, false, 238 base::Time(), base::Time(), base::Time(), false, false,
214 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 239 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
215 240
216 // http_only cookie 241 // http_only cookie
217 EXPECT_TRUE(this->SetCookieWithDetails( 242 EXPECT_TRUE(this->SetCookieWithDetails(
218 cm, url_top_level_domain_plus_2, "httpo_check", "x", std::string(), "/", 243 cm, url_top_level_domain_plus_2, "httpo_check", "A", std::string(), "/",
219 base::Time(), base::Time(), base::Time(), false, true, 244 base::Time(), base::Time(), base::Time(), false, true,
220 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 245 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
221 246
222 // same-site cookie 247 // same-site cookie
223 EXPECT_TRUE(this->SetCookieWithDetails( 248 EXPECT_TRUE(this->SetCookieWithDetails(
224 cm, url_top_level_domain_plus_2, "firstp_check", "x", std::string(), 249 cm, url_top_level_domain_plus_2, "firstp_check", "A", std::string(),
225 "/", base::Time(), base::Time(), base::Time(), false, false, 250 "/", base::Time(), base::Time(), base::Time(), false, false,
226 CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT)); 251 CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT));
227 252
228 // Secure cookies 253 // Secure cookies
229 EXPECT_TRUE(this->SetCookieWithDetails( 254 EXPECT_TRUE(this->SetCookieWithDetails(
230 cm, url_top_level_domain_plus_2_secure, "sec_dom", "X", 255 cm, url_top_level_domain_plus_2_secure, "sec_dom", "A",
231 ".math.harvard.edu", "/", base::Time(), base::Time(), base::Time(), 256 ".math.harvard.edu", "/", base::Time(), base::Time(), base::Time(),
232 true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 257 true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
233 EXPECT_TRUE(this->SetCookieWithDetails( 258 EXPECT_TRUE(this->SetCookieWithDetails(
234 cm, url_top_level_domain_plus_2_secure, "sec_host", "X", std::string(), 259 cm, url_top_level_domain_plus_2_secure, "sec_host", "B", std::string(),
235 "/", base::Time(), base::Time(), base::Time(), true, false, 260 "/", base::Time(), base::Time(), base::Time(), true, false,
236 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 261 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
237 262
238 // Domain path cookies 263 // Domain path cookies
239 EXPECT_TRUE(this->SetCookieWithDetails( 264 EXPECT_TRUE(this->SetCookieWithDetails(
240 cm, url_top_level_domain_plus_2, "dom_path_1", "X", ".math.harvard.edu", 265 cm, url_top_level_domain_plus_2, "dom_path_1", "A", ".math.harvard.edu",
241 "/dir1", base::Time(), base::Time(), base::Time(), false, false, 266 "/dir1", base::Time(), base::Time(), base::Time(), false, false,
242 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 267 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
243 EXPECT_TRUE(this->SetCookieWithDetails( 268 EXPECT_TRUE(this->SetCookieWithDetails(
244 cm, url_top_level_domain_plus_2, "dom_path_2", "X", ".math.harvard.edu", 269 cm, url_top_level_domain_plus_2, "dom_path_2", "B", ".math.harvard.edu",
245 "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false, 270 "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false,
246 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 271 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
247 272
248 // Host path cookies 273 // Host path cookies
249 EXPECT_TRUE(this->SetCookieWithDetails( 274 EXPECT_TRUE(this->SetCookieWithDetails(
250 cm, url_top_level_domain_plus_2, "host_path_1", "X", std::string(), 275 cm, url_top_level_domain_plus_2, "host_path_1", "A", std::string(),
251 "/dir1", base::Time(), base::Time(), base::Time(), false, false, 276 "/dir1", base::Time(), base::Time(), base::Time(), false, false,
252 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 277 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
253 EXPECT_TRUE(this->SetCookieWithDetails( 278 EXPECT_TRUE(this->SetCookieWithDetails(
254 cm, url_top_level_domain_plus_2, "host_path_2", "X", std::string(), 279 cm, url_top_level_domain_plus_2, "host_path_2", "B", std::string(),
255 "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false, 280 "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false,
256 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); 281 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
257 282
258 EXPECT_EQ(14U, this->GetAllCookies(cm).size()); 283 EXPECT_EQ(14U, this->GetAllCookies(cm).size());
259 } 284 }
260 285
261 Time GetFirstCookieAccessDate(CookieMonster* cm) { 286 Time GetFirstCookieAccessDate(CookieMonster* cm) {
262 const CookieList all_cookies(this->GetAllCookies(cm)); 287 const CookieList all_cookies(this->GetAllCookies(cm));
263 return all_cookies.front().LastAccessDate(); 288 return all_cookies.front().LastAccessDate();
264 } 289 }
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 cc.url, cc.name, cc.value, cc.domain, cc.path, base::Time(), 685 cc.url, cc.name, cc.value, cc.domain, cc.path, base::Time(),
661 cc.expiration_time, base::Time(), cc.secure, cc.http_only, cc.same_site, 686 cc.expiration_time, base::Time(), cc.secure, cc.http_only, cc.same_site,
662 false /* enforces strict secure cookies */, cc.priority, 687 false /* enforces strict secure cookies */, cc.priority,
663 callback->AsCallback()); 688 callback->AsCallback());
664 } 689 }
665 690
666 ACTION_P2(GetAllCookiesAction, cookie_monster, callback) { 691 ACTION_P2(GetAllCookiesAction, cookie_monster, callback) {
667 cookie_monster->GetAllCookiesAsync(callback->AsCallback()); 692 cookie_monster->GetAllCookiesAsync(callback->AsCallback());
668 } 693 }
669 694
670 ACTION_P5(DeleteAllCreatedBetweenForHostAction, 695 ACTION_P5(DeleteAllCreatedBetweenWithPredicateAction,
671 cookie_monster, 696 cookie_monster,
672 delete_begin, 697 delete_begin,
673 delete_end, 698 delete_end,
674 url, 699 predicate,
675 callback) { 700 callback) {
676 cookie_monster->DeleteAllCreatedBetweenForHostAsync( 701 cookie_monster->DeleteAllCreatedBetweenWithPredicateAsync(
677 delete_begin, delete_end, url, callback->AsCallback()); 702 delete_begin, delete_end, predicate, callback->AsCallback());
678 } 703 }
679 704
680 ACTION_P3(DeleteCanonicalCookieAction, cookie_monster, cookie, callback) { 705 ACTION_P3(DeleteCanonicalCookieAction, cookie_monster, cookie, callback) {
681 cookie_monster->DeleteCanonicalCookieAsync(cookie, callback->AsCallback()); 706 cookie_monster->DeleteCanonicalCookieAsync(cookie, callback->AsCallback());
682 } 707 }
683 708
684 ACTION_P2(DeleteAllAction, cookie_monster, callback) { 709 ACTION_P2(DeleteAllAction, cookie_monster, callback) {
685 cookie_monster->DeleteAllAsync(callback->AsCallback()); 710 cookie_monster->DeleteAllAsync(callback->AsCallback());
686 } 711 }
687 712
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 .WillOnce(DeleteAllCreatedBetweenAction(&cookie_monster(), base::Time(), 1068 .WillOnce(DeleteAllCreatedBetweenAction(&cookie_monster(), base::Time(),
1044 base::Time::Now(), 1069 base::Time::Now(),
1045 &delete_callback)); 1070 &delete_callback));
1046 base::RunLoop loop; 1071 base::RunLoop loop;
1047 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop)); 1072 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
1048 1073
1049 CompleteLoading(); 1074 CompleteLoading();
1050 loop.Run(); 1075 loop.Run();
1051 } 1076 }
1052 1077
1053 TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCreatedBetweenCookies) { 1078 TEST_F(DeferredCookieTaskTest,
1079 DeferredDeleteAllWithPredicateCreatedBetweenCookies) {
1054 MockDeleteCallback delete_callback; 1080 MockDeleteCallback delete_callback;
1055 1081
1056 BeginWithForDomainKey(http_www_google_.domain(), 1082 CookiePredicate predicate = base::Bind(&AlwaysTrueCookiePredicate, nullptr);
1057 DeleteAllCreatedBetweenForHostAction( 1083
1058 &cookie_monster(), base::Time(), base::Time::Now(), 1084 BeginWith(DeleteAllCreatedBetweenWithPredicateAction(
1059 http_www_google_.url(), &delete_callback)); 1085 &cookie_monster(), base::Time(), base::Time::Now(), predicate,
1086 &delete_callback));
1060 1087
1061 WaitForLoadCall(); 1088 WaitForLoadCall();
1062 1089
1063 EXPECT_CALL(delete_callback, Invoke(false)) 1090 EXPECT_CALL(delete_callback, Invoke(false))
1064 .WillOnce(DeleteAllCreatedBetweenForHostAction( 1091 .WillOnce(DeleteAllCreatedBetweenWithPredicateAction(
1065 &cookie_monster(), base::Time(), base::Time::Now(), 1092 &cookie_monster(), base::Time(), base::Time::Now(), predicate,
1066 http_www_google_.url(), &delete_callback)); 1093 &delete_callback));
1067 base::RunLoop loop; 1094 base::RunLoop loop;
1068 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop)); 1095 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
1069 1096
1070 CompleteLoading(); 1097 CompleteLoading();
1071 loop.Run(); 1098 loop.Run();
1072 } 1099 }
1073 1100
1074 TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) { 1101 TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) {
1075 std::vector<CanonicalCookie*> cookies; 1102 std::vector<CanonicalCookie*> cookies;
1076 scoped_ptr<CanonicalCookie> cookie = BuildCanonicalCookie( 1103 scoped_ptr<CanonicalCookie> cookie = BuildCanonicalCookie(
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1180 } 1207 }
1181 1208
1182 TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) { 1209 TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) {
1183 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1210 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1184 Time now = Time::Now(); 1211 Time now = Time::Now();
1185 1212
1186 // Nothing has been added so nothing should be deleted. 1213 // Nothing has been added so nothing should be deleted.
1187 EXPECT_EQ(0, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), 1214 EXPECT_EQ(0, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99),
1188 Time())); 1215 Time()));
1189 1216
1190 // Create 3 cookies with creation date of today, yesterday and the day before. 1217 // Create 5 cookies with different creation dates.
1191 EXPECT_TRUE( 1218 EXPECT_TRUE(
1192 cm->SetCookieWithCreationTime(http_www_google_.url(), "T-0=Now", now)); 1219 cm->SetCookieWithCreationTime(http_www_google_.url(), "T-0=Now", now));
1193 EXPECT_TRUE(cm->SetCookieWithCreationTime( 1220 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1194 http_www_google_.url(), "T-1=Yesterday", now - TimeDelta::FromDays(1))); 1221 http_www_google_.url(), "T-1=Yesterday", now - TimeDelta::FromDays(1)));
1195 EXPECT_TRUE(cm->SetCookieWithCreationTime( 1222 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1196 http_www_google_.url(), "T-2=DayBefore", now - TimeDelta::FromDays(2))); 1223 http_www_google_.url(), "T-2=DayBefore", now - TimeDelta::FromDays(2)));
1197 EXPECT_TRUE(cm->SetCookieWithCreationTime( 1224 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1198 http_www_google_.url(), "T-3=ThreeDays", now - TimeDelta::FromDays(3))); 1225 http_www_google_.url(), "T-3=ThreeDays", now - TimeDelta::FromDays(3)));
1199 EXPECT_TRUE(cm->SetCookieWithCreationTime( 1226 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1200 http_www_google_.url(), "T-7=LastWeek", now - TimeDelta::FromDays(7))); 1227 http_www_google_.url(), "T-7=LastWeek", now - TimeDelta::FromDays(7)));
(...skipping 11 matching lines...) Expand all
1212 EXPECT_EQ( 1239 EXPECT_EQ(
1213 1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(7), now)); 1240 1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(7), now));
1214 1241
1215 // Delete the last (now) item. 1242 // Delete the last (now) item.
1216 EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), Time(), Time())); 1243 EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), Time(), Time()));
1217 1244
1218 // Really make sure everything is gone. 1245 // Really make sure everything is gone.
1219 EXPECT_EQ(0, DeleteAll(cm.get())); 1246 EXPECT_EQ(0, DeleteAll(cm.get()));
1220 } 1247 }
1221 1248
1249 TEST_F(CookieMonsterTest,
1250 TestCookieDeleteAllCreatedBetweenTimestampsWithPredicate) {
1251 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1252 Time now = Time::Now();
1253
1254 CanonicalCookie test_cookie;
1255 CookiePredicate true_predicate =
1256 base::Bind(&AlwaysTrueCookiePredicate, &test_cookie);
1257
1258 CookiePredicate false_predicate =
1259 base::Bind(&AlwaysFalseCookiePredicate, &test_cookie);
1260
1261 // Nothing has been added so nothing should be deleted.
1262 EXPECT_EQ(
1263 0, DeleteAllCreatedBetweenWithPredicate(
1264 cm.get(), now - TimeDelta::FromDays(99), Time(), true_predicate));
1265
1266 // Create 5 cookies with different creation dates.
1267 EXPECT_TRUE(
1268 cm->SetCookieWithCreationTime(http_www_google_.url(), "T-0=Now", now));
1269 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1270 http_www_google_.url(), "T-1=Yesterday", now - TimeDelta::FromDays(1)));
1271 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1272 http_www_google_.url(), "T-2=DayBefore", now - TimeDelta::FromDays(2)));
1273 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1274 http_www_google_.url(), "T-3=ThreeDays", now - TimeDelta::FromDays(3)));
1275 EXPECT_TRUE(cm->SetCookieWithCreationTime(
1276 http_www_google_.url(), "T-7=LastWeek", now - TimeDelta::FromDays(7)));
1277
1278 // Try to delete threedays and the daybefore, but we should do nothing due
1279 // to the predicate.
1280 EXPECT_EQ(0, DeleteAllCreatedBetweenWithPredicate(
1281 cm.get(), now - TimeDelta::FromDays(3),
1282 now - TimeDelta::FromDays(1), false_predicate));
1283 // Same as above with a null predicate, so it shouldn't delete anything.
1284 EXPECT_EQ(0, DeleteAllCreatedBetweenWithPredicate(
1285 cm.get(), now - TimeDelta::FromDays(3),
1286 now - TimeDelta::FromDays(1), CookiePredicate()));
1287 // Same as above, but we use the true_predicate, so it works.
1288 EXPECT_EQ(2, DeleteAllCreatedBetweenWithPredicate(
1289 cm.get(), now - TimeDelta::FromDays(3),
1290 now - TimeDelta::FromDays(1), true_predicate));
1291
1292 // Try to delete yesterday, also make sure that delete_end is not
1293 // inclusive.
1294 EXPECT_EQ(0,
1295 DeleteAllCreatedBetweenWithPredicate(
1296 cm.get(), now - TimeDelta::FromDays(2), now, false_predicate));
1297 EXPECT_EQ(1,
1298 DeleteAllCreatedBetweenWithPredicate(
1299 cm.get(), now - TimeDelta::FromDays(2), now, true_predicate));
1300 // Check our cookie values.
1301 scoped_ptr<CanonicalCookie> expected_cookie =
1302 CanonicalCookie::Create(http_www_google_.url(), "T-1=Yesterday",
1303 now - TimeDelta::FromDays(1), CookieOptions());
1304 EXPECT_THAT(test_cookie, CookieEquals(*expected_cookie))
1305 << "Actual:\n"
1306 << test_cookie.DebugString() << "\nExpected:\n"
1307 << expected_cookie->DebugString();
1308
1309 // Make sure the delete_begin is inclusive.
1310 EXPECT_EQ(0,
1311 DeleteAllCreatedBetweenWithPredicate(
1312 cm.get(), now - TimeDelta::FromDays(7), now, false_predicate));
1313 EXPECT_EQ(1,
1314 DeleteAllCreatedBetweenWithPredicate(
1315 cm.get(), now - TimeDelta::FromDays(7), now, true_predicate));
1316
1317 // Delete the last (now) item.
1318 EXPECT_EQ(0, DeleteAllCreatedBetweenWithPredicate(cm.get(), Time(), Time(),
1319 false_predicate));
1320 EXPECT_EQ(1, DeleteAllCreatedBetweenWithPredicate(cm.get(), Time(), Time(),
1321 true_predicate));
1322 expected_cookie = CanonicalCookie::Create(http_www_google_.url(), "T-0=Now",
1323 now, CookieOptions());
1324 EXPECT_THAT(test_cookie, CookieEquals(*expected_cookie))
1325 << "Actual:\n"
1326 << test_cookie.DebugString() << "\nExpected:\n"
1327 << expected_cookie->DebugString();
1328
1329 // Really make sure everything is gone.
1330 EXPECT_EQ(0, DeleteAll(cm.get()));
1331 }
1332
1222 static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20; 1333 static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20;
1223 1334
1224 TEST_F(CookieMonsterTest, TestLastAccess) { 1335 TEST_F(CookieMonsterTest, TestLastAccess) {
1225 scoped_ptr<CookieMonster> cm( 1336 scoped_ptr<CookieMonster> cm(
1226 new CookieMonster(nullptr, nullptr, kLastAccessThresholdMilliseconds)); 1337 new CookieMonster(nullptr, nullptr, kLastAccessThresholdMilliseconds));
1227 1338
1228 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); 1339 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B"));
1229 const Time last_access_date(GetFirstCookieAccessDate(cm.get())); 1340 const Time last_access_date(GetFirstCookieAccessDate(cm.get()));
1230 1341
1231 // Reading the cookie again immediately shouldn't update the access date, 1342 // Reading the cookie again immediately shouldn't update the access date,
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 EXPECT_EQ("a", delegate->changes()[0].first.Name()); 1755 EXPECT_EQ("a", delegate->changes()[0].first.Name());
1645 EXPECT_EQ("val1", delegate->changes()[0].first.Value()); 1756 EXPECT_EQ("val1", delegate->changes()[0].first.Value());
1646 EXPECT_EQ(http_www_google_.url().host(), 1757 EXPECT_EQ(http_www_google_.url().host(),
1647 delegate->changes()[1].first.Domain()); 1758 delegate->changes()[1].first.Domain());
1648 EXPECT_FALSE(delegate->changes()[1].second); 1759 EXPECT_FALSE(delegate->changes()[1].second);
1649 EXPECT_EQ("a", delegate->changes()[1].first.Name()); 1760 EXPECT_EQ("a", delegate->changes()[1].first.Name());
1650 EXPECT_EQ("val2", delegate->changes()[1].first.Value()); 1761 EXPECT_EQ("val2", delegate->changes()[1].first.Value());
1651 delegate->reset(); 1762 delegate->reset();
1652 } 1763 }
1653 1764
1654 TEST_F(CookieMonsterTest, DeleteAllForHost) { 1765 TEST_F(CookieMonsterTest, PredicateSeesAllCookies) {
1766 const std::string kTrueValue = "A";
1655 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1767 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1768 // We test that we can see all cookies with our predicated. This includes
1769 // host, http_only, host secure, and all domain cookies.
1770 CookiePredicate value_matcher = base::Bind(&CookieValuePredicate, kTrueValue);
1656 1771
1657 // Test probes: 1772 PopulateCmForPredicateCheck(cm.get());
1658 // * Non-secure URL, mid-level (http://w.c.b.a) 1773 EXPECT_EQ(7, DeleteAllCreatedBetweenWithPredicate(
1659 // * Secure URL, mid-level (https://w.c.b.a) 1774 cm.get(), base::Time(), base::Time::Now(), value_matcher));
1660 // * URL with path, mid-level (https:/w.c.b.a/dir1/xx) 1775
1661 // All three tests should nuke only the midlevel host cookie, 1776 EXPECT_EQ("dom_2=B; dom_3=C; host_3=C",
1662 // the http_only cookie, the host secure cookie, and the two host
1663 // path cookies. http_only, secure, and paths are ignored by
1664 // this call, and domain cookies arent touched.
1665 PopulateCmForDeleteAllForHost(cm.get());
1666 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X",
1667 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); 1777 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3)));
1668 EXPECT_EQ("dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", 1778 EXPECT_EQ("dom_2=B; host_2=B; sec_host=B",
1669 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1779 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure)));
1670 EXPECT_EQ("dom_1=X; host_1=X", 1780 EXPECT_EQ("", GetCookies(cm.get(), GURL(kTopLevelDomainPlus1)));
1671 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",
1672 EXPECT_EQ(
1673 "dom_path_2=X; host_path_2=X; dom_path_1=X; host_path_1=X; "
1674 "dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X",
1675 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure +
1676 std::string("/dir1/dir2/xxx"))));
1677
1678 EXPECT_EQ(6, DeleteAllCreatedBetweenForHost(cm.get(), base::Time(),
1679 base::Time::Now(),
1680 GURL(kTopLevelDomainPlus2)));
1681 EXPECT_EQ(8U, GetAllCookies(cm.get()).size());
1682
1683 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X",
1684 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3)));
1685 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X",
1686 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure)));
1687 EXPECT_EQ("dom_1=X; host_1=X",
1688 GetCookies(cm.get(), GURL(kTopLevelDomainPlus1)));
1689 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X",
1690 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure +
1691 std::string("/dir1/dir2/xxx"))));
1692
1693 PopulateCmForDeleteAllForHost(cm.get());
1694 EXPECT_EQ(6, DeleteAllCreatedBetweenForHost(
1695 cm.get(), base::Time(), base::Time::Now(),
1696 GURL(kTopLevelDomainPlus2Secure)));
1697 EXPECT_EQ(8U, GetAllCookies(cm.get()).size());
1698
1699 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X",
1700 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3)));
1701 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X",
1702 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure)));
1703 EXPECT_EQ("dom_1=X; host_1=X",
1704 GetCookies(cm.get(), GURL(kTopLevelDomainPlus1)));
1705 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X",
1706 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure +
1707 std::string("/dir1/dir2/xxx"))));
1708
1709 PopulateCmForDeleteAllForHost(cm.get());
1710 EXPECT_EQ(6,
1711 DeleteAllCreatedBetweenForHost(
1712 cm.get(), base::Time(), base::Time::Now(),
1713 GURL(kTopLevelDomainPlus2Secure + std::string("/dir1/xxx"))));
1714 EXPECT_EQ(8U, GetAllCookies(cm.get()).size());
1715
1716 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X",
1717 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3)));
1718 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X",
1719 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure)));
1720 EXPECT_EQ("dom_1=X; host_1=X",
1721 GetCookies(cm.get(), GURL(kTopLevelDomainPlus1)));
1722 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X",
1723 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure + 1782 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure +
1724 std::string("/dir1/dir2/xxx")))); 1783 std::string("/dir1/dir2/xxx"))));
1725 } 1784 }
1726 1785
1727 TEST_F(CookieMonsterTest, UniqueCreationTime) { 1786 TEST_F(CookieMonsterTest, UniqueCreationTime) {
1728 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1787 scoped_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1729 CookieOptions options; 1788 CookieOptions options;
1730 1789
1731 // Add in three cookies through every public interface to the 1790 // Add in three cookies through every public interface to the
1732 // CookieMonster and confirm that none of them have duplicate 1791 // CookieMonster and confirm that none of them have duplicate
(...skipping 1463 matching lines...) Expand 10 before | Expand all | Expand 10 after
3196 monster()->AddCallbackForCookie( 3255 monster()->AddCallbackForCookie(
3197 test_url_, "abc", 3256 test_url_, "abc",
3198 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); 3257 base::Bind(&RecordCookieChanges, &cookies1, nullptr)));
3199 SetCookie(monster(), test_url_, "abc=def"); 3258 SetCookie(monster(), test_url_, "abc=def");
3200 base::MessageLoop::current()->RunUntilIdle(); 3259 base::MessageLoop::current()->RunUntilIdle();
3201 EXPECT_EQ(1U, cookies0.size()); 3260 EXPECT_EQ(1U, cookies0.size());
3202 EXPECT_EQ(1U, cookies0.size()); 3261 EXPECT_EQ(1U, cookies0.size());
3203 } 3262 }
3204 3263
3205 } // namespace net 3264 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster.cc ('k') | net/cookies/cookie_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698