| OLD | NEW |
| 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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 215 |
| 216 // Helper for DeleteAllForHost test; repopulates CM with same layout | 216 // Helper for DeleteAllForHost test; repopulates CM with same layout |
| 217 // each time. | 217 // each time. |
| 218 void PopulateCmForDeleteAllForHost(scoped_refptr<CookieMonster> cm) { | 218 void PopulateCmForDeleteAllForHost(scoped_refptr<CookieMonster> cm) { |
| 219 GURL url_top_level_domain_plus_1(kTopLevelDomainPlus1); | 219 GURL url_top_level_domain_plus_1(kTopLevelDomainPlus1); |
| 220 GURL url_top_level_domain_plus_2(kTopLevelDomainPlus2); | 220 GURL url_top_level_domain_plus_2(kTopLevelDomainPlus2); |
| 221 GURL url_top_level_domain_plus_2_secure(kTopLevelDomainPlus2Secure); | 221 GURL url_top_level_domain_plus_2_secure(kTopLevelDomainPlus2Secure); |
| 222 GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3); | 222 GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3); |
| 223 GURL url_other(kOtherDomain); | 223 GURL url_other(kOtherDomain); |
| 224 | 224 |
| 225 DeleteAll(cm); | 225 DeleteAll(cm.get()); |
| 226 | 226 |
| 227 // Static population for probe: | 227 // Static population for probe: |
| 228 // * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a) | 228 // * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a) |
| 229 // * Three levels of host cookie (w.b.a, w.c.b.a, w.d.c.b.a) | 229 // * Three levels of host cookie (w.b.a, w.c.b.a, w.d.c.b.a) |
| 230 // * http_only cookie (w.c.b.a) | 230 // * http_only cookie (w.c.b.a) |
| 231 // * Two secure cookies (.c.b.a, w.c.b.a) | 231 // * Two secure cookies (.c.b.a, w.c.b.a) |
| 232 // * Two domain path cookies (.c.b.a/dir1, .c.b.a/dir1/dir2) | 232 // * Two domain path cookies (.c.b.a/dir1, .c.b.a/dir1/dir2) |
| 233 // * Two host path cookies (w.c.b.a/dir1, w.c.b.a/dir1/dir2) | 233 // * Two host path cookies (w.c.b.a/dir1, w.c.b.a/dir1/dir2) |
| 234 | 234 |
| 235 // Domain cookies | 235 // Domain cookies |
| 236 EXPECT_TRUE(this->SetCookieWithDetails(cm, url_top_level_domain_plus_1, | 236 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 237 "dom_1", "X", ".harvard.edu", "/", | 237 url_top_level_domain_plus_1, |
| 238 base::Time(), false, false, | 238 "dom_1", |
| 239 "X", |
| 240 ".harvard.edu", |
| 241 "/", |
| 242 base::Time(), |
| 243 false, |
| 244 false, |
| 239 COOKIE_PRIORITY_DEFAULT)); | 245 COOKIE_PRIORITY_DEFAULT)); |
| 240 EXPECT_TRUE(this->SetCookieWithDetails(cm, url_top_level_domain_plus_2, | 246 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 241 "dom_2", "X", ".math.harvard.edu", | 247 url_top_level_domain_plus_2, |
| 242 "/", base::Time(), false, false, | 248 "dom_2", |
| 249 "X", |
| 250 ".math.harvard.edu", |
| 251 "/", |
| 252 base::Time(), |
| 253 false, |
| 254 false, |
| 243 COOKIE_PRIORITY_DEFAULT)); | 255 COOKIE_PRIORITY_DEFAULT)); |
| 244 EXPECT_TRUE(this->SetCookieWithDetails(cm, url_top_level_domain_plus_3, | 256 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 245 "dom_3", "X", | 257 url_top_level_domain_plus_3, |
| 246 ".bourbaki.math.harvard.edu", "/", | 258 "dom_3", |
| 247 base::Time(), false, false, | 259 "X", |
| 260 ".bourbaki.math.harvard.edu", |
| 261 "/", |
| 262 base::Time(), |
| 263 false, |
| 264 false, |
| 248 COOKIE_PRIORITY_DEFAULT)); | 265 COOKIE_PRIORITY_DEFAULT)); |
| 249 | 266 |
| 250 // Host cookies | 267 // Host cookies |
| 251 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 268 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 252 url_top_level_domain_plus_1, | 269 url_top_level_domain_plus_1, |
| 253 "host_1", | 270 "host_1", |
| 254 "X", | 271 "X", |
| 255 std::string(), | 272 std::string(), |
| 256 "/", | 273 "/", |
| 257 base::Time(), | 274 base::Time(), |
| 258 false, | 275 false, |
| 259 false, | 276 false, |
| 260 COOKIE_PRIORITY_DEFAULT)); | 277 COOKIE_PRIORITY_DEFAULT)); |
| 261 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 278 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 262 url_top_level_domain_plus_2, | 279 url_top_level_domain_plus_2, |
| 263 "host_2", | 280 "host_2", |
| 264 "X", | 281 "X", |
| 265 std::string(), | 282 std::string(), |
| 266 "/", | 283 "/", |
| 267 base::Time(), | 284 base::Time(), |
| 268 false, | 285 false, |
| 269 false, | 286 false, |
| 270 COOKIE_PRIORITY_DEFAULT)); | 287 COOKIE_PRIORITY_DEFAULT)); |
| 271 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 288 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 272 url_top_level_domain_plus_3, | 289 url_top_level_domain_plus_3, |
| 273 "host_3", | 290 "host_3", |
| 274 "X", | 291 "X", |
| 275 std::string(), | 292 std::string(), |
| 276 "/", | 293 "/", |
| 277 base::Time(), | 294 base::Time(), |
| 278 false, | 295 false, |
| 279 false, | 296 false, |
| 280 COOKIE_PRIORITY_DEFAULT)); | 297 COOKIE_PRIORITY_DEFAULT)); |
| 281 | 298 |
| 282 // Http_only cookie | 299 // Http_only cookie |
| 283 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 300 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 284 url_top_level_domain_plus_2, | 301 url_top_level_domain_plus_2, |
| 285 "httpo_check", | 302 "httpo_check", |
| 286 "X", | 303 "X", |
| 287 std::string(), | 304 std::string(), |
| 288 "/", | 305 "/", |
| 289 base::Time(), | 306 base::Time(), |
| 290 false, | 307 false, |
| 291 true, | 308 true, |
| 292 COOKIE_PRIORITY_DEFAULT)); | 309 COOKIE_PRIORITY_DEFAULT)); |
| 293 | 310 |
| 294 // Secure cookies | 311 // Secure cookies |
| 295 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 312 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 296 url_top_level_domain_plus_2_secure, | 313 url_top_level_domain_plus_2_secure, |
| 297 "sec_dom", "X", ".math.harvard.edu", | 314 "sec_dom", |
| 298 "/", base::Time(), true, false, | 315 "X", |
| 316 ".math.harvard.edu", |
| 317 "/", |
| 318 base::Time(), |
| 319 true, |
| 320 false, |
| 299 COOKIE_PRIORITY_DEFAULT)); | 321 COOKIE_PRIORITY_DEFAULT)); |
| 300 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 322 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 301 url_top_level_domain_plus_2_secure, | 323 url_top_level_domain_plus_2_secure, |
| 302 "sec_host", | 324 "sec_host", |
| 303 "X", | 325 "X", |
| 304 std::string(), | 326 std::string(), |
| 305 "/", | 327 "/", |
| 306 base::Time(), | 328 base::Time(), |
| 307 true, | 329 true, |
| 308 false, | 330 false, |
| 309 COOKIE_PRIORITY_DEFAULT)); | 331 COOKIE_PRIORITY_DEFAULT)); |
| 310 | 332 |
| 311 // Domain path cookies | 333 // Domain path cookies |
| 312 EXPECT_TRUE(this->SetCookieWithDetails(cm, url_top_level_domain_plus_2, | 334 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 313 "dom_path_1", "X", | 335 url_top_level_domain_plus_2, |
| 314 ".math.harvard.edu", "/dir1", | 336 "dom_path_1", |
| 315 base::Time(), false, false, | 337 "X", |
| 338 ".math.harvard.edu", |
| 339 "/dir1", |
| 340 base::Time(), |
| 341 false, |
| 342 false, |
| 316 COOKIE_PRIORITY_DEFAULT)); | 343 COOKIE_PRIORITY_DEFAULT)); |
| 317 EXPECT_TRUE(this->SetCookieWithDetails(cm, url_top_level_domain_plus_2, | 344 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 318 "dom_path_2", "X", | 345 url_top_level_domain_plus_2, |
| 319 ".math.harvard.edu", "/dir1/dir2", | 346 "dom_path_2", |
| 320 base::Time(), false, false, | 347 "X", |
| 348 ".math.harvard.edu", |
| 349 "/dir1/dir2", |
| 350 base::Time(), |
| 351 false, |
| 352 false, |
| 321 COOKIE_PRIORITY_DEFAULT)); | 353 COOKIE_PRIORITY_DEFAULT)); |
| 322 | 354 |
| 323 // Host path cookies | 355 // Host path cookies |
| 324 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 356 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 325 url_top_level_domain_plus_2, | 357 url_top_level_domain_plus_2, |
| 326 "host_path_1", | 358 "host_path_1", |
| 327 "X", | 359 "X", |
| 328 std::string(), | 360 std::string(), |
| 329 "/dir1", | 361 "/dir1", |
| 330 base::Time(), | 362 base::Time(), |
| 331 false, | 363 false, |
| 332 false, | 364 false, |
| 333 COOKIE_PRIORITY_DEFAULT)); | 365 COOKIE_PRIORITY_DEFAULT)); |
| 334 EXPECT_TRUE(this->SetCookieWithDetails(cm, | 366 EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), |
| 335 url_top_level_domain_plus_2, | 367 url_top_level_domain_plus_2, |
| 336 "host_path_2", | 368 "host_path_2", |
| 337 "X", | 369 "X", |
| 338 std::string(), | 370 std::string(), |
| 339 "/dir1/dir2", | 371 "/dir1/dir2", |
| 340 base::Time(), | 372 base::Time(), |
| 341 false, | 373 false, |
| 342 false, | 374 false, |
| 343 COOKIE_PRIORITY_DEFAULT)); | 375 COOKIE_PRIORITY_DEFAULT)); |
| 344 | 376 |
| 345 EXPECT_EQ(13U, this->GetAllCookies(cm).size()); | 377 EXPECT_EQ(13U, this->GetAllCookies(cm.get()).size()); |
| 346 } | 378 } |
| 347 | 379 |
| 348 Time GetFirstCookieAccessDate(CookieMonster* cm) { | 380 Time GetFirstCookieAccessDate(CookieMonster* cm) { |
| 349 const CookieList all_cookies(this->GetAllCookies(cm)); | 381 const CookieList all_cookies(this->GetAllCookies(cm)); |
| 350 return all_cookies.front().LastAccessDate(); | 382 return all_cookies.front().LastAccessDate(); |
| 351 } | 383 } |
| 352 | 384 |
| 353 bool FindAndDeleteCookie(CookieMonster* cm, | 385 bool FindAndDeleteCookie(CookieMonster* cm, |
| 354 const std::string& domain, | 386 const std::string& domain, |
| 355 const std::string& name) { | 387 const std::string& name) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 368 void TestHostGarbageCollectHelper() { | 400 void TestHostGarbageCollectHelper() { |
| 369 int domain_max_cookies = CookieMonster::kDomainMaxCookies; | 401 int domain_max_cookies = CookieMonster::kDomainMaxCookies; |
| 370 int domain_purge_cookies = CookieMonster::kDomainPurgeCookies; | 402 int domain_purge_cookies = CookieMonster::kDomainPurgeCookies; |
| 371 const int more_than_enough_cookies = | 403 const int more_than_enough_cookies = |
| 372 (domain_max_cookies + domain_purge_cookies) * 2; | 404 (domain_max_cookies + domain_purge_cookies) * 2; |
| 373 // Add a bunch of cookies on a single host, should purge them. | 405 // Add a bunch of cookies on a single host, should purge them. |
| 374 { | 406 { |
| 375 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 407 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 376 for (int i = 0; i < more_than_enough_cookies; ++i) { | 408 for (int i = 0; i < more_than_enough_cookies; ++i) { |
| 377 std::string cookie = base::StringPrintf("a%03d=b", i); | 409 std::string cookie = base::StringPrintf("a%03d=b", i); |
| 378 EXPECT_TRUE(SetCookie(cm, url_google_, cookie)); | 410 EXPECT_TRUE(SetCookie(cm.get(), url_google_, cookie)); |
| 379 std::string cookies = this->GetCookies(cm, url_google_); | 411 std::string cookies = this->GetCookies(cm.get(), url_google_); |
| 380 // Make sure we find it in the cookies. | 412 // Make sure we find it in the cookies. |
| 381 EXPECT_NE(cookies.find(cookie), std::string::npos); | 413 EXPECT_NE(cookies.find(cookie), std::string::npos); |
| 382 // Count the number of cookies. | 414 // Count the number of cookies. |
| 383 EXPECT_LE(CountInString(cookies, '='), domain_max_cookies); | 415 EXPECT_LE(CountInString(cookies, '='), domain_max_cookies); |
| 384 } | 416 } |
| 385 } | 417 } |
| 386 | 418 |
| 387 // Add a bunch of cookies on multiple hosts within a single eTLD. | 419 // Add a bunch of cookies on multiple hosts within a single eTLD. |
| 388 // Should keep at least kDomainMaxCookies - kDomainPurgeCookies | 420 // Should keep at least kDomainMaxCookies - kDomainPurgeCookies |
| 389 // between them. We shouldn't go above kDomainMaxCookies for both together. | 421 // between them. We shouldn't go above kDomainMaxCookies for both together. |
| 390 GURL url_google_specific(kUrlGoogleSpecific); | 422 GURL url_google_specific(kUrlGoogleSpecific); |
| 391 { | 423 { |
| 392 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 424 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 393 for (int i = 0; i < more_than_enough_cookies; ++i) { | 425 for (int i = 0; i < more_than_enough_cookies; ++i) { |
| 394 std::string cookie_general = base::StringPrintf("a%03d=b", i); | 426 std::string cookie_general = base::StringPrintf("a%03d=b", i); |
| 395 EXPECT_TRUE(SetCookie(cm, url_google_, cookie_general)); | 427 EXPECT_TRUE(SetCookie(cm.get(), url_google_, cookie_general)); |
| 396 std::string cookie_specific = base::StringPrintf("c%03d=b", i); | 428 std::string cookie_specific = base::StringPrintf("c%03d=b", i); |
| 397 EXPECT_TRUE(SetCookie(cm, url_google_specific, cookie_specific)); | 429 EXPECT_TRUE(SetCookie(cm.get(), url_google_specific, cookie_specific)); |
| 398 std::string cookies_general = this->GetCookies(cm, url_google_); | 430 std::string cookies_general = this->GetCookies(cm.get(), url_google_); |
| 399 EXPECT_NE(cookies_general.find(cookie_general), std::string::npos); | 431 EXPECT_NE(cookies_general.find(cookie_general), std::string::npos); |
| 400 std::string cookies_specific = | 432 std::string cookies_specific = |
| 401 this->GetCookies(cm, url_google_specific); | 433 this->GetCookies(cm.get(), url_google_specific); |
| 402 EXPECT_NE(cookies_specific.find(cookie_specific), std::string::npos); | 434 EXPECT_NE(cookies_specific.find(cookie_specific), std::string::npos); |
| 403 EXPECT_LE((CountInString(cookies_general, '=') + | 435 EXPECT_LE((CountInString(cookies_general, '=') + |
| 404 CountInString(cookies_specific, '=')), | 436 CountInString(cookies_specific, '=')), |
| 405 domain_max_cookies); | 437 domain_max_cookies); |
| 406 } | 438 } |
| 407 // After all this, there should be at least | 439 // After all this, there should be at least |
| 408 // kDomainMaxCookies - kDomainPurgeCookies for both URLs. | 440 // kDomainMaxCookies - kDomainPurgeCookies for both URLs. |
| 409 std::string cookies_general = this->GetCookies(cm, url_google_); | 441 std::string cookies_general = this->GetCookies(cm.get(), url_google_); |
| 410 std::string cookies_specific = this->GetCookies(cm, url_google_specific); | 442 std::string cookies_specific = |
| 443 this->GetCookies(cm.get(), url_google_specific); |
| 411 int total_cookies = (CountInString(cookies_general, '=') + | 444 int total_cookies = (CountInString(cookies_general, '=') + |
| 412 CountInString(cookies_specific, '=')); | 445 CountInString(cookies_specific, '=')); |
| 413 EXPECT_GE(total_cookies, domain_max_cookies - domain_purge_cookies); | 446 EXPECT_GE(total_cookies, domain_max_cookies - domain_purge_cookies); |
| 414 EXPECT_LE(total_cookies, domain_max_cookies); | 447 EXPECT_LE(total_cookies, domain_max_cookies); |
| 415 } | 448 } |
| 416 } | 449 } |
| 417 | 450 |
| 418 CookiePriority CharToPriority(char ch) { | 451 CookiePriority CharToPriority(char ch) { |
| 419 switch (ch) { | 452 switch (ch) { |
| 420 case 'L': | 453 case 'L': |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 CookieMonster::kDomainPurgeCookies); | 553 CookieMonster::kDomainPurgeCookies); |
| 521 DCHECK_EQ(30U, CookieMonster::kDomainCookiesQuotaLow); | 554 DCHECK_EQ(30U, CookieMonster::kDomainCookiesQuotaLow); |
| 522 DCHECK_EQ(50U, CookieMonster::kDomainCookiesQuotaMedium); | 555 DCHECK_EQ(50U, CookieMonster::kDomainCookiesQuotaMedium); |
| 523 DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh); | 556 DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh); |
| 524 | 557 |
| 525 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 558 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 526 cm->SetPriorityAwareGarbageCollection(true); | 559 cm->SetPriorityAwareGarbageCollection(true); |
| 527 | 560 |
| 528 // Each test case adds 181 cookies, so 31 cookies are evicted. | 561 // Each test case adds 181 cookies, so 31 cookies are evicted. |
| 529 // Cookie same priority, repeated for each priority. | 562 // Cookie same priority, repeated for each priority. |
| 530 TestPriorityCookieCase(cm, "181L", 150U, 0U, 0U); | 563 TestPriorityCookieCase(cm.get(), "181L", 150U, 0U, 0U); |
| 531 TestPriorityCookieCase(cm, "181M", 0U, 150U, 0U); | 564 TestPriorityCookieCase(cm.get(), "181M", 0U, 150U, 0U); |
| 532 TestPriorityCookieCase(cm, "181H", 0U, 0U, 150U); | 565 TestPriorityCookieCase(cm.get(), "181H", 0U, 0U, 150U); |
| 533 | 566 |
| 534 // Pairwise scenarios. | 567 // Pairwise scenarios. |
| 535 // Round 1 => none; round2 => 31M; round 3 => none. | 568 // Round 1 => none; round2 => 31M; round 3 => none. |
| 536 TestPriorityCookieCase(cm, "10H 171M", 0U, 140U, 10U); | 569 TestPriorityCookieCase(cm.get(), "10H 171M", 0U, 140U, 10U); |
| 537 // Round 1 => 10L; round2 => 21M; round 3 => none. | 570 // Round 1 => 10L; round2 => 21M; round 3 => none. |
| 538 TestPriorityCookieCase(cm, "141M 40L", 30U, 120U, 0U); | 571 TestPriorityCookieCase(cm.get(), "141M 40L", 30U, 120U, 0U); |
| 539 // Round 1 => none; round2 => none; round 3 => 31H. | 572 // Round 1 => none; round2 => none; round 3 => 31H. |
| 540 TestPriorityCookieCase(cm, "101H 80M", 0U, 80U, 70U); | 573 TestPriorityCookieCase(cm.get(), "101H 80M", 0U, 80U, 70U); |
| 541 | 574 |
| 542 // For {low, medium} priorities right on quota, different orders. | 575 // For {low, medium} priorities right on quota, different orders. |
| 543 // Round 1 => 1L; round 2 => none, round3 => 30L. | 576 // Round 1 => 1L; round 2 => none, round3 => 30L. |
| 544 TestPriorityCookieCase(cm, "31L 50M 100H", 0U, 50U, 100U); | 577 TestPriorityCookieCase(cm.get(), "31L 50M 100H", 0U, 50U, 100U); |
| 545 // Round 1 => none; round 2 => 1M, round3 => 30M. | 578 // Round 1 => none; round 2 => 1M, round3 => 30M. |
| 546 TestPriorityCookieCase(cm, "51M 100H 30L", 30U, 20U, 100U); | 579 TestPriorityCookieCase(cm.get(), "51M 100H 30L", 30U, 20U, 100U); |
| 547 // Round 1 => none; round 2 => none; round3 => 31H. | 580 // Round 1 => none; round 2 => none; round3 => 31H. |
| 548 TestPriorityCookieCase(cm, "101H 50M 30L", 30U, 50U, 70U); | 581 TestPriorityCookieCase(cm.get(), "101H 50M 30L", 30U, 50U, 70U); |
| 549 | 582 |
| 550 // Round 1 => 10L; round 2 => 10M; round3 => 11H. | 583 // Round 1 => 10L; round 2 => 10M; round3 => 11H. |
| 551 TestPriorityCookieCase(cm, "81H 60M 40L", 30U, 50U, 70U); | 584 TestPriorityCookieCase(cm.get(), "81H 60M 40L", 30U, 50U, 70U); |
| 552 | 585 |
| 553 // More complex scenarios. | 586 // More complex scenarios. |
| 554 // Round 1 => 10L; round 2 => 10M; round 3 => 11H. | 587 // Round 1 => 10L; round 2 => 10M; round 3 => 11H. |
| 555 TestPriorityCookieCase(cm, "21H 60M 40L 60H", 30U, 50U, 70U); | 588 TestPriorityCookieCase(cm.get(), "21H 60M 40L 60H", 30U, 50U, 70U); |
| 556 // Round 1 => 10L; round 2 => 11M, 10L; round 3 => none. | 589 // Round 1 => 10L; round 2 => 11M, 10L; round 3 => none. |
| 557 TestPriorityCookieCase(cm, "11H 10M 20L 110M 20L 10H", 20U, 109U, 21U); | 590 TestPriorityCookieCase( |
| 591 cm.get(), "11H 10M 20L 110M 20L 10H", 20U, 109U, 21U); |
| 558 // Round 1 => none; round 2 => none; round 3 => 11L, 10M, 10H. | 592 // Round 1 => none; round 2 => none; round 3 => 11L, 10M, 10H. |
| 559 TestPriorityCookieCase(cm, "11L 10M 140H 10M 10L", 10U, 10U, 130U); | 593 TestPriorityCookieCase(cm.get(), "11L 10M 140H 10M 10L", 10U, 10U, 130U); |
| 560 // Round 1 => none; round 2 => 1M; round 3 => 10L, 10M, 10H. | 594 // Round 1 => none; round 2 => 1M; round 3 => 10L, 10M, 10H. |
| 561 TestPriorityCookieCase(cm, "11M 10H 10L 60M 90H", 0U, 60U, 90U); | 595 TestPriorityCookieCase(cm.get(), "11M 10H 10L 60M 90H", 0U, 60U, 90U); |
| 562 // Round 1 => none; round 2 => 10L, 21M; round 3 => none. | 596 // Round 1 => none; round 2 => 10L, 21M; round 3 => none. |
| 563 TestPriorityCookieCase(cm, "11M 10H 10L 90M 60H", 0U, 80U, 70U); | 597 TestPriorityCookieCase(cm.get(), "11M 10H 10L 90M 60H", 0U, 80U, 70U); |
| 564 } | 598 } |
| 565 | 599 |
| 566 // Function for creating a CM with a number of cookies in it, | 600 // Function for creating a CM with a number of cookies in it, |
| 567 // no store (and hence no ability to affect access time). | 601 // no store (and hence no ability to affect access time). |
| 568 CookieMonster* CreateMonsterForGC(int num_cookies) { | 602 CookieMonster* CreateMonsterForGC(int num_cookies) { |
| 569 CookieMonster* cm(new CookieMonster(NULL, NULL)); | 603 CookieMonster* cm(new CookieMonster(NULL, NULL)); |
| 570 for (int i = 0; i < num_cookies; i++) { | 604 for (int i = 0; i < num_cookies; i++) { |
| 571 SetCookie(cm, GURL(base::StringPrintf("http://h%05d.izzle", i)), "a=1"); | 605 SetCookie(cm, GURL(base::StringPrintf("http://h%05d.izzle", i)), "a=1"); |
| 572 } | 606 } |
| 573 return cm; | 607 return cm; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 758 testing::Action<void(void)> action) { | 792 testing::Action<void(void)> action) { |
| 759 EXPECT_CALL(*this, Begin()).WillOnce(action); | 793 EXPECT_CALL(*this, Begin()).WillOnce(action); |
| 760 ExpectLoadCall(); | 794 ExpectLoadCall(); |
| 761 ExpectLoadForKeyCall(key, false); | 795 ExpectLoadForKeyCall(key, false); |
| 762 Begin(); | 796 Begin(); |
| 763 } | 797 } |
| 764 | 798 |
| 765 // Declares an expectation that PersistentCookieStore::Load will be called, | 799 // Declares an expectation that PersistentCookieStore::Load will be called, |
| 766 // saving the provided callback and sending a quit to the message loop. | 800 // saving the provided callback and sending a quit to the message loop. |
| 767 void ExpectLoadCall() { | 801 void ExpectLoadCall() { |
| 768 EXPECT_CALL(*persistent_store_, Load(testing::_)).WillOnce(testing::DoAll( | 802 EXPECT_CALL(*persistent_store_.get(), Load(testing::_)) |
| 769 testing::SaveArg<0>(&loaded_callback_), | 803 .WillOnce(testing::DoAll(testing::SaveArg<0>(&loaded_callback_), |
| 770 QuitCurrentMessageLoop())); | 804 QuitCurrentMessageLoop())); |
| 771 } | 805 } |
| 772 | 806 |
| 773 // Declares an expectation that PersistentCookieStore::LoadCookiesForKey | 807 // Declares an expectation that PersistentCookieStore::LoadCookiesForKey |
| 774 // will be called, saving the provided callback and sending a quit to the | 808 // will be called, saving the provided callback and sending a quit to the |
| 775 // message loop. | 809 // message loop. |
| 776 void ExpectLoadForKeyCall(std::string key, bool quit_queue) { | 810 void ExpectLoadForKeyCall(std::string key, bool quit_queue) { |
| 777 if (quit_queue) | 811 if (quit_queue) |
| 778 EXPECT_CALL(*persistent_store_, LoadCookiesForKey(key, testing::_)). | 812 EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_)) |
| 779 WillOnce(testing::DoAll( | 813 .WillOnce( |
| 780 PushCallbackAction(&loaded_for_key_callbacks_), | 814 testing::DoAll(PushCallbackAction(&loaded_for_key_callbacks_), |
| 781 QuitCurrentMessageLoop())); | 815 QuitCurrentMessageLoop())); |
| 782 else | 816 else |
| 783 EXPECT_CALL(*persistent_store_, LoadCookiesForKey(key, testing::_)). | 817 EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_)) |
| 784 WillOnce(PushCallbackAction(&loaded_for_key_callbacks_)); | 818 .WillOnce(PushCallbackAction(&loaded_for_key_callbacks_)); |
| 785 } | 819 } |
| 786 | 820 |
| 787 // Invokes the initial action. | 821 // Invokes the initial action. |
| 788 MOCK_METHOD0(Begin, void(void)); | 822 MOCK_METHOD0(Begin, void(void)); |
| 789 | 823 |
| 790 // Returns the CookieMonster instance under test. | 824 // Returns the CookieMonster instance under test. |
| 791 CookieMonster& cookie_monster() { return *cookie_monster_; } | 825 CookieMonster& cookie_monster() { return *cookie_monster_.get(); } |
| 792 | 826 |
| 793 private: | 827 private: |
| 794 // Declares that mock expectations in this test suite are strictly ordered. | 828 // Declares that mock expectations in this test suite are strictly ordered. |
| 795 testing::InSequence in_sequence_; | 829 testing::InSequence in_sequence_; |
| 796 // Holds cookies to be returned from PersistentCookieStore::Load or | 830 // Holds cookies to be returned from PersistentCookieStore::Load or |
| 797 // PersistentCookieStore::LoadCookiesForKey. | 831 // PersistentCookieStore::LoadCookiesForKey. |
| 798 std::vector<CanonicalCookie*> loaded_cookies_; | 832 std::vector<CanonicalCookie*> loaded_cookies_; |
| 799 // Stores the callback passed from the CookieMonster to the | 833 // Stores the callback passed from the CookieMonster to the |
| 800 // PersistentCookieStore::Load | 834 // PersistentCookieStore::Load |
| 801 CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; | 835 CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 QuitCurrentMessageLoop()); | 1105 QuitCurrentMessageLoop()); |
| 1072 EXPECT_CALL(set_cookies_callback, Invoke(true)); | 1106 EXPECT_CALL(set_cookies_callback, Invoke(true)); |
| 1073 EXPECT_CALL(delete_cookie_callback, Invoke()); | 1107 EXPECT_CALL(delete_cookie_callback, Invoke()); |
| 1074 | 1108 |
| 1075 CompleteLoadingAndWait(); | 1109 CompleteLoadingAndWait(); |
| 1076 } | 1110 } |
| 1077 | 1111 |
| 1078 TEST_F(CookieMonsterTest, TestCookieDeleteAll) { | 1112 TEST_F(CookieMonsterTest, TestCookieDeleteAll) { |
| 1079 scoped_refptr<MockPersistentCookieStore> store( | 1113 scoped_refptr<MockPersistentCookieStore> store( |
| 1080 new MockPersistentCookieStore); | 1114 new MockPersistentCookieStore); |
| 1081 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 1115 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| 1082 CookieOptions options; | 1116 CookieOptions options; |
| 1083 options.set_include_httponly(); | 1117 options.set_include_httponly(); |
| 1084 | 1118 |
| 1085 EXPECT_TRUE(SetCookie(cm, url_google_, kValidCookieLine)); | 1119 EXPECT_TRUE(SetCookie(cm.get(), url_google_, kValidCookieLine)); |
| 1086 EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 1120 EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); |
| 1087 | 1121 |
| 1088 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "C=D; httponly", options)); | 1122 EXPECT_TRUE( |
| 1089 EXPECT_EQ("A=B; C=D", GetCookiesWithOptions(cm, url_google_, options)); | 1123 SetCookieWithOptions(cm.get(), url_google_, "C=D; httponly", options)); |
| 1124 EXPECT_EQ("A=B; C=D", GetCookiesWithOptions(cm.get(), url_google_, options)); |
| 1090 | 1125 |
| 1091 EXPECT_EQ(2, DeleteAll(cm)); | 1126 EXPECT_EQ(2, DeleteAll(cm.get())); |
| 1092 EXPECT_EQ("", GetCookiesWithOptions(cm, url_google_, options)); | 1127 EXPECT_EQ("", GetCookiesWithOptions(cm.get(), url_google_, options)); |
| 1093 EXPECT_EQ(0u, store->commands().size()); | 1128 EXPECT_EQ(0u, store->commands().size()); |
| 1094 | 1129 |
| 1095 // Create a persistent cookie. | 1130 // Create a persistent cookie. |
| 1096 EXPECT_TRUE(SetCookie(cm, url_google_, | 1131 EXPECT_TRUE(SetCookie( |
| 1097 std::string(kValidCookieLine) + | 1132 cm.get(), |
| 1098 "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 1133 url_google_, |
| 1134 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
| 1099 ASSERT_EQ(1u, store->commands().size()); | 1135 ASSERT_EQ(1u, store->commands().size()); |
| 1100 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 1136 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); |
| 1101 | 1137 |
| 1102 EXPECT_EQ(1, DeleteAll(cm)); // sync_to_store = true. | 1138 EXPECT_EQ(1, DeleteAll(cm.get())); // sync_to_store = true. |
| 1103 ASSERT_EQ(2u, store->commands().size()); | 1139 ASSERT_EQ(2u, store->commands().size()); |
| 1104 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 1140 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); |
| 1105 | 1141 |
| 1106 EXPECT_EQ("", GetCookiesWithOptions(cm, url_google_, options)); | 1142 EXPECT_EQ("", GetCookiesWithOptions(cm.get(), url_google_, options)); |
| 1107 } | 1143 } |
| 1108 | 1144 |
| 1109 TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) { | 1145 TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) { |
| 1110 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1146 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1111 Time now = Time::Now(); | 1147 Time now = Time::Now(); |
| 1112 | 1148 |
| 1113 // Nothing has been added so nothing should be deleted. | 1149 // Nothing has been added so nothing should be deleted. |
| 1114 EXPECT_EQ(0, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(99), | 1150 EXPECT_EQ( |
| 1115 Time())); | 1151 0, |
| 1152 DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), Time())); |
| 1116 | 1153 |
| 1117 // Create 3 cookies with creation date of today, yesterday and the day before. | 1154 // Create 3 cookies with creation date of today, yesterday and the day before. |
| 1118 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-0=Now", now)); | 1155 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-0=Now", now)); |
| 1119 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-1=Yesterday", | 1156 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-1=Yesterday", |
| 1120 now - TimeDelta::FromDays(1))); | 1157 now - TimeDelta::FromDays(1))); |
| 1121 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-2=DayBefore", | 1158 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-2=DayBefore", |
| 1122 now - TimeDelta::FromDays(2))); | 1159 now - TimeDelta::FromDays(2))); |
| 1123 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-3=ThreeDays", | 1160 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-3=ThreeDays", |
| 1124 now - TimeDelta::FromDays(3))); | 1161 now - TimeDelta::FromDays(3))); |
| 1125 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-7=LastWeek", | 1162 EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-7=LastWeek", |
| 1126 now - TimeDelta::FromDays(7))); | 1163 now - TimeDelta::FromDays(7))); |
| 1127 | 1164 |
| 1128 // Try to delete threedays and the daybefore. | 1165 // Try to delete threedays and the daybefore. |
| 1129 EXPECT_EQ(2, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(3), | 1166 EXPECT_EQ(2, |
| 1130 now - TimeDelta::FromDays(1))); | 1167 DeleteAllCreatedBetween(cm.get(), |
| 1168 now - TimeDelta::FromDays(3), |
| 1169 now - TimeDelta::FromDays(1))); |
| 1131 | 1170 |
| 1132 // Try to delete yesterday, also make sure that delete_end is not | 1171 // Try to delete yesterday, also make sure that delete_end is not |
| 1133 // inclusive. | 1172 // inclusive. |
| 1134 EXPECT_EQ(1, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(2), | 1173 EXPECT_EQ( |
| 1135 now)); | 1174 1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(2), now)); |
| 1136 | 1175 |
| 1137 // Make sure the delete_begin is inclusive. | 1176 // Make sure the delete_begin is inclusive. |
| 1138 EXPECT_EQ(1, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(7), | 1177 EXPECT_EQ( |
| 1139 now)); | 1178 1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(7), now)); |
| 1140 | 1179 |
| 1141 // Delete the last (now) item. | 1180 // Delete the last (now) item. |
| 1142 EXPECT_EQ(1, DeleteAllCreatedBetween(cm, Time(), Time())); | 1181 EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), Time(), Time())); |
| 1143 | 1182 |
| 1144 // Really make sure everything is gone. | 1183 // Really make sure everything is gone. |
| 1145 EXPECT_EQ(0, DeleteAll(cm)); | 1184 EXPECT_EQ(0, DeleteAll(cm.get())); |
| 1146 } | 1185 } |
| 1147 | 1186 |
| 1148 static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20; | 1187 static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20; |
| 1149 | 1188 |
| 1150 TEST_F(CookieMonsterTest, TestLastAccess) { | 1189 TEST_F(CookieMonsterTest, TestLastAccess) { |
| 1151 scoped_refptr<CookieMonster> cm( | 1190 scoped_refptr<CookieMonster> cm( |
| 1152 new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); | 1191 new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); |
| 1153 | 1192 |
| 1154 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 1193 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 1155 const Time last_access_date(GetFirstCookieAccessDate(cm)); | 1194 const Time last_access_date(GetFirstCookieAccessDate(cm.get())); |
| 1156 | 1195 |
| 1157 // Reading the cookie again immediately shouldn't update the access date, | 1196 // Reading the cookie again immediately shouldn't update the access date, |
| 1158 // since we're inside the threshold. | 1197 // since we're inside the threshold. |
| 1159 EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 1198 EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); |
| 1160 EXPECT_TRUE(last_access_date == GetFirstCookieAccessDate(cm)); | 1199 EXPECT_TRUE(last_access_date == GetFirstCookieAccessDate(cm.get())); |
| 1161 | 1200 |
| 1162 // Reading after a short wait should update the access date. | 1201 // Reading after a short wait should update the access date. |
| 1163 base::PlatformThread::Sleep( | 1202 base::PlatformThread::Sleep( |
| 1164 base::TimeDelta::FromMilliseconds(kAccessDelayMs)); | 1203 base::TimeDelta::FromMilliseconds(kAccessDelayMs)); |
| 1165 EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 1204 EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); |
| 1166 EXPECT_FALSE(last_access_date == GetFirstCookieAccessDate(cm)); | 1205 EXPECT_FALSE(last_access_date == GetFirstCookieAccessDate(cm.get())); |
| 1167 } | 1206 } |
| 1168 | 1207 |
| 1169 TEST_F(CookieMonsterTest, TestHostGarbageCollection) { | 1208 TEST_F(CookieMonsterTest, TestHostGarbageCollection) { |
| 1170 TestHostGarbageCollectHelper(); | 1209 TestHostGarbageCollectHelper(); |
| 1171 } | 1210 } |
| 1172 | 1211 |
| 1173 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollection) { | 1212 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollection) { |
| 1174 TestPriorityAwareGarbageCollectHelper(); | 1213 TestPriorityAwareGarbageCollectHelper(); |
| 1175 } | 1214 } |
| 1176 | 1215 |
| 1177 TEST_F(CookieMonsterTest, TestDeleteSingleCookie) { | 1216 TEST_F(CookieMonsterTest, TestDeleteSingleCookie) { |
| 1178 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1217 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1179 | 1218 |
| 1180 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 1219 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 1181 EXPECT_TRUE(SetCookie(cm, url_google_, "C=D")); | 1220 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "C=D")); |
| 1182 EXPECT_TRUE(SetCookie(cm, url_google_, "E=F")); | 1221 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "E=F")); |
| 1183 EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm, url_google_)); | 1222 EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm.get(), url_google_)); |
| 1184 | 1223 |
| 1185 EXPECT_TRUE(FindAndDeleteCookie(cm, url_google_.host(), "C")); | 1224 EXPECT_TRUE(FindAndDeleteCookie(cm.get(), url_google_.host(), "C")); |
| 1186 EXPECT_EQ("A=B; E=F", GetCookies(cm, url_google_)); | 1225 EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); |
| 1187 | 1226 |
| 1188 EXPECT_FALSE(FindAndDeleteCookie(cm, "random.host", "E")); | 1227 EXPECT_FALSE(FindAndDeleteCookie(cm.get(), "random.host", "E")); |
| 1189 EXPECT_EQ("A=B; E=F", GetCookies(cm, url_google_)); | 1228 EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); |
| 1190 } | 1229 } |
| 1191 | 1230 |
| 1192 TEST_F(CookieMonsterTest, SetCookieableSchemes) { | 1231 TEST_F(CookieMonsterTest, SetCookieableSchemes) { |
| 1193 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1232 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1194 scoped_refptr<CookieMonster> cm_foo(new CookieMonster(NULL, NULL)); | 1233 scoped_refptr<CookieMonster> cm_foo(new CookieMonster(NULL, NULL)); |
| 1195 | 1234 |
| 1196 // Only cm_foo should allow foo:// cookies. | 1235 // Only cm_foo should allow foo:// cookies. |
| 1197 const char* kSchemes[] = {"foo"}; | 1236 const char* kSchemes[] = {"foo"}; |
| 1198 cm_foo->SetCookieableSchemes(kSchemes, 1); | 1237 cm_foo->SetCookieableSchemes(kSchemes, 1); |
| 1199 | 1238 |
| 1200 GURL foo_url("foo://host/path"); | 1239 GURL foo_url("foo://host/path"); |
| 1201 GURL http_url("http://host/path"); | 1240 GURL http_url("http://host/path"); |
| 1202 | 1241 |
| 1203 EXPECT_TRUE(SetCookie(cm, http_url, "x=1")); | 1242 EXPECT_TRUE(SetCookie(cm.get(), http_url, "x=1")); |
| 1204 EXPECT_FALSE(SetCookie(cm, foo_url, "x=1")); | 1243 EXPECT_FALSE(SetCookie(cm.get(), foo_url, "x=1")); |
| 1205 EXPECT_TRUE(SetCookie(cm_foo, foo_url, "x=1")); | 1244 EXPECT_TRUE(SetCookie(cm_foo.get(), foo_url, "x=1")); |
| 1206 EXPECT_FALSE(SetCookie(cm_foo, http_url, "x=1")); | 1245 EXPECT_FALSE(SetCookie(cm_foo.get(), http_url, "x=1")); |
| 1207 } | 1246 } |
| 1208 | 1247 |
| 1209 TEST_F(CookieMonsterTest, GetAllCookiesForURL) { | 1248 TEST_F(CookieMonsterTest, GetAllCookiesForURL) { |
| 1210 scoped_refptr<CookieMonster> cm( | 1249 scoped_refptr<CookieMonster> cm( |
| 1211 new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); | 1250 new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); |
| 1212 | 1251 |
| 1213 // Create an httponly cookie. | 1252 // Create an httponly cookie. |
| 1214 CookieOptions options; | 1253 CookieOptions options; |
| 1215 options.set_include_httponly(); | 1254 options.set_include_httponly(); |
| 1216 | 1255 |
| 1217 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B; httponly", options)); | 1256 EXPECT_TRUE( |
| 1218 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, | 1257 SetCookieWithOptions(cm.get(), url_google_, "A=B; httponly", options)); |
| 1219 "C=D; domain=.google.izzle", | 1258 EXPECT_TRUE(SetCookieWithOptions( |
| 1220 options)); | 1259 cm.get(), url_google_, "C=D; domain=.google.izzle", options)); |
| 1221 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_secure_, | 1260 EXPECT_TRUE(SetCookieWithOptions(cm.get(), |
| 1261 url_google_secure_, |
| 1222 "E=F; domain=.google.izzle; secure", | 1262 "E=F; domain=.google.izzle; secure", |
| 1223 options)); | 1263 options)); |
| 1224 | 1264 |
| 1225 const Time last_access_date(GetFirstCookieAccessDate(cm)); | 1265 const Time last_access_date(GetFirstCookieAccessDate(cm.get())); |
| 1226 | 1266 |
| 1227 base::PlatformThread::Sleep( | 1267 base::PlatformThread::Sleep( |
| 1228 base::TimeDelta::FromMilliseconds(kAccessDelayMs)); | 1268 base::TimeDelta::FromMilliseconds(kAccessDelayMs)); |
| 1229 | 1269 |
| 1230 // Check cookies for url. | 1270 // Check cookies for url. |
| 1231 CookieList cookies = GetAllCookiesForURL(cm, url_google_); | 1271 CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_); |
| 1232 CookieList::iterator it = cookies.begin(); | 1272 CookieList::iterator it = cookies.begin(); |
| 1233 | 1273 |
| 1234 ASSERT_TRUE(it != cookies.end()); | 1274 ASSERT_TRUE(it != cookies.end()); |
| 1235 EXPECT_EQ("www.google.izzle", it->Domain()); | 1275 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 1236 EXPECT_EQ("A", it->Name()); | 1276 EXPECT_EQ("A", it->Name()); |
| 1237 | 1277 |
| 1238 ASSERT_TRUE(++it != cookies.end()); | 1278 ASSERT_TRUE(++it != cookies.end()); |
| 1239 EXPECT_EQ(".google.izzle", it->Domain()); | 1279 EXPECT_EQ(".google.izzle", it->Domain()); |
| 1240 EXPECT_EQ("C", it->Name()); | 1280 EXPECT_EQ("C", it->Name()); |
| 1241 | 1281 |
| 1242 ASSERT_TRUE(++it == cookies.end()); | 1282 ASSERT_TRUE(++it == cookies.end()); |
| 1243 | 1283 |
| 1244 // Check cookies for url excluding http-only cookies. | 1284 // Check cookies for url excluding http-only cookies. |
| 1245 cookies = | 1285 cookies = |
| 1246 GetAllCookiesForURLWithOptions(cm, url_google_, CookieOptions()); | 1286 GetAllCookiesForURLWithOptions(cm.get(), url_google_, CookieOptions()); |
| 1247 it = cookies.begin(); | 1287 it = cookies.begin(); |
| 1248 | 1288 |
| 1249 ASSERT_TRUE(it != cookies.end()); | 1289 ASSERT_TRUE(it != cookies.end()); |
| 1250 EXPECT_EQ(".google.izzle", it->Domain()); | 1290 EXPECT_EQ(".google.izzle", it->Domain()); |
| 1251 EXPECT_EQ("C", it->Name()); | 1291 EXPECT_EQ("C", it->Name()); |
| 1252 | 1292 |
| 1253 ASSERT_TRUE(++it == cookies.end()); | 1293 ASSERT_TRUE(++it == cookies.end()); |
| 1254 | 1294 |
| 1255 // Test secure cookies. | 1295 // Test secure cookies. |
| 1256 cookies = GetAllCookiesForURL(cm, url_google_secure_); | 1296 cookies = GetAllCookiesForURL(cm.get(), url_google_secure_); |
| 1257 it = cookies.begin(); | 1297 it = cookies.begin(); |
| 1258 | 1298 |
| 1259 ASSERT_TRUE(it != cookies.end()); | 1299 ASSERT_TRUE(it != cookies.end()); |
| 1260 EXPECT_EQ("www.google.izzle", it->Domain()); | 1300 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 1261 EXPECT_EQ("A", it->Name()); | 1301 EXPECT_EQ("A", it->Name()); |
| 1262 | 1302 |
| 1263 ASSERT_TRUE(++it != cookies.end()); | 1303 ASSERT_TRUE(++it != cookies.end()); |
| 1264 EXPECT_EQ(".google.izzle", it->Domain()); | 1304 EXPECT_EQ(".google.izzle", it->Domain()); |
| 1265 EXPECT_EQ("C", it->Name()); | 1305 EXPECT_EQ("C", it->Name()); |
| 1266 | 1306 |
| 1267 ASSERT_TRUE(++it != cookies.end()); | 1307 ASSERT_TRUE(++it != cookies.end()); |
| 1268 EXPECT_EQ(".google.izzle", it->Domain()); | 1308 EXPECT_EQ(".google.izzle", it->Domain()); |
| 1269 EXPECT_EQ("E", it->Name()); | 1309 EXPECT_EQ("E", it->Name()); |
| 1270 | 1310 |
| 1271 ASSERT_TRUE(++it == cookies.end()); | 1311 ASSERT_TRUE(++it == cookies.end()); |
| 1272 | 1312 |
| 1273 // Reading after a short wait should not update the access date. | 1313 // Reading after a short wait should not update the access date. |
| 1274 EXPECT_TRUE(last_access_date == GetFirstCookieAccessDate(cm)); | 1314 EXPECT_TRUE(last_access_date == GetFirstCookieAccessDate(cm.get())); |
| 1275 } | 1315 } |
| 1276 | 1316 |
| 1277 TEST_F(CookieMonsterTest, GetAllCookiesForURLPathMatching) { | 1317 TEST_F(CookieMonsterTest, GetAllCookiesForURLPathMatching) { |
| 1278 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1318 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1279 CookieOptions options; | 1319 CookieOptions options; |
| 1280 | 1320 |
| 1281 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_foo_, | 1321 EXPECT_TRUE(SetCookieWithOptions( |
| 1282 "A=B; path=/foo;", options)); | 1322 cm.get(), url_google_foo_, "A=B; path=/foo;", options)); |
| 1283 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_bar_, | 1323 EXPECT_TRUE(SetCookieWithOptions( |
| 1284 "C=D; path=/bar;", options)); | 1324 cm.get(), url_google_bar_, "C=D; path=/bar;", options)); |
| 1285 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, | 1325 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "E=F;", options)); |
| 1286 "E=F;", options)); | |
| 1287 | 1326 |
| 1288 CookieList cookies = GetAllCookiesForURL(cm, url_google_foo_); | 1327 CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_foo_); |
| 1289 CookieList::iterator it = cookies.begin(); | 1328 CookieList::iterator it = cookies.begin(); |
| 1290 | 1329 |
| 1291 ASSERT_TRUE(it != cookies.end()); | 1330 ASSERT_TRUE(it != cookies.end()); |
| 1292 EXPECT_EQ("A", it->Name()); | 1331 EXPECT_EQ("A", it->Name()); |
| 1293 EXPECT_EQ("/foo", it->Path()); | 1332 EXPECT_EQ("/foo", it->Path()); |
| 1294 | 1333 |
| 1295 ASSERT_TRUE(++it != cookies.end()); | 1334 ASSERT_TRUE(++it != cookies.end()); |
| 1296 EXPECT_EQ("E", it->Name()); | 1335 EXPECT_EQ("E", it->Name()); |
| 1297 EXPECT_EQ("/", it->Path()); | 1336 EXPECT_EQ("/", it->Path()); |
| 1298 | 1337 |
| 1299 ASSERT_TRUE(++it == cookies.end()); | 1338 ASSERT_TRUE(++it == cookies.end()); |
| 1300 | 1339 |
| 1301 cookies = GetAllCookiesForURL(cm, url_google_bar_); | 1340 cookies = GetAllCookiesForURL(cm.get(), url_google_bar_); |
| 1302 it = cookies.begin(); | 1341 it = cookies.begin(); |
| 1303 | 1342 |
| 1304 ASSERT_TRUE(it != cookies.end()); | 1343 ASSERT_TRUE(it != cookies.end()); |
| 1305 EXPECT_EQ("C", it->Name()); | 1344 EXPECT_EQ("C", it->Name()); |
| 1306 EXPECT_EQ("/bar", it->Path()); | 1345 EXPECT_EQ("/bar", it->Path()); |
| 1307 | 1346 |
| 1308 ASSERT_TRUE(++it != cookies.end()); | 1347 ASSERT_TRUE(++it != cookies.end()); |
| 1309 EXPECT_EQ("E", it->Name()); | 1348 EXPECT_EQ("E", it->Name()); |
| 1310 EXPECT_EQ("/", it->Path()); | 1349 EXPECT_EQ("/", it->Path()); |
| 1311 | 1350 |
| 1312 ASSERT_TRUE(++it == cookies.end()); | 1351 ASSERT_TRUE(++it == cookies.end()); |
| 1313 } | 1352 } |
| 1314 | 1353 |
| 1315 TEST_F(CookieMonsterTest, DeleteCookieByName) { | 1354 TEST_F(CookieMonsterTest, DeleteCookieByName) { |
| 1316 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1355 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1317 | 1356 |
| 1318 EXPECT_TRUE(SetCookie(cm, url_google_, "A=A1; path=/")); | 1357 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=A1; path=/")); |
| 1319 EXPECT_TRUE(SetCookie(cm, url_google_, "A=A2; path=/foo")); | 1358 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=A2; path=/foo")); |
| 1320 EXPECT_TRUE(SetCookie(cm, url_google_, "A=A3; path=/bar")); | 1359 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=A3; path=/bar")); |
| 1321 EXPECT_TRUE(SetCookie(cm, url_google_, "B=B1; path=/")); | 1360 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=B1; path=/")); |
| 1322 EXPECT_TRUE(SetCookie(cm, url_google_, "B=B2; path=/foo")); | 1361 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=B2; path=/foo")); |
| 1323 EXPECT_TRUE(SetCookie(cm, url_google_, "B=B3; path=/bar")); | 1362 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=B3; path=/bar")); |
| 1324 | 1363 |
| 1325 DeleteCookie(cm, GURL(std::string(kUrlGoogle) + "/foo/bar"), "A"); | 1364 DeleteCookie(cm.get(), GURL(std::string(kUrlGoogle) + "/foo/bar"), "A"); |
| 1326 | 1365 |
| 1327 CookieList cookies = GetAllCookies(cm); | 1366 CookieList cookies = GetAllCookies(cm.get()); |
| 1328 size_t expected_size = 4; | 1367 size_t expected_size = 4; |
| 1329 EXPECT_EQ(expected_size, cookies.size()); | 1368 EXPECT_EQ(expected_size, cookies.size()); |
| 1330 for (CookieList::iterator it = cookies.begin(); | 1369 for (CookieList::iterator it = cookies.begin(); |
| 1331 it != cookies.end(); ++it) { | 1370 it != cookies.end(); ++it) { |
| 1332 EXPECT_NE("A1", it->Value()); | 1371 EXPECT_NE("A1", it->Value()); |
| 1333 EXPECT_NE("A2", it->Value()); | 1372 EXPECT_NE("A2", it->Value()); |
| 1334 } | 1373 } |
| 1335 } | 1374 } |
| 1336 | 1375 |
| 1337 TEST_F(CookieMonsterTest, InitializeFromCookieMonster) { | 1376 TEST_F(CookieMonsterTest, InitializeFromCookieMonster) { |
| 1338 scoped_refptr<CookieMonster> cm_1(new CookieMonster(NULL, NULL)); | 1377 scoped_refptr<CookieMonster> cm_1(new CookieMonster(NULL, NULL)); |
| 1339 CookieOptions options; | 1378 CookieOptions options; |
| 1340 | 1379 |
| 1341 EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_foo_, | 1380 EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_foo_, |
| 1342 "A1=B; path=/foo;", | 1381 "A1=B; path=/foo;", |
| 1343 options)); | 1382 options)); |
| 1344 EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_bar_, | 1383 EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_bar_, |
| 1345 "A2=D; path=/bar;", | 1384 "A2=D; path=/bar;", |
| 1346 options)); | 1385 options)); |
| 1347 EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_, | 1386 EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_, |
| 1348 "A3=F;", | 1387 "A3=F;", |
| 1349 options)); | 1388 options)); |
| 1350 | 1389 |
| 1351 CookieList cookies_1 = GetAllCookies(cm_1); | 1390 CookieList cookies_1 = GetAllCookies(cm_1.get()); |
| 1352 scoped_refptr<CookieMonster> cm_2(new CookieMonster(NULL, NULL)); | 1391 scoped_refptr<CookieMonster> cm_2(new CookieMonster(NULL, NULL)); |
| 1353 ASSERT_TRUE(cm_2->InitializeFrom(cookies_1)); | 1392 ASSERT_TRUE(cm_2->InitializeFrom(cookies_1)); |
| 1354 CookieList cookies_2 = GetAllCookies(cm_2); | 1393 CookieList cookies_2 = GetAllCookies(cm_2.get()); |
| 1355 | 1394 |
| 1356 size_t expected_size = 3; | 1395 size_t expected_size = 3; |
| 1357 EXPECT_EQ(expected_size, cookies_2.size()); | 1396 EXPECT_EQ(expected_size, cookies_2.size()); |
| 1358 | 1397 |
| 1359 CookieList::iterator it = cookies_2.begin(); | 1398 CookieList::iterator it = cookies_2.begin(); |
| 1360 | 1399 |
| 1361 ASSERT_TRUE(it != cookies_2.end()); | 1400 ASSERT_TRUE(it != cookies_2.end()); |
| 1362 EXPECT_EQ("A1", it->Name()); | 1401 EXPECT_EQ("A1", it->Name()); |
| 1363 EXPECT_EQ("/foo", it->Path()); | 1402 EXPECT_EQ("/foo", it->Path()); |
| 1364 | 1403 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1428 | 1467 |
| 1429 // Insert 1 cookie with name "Y" on path "/". | 1468 // Insert 1 cookie with name "Y" on path "/". |
| 1430 AddCookieToList("www.google.com", | 1469 AddCookieToList("www.google.com", |
| 1431 "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 1470 "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", |
| 1432 Time::Now() + TimeDelta::FromDays(10), | 1471 Time::Now() + TimeDelta::FromDays(10), |
| 1433 &initial_cookies); | 1472 &initial_cookies); |
| 1434 | 1473 |
| 1435 // Inject our initial cookies into the mock PersistentCookieStore. | 1474 // Inject our initial cookies into the mock PersistentCookieStore. |
| 1436 store->SetLoadExpectation(true, initial_cookies); | 1475 store->SetLoadExpectation(true, initial_cookies); |
| 1437 | 1476 |
| 1438 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 1477 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| 1439 | 1478 |
| 1440 // Verify that duplicates were not imported for path "/". | 1479 // Verify that duplicates were not imported for path "/". |
| 1441 // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4). | 1480 // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4). |
| 1442 EXPECT_EQ("X=3; Y=a", GetCookies(cm, GURL("http://www.google.com/"))); | 1481 EXPECT_EQ("X=3; Y=a", GetCookies(cm.get(), GURL("http://www.google.com/"))); |
| 1443 | 1482 |
| 1444 // Verify that same-named cookie on a different path ("/x2") didn't get | 1483 // Verify that same-named cookie on a different path ("/x2") didn't get |
| 1445 // messed up. | 1484 // messed up. |
| 1446 EXPECT_EQ("X=a1; X=3; Y=a", | 1485 EXPECT_EQ("X=a1; X=3; Y=a", |
| 1447 GetCookies(cm, GURL("http://www.google.com/2/x"))); | 1486 GetCookies(cm.get(), GURL("http://www.google.com/2/x"))); |
| 1448 | 1487 |
| 1449 // Verify that the PersistentCookieStore was told to kill its 4 duplicates. | 1488 // Verify that the PersistentCookieStore was told to kill its 4 duplicates. |
| 1450 ASSERT_EQ(4u, store->commands().size()); | 1489 ASSERT_EQ(4u, store->commands().size()); |
| 1451 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[0].type); | 1490 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[0].type); |
| 1452 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 1491 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); |
| 1453 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[2].type); | 1492 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[2].type); |
| 1454 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); | 1493 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); |
| 1455 } | 1494 } |
| 1456 | 1495 |
| 1457 // Tests importing from a persistent cookie store that contains cookies | 1496 // Tests importing from a persistent cookie store that contains cookies |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1477 AddCookieToList("www.google.com", "X=4; path=/", now, &initial_cookies); | 1516 AddCookieToList("www.google.com", "X=4; path=/", now, &initial_cookies); |
| 1478 | 1517 |
| 1479 AddCookieToList("www.google.com", "Y=1; path=/", earlier, &initial_cookies); | 1518 AddCookieToList("www.google.com", "Y=1; path=/", earlier, &initial_cookies); |
| 1480 AddCookieToList("www.google.com", "Y=2; path=/", earlier, &initial_cookies); | 1519 AddCookieToList("www.google.com", "Y=2; path=/", earlier, &initial_cookies); |
| 1481 AddCookieToList("www.google.com", "Y=3; path=/", earlier, &initial_cookies); | 1520 AddCookieToList("www.google.com", "Y=3; path=/", earlier, &initial_cookies); |
| 1482 AddCookieToList("www.google.com", "Y=4; path=/", earlier, &initial_cookies); | 1521 AddCookieToList("www.google.com", "Y=4; path=/", earlier, &initial_cookies); |
| 1483 | 1522 |
| 1484 // Inject our initial cookies into the mock PersistentCookieStore. | 1523 // Inject our initial cookies into the mock PersistentCookieStore. |
| 1485 store->SetLoadExpectation(true, initial_cookies); | 1524 store->SetLoadExpectation(true, initial_cookies); |
| 1486 | 1525 |
| 1487 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 1526 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| 1488 | 1527 |
| 1489 CookieList list(GetAllCookies(cm)); | 1528 CookieList list(GetAllCookies(cm.get())); |
| 1490 EXPECT_EQ(2U, list.size()); | 1529 EXPECT_EQ(2U, list.size()); |
| 1491 // Confirm that we have one of each. | 1530 // Confirm that we have one of each. |
| 1492 std::string name1(list[0].Name()); | 1531 std::string name1(list[0].Name()); |
| 1493 std::string name2(list[1].Name()); | 1532 std::string name2(list[1].Name()); |
| 1494 EXPECT_TRUE(name1 == "X" || name2 == "X"); | 1533 EXPECT_TRUE(name1 == "X" || name2 == "X"); |
| 1495 EXPECT_TRUE(name1 == "Y" || name2 == "Y"); | 1534 EXPECT_TRUE(name1 == "Y" || name2 == "Y"); |
| 1496 EXPECT_NE(name1, name2); | 1535 EXPECT_NE(name1, name2); |
| 1497 } | 1536 } |
| 1498 | 1537 |
| 1499 TEST_F(CookieMonsterTest, Delegate) { | 1538 TEST_F(CookieMonsterTest, Delegate) { |
| 1500 scoped_refptr<MockPersistentCookieStore> store( | 1539 scoped_refptr<MockPersistentCookieStore> store( |
| 1501 new MockPersistentCookieStore); | 1540 new MockPersistentCookieStore); |
| 1502 scoped_refptr<MockCookieMonsterDelegate> delegate( | 1541 scoped_refptr<MockCookieMonsterDelegate> delegate( |
| 1503 new MockCookieMonsterDelegate); | 1542 new MockCookieMonsterDelegate); |
| 1504 scoped_refptr<CookieMonster> cm(new CookieMonster(store, delegate)); | 1543 scoped_refptr<CookieMonster> cm( |
| 1544 new CookieMonster(store.get(), delegate.get())); |
| 1505 | 1545 |
| 1506 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 1546 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 1507 EXPECT_TRUE(SetCookie(cm, url_google_, "C=D")); | 1547 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "C=D")); |
| 1508 EXPECT_TRUE(SetCookie(cm, url_google_, "E=F")); | 1548 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "E=F")); |
| 1509 EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm, url_google_)); | 1549 EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm.get(), url_google_)); |
| 1510 ASSERT_EQ(3u, delegate->changes().size()); | 1550 ASSERT_EQ(3u, delegate->changes().size()); |
| 1511 EXPECT_FALSE(delegate->changes()[0].second); | 1551 EXPECT_FALSE(delegate->changes()[0].second); |
| 1512 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); | 1552 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); |
| 1513 EXPECT_EQ("A", delegate->changes()[0].first.Name()); | 1553 EXPECT_EQ("A", delegate->changes()[0].first.Name()); |
| 1514 EXPECT_EQ("B", delegate->changes()[0].first.Value()); | 1554 EXPECT_EQ("B", delegate->changes()[0].first.Value()); |
| 1515 EXPECT_EQ(url_google_.host(), delegate->changes()[1].first.Domain()); | 1555 EXPECT_EQ(url_google_.host(), delegate->changes()[1].first.Domain()); |
| 1516 EXPECT_FALSE(delegate->changes()[1].second); | 1556 EXPECT_FALSE(delegate->changes()[1].second); |
| 1517 EXPECT_EQ("C", delegate->changes()[1].first.Name()); | 1557 EXPECT_EQ("C", delegate->changes()[1].first.Name()); |
| 1518 EXPECT_EQ("D", delegate->changes()[1].first.Value()); | 1558 EXPECT_EQ("D", delegate->changes()[1].first.Value()); |
| 1519 EXPECT_EQ(url_google_.host(), delegate->changes()[2].first.Domain()); | 1559 EXPECT_EQ(url_google_.host(), delegate->changes()[2].first.Domain()); |
| 1520 EXPECT_FALSE(delegate->changes()[2].second); | 1560 EXPECT_FALSE(delegate->changes()[2].second); |
| 1521 EXPECT_EQ("E", delegate->changes()[2].first.Name()); | 1561 EXPECT_EQ("E", delegate->changes()[2].first.Name()); |
| 1522 EXPECT_EQ("F", delegate->changes()[2].first.Value()); | 1562 EXPECT_EQ("F", delegate->changes()[2].first.Value()); |
| 1523 delegate->reset(); | 1563 delegate->reset(); |
| 1524 | 1564 |
| 1525 EXPECT_TRUE(FindAndDeleteCookie(cm, url_google_.host(), "C")); | 1565 EXPECT_TRUE(FindAndDeleteCookie(cm.get(), url_google_.host(), "C")); |
| 1526 EXPECT_EQ("A=B; E=F", GetCookies(cm, url_google_)); | 1566 EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); |
| 1527 ASSERT_EQ(1u, delegate->changes().size()); | 1567 ASSERT_EQ(1u, delegate->changes().size()); |
| 1528 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); | 1568 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); |
| 1529 EXPECT_TRUE(delegate->changes()[0].second); | 1569 EXPECT_TRUE(delegate->changes()[0].second); |
| 1530 EXPECT_EQ("C", delegate->changes()[0].first.Name()); | 1570 EXPECT_EQ("C", delegate->changes()[0].first.Name()); |
| 1531 EXPECT_EQ("D", delegate->changes()[0].first.Value()); | 1571 EXPECT_EQ("D", delegate->changes()[0].first.Value()); |
| 1532 delegate->reset(); | 1572 delegate->reset(); |
| 1533 | 1573 |
| 1534 EXPECT_FALSE(FindAndDeleteCookie(cm, "random.host", "E")); | 1574 EXPECT_FALSE(FindAndDeleteCookie(cm.get(), "random.host", "E")); |
| 1535 EXPECT_EQ("A=B; E=F", GetCookies(cm, url_google_)); | 1575 EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); |
| 1536 EXPECT_EQ(0u, delegate->changes().size()); | 1576 EXPECT_EQ(0u, delegate->changes().size()); |
| 1537 | 1577 |
| 1538 // Insert a cookie "a" for path "/path1" | 1578 // Insert a cookie "a" for path "/path1" |
| 1539 EXPECT_TRUE( | 1579 EXPECT_TRUE(SetCookie(cm.get(), |
| 1540 SetCookie(cm, url_google_, "a=val1; path=/path1; " | 1580 url_google_, |
| 1541 "expires=Mon, 18-Apr-22 22:50:13 GMT")); | 1581 "a=val1; path=/path1; " |
| 1582 "expires=Mon, 18-Apr-22 22:50:13 GMT")); |
| 1542 ASSERT_EQ(1u, store->commands().size()); | 1583 ASSERT_EQ(1u, store->commands().size()); |
| 1543 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 1584 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); |
| 1544 ASSERT_EQ(1u, delegate->changes().size()); | 1585 ASSERT_EQ(1u, delegate->changes().size()); |
| 1545 EXPECT_FALSE(delegate->changes()[0].second); | 1586 EXPECT_FALSE(delegate->changes()[0].second); |
| 1546 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); | 1587 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); |
| 1547 EXPECT_EQ("a", delegate->changes()[0].first.Name()); | 1588 EXPECT_EQ("a", delegate->changes()[0].first.Name()); |
| 1548 EXPECT_EQ("val1", delegate->changes()[0].first.Value()); | 1589 EXPECT_EQ("val1", delegate->changes()[0].first.Value()); |
| 1549 delegate->reset(); | 1590 delegate->reset(); |
| 1550 | 1591 |
| 1551 // Insert a cookie "a" for path "/path1", that is httponly. This should | 1592 // Insert a cookie "a" for path "/path1", that is httponly. This should |
| 1552 // overwrite the non-http-only version. | 1593 // overwrite the non-http-only version. |
| 1553 CookieOptions allow_httponly; | 1594 CookieOptions allow_httponly; |
| 1554 allow_httponly.set_include_httponly(); | 1595 allow_httponly.set_include_httponly(); |
| 1555 EXPECT_TRUE( | 1596 EXPECT_TRUE(SetCookieWithOptions(cm.get(), |
| 1556 SetCookieWithOptions(cm, url_google_, | 1597 url_google_, |
| 1557 "a=val2; path=/path1; httponly; " | 1598 "a=val2; path=/path1; httponly; " |
| 1558 "expires=Mon, 18-Apr-22 22:50:14 GMT", | 1599 "expires=Mon, 18-Apr-22 22:50:14 GMT", |
| 1559 allow_httponly)); | 1600 allow_httponly)); |
| 1560 ASSERT_EQ(3u, store->commands().size()); | 1601 ASSERT_EQ(3u, store->commands().size()); |
| 1561 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 1602 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); |
| 1562 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); | 1603 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); |
| 1563 ASSERT_EQ(2u, delegate->changes().size()); | 1604 ASSERT_EQ(2u, delegate->changes().size()); |
| 1564 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); | 1605 EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); |
| 1565 EXPECT_TRUE(delegate->changes()[0].second); | 1606 EXPECT_TRUE(delegate->changes()[0].second); |
| 1566 EXPECT_EQ("a", delegate->changes()[0].first.Name()); | 1607 EXPECT_EQ("a", delegate->changes()[0].first.Name()); |
| 1567 EXPECT_EQ("val1", delegate->changes()[0].first.Value()); | 1608 EXPECT_EQ("val1", delegate->changes()[0].first.Value()); |
| 1568 EXPECT_EQ(url_google_.host(), delegate->changes()[1].first.Domain()); | 1609 EXPECT_EQ(url_google_.host(), delegate->changes()[1].first.Domain()); |
| 1569 EXPECT_FALSE(delegate->changes()[1].second); | 1610 EXPECT_FALSE(delegate->changes()[1].second); |
| 1570 EXPECT_EQ("a", delegate->changes()[1].first.Name()); | 1611 EXPECT_EQ("a", delegate->changes()[1].first.Name()); |
| 1571 EXPECT_EQ("val2", delegate->changes()[1].first.Value()); | 1612 EXPECT_EQ("val2", delegate->changes()[1].first.Value()); |
| 1572 delegate->reset(); | 1613 delegate->reset(); |
| 1573 } | 1614 } |
| 1574 | 1615 |
| 1575 TEST_F(CookieMonsterTest, SetCookieWithDetails) { | 1616 TEST_F(CookieMonsterTest, SetCookieWithDetails) { |
| 1576 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1617 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1577 | 1618 |
| 1578 EXPECT_TRUE(SetCookieWithDetails( | 1619 EXPECT_TRUE(SetCookieWithDetails(cm.get(), |
| 1579 cm, url_google_foo_, "A", "B", std::string(), "/foo", base::Time(), | 1620 url_google_foo_, |
| 1580 false, false, COOKIE_PRIORITY_DEFAULT)); | 1621 "A", |
| 1581 EXPECT_TRUE(SetCookieWithDetails( | 1622 "B", |
| 1582 cm, url_google_bar_, "C", "D", "google.izzle", "/bar", base::Time(), | 1623 std::string(), |
| 1583 false, true, COOKIE_PRIORITY_DEFAULT)); | 1624 "/foo", |
| 1584 EXPECT_TRUE(SetCookieWithDetails( | 1625 base::Time(), |
| 1585 cm, url_google_, "E", "F", std::string(), std::string(), base::Time(), | 1626 false, |
| 1586 true, false, COOKIE_PRIORITY_DEFAULT)); | 1627 false, |
| 1628 COOKIE_PRIORITY_DEFAULT)); |
| 1629 EXPECT_TRUE(SetCookieWithDetails(cm.get(), |
| 1630 url_google_bar_, |
| 1631 "C", |
| 1632 "D", |
| 1633 "google.izzle", |
| 1634 "/bar", |
| 1635 base::Time(), |
| 1636 false, |
| 1637 true, |
| 1638 COOKIE_PRIORITY_DEFAULT)); |
| 1639 EXPECT_TRUE(SetCookieWithDetails(cm.get(), |
| 1640 url_google_, |
| 1641 "E", |
| 1642 "F", |
| 1643 std::string(), |
| 1644 std::string(), |
| 1645 base::Time(), |
| 1646 true, |
| 1647 false, |
| 1648 COOKIE_PRIORITY_DEFAULT)); |
| 1587 | 1649 |
| 1588 // Test that malformed attributes fail to set the cookie. | 1650 // Test that malformed attributes fail to set the cookie. |
| 1589 EXPECT_FALSE(SetCookieWithDetails( | 1651 EXPECT_FALSE(SetCookieWithDetails(cm.get(), |
| 1590 cm, url_google_foo_, " A", "B", std::string(), "/foo", base::Time(), | 1652 url_google_foo_, |
| 1591 false, false, COOKIE_PRIORITY_DEFAULT)); | 1653 " A", |
| 1592 EXPECT_FALSE(SetCookieWithDetails( | 1654 "B", |
| 1593 cm, url_google_foo_, "A;", "B", std::string(), "/foo", base::Time(), | 1655 std::string(), |
| 1594 false, false, COOKIE_PRIORITY_DEFAULT)); | 1656 "/foo", |
| 1595 EXPECT_FALSE(SetCookieWithDetails( | 1657 base::Time(), |
| 1596 cm, url_google_foo_, "A=", "B", std::string(), "/foo", base::Time(), | 1658 false, |
| 1597 false, false, COOKIE_PRIORITY_DEFAULT)); | 1659 false, |
| 1598 EXPECT_FALSE(SetCookieWithDetails( | 1660 COOKIE_PRIORITY_DEFAULT)); |
| 1599 cm, url_google_foo_, "A", "B", "google.ozzzzzzle", "foo", base::Time(), | 1661 EXPECT_FALSE(SetCookieWithDetails(cm.get(), |
| 1600 false, false, COOKIE_PRIORITY_DEFAULT)); | 1662 url_google_foo_, |
| 1601 EXPECT_FALSE(SetCookieWithDetails( | 1663 "A;", |
| 1602 cm, url_google_foo_, "A=", "B", std::string(), "foo", base::Time(), | 1664 "B", |
| 1603 false, false, COOKIE_PRIORITY_DEFAULT)); | 1665 std::string(), |
| 1666 "/foo", |
| 1667 base::Time(), |
| 1668 false, |
| 1669 false, |
| 1670 COOKIE_PRIORITY_DEFAULT)); |
| 1671 EXPECT_FALSE(SetCookieWithDetails(cm.get(), |
| 1672 url_google_foo_, |
| 1673 "A=", |
| 1674 "B", |
| 1675 std::string(), |
| 1676 "/foo", |
| 1677 base::Time(), |
| 1678 false, |
| 1679 false, |
| 1680 COOKIE_PRIORITY_DEFAULT)); |
| 1681 EXPECT_FALSE(SetCookieWithDetails(cm.get(), |
| 1682 url_google_foo_, |
| 1683 "A", |
| 1684 "B", |
| 1685 "google.ozzzzzzle", |
| 1686 "foo", |
| 1687 base::Time(), |
| 1688 false, |
| 1689 false, |
| 1690 COOKIE_PRIORITY_DEFAULT)); |
| 1691 EXPECT_FALSE(SetCookieWithDetails(cm.get(), |
| 1692 url_google_foo_, |
| 1693 "A=", |
| 1694 "B", |
| 1695 std::string(), |
| 1696 "foo", |
| 1697 base::Time(), |
| 1698 false, |
| 1699 false, |
| 1700 COOKIE_PRIORITY_DEFAULT)); |
| 1604 | 1701 |
| 1605 CookieList cookies = GetAllCookiesForURL(cm, url_google_foo_); | 1702 CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_foo_); |
| 1606 CookieList::iterator it = cookies.begin(); | 1703 CookieList::iterator it = cookies.begin(); |
| 1607 | 1704 |
| 1608 ASSERT_TRUE(it != cookies.end()); | 1705 ASSERT_TRUE(it != cookies.end()); |
| 1609 EXPECT_EQ("A", it->Name()); | 1706 EXPECT_EQ("A", it->Name()); |
| 1610 EXPECT_EQ("B", it->Value()); | 1707 EXPECT_EQ("B", it->Value()); |
| 1611 EXPECT_EQ("www.google.izzle", it->Domain()); | 1708 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 1612 EXPECT_EQ("/foo", it->Path()); | 1709 EXPECT_EQ("/foo", it->Path()); |
| 1613 EXPECT_FALSE(it->IsPersistent()); | 1710 EXPECT_FALSE(it->IsPersistent()); |
| 1614 EXPECT_FALSE(it->IsSecure()); | 1711 EXPECT_FALSE(it->IsSecure()); |
| 1615 EXPECT_FALSE(it->IsHttpOnly()); | 1712 EXPECT_FALSE(it->IsHttpOnly()); |
| 1616 | 1713 |
| 1617 ASSERT_TRUE(++it == cookies.end()); | 1714 ASSERT_TRUE(++it == cookies.end()); |
| 1618 | 1715 |
| 1619 cookies = GetAllCookiesForURL(cm, url_google_bar_); | 1716 cookies = GetAllCookiesForURL(cm.get(), url_google_bar_); |
| 1620 it = cookies.begin(); | 1717 it = cookies.begin(); |
| 1621 | 1718 |
| 1622 ASSERT_TRUE(it != cookies.end()); | 1719 ASSERT_TRUE(it != cookies.end()); |
| 1623 EXPECT_EQ("C", it->Name()); | 1720 EXPECT_EQ("C", it->Name()); |
| 1624 EXPECT_EQ("D", it->Value()); | 1721 EXPECT_EQ("D", it->Value()); |
| 1625 EXPECT_EQ(".google.izzle", it->Domain()); | 1722 EXPECT_EQ(".google.izzle", it->Domain()); |
| 1626 EXPECT_EQ("/bar", it->Path()); | 1723 EXPECT_EQ("/bar", it->Path()); |
| 1627 EXPECT_FALSE(it->IsSecure()); | 1724 EXPECT_FALSE(it->IsSecure()); |
| 1628 EXPECT_TRUE(it->IsHttpOnly()); | 1725 EXPECT_TRUE(it->IsHttpOnly()); |
| 1629 | 1726 |
| 1630 ASSERT_TRUE(++it == cookies.end()); | 1727 ASSERT_TRUE(++it == cookies.end()); |
| 1631 | 1728 |
| 1632 cookies = GetAllCookiesForURL(cm, url_google_secure_); | 1729 cookies = GetAllCookiesForURL(cm.get(), url_google_secure_); |
| 1633 it = cookies.begin(); | 1730 it = cookies.begin(); |
| 1634 | 1731 |
| 1635 ASSERT_TRUE(it != cookies.end()); | 1732 ASSERT_TRUE(it != cookies.end()); |
| 1636 EXPECT_EQ("E", it->Name()); | 1733 EXPECT_EQ("E", it->Name()); |
| 1637 EXPECT_EQ("F", it->Value()); | 1734 EXPECT_EQ("F", it->Value()); |
| 1638 EXPECT_EQ("/", it->Path()); | 1735 EXPECT_EQ("/", it->Path()); |
| 1639 EXPECT_EQ("www.google.izzle", it->Domain()); | 1736 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 1640 EXPECT_TRUE(it->IsSecure()); | 1737 EXPECT_TRUE(it->IsSecure()); |
| 1641 EXPECT_FALSE(it->IsHttpOnly()); | 1738 EXPECT_FALSE(it->IsHttpOnly()); |
| 1642 | 1739 |
| 1643 ASSERT_TRUE(++it == cookies.end()); | 1740 ASSERT_TRUE(++it == cookies.end()); |
| 1644 } | 1741 } |
| 1645 | 1742 |
| 1646 TEST_F(CookieMonsterTest, DeleteAllForHost) { | 1743 TEST_F(CookieMonsterTest, DeleteAllForHost) { |
| 1647 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1744 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1648 | 1745 |
| 1649 // Test probes: | 1746 // Test probes: |
| 1650 // * Non-secure URL, mid-level (http://w.c.b.a) | 1747 // * Non-secure URL, mid-level (http://w.c.b.a) |
| 1651 // * Secure URL, mid-level (https://w.c.b.a) | 1748 // * Secure URL, mid-level (https://w.c.b.a) |
| 1652 // * URL with path, mid-level (https:/w.c.b.a/dir1/xx) | 1749 // * URL with path, mid-level (https:/w.c.b.a/dir1/xx) |
| 1653 // All three tests should nuke only the midlevel host cookie, | 1750 // All three tests should nuke only the midlevel host cookie, |
| 1654 // the http_only cookie, the host secure cookie, and the two host | 1751 // the http_only cookie, the host secure cookie, and the two host |
| 1655 // path cookies. http_only, secure, and paths are ignored by | 1752 // path cookies. http_only, secure, and paths are ignored by |
| 1656 // this call, and domain cookies arent touched. | 1753 // this call, and domain cookies arent touched. |
| 1657 PopulateCmForDeleteAllForHost(cm); | 1754 PopulateCmForDeleteAllForHost(cm); |
| 1658 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", | 1755 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
| 1659 GetCookies(cm, GURL(kTopLevelDomainPlus3))); | 1756 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); |
| 1660 EXPECT_EQ("dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", | 1757 EXPECT_EQ("dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", |
| 1661 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure))); | 1758 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); |
| 1662 EXPECT_EQ("dom_1=X; host_1=X", GetCookies(cm, GURL(kTopLevelDomainPlus1))); | 1759 EXPECT_EQ("dom_1=X; host_1=X", |
| 1760 GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); |
| 1663 EXPECT_EQ("dom_path_2=X; host_path_2=X; dom_path_1=X; host_path_1=X; " | 1761 EXPECT_EQ("dom_path_2=X; host_path_2=X; dom_path_1=X; host_path_1=X; " |
| 1664 "dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", | 1762 "dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", |
| 1665 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure + | 1763 GetCookies(cm.get(), |
| 1666 std::string("/dir1/dir2/xxx")))); | 1764 GURL(kTopLevelDomainPlus2Secure + |
| 1765 std::string("/dir1/dir2/xxx")))); |
| 1667 | 1766 |
| 1668 EXPECT_EQ(5, DeleteAllForHost(cm, GURL(kTopLevelDomainPlus2))); | 1767 EXPECT_EQ(5, DeleteAllForHost(cm.get(), GURL(kTopLevelDomainPlus2))); |
| 1669 EXPECT_EQ(8U, GetAllCookies(cm).size()); | 1768 EXPECT_EQ(8U, GetAllCookies(cm.get()).size()); |
| 1670 | 1769 |
| 1671 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", | 1770 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
| 1672 GetCookies(cm, GURL(kTopLevelDomainPlus3))); | 1771 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); |
| 1673 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", | 1772 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", |
| 1674 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure))); | 1773 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); |
| 1675 EXPECT_EQ("dom_1=X; host_1=X", GetCookies(cm, GURL(kTopLevelDomainPlus1))); | 1774 EXPECT_EQ("dom_1=X; host_1=X", |
| 1775 GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); |
| 1676 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", | 1776 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", |
| 1677 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure + | 1777 GetCookies(cm.get(), |
| 1678 std::string("/dir1/dir2/xxx")))); | 1778 GURL(kTopLevelDomainPlus2Secure + |
| 1779 std::string("/dir1/dir2/xxx")))); |
| 1679 | 1780 |
| 1680 PopulateCmForDeleteAllForHost(cm); | 1781 PopulateCmForDeleteAllForHost(cm); |
| 1681 EXPECT_EQ(5, DeleteAllForHost(cm, GURL(kTopLevelDomainPlus2Secure))); | 1782 EXPECT_EQ(5, DeleteAllForHost(cm.get(), GURL(kTopLevelDomainPlus2Secure))); |
| 1682 EXPECT_EQ(8U, GetAllCookies(cm).size()); | 1783 EXPECT_EQ(8U, GetAllCookies(cm.get()).size()); |
| 1683 | 1784 |
| 1684 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", | 1785 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
| 1685 GetCookies(cm, GURL(kTopLevelDomainPlus3))); | 1786 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); |
| 1686 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", | 1787 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", |
| 1687 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure))); | 1788 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); |
| 1688 EXPECT_EQ("dom_1=X; host_1=X", GetCookies(cm, GURL(kTopLevelDomainPlus1))); | 1789 EXPECT_EQ("dom_1=X; host_1=X", |
| 1790 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", | 1791 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", |
| 1690 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure + | 1792 GetCookies(cm.get(), |
| 1691 std::string("/dir1/dir2/xxx")))); | 1793 GURL(kTopLevelDomainPlus2Secure + |
| 1794 std::string("/dir1/dir2/xxx")))); |
| 1692 | 1795 |
| 1693 PopulateCmForDeleteAllForHost(cm); | 1796 PopulateCmForDeleteAllForHost(cm); |
| 1694 EXPECT_EQ(5, DeleteAllForHost(cm, GURL(kTopLevelDomainPlus2Secure + | 1797 EXPECT_EQ(5, |
| 1695 std::string("/dir1/xxx")))); | 1798 DeleteAllForHost( |
| 1696 EXPECT_EQ(8U, GetAllCookies(cm).size()); | 1799 cm.get(), |
| 1800 GURL(kTopLevelDomainPlus2Secure + std::string("/dir1/xxx")))); |
| 1801 EXPECT_EQ(8U, GetAllCookies(cm.get()).size()); |
| 1697 | 1802 |
| 1698 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", | 1803 EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
| 1699 GetCookies(cm, GURL(kTopLevelDomainPlus3))); | 1804 GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); |
| 1700 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", | 1805 EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", |
| 1701 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure))); | 1806 GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); |
| 1702 EXPECT_EQ("dom_1=X; host_1=X", GetCookies(cm, GURL(kTopLevelDomainPlus1))); | 1807 EXPECT_EQ("dom_1=X; host_1=X", |
| 1808 GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); |
| 1703 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", | 1809 EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", |
| 1704 GetCookies(cm, GURL(kTopLevelDomainPlus2Secure + | 1810 GetCookies(cm.get(), |
| 1705 std::string("/dir1/dir2/xxx")))); | 1811 GURL(kTopLevelDomainPlus2Secure + |
| 1812 std::string("/dir1/dir2/xxx")))); |
| 1706 } | 1813 } |
| 1707 | 1814 |
| 1708 TEST_F(CookieMonsterTest, UniqueCreationTime) { | 1815 TEST_F(CookieMonsterTest, UniqueCreationTime) { |
| 1709 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1816 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1710 CookieOptions options; | 1817 CookieOptions options; |
| 1711 | 1818 |
| 1712 // Add in three cookies through every public interface to the | 1819 // Add in three cookies through every public interface to the |
| 1713 // CookieMonster and confirm that none of them have duplicate | 1820 // CookieMonster and confirm that none of them have duplicate |
| 1714 // creation times. | 1821 // creation times. |
| 1715 | 1822 |
| 1716 // SetCookieWithCreationTime and SetCookieWithCreationTimeAndOptions | 1823 // SetCookieWithCreationTime and SetCookieWithCreationTimeAndOptions |
| 1717 // are not included as they aren't going to be public for very much | 1824 // are not included as they aren't going to be public for very much |
| 1718 // longer. | 1825 // longer. |
| 1719 | 1826 |
| 1720 // SetCookie, SetCookieWithOptions, SetCookieWithDetails | 1827 // SetCookie, SetCookieWithOptions, SetCookieWithDetails |
| 1721 | 1828 |
| 1722 SetCookie(cm, url_google_, "SetCookie1=A"); | 1829 SetCookie(cm.get(), url_google_, "SetCookie1=A"); |
| 1723 SetCookie(cm, url_google_, "SetCookie2=A"); | 1830 SetCookie(cm.get(), url_google_, "SetCookie2=A"); |
| 1724 SetCookie(cm, url_google_, "SetCookie3=A"); | 1831 SetCookie(cm.get(), url_google_, "SetCookie3=A"); |
| 1725 | 1832 |
| 1726 SetCookieWithOptions(cm, url_google_, "setCookieWithOptions1=A", options); | 1833 SetCookieWithOptions( |
| 1727 SetCookieWithOptions(cm, url_google_, "setCookieWithOptions2=A", options); | 1834 cm.get(), url_google_, "setCookieWithOptions1=A", options); |
| 1728 SetCookieWithOptions(cm, url_google_, "setCookieWithOptions3=A", options); | 1835 SetCookieWithOptions( |
| 1836 cm.get(), url_google_, "setCookieWithOptions2=A", options); |
| 1837 SetCookieWithOptions( |
| 1838 cm.get(), url_google_, "setCookieWithOptions3=A", options); |
| 1729 | 1839 |
| 1730 SetCookieWithDetails(cm, url_google_, "setCookieWithDetails1", "A", | 1840 SetCookieWithDetails(cm.get(), |
| 1731 ".google.com", "/", Time(), false, false, | 1841 url_google_, |
| 1842 "setCookieWithDetails1", |
| 1843 "A", |
| 1844 ".google.com", |
| 1845 "/", |
| 1846 Time(), |
| 1847 false, |
| 1848 false, |
| 1732 COOKIE_PRIORITY_DEFAULT); | 1849 COOKIE_PRIORITY_DEFAULT); |
| 1733 SetCookieWithDetails(cm, url_google_, "setCookieWithDetails2", "A", | 1850 SetCookieWithDetails(cm.get(), |
| 1734 ".google.com", "/", Time(), false, false, | 1851 url_google_, |
| 1852 "setCookieWithDetails2", |
| 1853 "A", |
| 1854 ".google.com", |
| 1855 "/", |
| 1856 Time(), |
| 1857 false, |
| 1858 false, |
| 1735 COOKIE_PRIORITY_DEFAULT); | 1859 COOKIE_PRIORITY_DEFAULT); |
| 1736 SetCookieWithDetails(cm, url_google_, "setCookieWithDetails3", "A", | 1860 SetCookieWithDetails(cm.get(), |
| 1737 ".google.com", "/", Time(), false, false, | 1861 url_google_, |
| 1862 "setCookieWithDetails3", |
| 1863 "A", |
| 1864 ".google.com", |
| 1865 "/", |
| 1866 Time(), |
| 1867 false, |
| 1868 false, |
| 1738 COOKIE_PRIORITY_DEFAULT); | 1869 COOKIE_PRIORITY_DEFAULT); |
| 1739 | 1870 |
| 1740 // Now we check | 1871 // Now we check |
| 1741 CookieList cookie_list(GetAllCookies(cm)); | 1872 CookieList cookie_list(GetAllCookies(cm.get())); |
| 1742 typedef std::map<int64, CanonicalCookie> TimeCookieMap; | 1873 typedef std::map<int64, CanonicalCookie> TimeCookieMap; |
| 1743 TimeCookieMap check_map; | 1874 TimeCookieMap check_map; |
| 1744 for (CookieList::const_iterator it = cookie_list.begin(); | 1875 for (CookieList::const_iterator it = cookie_list.begin(); |
| 1745 it != cookie_list.end(); it++) { | 1876 it != cookie_list.end(); it++) { |
| 1746 const int64 creation_date = it->CreationDate().ToInternalValue(); | 1877 const int64 creation_date = it->CreationDate().ToInternalValue(); |
| 1747 TimeCookieMap::const_iterator | 1878 TimeCookieMap::const_iterator |
| 1748 existing_cookie_it(check_map.find(creation_date)); | 1879 existing_cookie_it(check_map.find(creation_date)); |
| 1749 EXPECT_TRUE(existing_cookie_it == check_map.end()) | 1880 EXPECT_TRUE(existing_cookie_it == check_map.end()) |
| 1750 << "Cookie " << it->Name() << " has same creation date (" | 1881 << "Cookie " << it->Name() << " has same creation date (" |
| 1751 << it->CreationDate().ToInternalValue() | 1882 << it->CreationDate().ToInternalValue() |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1800 "/path/from/cookie", expires + TimeDelta::FromSeconds(10), | 1931 "/path/from/cookie", expires + TimeDelta::FromSeconds(10), |
| 1801 true, true, COOKIE_PRIORITY_DEFAULT}, | 1932 true, true, COOKIE_PRIORITY_DEFAULT}, |
| 1802 {GURL("https://google.com"), "c", "3", "", "/another/path/to/cookie", | 1933 {GURL("https://google.com"), "c", "3", "", "/another/path/to/cookie", |
| 1803 base::Time::Now() + base::TimeDelta::FromSeconds(100), | 1934 base::Time::Now() + base::TimeDelta::FromSeconds(100), |
| 1804 true, false, COOKIE_PRIORITY_DEFAULT} | 1935 true, false, COOKIE_PRIORITY_DEFAULT} |
| 1805 }; | 1936 }; |
| 1806 const int INPUT_DELETE = 1; | 1937 const int INPUT_DELETE = 1; |
| 1807 | 1938 |
| 1808 // Create new cookies and flush them to the store. | 1939 // Create new cookies and flush them to the store. |
| 1809 { | 1940 { |
| 1810 scoped_refptr<CookieMonster> cmout(new CookieMonster(store, NULL)); | 1941 scoped_refptr<CookieMonster> cmout(new CookieMonster(store.get(), NULL)); |
| 1811 for (const CookiesInputInfo* p = input_info; | 1942 for (const CookiesInputInfo* p = input_info; |
| 1812 p < &input_info[ARRAYSIZE_UNSAFE(input_info)]; p++) { | 1943 p < &input_info[ARRAYSIZE_UNSAFE(input_info)]; |
| 1813 EXPECT_TRUE(SetCookieWithDetails(cmout, p->url, p->name, p->value, | 1944 p++) { |
| 1814 p->domain, p->path, p->expiration_time, | 1945 EXPECT_TRUE(SetCookieWithDetails(cmout.get(), |
| 1815 p->secure, p->http_only, p->priority)); | 1946 p->url, |
| 1947 p->name, |
| 1948 p->value, |
| 1949 p->domain, |
| 1950 p->path, |
| 1951 p->expiration_time, |
| 1952 p->secure, |
| 1953 p->http_only, |
| 1954 p->priority)); |
| 1816 } | 1955 } |
| 1817 GURL del_url(input_info[INPUT_DELETE].url.Resolve( | 1956 GURL del_url(input_info[INPUT_DELETE].url.Resolve( |
| 1818 input_info[INPUT_DELETE].path).spec()); | 1957 input_info[INPUT_DELETE].path).spec()); |
| 1819 DeleteCookie(cmout, del_url, input_info[INPUT_DELETE].name); | 1958 DeleteCookie(cmout.get(), del_url, input_info[INPUT_DELETE].name); |
| 1820 } | 1959 } |
| 1821 | 1960 |
| 1822 // Create a new cookie monster and make sure that everything is correct | 1961 // Create a new cookie monster and make sure that everything is correct |
| 1823 { | 1962 { |
| 1824 scoped_refptr<CookieMonster> cmin(new CookieMonster(store, NULL)); | 1963 scoped_refptr<CookieMonster> cmin(new CookieMonster(store.get(), NULL)); |
| 1825 CookieList cookies(GetAllCookies(cmin)); | 1964 CookieList cookies(GetAllCookies(cmin.get())); |
| 1826 ASSERT_EQ(2u, cookies.size()); | 1965 ASSERT_EQ(2u, cookies.size()); |
| 1827 // Ordering is path length, then creation time. So second cookie | 1966 // Ordering is path length, then creation time. So second cookie |
| 1828 // will come first, and we need to swap them. | 1967 // will come first, and we need to swap them. |
| 1829 std::swap(cookies[0], cookies[1]); | 1968 std::swap(cookies[0], cookies[1]); |
| 1830 for (int output_index = 0; output_index < 2; output_index++) { | 1969 for (int output_index = 0; output_index < 2; output_index++) { |
| 1831 int input_index = output_index * 2; | 1970 int input_index = output_index * 2; |
| 1832 const CookiesInputInfo* input = &input_info[input_index]; | 1971 const CookiesInputInfo* input = &input_info[input_index]; |
| 1833 const CanonicalCookie* output = &cookies[output_index]; | 1972 const CanonicalCookie* output = &cookies[output_index]; |
| 1834 | 1973 |
| 1835 EXPECT_EQ(input->name, output->Name()); | 1974 EXPECT_EQ(input->name, output->Name()); |
| 1836 EXPECT_EQ(input->value, output->Value()); | 1975 EXPECT_EQ(input->value, output->Value()); |
| 1837 EXPECT_EQ(input->url.host(), output->Domain()); | 1976 EXPECT_EQ(input->url.host(), output->Domain()); |
| 1838 EXPECT_EQ(input->path, output->Path()); | 1977 EXPECT_EQ(input->path, output->Path()); |
| 1839 EXPECT_LE(current.ToInternalValue(), | 1978 EXPECT_LE(current.ToInternalValue(), |
| 1840 output->CreationDate().ToInternalValue()); | 1979 output->CreationDate().ToInternalValue()); |
| 1841 EXPECT_EQ(input->secure, output->IsSecure()); | 1980 EXPECT_EQ(input->secure, output->IsSecure()); |
| 1842 EXPECT_EQ(input->http_only, output->IsHttpOnly()); | 1981 EXPECT_EQ(input->http_only, output->IsHttpOnly()); |
| 1843 EXPECT_TRUE(output->IsPersistent()); | 1982 EXPECT_TRUE(output->IsPersistent()); |
| 1844 EXPECT_EQ(input->expiration_time.ToInternalValue(), | 1983 EXPECT_EQ(input->expiration_time.ToInternalValue(), |
| 1845 output->ExpiryDate().ToInternalValue()); | 1984 output->ExpiryDate().ToInternalValue()); |
| 1846 } | 1985 } |
| 1847 } | 1986 } |
| 1848 } | 1987 } |
| 1849 | 1988 |
| 1850 TEST_F(CookieMonsterTest, CookieListOrdering) { | 1989 TEST_F(CookieMonsterTest, CookieListOrdering) { |
| 1851 // Put a random set of cookies into a monster and make sure | 1990 // Put a random set of cookies into a monster and make sure |
| 1852 // they're returned in the right order. | 1991 // they're returned in the right order. |
| 1853 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 1992 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1854 EXPECT_TRUE(SetCookie(cm, GURL("http://d.c.b.a.google.com/aa/x.html"), | 1993 EXPECT_TRUE( |
| 1855 "c=1")); | 1994 SetCookie(cm.get(), GURL("http://d.c.b.a.google.com/aa/x.html"), "c=1")); |
| 1856 EXPECT_TRUE(SetCookie(cm, GURL("http://b.a.google.com/aa/bb/cc/x.html"), | 1995 EXPECT_TRUE(SetCookie(cm.get(), |
| 1996 GURL("http://b.a.google.com/aa/bb/cc/x.html"), |
| 1857 "d=1; domain=b.a.google.com")); | 1997 "d=1; domain=b.a.google.com")); |
| 1858 EXPECT_TRUE(SetCookie(cm, GURL("http://b.a.google.com/aa/bb/cc/x.html"), | 1998 EXPECT_TRUE(SetCookie(cm.get(), |
| 1999 GURL("http://b.a.google.com/aa/bb/cc/x.html"), |
| 1859 "a=4; domain=b.a.google.com")); | 2000 "a=4; domain=b.a.google.com")); |
| 1860 EXPECT_TRUE(SetCookie(cm, GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), | 2001 EXPECT_TRUE(SetCookie(cm.get(), |
| 2002 GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), |
| 1861 "e=1; domain=c.b.a.google.com")); | 2003 "e=1; domain=c.b.a.google.com")); |
| 1862 EXPECT_TRUE(SetCookie(cm, GURL("http://d.c.b.a.google.com/aa/bb/x.html"), | 2004 EXPECT_TRUE(SetCookie( |
| 1863 "b=1")); | 2005 cm.get(), GURL("http://d.c.b.a.google.com/aa/bb/x.html"), "b=1")); |
| 1864 EXPECT_TRUE(SetCookie(cm, GURL("http://news.bbc.co.uk/midpath/x.html"), | 2006 EXPECT_TRUE(SetCookie( |
| 1865 "g=10")); | 2007 cm.get(), GURL("http://news.bbc.co.uk/midpath/x.html"), "g=10")); |
| 1866 { | 2008 { |
| 1867 unsigned int i = 0; | 2009 unsigned int i = 0; |
| 1868 CookieList cookies(GetAllCookiesForURL( | 2010 CookieList cookies(GetAllCookiesForURL( |
| 1869 cm, GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"))); | 2011 cm.get(), GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"))); |
| 1870 ASSERT_EQ(5u, cookies.size()); | 2012 ASSERT_EQ(5u, cookies.size()); |
| 1871 EXPECT_EQ("d", cookies[i++].Name()); | 2013 EXPECT_EQ("d", cookies[i++].Name()); |
| 1872 EXPECT_EQ("a", cookies[i++].Name()); | 2014 EXPECT_EQ("a", cookies[i++].Name()); |
| 1873 EXPECT_EQ("e", cookies[i++].Name()); | 2015 EXPECT_EQ("e", cookies[i++].Name()); |
| 1874 EXPECT_EQ("b", cookies[i++].Name()); | 2016 EXPECT_EQ("b", cookies[i++].Name()); |
| 1875 EXPECT_EQ("c", cookies[i++].Name()); | 2017 EXPECT_EQ("c", cookies[i++].Name()); |
| 1876 } | 2018 } |
| 1877 | 2019 |
| 1878 { | 2020 { |
| 1879 unsigned int i = 0; | 2021 unsigned int i = 0; |
| 1880 CookieList cookies(GetAllCookies(cm)); | 2022 CookieList cookies(GetAllCookies(cm.get())); |
| 1881 ASSERT_EQ(6u, cookies.size()); | 2023 ASSERT_EQ(6u, cookies.size()); |
| 1882 EXPECT_EQ("d", cookies[i++].Name()); | 2024 EXPECT_EQ("d", cookies[i++].Name()); |
| 1883 EXPECT_EQ("a", cookies[i++].Name()); | 2025 EXPECT_EQ("a", cookies[i++].Name()); |
| 1884 EXPECT_EQ("e", cookies[i++].Name()); | 2026 EXPECT_EQ("e", cookies[i++].Name()); |
| 1885 EXPECT_EQ("g", cookies[i++].Name()); | 2027 EXPECT_EQ("g", cookies[i++].Name()); |
| 1886 EXPECT_EQ("b", cookies[i++].Name()); | 2028 EXPECT_EQ("b", cookies[i++].Name()); |
| 1887 EXPECT_EQ("c", cookies[i++].Name()); | 2029 EXPECT_EQ("c", cookies[i++].Name()); |
| 1888 } | 2030 } |
| 1889 } | 2031 } |
| 1890 | 2032 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1901 #else | 2043 #else |
| 1902 #define MAYBE_GarbageCollectionTriggers GarbageCollectionTriggers | 2044 #define MAYBE_GarbageCollectionTriggers GarbageCollectionTriggers |
| 1903 #endif | 2045 #endif |
| 1904 | 2046 |
| 1905 TEST_F(CookieMonsterTest, MAYBE_GarbageCollectionTriggers) { | 2047 TEST_F(CookieMonsterTest, MAYBE_GarbageCollectionTriggers) { |
| 1906 // First we check to make sure that a whole lot of recent cookies | 2048 // First we check to make sure that a whole lot of recent cookies |
| 1907 // doesn't get rid of anything after garbage collection is checked for. | 2049 // doesn't get rid of anything after garbage collection is checked for. |
| 1908 { | 2050 { |
| 1909 scoped_refptr<CookieMonster> cm( | 2051 scoped_refptr<CookieMonster> cm( |
| 1910 CreateMonsterForGC(CookieMonster::kMaxCookies * 2)); | 2052 CreateMonsterForGC(CookieMonster::kMaxCookies * 2)); |
| 1911 EXPECT_EQ(CookieMonster::kMaxCookies * 2, GetAllCookies(cm).size()); | 2053 EXPECT_EQ(CookieMonster::kMaxCookies * 2, GetAllCookies(cm.get()).size()); |
| 1912 SetCookie(cm, GURL("http://newdomain.com"), "b=2"); | 2054 SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2"); |
| 1913 EXPECT_EQ(CookieMonster::kMaxCookies * 2 + 1, GetAllCookies(cm).size()); | 2055 EXPECT_EQ(CookieMonster::kMaxCookies * 2 + 1, |
| 2056 GetAllCookies(cm.get()).size()); |
| 1914 } | 2057 } |
| 1915 | 2058 |
| 1916 // Now we explore a series of relationships between cookie last access | 2059 // Now we explore a series of relationships between cookie last access |
| 1917 // time and size of store to make sure we only get rid of cookies when | 2060 // time and size of store to make sure we only get rid of cookies when |
| 1918 // we really should. | 2061 // we really should. |
| 1919 const struct TestCase { | 2062 const struct TestCase { |
| 1920 size_t num_cookies; | 2063 size_t num_cookies; |
| 1921 size_t num_old_cookies; | 2064 size_t num_old_cookies; |
| 1922 size_t expected_initial_cookies; | 2065 size_t expected_initial_cookies; |
| 1923 // Indexed by ExpiryAndKeyScheme | 2066 // Indexed by ExpiryAndKeyScheme |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1950 CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies | 2093 CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies |
| 1951 } | 2094 } |
| 1952 }; | 2095 }; |
| 1953 | 2096 |
| 1954 for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) { | 2097 for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) { |
| 1955 const TestCase *test_case = &test_cases[ci]; | 2098 const TestCase *test_case = &test_cases[ci]; |
| 1956 scoped_refptr<CookieMonster> cm( | 2099 scoped_refptr<CookieMonster> cm( |
| 1957 CreateMonsterFromStoreForGC( | 2100 CreateMonsterFromStoreForGC( |
| 1958 test_case->num_cookies, test_case->num_old_cookies, | 2101 test_case->num_cookies, test_case->num_old_cookies, |
| 1959 CookieMonster::kSafeFromGlobalPurgeDays * 2)); | 2102 CookieMonster::kSafeFromGlobalPurgeDays * 2)); |
| 1960 EXPECT_EQ(test_case->expected_initial_cookies, GetAllCookies(cm).size()) | 2103 EXPECT_EQ(test_case->expected_initial_cookies, |
| 1961 << "For test case " << ci; | 2104 GetAllCookies(cm.get()).size()) << "For test case " << ci; |
| 1962 // Will trigger GC | 2105 // Will trigger GC |
| 1963 SetCookie(cm, GURL("http://newdomain.com"), "b=2"); | 2106 SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2"); |
| 1964 EXPECT_EQ(test_case->expected_cookies_after_set, GetAllCookies(cm).size()) | 2107 EXPECT_EQ(test_case->expected_cookies_after_set, |
| 1965 << "For test case " << ci; | 2108 GetAllCookies(cm.get()).size()) << "For test case " << ci; |
| 1966 } | 2109 } |
| 1967 } | 2110 } |
| 1968 | 2111 |
| 1969 // This test checks that keep expired cookies flag is working. | 2112 // This test checks that keep expired cookies flag is working. |
| 1970 TEST_F(CookieMonsterTest, KeepExpiredCookies) { | 2113 TEST_F(CookieMonsterTest, KeepExpiredCookies) { |
| 1971 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2114 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 1972 cm->SetKeepExpiredCookies(); | 2115 cm->SetKeepExpiredCookies(); |
| 1973 CookieOptions options; | 2116 CookieOptions options; |
| 1974 | 2117 |
| 1975 // Set a persistent cookie. | 2118 // Set a persistent cookie. |
| 1976 ASSERT_TRUE(SetCookieWithOptions( | 2119 ASSERT_TRUE(SetCookieWithOptions( |
| 1977 cm, url_google_, | 2120 cm.get(), |
| 2121 url_google_, |
| 1978 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT", | 2122 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT", |
| 1979 options)); | 2123 options)); |
| 1980 | 2124 |
| 1981 // Get the canonical cookie. | 2125 // Get the canonical cookie. |
| 1982 CookieList cookie_list = GetAllCookies(cm); | 2126 CookieList cookie_list = GetAllCookies(cm.get()); |
| 1983 ASSERT_EQ(1U, cookie_list.size()); | 2127 ASSERT_EQ(1U, cookie_list.size()); |
| 1984 | 2128 |
| 1985 // Use a past expiry date to delete the cookie. | 2129 // Use a past expiry date to delete the cookie. |
| 1986 ASSERT_TRUE(SetCookieWithOptions( | 2130 ASSERT_TRUE(SetCookieWithOptions( |
| 1987 cm, url_google_, | 2131 cm.get(), |
| 2132 url_google_, |
| 1988 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", | 2133 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", |
| 1989 options)); | 2134 options)); |
| 1990 | 2135 |
| 1991 // Check that the cookie with the past expiry date is still there. | 2136 // Check that the cookie with the past expiry date is still there. |
| 1992 // GetAllCookies() also triggers garbage collection. | 2137 // GetAllCookies() also triggers garbage collection. |
| 1993 cookie_list = GetAllCookies(cm); | 2138 cookie_list = GetAllCookies(cm.get()); |
| 1994 ASSERT_EQ(1U, cookie_list.size()); | 2139 ASSERT_EQ(1U, cookie_list.size()); |
| 1995 ASSERT_TRUE(cookie_list[0].IsExpired(Time::Now())); | 2140 ASSERT_TRUE(cookie_list[0].IsExpired(Time::Now())); |
| 1996 } | 2141 } |
| 1997 | 2142 |
| 1998 namespace { | 2143 namespace { |
| 1999 | 2144 |
| 2000 // Mock PersistentCookieStore that keeps track of the number of Flush() calls. | 2145 // Mock PersistentCookieStore that keeps track of the number of Flush() calls. |
| 2001 class FlushablePersistentStore : public CookieMonster::PersistentCookieStore { | 2146 class FlushablePersistentStore : public CookieMonster::PersistentCookieStore { |
| 2002 public: | 2147 public: |
| 2003 FlushablePersistentStore() : flush_count_(0) {} | 2148 FlushablePersistentStore() : flush_count_(0) {} |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2056 | 2201 |
| 2057 volatile int callback_count_; | 2202 volatile int callback_count_; |
| 2058 }; | 2203 }; |
| 2059 | 2204 |
| 2060 } // namespace | 2205 } // namespace |
| 2061 | 2206 |
| 2062 // Test that FlushStore() is forwarded to the store and callbacks are posted. | 2207 // Test that FlushStore() is forwarded to the store and callbacks are posted. |
| 2063 TEST_F(CookieMonsterTest, FlushStore) { | 2208 TEST_F(CookieMonsterTest, FlushStore) { |
| 2064 scoped_refptr<CallbackCounter> counter(new CallbackCounter()); | 2209 scoped_refptr<CallbackCounter> counter(new CallbackCounter()); |
| 2065 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); | 2210 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); |
| 2066 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 2211 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| 2067 | 2212 |
| 2068 ASSERT_EQ(0, store->flush_count()); | 2213 ASSERT_EQ(0, store->flush_count()); |
| 2069 ASSERT_EQ(0, counter->callback_count()); | 2214 ASSERT_EQ(0, counter->callback_count()); |
| 2070 | 2215 |
| 2071 // Before initialization, FlushStore() should just run the callback. | 2216 // Before initialization, FlushStore() should just run the callback. |
| 2072 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); | 2217 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); |
| 2073 base::MessageLoop::current()->RunUntilIdle(); | 2218 base::MessageLoop::current()->RunUntilIdle(); |
| 2074 | 2219 |
| 2075 ASSERT_EQ(0, store->flush_count()); | 2220 ASSERT_EQ(0, store->flush_count()); |
| 2076 ASSERT_EQ(1, counter->callback_count()); | 2221 ASSERT_EQ(1, counter->callback_count()); |
| 2077 | 2222 |
| 2078 // NULL callback is safe. | 2223 // NULL callback is safe. |
| 2079 cm->FlushStore(base::Closure()); | 2224 cm->FlushStore(base::Closure()); |
| 2080 base::MessageLoop::current()->RunUntilIdle(); | 2225 base::MessageLoop::current()->RunUntilIdle(); |
| 2081 | 2226 |
| 2082 ASSERT_EQ(0, store->flush_count()); | 2227 ASSERT_EQ(0, store->flush_count()); |
| 2083 ASSERT_EQ(1, counter->callback_count()); | 2228 ASSERT_EQ(1, counter->callback_count()); |
| 2084 | 2229 |
| 2085 // After initialization, FlushStore() should delegate to the store. | 2230 // After initialization, FlushStore() should delegate to the store. |
| 2086 GetAllCookies(cm); // Force init. | 2231 GetAllCookies(cm.get()); // Force init. |
| 2087 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); | 2232 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); |
| 2088 base::MessageLoop::current()->RunUntilIdle(); | 2233 base::MessageLoop::current()->RunUntilIdle(); |
| 2089 | 2234 |
| 2090 ASSERT_EQ(1, store->flush_count()); | 2235 ASSERT_EQ(1, store->flush_count()); |
| 2091 ASSERT_EQ(2, counter->callback_count()); | 2236 ASSERT_EQ(2, counter->callback_count()); |
| 2092 | 2237 |
| 2093 // NULL callback is still safe. | 2238 // NULL callback is still safe. |
| 2094 cm->FlushStore(base::Closure()); | 2239 cm->FlushStore(base::Closure()); |
| 2095 base::MessageLoop::current()->RunUntilIdle(); | 2240 base::MessageLoop::current()->RunUntilIdle(); |
| 2096 | 2241 |
| 2097 ASSERT_EQ(2, store->flush_count()); | 2242 ASSERT_EQ(2, store->flush_count()); |
| 2098 ASSERT_EQ(2, counter->callback_count()); | 2243 ASSERT_EQ(2, counter->callback_count()); |
| 2099 | 2244 |
| 2100 // If there's no backing store, FlushStore() is always a safe no-op. | 2245 // If there's no backing store, FlushStore() is always a safe no-op. |
| 2101 cm = new CookieMonster(NULL, NULL); | 2246 cm = new CookieMonster(NULL, NULL); |
| 2102 GetAllCookies(cm); // Force init. | 2247 GetAllCookies(cm.get()); // Force init. |
| 2103 cm->FlushStore(base::Closure()); | 2248 cm->FlushStore(base::Closure()); |
| 2104 base::MessageLoop::current()->RunUntilIdle(); | 2249 base::MessageLoop::current()->RunUntilIdle(); |
| 2105 | 2250 |
| 2106 ASSERT_EQ(2, counter->callback_count()); | 2251 ASSERT_EQ(2, counter->callback_count()); |
| 2107 | 2252 |
| 2108 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); | 2253 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); |
| 2109 base::MessageLoop::current()->RunUntilIdle(); | 2254 base::MessageLoop::current()->RunUntilIdle(); |
| 2110 | 2255 |
| 2111 ASSERT_EQ(3, counter->callback_count()); | 2256 ASSERT_EQ(3, counter->callback_count()); |
| 2112 } | 2257 } |
| 2113 | 2258 |
| 2114 TEST_F(CookieMonsterTest, HistogramCheck) { | 2259 TEST_F(CookieMonsterTest, HistogramCheck) { |
| 2115 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2260 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2116 // Should match call in InitializeHistograms, but doesn't really matter | 2261 // Should match call in InitializeHistograms, but doesn't really matter |
| 2117 // since the histogram should have been initialized by the CM construction | 2262 // since the histogram should have been initialized by the CM construction |
| 2118 // above. | 2263 // above. |
| 2119 base::HistogramBase* expired_histogram = | 2264 base::HistogramBase* expired_histogram = |
| 2120 base::Histogram::FactoryGet( | 2265 base::Histogram::FactoryGet( |
| 2121 "Cookie.ExpirationDurationMinutes", 1, 10 * 365 * 24 * 60, 50, | 2266 "Cookie.ExpirationDurationMinutes", 1, 10 * 365 * 24 * 60, 50, |
| 2122 base::Histogram::kUmaTargetedHistogramFlag); | 2267 base::Histogram::kUmaTargetedHistogramFlag); |
| 2123 | 2268 |
| 2124 scoped_ptr<base::HistogramSamples> samples1( | 2269 scoped_ptr<base::HistogramSamples> samples1( |
| 2125 expired_histogram->SnapshotSamples()); | 2270 expired_histogram->SnapshotSamples()); |
| 2126 ASSERT_TRUE(SetCookieWithDetails( | 2271 ASSERT_TRUE( |
| 2127 cm, GURL("http://fake.a.url"), "a", "b", "a.url", "/", | 2272 SetCookieWithDetails(cm.get(), |
| 2128 base::Time::Now() + base::TimeDelta::FromMinutes(59), | 2273 GURL("http://fake.a.url"), |
| 2129 false, false, COOKIE_PRIORITY_DEFAULT)); | 2274 "a", |
| 2275 "b", |
| 2276 "a.url", |
| 2277 "/", |
| 2278 base::Time::Now() + base::TimeDelta::FromMinutes(59), |
| 2279 false, |
| 2280 false, |
| 2281 COOKIE_PRIORITY_DEFAULT)); |
| 2130 | 2282 |
| 2131 scoped_ptr<base::HistogramSamples> samples2( | 2283 scoped_ptr<base::HistogramSamples> samples2( |
| 2132 expired_histogram->SnapshotSamples()); | 2284 expired_histogram->SnapshotSamples()); |
| 2133 EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount()); | 2285 EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount()); |
| 2134 | 2286 |
| 2135 // kValidCookieLine creates a session cookie. | 2287 // kValidCookieLine creates a session cookie. |
| 2136 ASSERT_TRUE(SetCookie(cm, url_google_, kValidCookieLine)); | 2288 ASSERT_TRUE(SetCookie(cm.get(), url_google_, kValidCookieLine)); |
| 2137 | 2289 |
| 2138 scoped_ptr<base::HistogramSamples> samples3( | 2290 scoped_ptr<base::HistogramSamples> samples3( |
| 2139 expired_histogram->SnapshotSamples()); | 2291 expired_histogram->SnapshotSamples()); |
| 2140 EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount()); | 2292 EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount()); |
| 2141 } | 2293 } |
| 2142 | 2294 |
| 2143 namespace { | 2295 namespace { |
| 2144 | 2296 |
| 2145 class MultiThreadedCookieMonsterTest : public CookieMonsterTest { | 2297 class MultiThreadedCookieMonsterTest : public CookieMonsterTest { |
| 2146 public: | 2298 public: |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2224 other_thread_.Stop(); | 2376 other_thread_.Stop(); |
| 2225 } | 2377 } |
| 2226 | 2378 |
| 2227 Thread other_thread_; | 2379 Thread other_thread_; |
| 2228 }; | 2380 }; |
| 2229 | 2381 |
| 2230 } // namespace | 2382 } // namespace |
| 2231 | 2383 |
| 2232 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookies) { | 2384 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookies) { |
| 2233 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2385 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2234 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 2386 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 2235 CookieList cookies = GetAllCookies(cm); | 2387 CookieList cookies = GetAllCookies(cm.get()); |
| 2236 CookieList::const_iterator it = cookies.begin(); | 2388 CookieList::const_iterator it = cookies.begin(); |
| 2237 ASSERT_TRUE(it != cookies.end()); | 2389 ASSERT_TRUE(it != cookies.end()); |
| 2238 EXPECT_EQ("www.google.izzle", it->Domain()); | 2390 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 2239 EXPECT_EQ("A", it->Name()); | 2391 EXPECT_EQ("A", it->Name()); |
| 2240 ASSERT_TRUE(++it == cookies.end()); | 2392 ASSERT_TRUE(++it == cookies.end()); |
| 2241 GetCookieListCallback callback(&other_thread_); | 2393 GetCookieListCallback callback(&other_thread_); |
| 2242 base::Closure task = | 2394 base::Closure task = |
| 2243 base::Bind(&net::MultiThreadedCookieMonsterTest::GetAllCookiesTask, | 2395 base::Bind(&net::MultiThreadedCookieMonsterTest::GetAllCookiesTask, |
| 2244 base::Unretained(this), | 2396 base::Unretained(this), |
| 2245 cm, &callback); | 2397 cm, &callback); |
| 2246 RunOnOtherThread(task); | 2398 RunOnOtherThread(task); |
| 2247 EXPECT_TRUE(callback.did_run()); | 2399 EXPECT_TRUE(callback.did_run()); |
| 2248 it = callback.cookies().begin(); | 2400 it = callback.cookies().begin(); |
| 2249 ASSERT_TRUE(it != callback.cookies().end()); | 2401 ASSERT_TRUE(it != callback.cookies().end()); |
| 2250 EXPECT_EQ("www.google.izzle", it->Domain()); | 2402 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 2251 EXPECT_EQ("A", it->Name()); | 2403 EXPECT_EQ("A", it->Name()); |
| 2252 ASSERT_TRUE(++it == callback.cookies().end()); | 2404 ASSERT_TRUE(++it == callback.cookies().end()); |
| 2253 } | 2405 } |
| 2254 | 2406 |
| 2255 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURL) { | 2407 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURL) { |
| 2256 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2408 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2257 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 2409 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 2258 CookieList cookies = GetAllCookiesForURL(cm, url_google_); | 2410 CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_); |
| 2259 CookieList::const_iterator it = cookies.begin(); | 2411 CookieList::const_iterator it = cookies.begin(); |
| 2260 ASSERT_TRUE(it != cookies.end()); | 2412 ASSERT_TRUE(it != cookies.end()); |
| 2261 EXPECT_EQ("www.google.izzle", it->Domain()); | 2413 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 2262 EXPECT_EQ("A", it->Name()); | 2414 EXPECT_EQ("A", it->Name()); |
| 2263 ASSERT_TRUE(++it == cookies.end()); | 2415 ASSERT_TRUE(++it == cookies.end()); |
| 2264 GetCookieListCallback callback(&other_thread_); | 2416 GetCookieListCallback callback(&other_thread_); |
| 2265 base::Closure task = | 2417 base::Closure task = |
| 2266 base::Bind(&net::MultiThreadedCookieMonsterTest::GetAllCookiesForURLTask, | 2418 base::Bind(&net::MultiThreadedCookieMonsterTest::GetAllCookiesForURLTask, |
| 2267 base::Unretained(this), | 2419 base::Unretained(this), |
| 2268 cm, url_google_, &callback); | 2420 cm, url_google_, &callback); |
| 2269 RunOnOtherThread(task); | 2421 RunOnOtherThread(task); |
| 2270 EXPECT_TRUE(callback.did_run()); | 2422 EXPECT_TRUE(callback.did_run()); |
| 2271 it = callback.cookies().begin(); | 2423 it = callback.cookies().begin(); |
| 2272 ASSERT_TRUE(it != callback.cookies().end()); | 2424 ASSERT_TRUE(it != callback.cookies().end()); |
| 2273 EXPECT_EQ("www.google.izzle", it->Domain()); | 2425 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 2274 EXPECT_EQ("A", it->Name()); | 2426 EXPECT_EQ("A", it->Name()); |
| 2275 ASSERT_TRUE(++it == callback.cookies().end()); | 2427 ASSERT_TRUE(++it == callback.cookies().end()); |
| 2276 } | 2428 } |
| 2277 | 2429 |
| 2278 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURLWithOpt) { | 2430 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURLWithOpt) { |
| 2279 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2431 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2280 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 2432 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 2281 CookieOptions options; | 2433 CookieOptions options; |
| 2282 CookieList cookies = | 2434 CookieList cookies = |
| 2283 GetAllCookiesForURLWithOptions(cm, url_google_, options); | 2435 GetAllCookiesForURLWithOptions(cm.get(), url_google_, options); |
| 2284 CookieList::const_iterator it = cookies.begin(); | 2436 CookieList::const_iterator it = cookies.begin(); |
| 2285 ASSERT_TRUE(it != cookies.end()); | 2437 ASSERT_TRUE(it != cookies.end()); |
| 2286 EXPECT_EQ("www.google.izzle", it->Domain()); | 2438 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 2287 EXPECT_EQ("A", it->Name()); | 2439 EXPECT_EQ("A", it->Name()); |
| 2288 ASSERT_TRUE(++it == cookies.end()); | 2440 ASSERT_TRUE(++it == cookies.end()); |
| 2289 GetCookieListCallback callback(&other_thread_); | 2441 GetCookieListCallback callback(&other_thread_); |
| 2290 base::Closure task = base::Bind( | 2442 base::Closure task = base::Bind( |
| 2291 &net::MultiThreadedCookieMonsterTest::GetAllCookiesForURLWithOptionsTask, | 2443 &net::MultiThreadedCookieMonsterTest::GetAllCookiesForURLWithOptionsTask, |
| 2292 base::Unretained(this), | 2444 base::Unretained(this), |
| 2293 cm, url_google_, options, &callback); | 2445 cm, url_google_, options, &callback); |
| 2294 RunOnOtherThread(task); | 2446 RunOnOtherThread(task); |
| 2295 EXPECT_TRUE(callback.did_run()); | 2447 EXPECT_TRUE(callback.did_run()); |
| 2296 it = callback.cookies().begin(); | 2448 it = callback.cookies().begin(); |
| 2297 ASSERT_TRUE(it != callback.cookies().end()); | 2449 ASSERT_TRUE(it != callback.cookies().end()); |
| 2298 EXPECT_EQ("www.google.izzle", it->Domain()); | 2450 EXPECT_EQ("www.google.izzle", it->Domain()); |
| 2299 EXPECT_EQ("A", it->Name()); | 2451 EXPECT_EQ("A", it->Name()); |
| 2300 ASSERT_TRUE(++it == callback.cookies().end()); | 2452 ASSERT_TRUE(++it == callback.cookies().end()); |
| 2301 } | 2453 } |
| 2302 | 2454 |
| 2303 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckSetCookieWithDetails) { | 2455 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckSetCookieWithDetails) { |
| 2304 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2456 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2305 EXPECT_TRUE(SetCookieWithDetails( | 2457 EXPECT_TRUE(SetCookieWithDetails(cm.get(), |
| 2306 cm, url_google_foo_, | 2458 url_google_foo_, |
| 2307 "A", "B", std::string(), "/foo", base::Time(), | 2459 "A", |
| 2308 false, false, COOKIE_PRIORITY_DEFAULT)); | 2460 "B", |
| 2461 std::string(), |
| 2462 "/foo", |
| 2463 base::Time(), |
| 2464 false, |
| 2465 false, |
| 2466 COOKIE_PRIORITY_DEFAULT)); |
| 2309 BoolResultCookieCallback callback(&other_thread_); | 2467 BoolResultCookieCallback callback(&other_thread_); |
| 2310 base::Closure task = base::Bind( | 2468 base::Closure task = base::Bind( |
| 2311 &net::MultiThreadedCookieMonsterTest::SetCookieWithDetailsTask, | 2469 &net::MultiThreadedCookieMonsterTest::SetCookieWithDetailsTask, |
| 2312 base::Unretained(this), | 2470 base::Unretained(this), |
| 2313 cm, url_google_foo_, &callback); | 2471 cm, url_google_foo_, &callback); |
| 2314 RunOnOtherThread(task); | 2472 RunOnOtherThread(task); |
| 2315 EXPECT_TRUE(callback.did_run()); | 2473 EXPECT_TRUE(callback.did_run()); |
| 2316 EXPECT_TRUE(callback.result()); | 2474 EXPECT_TRUE(callback.result()); |
| 2317 } | 2475 } |
| 2318 | 2476 |
| 2319 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllCreatedBetween) { | 2477 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllCreatedBetween) { |
| 2320 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2478 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2321 CookieOptions options; | 2479 CookieOptions options; |
| 2322 Time now = Time::Now(); | 2480 Time now = Time::Now(); |
| 2323 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 2481 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); |
| 2324 EXPECT_EQ(1, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(99), | 2482 EXPECT_EQ( |
| 2325 Time())); | 2483 1, |
| 2326 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 2484 DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), Time())); |
| 2485 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); |
| 2327 IntResultCookieCallback callback(&other_thread_); | 2486 IntResultCookieCallback callback(&other_thread_); |
| 2328 base::Closure task = base::Bind( | 2487 base::Closure task = base::Bind( |
| 2329 &net::MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenTask, | 2488 &net::MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenTask, |
| 2330 base::Unretained(this), | 2489 base::Unretained(this), |
| 2331 cm, now - TimeDelta::FromDays(99), | 2490 cm, now - TimeDelta::FromDays(99), |
| 2332 Time(), &callback); | 2491 Time(), &callback); |
| 2333 RunOnOtherThread(task); | 2492 RunOnOtherThread(task); |
| 2334 EXPECT_TRUE(callback.did_run()); | 2493 EXPECT_TRUE(callback.did_run()); |
| 2335 EXPECT_EQ(1, callback.result()); | 2494 EXPECT_EQ(1, callback.result()); |
| 2336 } | 2495 } |
| 2337 | 2496 |
| 2338 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllForHost) { | 2497 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllForHost) { |
| 2339 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2498 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2340 CookieOptions options; | 2499 CookieOptions options; |
| 2341 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 2500 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); |
| 2342 EXPECT_EQ(1, DeleteAllForHost(cm, url_google_)); | 2501 EXPECT_EQ(1, DeleteAllForHost(cm.get(), url_google_)); |
| 2343 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 2502 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); |
| 2344 IntResultCookieCallback callback(&other_thread_); | 2503 IntResultCookieCallback callback(&other_thread_); |
| 2345 base::Closure task = base::Bind( | 2504 base::Closure task = base::Bind( |
| 2346 &net::MultiThreadedCookieMonsterTest::DeleteAllForHostTask, | 2505 &net::MultiThreadedCookieMonsterTest::DeleteAllForHostTask, |
| 2347 base::Unretained(this), | 2506 base::Unretained(this), |
| 2348 cm, url_google_, &callback); | 2507 cm, url_google_, &callback); |
| 2349 RunOnOtherThread(task); | 2508 RunOnOtherThread(task); |
| 2350 EXPECT_TRUE(callback.did_run()); | 2509 EXPECT_TRUE(callback.did_run()); |
| 2351 EXPECT_EQ(1, callback.result()); | 2510 EXPECT_EQ(1, callback.result()); |
| 2352 } | 2511 } |
| 2353 | 2512 |
| 2354 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteCanonicalCookie) { | 2513 TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteCanonicalCookie) { |
| 2355 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 2514 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| 2356 CookieOptions options; | 2515 CookieOptions options; |
| 2357 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 2516 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); |
| 2358 CookieList cookies = GetAllCookies(cm); | 2517 CookieList cookies = GetAllCookies(cm.get()); |
| 2359 CookieList::iterator it = cookies.begin(); | 2518 CookieList::iterator it = cookies.begin(); |
| 2360 EXPECT_TRUE(DeleteCanonicalCookie(cm, *it)); | 2519 EXPECT_TRUE(DeleteCanonicalCookie(cm.get(), *it)); |
| 2361 | 2520 |
| 2362 EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 2521 EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); |
| 2363 BoolResultCookieCallback callback(&other_thread_); | 2522 BoolResultCookieCallback callback(&other_thread_); |
| 2364 cookies = GetAllCookies(cm); | 2523 cookies = GetAllCookies(cm.get()); |
| 2365 it = cookies.begin(); | 2524 it = cookies.begin(); |
| 2366 base::Closure task = base::Bind( | 2525 base::Closure task = base::Bind( |
| 2367 &net::MultiThreadedCookieMonsterTest::DeleteCanonicalCookieTask, | 2526 &net::MultiThreadedCookieMonsterTest::DeleteCanonicalCookieTask, |
| 2368 base::Unretained(this), | 2527 base::Unretained(this), |
| 2369 cm, *it, &callback); | 2528 cm, *it, &callback); |
| 2370 RunOnOtherThread(task); | 2529 RunOnOtherThread(task); |
| 2371 EXPECT_TRUE(callback.did_run()); | 2530 EXPECT_TRUE(callback.did_run()); |
| 2372 EXPECT_TRUE(callback.result()); | 2531 EXPECT_TRUE(callback.result()); |
| 2373 } | 2532 } |
| 2374 | 2533 |
| 2375 TEST_F(CookieMonsterTest, InvalidExpiryTime) { | 2534 TEST_F(CookieMonsterTest, InvalidExpiryTime) { |
| 2376 std::string cookie_line = | 2535 std::string cookie_line = |
| 2377 std::string(kValidCookieLine) + "; expires=Blarg arg arg"; | 2536 std::string(kValidCookieLine) + "; expires=Blarg arg arg"; |
| 2378 scoped_ptr<CanonicalCookie> cookie( | 2537 scoped_ptr<CanonicalCookie> cookie( |
| 2379 CanonicalCookie::Create(url_google_, cookie_line, Time::Now(), | 2538 CanonicalCookie::Create(url_google_, cookie_line, Time::Now(), |
| 2380 CookieOptions())); | 2539 CookieOptions())); |
| 2381 ASSERT_FALSE(cookie->IsPersistent()); | 2540 ASSERT_FALSE(cookie->IsPersistent()); |
| 2382 } | 2541 } |
| 2383 | 2542 |
| 2384 // Test that CookieMonster writes session cookies into the underlying | 2543 // Test that CookieMonster writes session cookies into the underlying |
| 2385 // CookieStore if the "persist session cookies" option is on. | 2544 // CookieStore if the "persist session cookies" option is on. |
| 2386 TEST_F(CookieMonsterTest, PersistSessionCookies) { | 2545 TEST_F(CookieMonsterTest, PersistSessionCookies) { |
| 2387 scoped_refptr<MockPersistentCookieStore> store( | 2546 scoped_refptr<MockPersistentCookieStore> store( |
| 2388 new MockPersistentCookieStore); | 2547 new MockPersistentCookieStore); |
| 2389 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 2548 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| 2390 cm->SetPersistSessionCookies(true); | 2549 cm->SetPersistSessionCookies(true); |
| 2391 | 2550 |
| 2392 // All cookies set with SetCookie are session cookies. | 2551 // All cookies set with SetCookie are session cookies. |
| 2393 EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 2552 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); |
| 2394 EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 2553 EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); |
| 2395 | 2554 |
| 2396 // The cookie was written to the backing store. | 2555 // The cookie was written to the backing store. |
| 2397 EXPECT_EQ(1u, store->commands().size()); | 2556 EXPECT_EQ(1u, store->commands().size()); |
| 2398 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 2557 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); |
| 2399 EXPECT_EQ("A", store->commands()[0].cookie.Name()); | 2558 EXPECT_EQ("A", store->commands()[0].cookie.Name()); |
| 2400 EXPECT_EQ("B", store->commands()[0].cookie.Value()); | 2559 EXPECT_EQ("B", store->commands()[0].cookie.Value()); |
| 2401 | 2560 |
| 2402 // Modify the cookie. | 2561 // Modify the cookie. |
| 2403 EXPECT_TRUE(SetCookie(cm, url_google_, "A=C")); | 2562 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=C")); |
| 2404 EXPECT_EQ("A=C", GetCookies(cm, url_google_)); | 2563 EXPECT_EQ("A=C", GetCookies(cm.get(), url_google_)); |
| 2405 EXPECT_EQ(3u, store->commands().size()); | 2564 EXPECT_EQ(3u, store->commands().size()); |
| 2406 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 2565 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); |
| 2407 EXPECT_EQ("A", store->commands()[1].cookie.Name()); | 2566 EXPECT_EQ("A", store->commands()[1].cookie.Name()); |
| 2408 EXPECT_EQ("B", store->commands()[1].cookie.Value()); | 2567 EXPECT_EQ("B", store->commands()[1].cookie.Value()); |
| 2409 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); | 2568 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); |
| 2410 EXPECT_EQ("A", store->commands()[2].cookie.Name()); | 2569 EXPECT_EQ("A", store->commands()[2].cookie.Name()); |
| 2411 EXPECT_EQ("C", store->commands()[2].cookie.Value()); | 2570 EXPECT_EQ("C", store->commands()[2].cookie.Value()); |
| 2412 | 2571 |
| 2413 // Delete the cookie. | 2572 // Delete the cookie. |
| 2414 DeleteCookie(cm, url_google_, "A"); | 2573 DeleteCookie(cm.get(), url_google_, "A"); |
| 2415 EXPECT_EQ("", GetCookies(cm, url_google_)); | 2574 EXPECT_EQ("", GetCookies(cm.get(), url_google_)); |
| 2416 EXPECT_EQ(4u, store->commands().size()); | 2575 EXPECT_EQ(4u, store->commands().size()); |
| 2417 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); | 2576 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); |
| 2418 EXPECT_EQ("A", store->commands()[3].cookie.Name()); | 2577 EXPECT_EQ("A", store->commands()[3].cookie.Name()); |
| 2419 EXPECT_EQ("C", store->commands()[3].cookie.Value()); | 2578 EXPECT_EQ("C", store->commands()[3].cookie.Value()); |
| 2420 } | 2579 } |
| 2421 | 2580 |
| 2422 // Test the commands sent to the persistent cookie store. | 2581 // Test the commands sent to the persistent cookie store. |
| 2423 TEST_F(CookieMonsterTest, PersisentCookieStorageTest) { | 2582 TEST_F(CookieMonsterTest, PersisentCookieStorageTest) { |
| 2424 scoped_refptr<MockPersistentCookieStore> store( | 2583 scoped_refptr<MockPersistentCookieStore> store( |
| 2425 new MockPersistentCookieStore); | 2584 new MockPersistentCookieStore); |
| 2426 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 2585 scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| 2427 | 2586 |
| 2428 // Add a cookie. | 2587 // Add a cookie. |
| 2429 EXPECT_TRUE(SetCookie(cm, url_google_, | 2588 EXPECT_TRUE(SetCookie( |
| 2430 "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 2589 cm.get(), url_google_, "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
| 2431 this->MatchCookieLines("A=B", GetCookies(cm, url_google_)); | 2590 this->MatchCookieLines("A=B", GetCookies(cm.get(), url_google_)); |
| 2432 ASSERT_EQ(1u, store->commands().size()); | 2591 ASSERT_EQ(1u, store->commands().size()); |
| 2433 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 2592 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); |
| 2434 // Remove it. | 2593 // Remove it. |
| 2435 EXPECT_TRUE(SetCookie(cm, url_google_,"A=B; max-age=0")); | 2594 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B; max-age=0")); |
| 2436 this->MatchCookieLines(std::string(), GetCookies(cm, url_google_)); | 2595 this->MatchCookieLines(std::string(), GetCookies(cm.get(), url_google_)); |
| 2437 ASSERT_EQ(2u, store->commands().size()); | 2596 ASSERT_EQ(2u, store->commands().size()); |
| 2438 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 2597 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); |
| 2439 | 2598 |
| 2440 // Add a cookie. | 2599 // Add a cookie. |
| 2441 EXPECT_TRUE(SetCookie(cm, url_google_, | 2600 EXPECT_TRUE(SetCookie( |
| 2442 "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 2601 cm.get(), url_google_, "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
| 2443 this->MatchCookieLines("A=B", GetCookies(cm, url_google_)); | 2602 this->MatchCookieLines("A=B", GetCookies(cm.get(), url_google_)); |
| 2444 ASSERT_EQ(3u, store->commands().size()); | 2603 ASSERT_EQ(3u, store->commands().size()); |
| 2445 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); | 2604 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); |
| 2446 // Overwrite it. | 2605 // Overwrite it. |
| 2447 EXPECT_TRUE(SetCookie(cm, url_google_, | 2606 EXPECT_TRUE(SetCookie( |
| 2448 "A=Foo; expires=Mon, 18-Apr-22 22:50:14 GMT")); | 2607 cm.get(), url_google_, "A=Foo; expires=Mon, 18-Apr-22 22:50:14 GMT")); |
| 2449 this->MatchCookieLines("A=Foo", GetCookies(cm, url_google_)); | 2608 this->MatchCookieLines("A=Foo", GetCookies(cm.get(), url_google_)); |
| 2450 ASSERT_EQ(5u, store->commands().size()); | 2609 ASSERT_EQ(5u, store->commands().size()); |
| 2451 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); | 2610 EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); |
| 2452 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[4].type); | 2611 EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[4].type); |
| 2453 | 2612 |
| 2454 // Create some non-persistent cookies and check that they don't go to the | 2613 // Create some non-persistent cookies and check that they don't go to the |
| 2455 // persistent storage. | 2614 // persistent storage. |
| 2456 EXPECT_TRUE(SetCookie(cm, url_google_, "B=Bar")); | 2615 EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=Bar")); |
| 2457 this->MatchCookieLines("A=Foo; B=Bar", GetCookies(cm, url_google_)); | 2616 this->MatchCookieLines("A=Foo; B=Bar", GetCookies(cm.get(), url_google_)); |
| 2458 EXPECT_EQ(5u, store->commands().size()); | 2617 EXPECT_EQ(5u, store->commands().size()); |
| 2459 } | 2618 } |
| 2460 | 2619 |
| 2461 } // namespace net | 2620 } // namespace net |
| OLD | NEW |