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

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

Issue 2633663003: Implements strict secure cookies as the default behavior in //net (Closed)
Patch Set: Rebase on ToT Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/cookies/cookie_monster_store_test.cc ('k') | net/cookies/cookie_options.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/cookies/cookie_monster.h" 5 #include "net/cookies/cookie_monster.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 static std::unique_ptr<CookieStore> Create() { 101 static std::unique_ptr<CookieStore> Create() {
102 return base::MakeUnique<CookieMonster>(nullptr, nullptr); 102 return base::MakeUnique<CookieMonster>(nullptr, nullptr);
103 } 103 }
104 104
105 static const bool supports_http_only = true; 105 static const bool supports_http_only = true;
106 static const bool supports_non_dotted_domains = true; 106 static const bool supports_non_dotted_domains = true;
107 static const bool preserves_trailing_dots = true; 107 static const bool preserves_trailing_dots = true;
108 static const bool filters_schemes = true; 108 static const bool filters_schemes = true;
109 static const bool has_path_prefix_bug = false; 109 static const bool has_path_prefix_bug = false;
110 static const int creation_time_granularity_in_ms = 0; 110 static const int creation_time_granularity_in_ms = 0;
111 static const bool enforce_strict_secure = false;
112 };
113
114 struct CookieMonsterEnforcingStrictSecure {
115 static std::unique_ptr<CookieStore> Create() {
116 return base::MakeUnique<CookieMonster>(nullptr, nullptr);
117 }
118
119 static const bool supports_http_only = true;
120 static const bool supports_non_dotted_domains = true;
121 static const bool preserves_trailing_dots = true;
122 static const bool filters_schemes = true;
123 static const bool has_path_prefix_bug = false;
124 static const int creation_time_granularity_in_ms = 0;
125 static const bool enforce_strict_secure = true;
126 }; 111 };
127 112
128 INSTANTIATE_TYPED_TEST_CASE_P(CookieMonster, 113 INSTANTIATE_TYPED_TEST_CASE_P(CookieMonster,
129 CookieStoreTest, 114 CookieStoreTest,
130 CookieMonsterTestTraits); 115 CookieMonsterTestTraits);
131 116
132 INSTANTIATE_TYPED_TEST_CASE_P(CookieMonsterStrictSecure,
133 CookieStoreTest,
134 CookieMonsterEnforcingStrictSecure);
135
136 template <typename T> 117 template <typename T>
137 class CookieMonsterTestBase : public CookieStoreTest<T> { 118 class CookieMonsterTestBase : public CookieStoreTest<T> {
138 public: 119 public:
139 using CookieStoreTest<T>::SetCookie; 120 using CookieStoreTest<T>::SetCookie;
140 121
141 protected: 122 protected:
142 using CookieStoreTest<T>::http_www_google_; 123 using CookieStoreTest<T>::http_www_google_;
143 using CookieStoreTest<T>::https_www_google_; 124 using CookieStoreTest<T>::https_www_google_;
144 125
145 CookieList GetAllCookiesForURLWithOptions(CookieMonster* cm, 126 CookieList GetAllCookiesForURLWithOptions(CookieMonster* cm,
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 it->Priority() == cookie.Priority()) { 779 it->Priority() == cookie.Priority()) {
799 return true; 780 return true;
800 } 781 }
801 } 782 }
802 783
803 return false; 784 return false;
804 } 785 }
805 }; 786 };
806 787
807 using CookieMonsterTest = CookieMonsterTestBase<CookieMonsterTestTraits>; 788 using CookieMonsterTest = CookieMonsterTestBase<CookieMonsterTestTraits>;
808 using CookieMonsterStrictSecureTest =
809 CookieMonsterTestBase<CookieMonsterEnforcingStrictSecure>;
810 789
811 // TODO(erikwright): Replace the other callbacks and synchronous helper methods 790 // TODO(erikwright): Replace the other callbacks and synchronous helper methods
812 // in this test suite with these Mocks. 791 // in this test suite with these Mocks.
813 using MockClosure = base::MockCallback<base::Closure>; 792 using MockClosure = base::MockCallback<base::Closure>;
814 using MockGetCookiesCallback = 793 using MockGetCookiesCallback =
815 base::MockCallback<CookieStore::GetCookiesCallback>; 794 base::MockCallback<CookieStore::GetCookiesCallback>;
816 using MockSetCookiesCallback = 795 using MockSetCookiesCallback =
817 base::MockCallback<CookieStore::SetCookiesCallback>; 796 base::MockCallback<CookieStore::SetCookiesCallback>;
818 using MockGetCookieListCallback = 797 using MockGetCookieListCallback =
819 base::MockCallback<CookieMonster::GetCookieListCallback>; 798 base::MockCallback<CookieMonster::GetCookieListCallback>;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 delete_begin, 836 delete_begin,
858 delete_end, 837 delete_end,
859 callback) { 838 callback) {
860 cookie_monster->DeleteAllCreatedBetweenAsync(delete_begin, delete_end, 839 cookie_monster->DeleteAllCreatedBetweenAsync(delete_begin, delete_end,
861 callback->Get()); 840 callback->Get());
862 } 841 }
863 ACTION_P3(SetCookieWithDetailsAction, cookie_monster, cc, callback) { 842 ACTION_P3(SetCookieWithDetailsAction, cookie_monster, cc, callback) {
864 cookie_monster->SetCookieWithDetailsAsync( 843 cookie_monster->SetCookieWithDetailsAsync(
865 cc.url, cc.name, cc.value, cc.domain, cc.path, base::Time(), 844 cc.url, cc.name, cc.value, cc.domain, cc.path, base::Time(),
866 cc.expiration_time, base::Time(), cc.secure, cc.http_only, cc.same_site, 845 cc.expiration_time, base::Time(), cc.secure, cc.http_only, cc.same_site,
867 false /* enforces strict secure cookies */, cc.priority, callback->Get()); 846 cc.priority, callback->Get());
868 } 847 }
869 848
870 ACTION_P2(GetAllCookiesAction, cookie_monster, callback) { 849 ACTION_P2(GetAllCookiesAction, cookie_monster, callback) {
871 cookie_monster->GetAllCookiesAsync(callback->Get()); 850 cookie_monster->GetAllCookiesAsync(callback->Get());
872 } 851 }
873 852
874 ACTION_P5(DeleteAllCreatedBetweenWithPredicateAction, 853 ACTION_P5(DeleteAllCreatedBetweenWithPredicateAction,
875 cookie_monster, 854 cookie_monster,
876 delete_begin, 855 delete_begin,
877 delete_end, 856 delete_end,
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 CompleteLoading(); 1035 CompleteLoading();
1057 loop.Run(); 1036 loop.Run();
1058 } 1037 }
1059 1038
1060 TEST_F(DeferredCookieTaskTest, DeferredSetAllCookies) { 1039 TEST_F(DeferredCookieTaskTest, DeferredSetAllCookies) {
1061 MockSetCookiesCallback set_cookies_callback; 1040 MockSetCookiesCallback set_cookies_callback;
1062 CookieList list; 1041 CookieList list;
1063 list.push_back(*CanonicalCookie::Create( 1042 list.push_back(*CanonicalCookie::Create(
1064 http_www_google_.url(), "A", "B", http_www_google_.domain(), "/", 1043 http_www_google_.url(), "A", "B", http_www_google_.domain(), "/",
1065 base::Time::Now(), base::Time(), false, true, 1044 base::Time::Now(), base::Time(), false, true,
1066 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 1045 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
1067 list.push_back(*CanonicalCookie::Create( 1046 list.push_back(*CanonicalCookie::Create(
1068 http_www_google_.url(), "C", "D", http_www_google_.domain(), "/", 1047 http_www_google_.url(), "C", "D", http_www_google_.domain(), "/",
1069 base::Time::Now(), base::Time(), false, true, 1048 base::Time::Now(), base::Time(), false, true,
1070 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 1049 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
1071 1050
1072 BeginWith( 1051 BeginWith(
1073 SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback)); 1052 SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback));
1074 1053
1075 WaitForLoadCall(); 1054 WaitForLoadCall();
1076 1055
1077 EXPECT_CALL(set_cookies_callback, Run(true)) 1056 EXPECT_CALL(set_cookies_callback, Run(true))
1078 .WillOnce( 1057 .WillOnce(
1079 SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback)); 1058 SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback));
1080 base::RunLoop loop; 1059 base::RunLoop loop;
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1558 } 1537 }
1559 1538
1560 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollectionNonSecure) { 1539 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollectionNonSecure) {
1561 TestPriorityAwareGarbageCollectHelperNonSecure(); 1540 TestPriorityAwareGarbageCollectHelperNonSecure();
1562 } 1541 }
1563 1542
1564 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollectionSecure) { 1543 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollectionSecure) {
1565 TestPriorityAwareGarbageCollectHelperSecure(); 1544 TestPriorityAwareGarbageCollectHelperSecure();
1566 } 1545 }
1567 1546
1568 TEST_F(CookieMonsterStrictSecureTest, TestPriorityAwareGarbageCollectionMixed) { 1547 TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollectionMixed) {
1569 TestPriorityAwareGarbageCollectHelperMixed(); 1548 TestPriorityAwareGarbageCollectHelperMixed();
1570 } 1549 }
1571 1550
1572 TEST_F(CookieMonsterTest, SetCookieableSchemes) { 1551 TEST_F(CookieMonsterTest, SetCookieableSchemes) {
1573 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 1552 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
1574 std::unique_ptr<CookieMonster> cm_foo(new CookieMonster(nullptr, nullptr)); 1553 std::unique_ptr<CookieMonster> cm_foo(new CookieMonster(nullptr, nullptr));
1575 1554
1576 // Only cm_foo should allow foo:// cookies. 1555 // Only cm_foo should allow foo:// cookies.
1577 std::vector<std::string> schemes; 1556 std::vector<std::string> schemes;
1578 schemes.push_back("foo"); 1557 schemes.push_back("foo");
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after
2550 cm->SetPersistSessionCookies(true); 2529 cm->SetPersistSessionCookies(true);
2551 2530
2552 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "U=V; path=/")); 2531 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "U=V; path=/"));
2553 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "W=X; path=/foo")); 2532 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "W=X; path=/foo"));
2554 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "Y=Z; path=/")); 2533 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "Y=Z; path=/"));
2555 2534
2556 CookieList list; 2535 CookieList list;
2557 list.push_back(*CanonicalCookie::Create( 2536 list.push_back(*CanonicalCookie::Create(
2558 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/", 2537 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/",
2559 base::Time::Now(), base::Time(), false, false, 2538 base::Time::Now(), base::Time(), false, false,
2560 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 2539 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2561 list.push_back(*CanonicalCookie::Create( 2540 list.push_back(*CanonicalCookie::Create(
2562 http_www_google_.url(), "W", "X", http_www_google_.url().host(), "/bar", 2541 http_www_google_.url(), "W", "X", http_www_google_.url().host(), "/bar",
2563 base::Time::Now(), base::Time(), false, false, 2542 base::Time::Now(), base::Time(), false, false,
2564 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 2543 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2565 list.push_back(*CanonicalCookie::Create( 2544 list.push_back(*CanonicalCookie::Create(
2566 http_www_google_.url(), "Y", "Z", http_www_google_.url().host(), "/", 2545 http_www_google_.url(), "Y", "Z", http_www_google_.url().host(), "/",
2567 base::Time::Now(), base::Time(), false, false, 2546 base::Time::Now(), base::Time(), false, false,
2568 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 2547 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2569 2548
2570 // SetAllCookies must not flush. 2549 // SetAllCookies must not flush.
2571 ASSERT_EQ(0, store->flush_count()); 2550 ASSERT_EQ(0, store->flush_count());
2572 EXPECT_TRUE(SetAllCookies(cm.get(), list)); 2551 EXPECT_TRUE(SetAllCookies(cm.get(), list));
2573 EXPECT_EQ(0, store->flush_count()); 2552 EXPECT_EQ(0, store->flush_count());
2574 2553
2575 CookieList cookies = GetAllCookies(cm.get()); 2554 CookieList cookies = GetAllCookies(cm.get());
2576 size_t expected_size = 3; // "A", "W" and "Y". "U" is gone. 2555 size_t expected_size = 3; // "A", "W" and "Y". "U" is gone.
2577 EXPECT_EQ(expected_size, cookies.size()); 2556 EXPECT_EQ(expected_size, cookies.size());
2578 CookieList::iterator it = cookies.begin(); 2557 CookieList::iterator it = cookies.begin();
(...skipping 14 matching lines...) Expand all
2593 2572
2594 TEST_F(CookieMonsterTest, ComputeCookieDiff) { 2573 TEST_F(CookieMonsterTest, ComputeCookieDiff) {
2595 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 2574 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
2596 2575
2597 base::Time now = base::Time::Now(); 2576 base::Time now = base::Time::Now();
2598 base::Time creation_time = now - base::TimeDelta::FromSeconds(1); 2577 base::Time creation_time = now - base::TimeDelta::FromSeconds(1);
2599 2578
2600 std::unique_ptr<CanonicalCookie> cookie1(CanonicalCookie::Create( 2579 std::unique_ptr<CanonicalCookie> cookie1(CanonicalCookie::Create(
2601 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/", 2580 http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/",
2602 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2581 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2603 false, COOKIE_PRIORITY_DEFAULT)); 2582 COOKIE_PRIORITY_DEFAULT));
2604 std::unique_ptr<CanonicalCookie> cookie2(CanonicalCookie::Create( 2583 std::unique_ptr<CanonicalCookie> cookie2(CanonicalCookie::Create(
2605 http_www_google_.url(), "C", "D", http_www_google_.url().host(), "/", 2584 http_www_google_.url(), "C", "D", http_www_google_.url().host(), "/",
2606 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2585 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2607 false, COOKIE_PRIORITY_DEFAULT)); 2586 COOKIE_PRIORITY_DEFAULT));
2608 std::unique_ptr<CanonicalCookie> cookie3(CanonicalCookie::Create( 2587 std::unique_ptr<CanonicalCookie> cookie3(CanonicalCookie::Create(
2609 http_www_google_.url(), "E", "F", http_www_google_.url().host(), "/", 2588 http_www_google_.url(), "E", "F", http_www_google_.url().host(), "/",
2610 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2589 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2611 false, COOKIE_PRIORITY_DEFAULT)); 2590 COOKIE_PRIORITY_DEFAULT));
2612 std::unique_ptr<CanonicalCookie> cookie4(CanonicalCookie::Create( 2591 std::unique_ptr<CanonicalCookie> cookie4(CanonicalCookie::Create(
2613 http_www_google_.url(), "G", "H", http_www_google_.url().host(), "/", 2592 http_www_google_.url(), "G", "H", http_www_google_.url().host(), "/",
2614 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2593 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2615 false, COOKIE_PRIORITY_DEFAULT)); 2594 COOKIE_PRIORITY_DEFAULT));
2616 std::unique_ptr<CanonicalCookie> cookie4_with_new_value( 2595 std::unique_ptr<CanonicalCookie> cookie4_with_new_value(
2617 CanonicalCookie::Create( 2596 CanonicalCookie::Create(
2618 http_www_google_.url(), "G", "iamnew", http_www_google_.url().host(), 2597 http_www_google_.url(), "G", "iamnew", http_www_google_.url().host(),
2619 "/", creation_time, base::Time(), false, false, 2598 "/", creation_time, base::Time(), false, false,
2620 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 2599 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2621 std::unique_ptr<CanonicalCookie> cookie5(CanonicalCookie::Create( 2600 std::unique_ptr<CanonicalCookie> cookie5(CanonicalCookie::Create(
2622 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/", 2601 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/",
2623 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2602 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2624 false, COOKIE_PRIORITY_DEFAULT)); 2603 COOKIE_PRIORITY_DEFAULT));
2625 std::unique_ptr<CanonicalCookie> cookie5_with_new_creation_time( 2604 std::unique_ptr<CanonicalCookie> cookie5_with_new_creation_time(
2626 CanonicalCookie::Create( 2605 CanonicalCookie::Create(
2627 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/", 2606 http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/",
2628 now, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, false, 2607 now, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2629 COOKIE_PRIORITY_DEFAULT)); 2608 COOKIE_PRIORITY_DEFAULT));
2630 std::unique_ptr<CanonicalCookie> cookie6(CanonicalCookie::Create( 2609 std::unique_ptr<CanonicalCookie> cookie6(CanonicalCookie::Create(
2631 http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/foo", 2610 http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/foo",
2632 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2611 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2633 false, COOKIE_PRIORITY_DEFAULT)); 2612 COOKIE_PRIORITY_DEFAULT));
2634 std::unique_ptr<CanonicalCookie> cookie6_with_new_path( 2613 std::unique_ptr<CanonicalCookie> cookie6_with_new_path(
2635 CanonicalCookie::Create( 2614 CanonicalCookie::Create(
2636 http_www_google_.url(), "K", "L", http_www_google_.url().host(), 2615 http_www_google_.url(), "K", "L", http_www_google_.url().host(),
2637 "/bar", creation_time, base::Time(), false, false, 2616 "/bar", creation_time, base::Time(), false, false,
2638 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 2617 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2639 std::unique_ptr<CanonicalCookie> cookie7(CanonicalCookie::Create( 2618 std::unique_ptr<CanonicalCookie> cookie7(CanonicalCookie::Create(
2640 http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/foo", 2619 http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/foo",
2641 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE, 2620 creation_time, base::Time(), false, false, CookieSameSite::DEFAULT_MODE,
2642 false, COOKIE_PRIORITY_DEFAULT)); 2621 COOKIE_PRIORITY_DEFAULT));
2643 std::unique_ptr<CanonicalCookie> cookie7_with_new_path( 2622 std::unique_ptr<CanonicalCookie> cookie7_with_new_path(
2644 CanonicalCookie::Create( 2623 CanonicalCookie::Create(
2645 http_www_google_.url(), "M", "N", http_www_google_.url().host(), 2624 http_www_google_.url(), "M", "N", http_www_google_.url().host(),
2646 "/bar", creation_time, base::Time(), false, false, 2625 "/bar", creation_time, base::Time(), false, false,
2647 CookieSameSite::DEFAULT_MODE, false, COOKIE_PRIORITY_DEFAULT)); 2626 CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT));
2648 2627
2649 CookieList old_cookies; 2628 CookieList old_cookies;
2650 old_cookies.push_back(*cookie1); 2629 old_cookies.push_back(*cookie1);
2651 old_cookies.push_back(*cookie2); 2630 old_cookies.push_back(*cookie2);
2652 old_cookies.push_back(*cookie4); 2631 old_cookies.push_back(*cookie4);
2653 old_cookies.push_back(*cookie5); 2632 old_cookies.push_back(*cookie5);
2654 old_cookies.push_back(*cookie6); 2633 old_cookies.push_back(*cookie6);
2655 old_cookies.push_back(*cookie7); 2634 old_cookies.push_back(*cookie7);
2656 2635
2657 CookieList new_cookies; 2636 CookieList new_cookies;
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
2854 2833
2855 AddCookieToList(url, "foo=bar; path=" + path, now1, &initial_cookies); 2834 AddCookieToList(url, "foo=bar; path=" + path, now1, &initial_cookies);
2856 2835
2857 // We have to manually build this cookie because it contains a control 2836 // We have to manually build this cookie because it contains a control
2858 // character, and our cookie line parser rejects control characters. 2837 // character, and our cookie line parser rejects control characters.
2859 std::unique_ptr<CanonicalCookie> cc = CanonicalCookie::Create( 2838 std::unique_ptr<CanonicalCookie> cc = CanonicalCookie::Create(
2860 url, "baz", 2839 url, "baz",
2861 "\x05" 2840 "\x05"
2862 "boo", 2841 "boo",
2863 domain, path, now2, later, false, false, CookieSameSite::DEFAULT_MODE, 2842 domain, path, now2, later, false, false, CookieSameSite::DEFAULT_MODE,
2864 false, COOKIE_PRIORITY_DEFAULT); 2843 COOKIE_PRIORITY_DEFAULT);
2865 initial_cookies.push_back(std::move(cc)); 2844 initial_cookies.push_back(std::move(cc));
2866 2845
2867 AddCookieToList(url, "hello=world; path=" + path, now3, &initial_cookies); 2846 AddCookieToList(url, "hello=world; path=" + path, now3, &initial_cookies);
2868 2847
2869 // Inject our initial cookies into the mock PersistentCookieStore. 2848 // Inject our initial cookies into the mock PersistentCookieStore.
2870 store->SetLoadExpectation(true, std::move(initial_cookies)); 2849 store->SetLoadExpectation(true, std::move(initial_cookies));
2871 2850
2872 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2851 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2873 2852
2874 EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url)); 2853 EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url));
(...skipping 18 matching lines...) Expand all
2893 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1); 2872 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1);
2894 2873
2895 // Set a non-secure cookie on a cryptographic scheme. 2874 // Set a non-secure cookie on a cryptographic scheme.
2896 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "C=D; path=/;")); 2875 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "C=D; path=/;"));
2897 histograms.ExpectTotalCount(cookie_source_histogram, 2); 2876 histograms.ExpectTotalCount(cookie_source_histogram, 2);
2898 histograms.ExpectBucketCount( 2877 histograms.ExpectBucketCount(
2899 cookie_source_histogram, 2878 cookie_source_histogram,
2900 CookieMonster::COOKIE_SOURCE_NONSECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1); 2879 CookieMonster::COOKIE_SOURCE_NONSECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1);
2901 2880
2902 // Set a secure cookie on a non-cryptographic scheme. 2881 // Set a secure cookie on a non-cryptographic scheme.
2903 EXPECT_TRUE( 2882 EXPECT_FALSE(
2904 SetCookie(cm.get(), http_www_google_.url(), "D=E; path=/; Secure")); 2883 SetCookie(cm.get(), http_www_google_.url(), "D=E; path=/; Secure"));
2905 histograms.ExpectTotalCount(cookie_source_histogram, 3); 2884 histograms.ExpectTotalCount(cookie_source_histogram, 2);
2906 histograms.ExpectBucketCount( 2885 histograms.ExpectBucketCount(
2907 cookie_source_histogram, 2886 cookie_source_histogram,
2908 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 1); 2887 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 0);
2909 2888
2910 // Overwrite a secure cookie (set by a cryptographic scheme) on a 2889 // Overwrite a secure cookie (set by a cryptographic scheme) on a
2911 // non-cryptographic scheme. 2890 // non-cryptographic scheme.
2912 EXPECT_TRUE( 2891 EXPECT_FALSE(
2913 SetCookie(cm.get(), http_www_google_.url(), "A=B; path=/; Secure")); 2892 SetCookie(cm.get(), http_www_google_.url(), "A=B; path=/; Secure"));
2914 histograms.ExpectTotalCount(cookie_source_histogram, 4); 2893 histograms.ExpectTotalCount(cookie_source_histogram, 2);
2915 histograms.ExpectBucketCount( 2894 histograms.ExpectBucketCount(
2916 cookie_source_histogram, 2895 cookie_source_histogram,
2917 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1); 2896 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME, 1);
2918 histograms.ExpectBucketCount( 2897 histograms.ExpectBucketCount(
2919 cookie_source_histogram, 2898 cookie_source_histogram,
2920 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 2); 2899 CookieMonster::COOKIE_SOURCE_SECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 0);
2921 2900
2922 // Test that clearing a secure cookie on a http:// URL does not get 2901 // Test that attempting to clear a secure cookie on a http:// URL does
2923 // counted. 2902 // nothing.
2924 EXPECT_TRUE( 2903 EXPECT_TRUE(
2925 SetCookie(cm.get(), https_www_google_.url(), "F=G; path=/; Secure")); 2904 SetCookie(cm.get(), https_www_google_.url(), "F=G; path=/; Secure"));
2926 histograms.ExpectTotalCount(cookie_source_histogram, 5); 2905 histograms.ExpectTotalCount(cookie_source_histogram, 3);
2927 std::string cookies1 = GetCookies(cm.get(), https_www_google_.url()); 2906 std::string cookies1 = GetCookies(cm.get(), https_www_google_.url());
2928 EXPECT_NE(std::string::npos, cookies1.find("F=G")); 2907 EXPECT_NE(std::string::npos, cookies1.find("F=G"));
2929 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), 2908 EXPECT_FALSE(SetCookie(cm.get(), http_www_google_.url(),
2930 "F=G; path=/; Expires=Thu, 01-Jan-1970 00:00:01 GMT")); 2909 "F=G; path=/; Expires=Thu, 01-Jan-1970 00:00:01 GMT"));
2931 std::string cookies2 = GetCookies(cm.get(), https_www_google_.url()); 2910 std::string cookies2 = GetCookies(cm.get(), https_www_google_.url());
2932 EXPECT_EQ(std::string::npos, cookies2.find("F=G")); 2911 EXPECT_NE(std::string::npos, cookies2.find("F=G"));
2933 histograms.ExpectTotalCount(cookie_source_histogram, 5); 2912 histograms.ExpectTotalCount(cookie_source_histogram, 3);
2934 2913
2935 // Set a non-secure cookie on a non-cryptographic scheme. 2914 // Set a non-secure cookie on a non-cryptographic scheme.
2936 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "H=I; path=/")); 2915 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "H=I; path=/"));
2937 histograms.ExpectTotalCount(cookie_source_histogram, 6); 2916 histograms.ExpectTotalCount(cookie_source_histogram, 4);
2938 histograms.ExpectBucketCount( 2917 histograms.ExpectBucketCount(
2939 cookie_source_histogram, 2918 cookie_source_histogram,
2940 CookieMonster::COOKIE_SOURCE_NONSECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 1); 2919 CookieMonster::COOKIE_SOURCE_NONSECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME, 1);
2941 } 2920 }
2942 2921
2943 // Test that cookie delete equivalent histograms are recorded correctly when 2922 // Test that cookie delete equivalent histograms are recorded correctly.
2944 // strict secure cookies are not enabled.
2945 TEST_F(CookieMonsterTest, CookieDeleteEquivalentHistogramTest) { 2923 TEST_F(CookieMonsterTest, CookieDeleteEquivalentHistogramTest) {
2946 base::HistogramTester histograms; 2924 base::HistogramTester histograms;
2947 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent"; 2925 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent";
2948 2926
2949 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 2927 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
2950 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2928 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2951 2929
2952 // Set a secure cookie from a secure origin 2930 // Set a secure cookie from a secure origin
2953 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure")); 2931 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure"));
2954 histograms.ExpectTotalCount(cookie_source_histogram, 1); 2932 histograms.ExpectTotalCount(cookie_source_histogram, 1);
2955 histograms.ExpectBucketCount(cookie_source_histogram, 2933 histograms.ExpectBucketCount(cookie_source_histogram,
2956 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2934 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2957 1); 2935 1);
2958 2936
2959 // Set a new cookie with a different name from a variety of origins (including 2937 // Set a new cookie with a different name from a variety of origins (including
2960 // the same one). 2938 // the same one).
2961 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "B=A;")); 2939 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "B=A;"));
2962 histograms.ExpectTotalCount(cookie_source_histogram, 2); 2940 histograms.ExpectTotalCount(cookie_source_histogram, 2);
2963 histograms.ExpectBucketCount(cookie_source_histogram, 2941 histograms.ExpectBucketCount(cookie_source_histogram,
2964 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2942 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2965 2); 2943 2);
2966 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "C=A;")); 2944 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "C=A;"));
2967 histograms.ExpectTotalCount(cookie_source_histogram, 3); 2945 histograms.ExpectTotalCount(cookie_source_histogram, 3);
2968 histograms.ExpectBucketCount(cookie_source_histogram, 2946 histograms.ExpectBucketCount(cookie_source_histogram,
2969 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2947 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2970 3); 2948 3);
2971 2949
2972 // Set a non-secure cookie from an insecure origin that matches the name of an 2950 // Set a non-secure cookie from an insecure origin that matches the name of an
2973 // already existing cookie and additionally is equivalent to the existing 2951 // already existing cookie and additionally is equivalent to the existing
2974 // cookie. 2952 // cookie. This should fail since it's trying to overwrite a secure cookie.
2975 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B;")); 2953 EXPECT_FALSE(SetCookie(cm.get(), http_www_google_.url(), "A=B;"));
2976 histograms.ExpectTotalCount(cookie_source_histogram, 5); 2954 histograms.ExpectTotalCount(cookie_source_histogram, 6);
2977 histograms.ExpectBucketCount(cookie_source_histogram, 2955 histograms.ExpectBucketCount(cookie_source_histogram,
2978 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2956 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2979 4); 2957 4);
2980 histograms.ExpectBucketCount(cookie_source_histogram, 2958 histograms.ExpectBucketCount(cookie_source_histogram,
2981 CookieMonster::COOKIE_DELETE_EQUIVALENT_FOUND, 2959 CookieMonster::COOKIE_DELETE_EQUIVALENT_FOUND,
2982 1); 2960 0);
2961 histograms.ExpectBucketCount(
2962 cookie_source_histogram,
2963 CookieMonster::COOKIE_DELETE_EQUIVALENT_SKIPPING_SECURE, 1);
2964 histograms.ExpectBucketCount(
2965 cookie_source_histogram,
2966 CookieMonster::COOKIE_DELETE_EQUIVALENT_WOULD_HAVE_DELETED, 1);
2983 2967
2984 // Set a non-secure cookie from an insecure origin that matches the name of an 2968 // Set a non-secure cookie from an insecure origin that matches the name of an
2985 // already existing cookie but is not equivalent. 2969 // already existing cookie but is not equivalent. This should fail since it's
2986 EXPECT_TRUE( 2970 // trying to shadow a secure cookie.
2971 EXPECT_FALSE(
2987 SetCookie(cm.get(), http_www_google_.url(), "A=C; path=/some/path")); 2972 SetCookie(cm.get(), http_www_google_.url(), "A=C; path=/some/path"));
2988 histograms.ExpectTotalCount(cookie_source_histogram, 6); 2973 histograms.ExpectTotalCount(cookie_source_histogram, 8);
2989 histograms.ExpectBucketCount(cookie_source_histogram, 2974 histograms.ExpectBucketCount(cookie_source_histogram,
2990 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2975 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2991 5); 2976 5);
2977 histograms.ExpectBucketCount(
2978 cookie_source_histogram,
2979 CookieMonster::COOKIE_DELETE_EQUIVALENT_SKIPPING_SECURE, 2);
2992 2980
2993 // Set a secure cookie from a secure origin that matches the name of an 2981 // Set a secure cookie from a secure origin that matches the name of an
2994 // already existing cookies and is equivalent. 2982 // already existing cookies and is equivalent.
2995 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=D; secure")); 2983 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=D; secure"));
2996 histograms.ExpectTotalCount(cookie_source_histogram, 8); 2984 histograms.ExpectTotalCount(cookie_source_histogram, 10);
2997 histograms.ExpectBucketCount(cookie_source_histogram, 2985 histograms.ExpectBucketCount(cookie_source_histogram,
2998 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2986 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
2999 6); 2987 6);
3000 histograms.ExpectBucketCount(cookie_source_histogram, 2988 histograms.ExpectBucketCount(cookie_source_histogram,
3001 CookieMonster::COOKIE_DELETE_EQUIVALENT_FOUND, 2989 CookieMonster::COOKIE_DELETE_EQUIVALENT_FOUND,
3002 2); 2990 1);
3003 2991
3004 // Set a secure cookie from a secure origin that matches the name of an 2992 // Set a secure cookie from a secure origin that matches the name of an
3005 // already existing cookie and is not equivalent. 2993 // already existing cookie and is not equivalent.
3006 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), 2994 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(),
3007 "A=E; secure; path=/some/other/path")); 2995 "A=E; secure; path=/some/other/path"));
3008 histograms.ExpectTotalCount(cookie_source_histogram, 9); 2996 histograms.ExpectTotalCount(cookie_source_histogram, 11);
3009 histograms.ExpectBucketCount(cookie_source_histogram, 2997 histograms.ExpectBucketCount(cookie_source_histogram,
3010 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT, 2998 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3011 7); 2999 7);
3012 } 3000 }
3013 3001
3014 TEST_F(CookieMonsterStrictSecureTest, SetSecureCookies) { 3002 TEST_F(CookieMonsterTest, SetSecureCookies) {
3015 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 3003 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
3016 GURL http_url("http://www.google.com"); 3004 GURL http_url("http://www.google.com");
3017 GURL http_superdomain_url("http://google.com"); 3005 GURL http_superdomain_url("http://google.com");
3018 GURL https_url("https://www.google.com"); 3006 GURL https_url("https://www.google.com");
3019 3007
3020 // A non-secure cookie can be created from either a URL with a secure or 3008 // A non-secure cookie can be created from either a URL with a secure or
3021 // insecure scheme. 3009 // insecure scheme.
3022 EXPECT_TRUE(SetCookie(cm.get(), http_url, "A=C;")); 3010 EXPECT_TRUE(SetCookie(cm.get(), http_url, "A=C;"));
3023 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B;")); 3011 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B;"));
3024 3012
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3070 // so the insecure examples aren't trying to overwrite the one above. 3058 // so the insecure examples aren't trying to overwrite the one above.
3071 EXPECT_TRUE(SetCookie(cm.get(), https_url, "B=C; Secure; domain=google.com")); 3059 EXPECT_TRUE(SetCookie(cm.get(), https_url, "B=C; Secure; domain=google.com"));
3072 EXPECT_FALSE(SetCookie(cm.get(), http_url, "B=D; domain=google.com")); 3060 EXPECT_FALSE(SetCookie(cm.get(), http_url, "B=D; domain=google.com"));
3073 EXPECT_FALSE(SetCookie(cm.get(), http_url, "B=D")); 3061 EXPECT_FALSE(SetCookie(cm.get(), http_url, "B=D"));
3074 EXPECT_FALSE(SetCookie(cm.get(), http_superdomain_url, "B=D")); 3062 EXPECT_FALSE(SetCookie(cm.get(), http_superdomain_url, "B=D"));
3075 3063
3076 // Verify that if an httponly version of the cookie exists, adding a Secure 3064 // Verify that if an httponly version of the cookie exists, adding a Secure
3077 // version of the cookie still does not overwrite it. 3065 // version of the cookie still does not overwrite it.
3078 CookieOptions include_httponly; 3066 CookieOptions include_httponly;
3079 include_httponly.set_include_httponly(); 3067 include_httponly.set_include_httponly();
3080 include_httponly.set_enforce_strict_secure();
3081 EXPECT_TRUE(SetCookieWithOptions(cm.get(), https_url, "C=D; httponly", 3068 EXPECT_TRUE(SetCookieWithOptions(cm.get(), https_url, "C=D; httponly",
3082 include_httponly)); 3069 include_httponly));
3083 // Note that the lack of an explicit options object below uses the default, 3070 // Note that the lack of an explicit options object below uses the default,
3084 // which in this case includes "exclude_httponly = true". 3071 // which in this case includes "exclude_httponly = true".
3085 EXPECT_FALSE(SetCookie(cm.get(), https_url, "C=E; Secure")); 3072 EXPECT_FALSE(SetCookie(cm.get(), https_url, "C=E; Secure"));
3086 } 3073 }
3087 3074
3088 // Tests for behavior if strict secure cookies is enabled. 3075 // Tests for behavior for strict secure cookies.
3089 TEST_F(CookieMonsterStrictSecureTest, EvictSecureCookies) { 3076 TEST_F(CookieMonsterTest, EvictSecureCookies) {
3090 // Hard-coding limits in the test, but use DCHECK_EQ to enforce constraint. 3077 // Hard-coding limits in the test, but use DCHECK_EQ to enforce constraint.
3091 DCHECK_EQ(180U, CookieMonster::kDomainMaxCookies); 3078 DCHECK_EQ(180U, CookieMonster::kDomainMaxCookies);
3092 DCHECK_EQ(150U, CookieMonster::kDomainMaxCookies - 3079 DCHECK_EQ(150U, CookieMonster::kDomainMaxCookies -
3093 CookieMonster::kDomainPurgeCookies); 3080 CookieMonster::kDomainPurgeCookies);
3094 DCHECK_EQ(3300U, CookieMonster::kMaxCookies); 3081 DCHECK_EQ(3300U, CookieMonster::kMaxCookies);
3095 DCHECK_EQ(30, CookieMonster::kSafeFromGlobalPurgeDays); 3082 DCHECK_EQ(30, CookieMonster::kSafeFromGlobalPurgeDays);
3096 3083
3097 // If secure cookies for one domain hit the per domain limit (180), a 3084 // If secure cookies for one domain hit the per domain limit (180), a
3098 // non-secure cookie will not evict them (and, in fact, the non-secure cookie 3085 // non-secure cookie will not evict them (and, in fact, the non-secure cookie
3099 // will be removed right after creation). 3086 // will be removed right after creation).
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
3208 // cookies are removed so that the global total number of cookies is at the 3195 // cookies are removed so that the global total number of cookies is at the
3209 // global purge goal (3000), but the secure cookies are not evicted. 3196 // global purge goal (3000), but the secure cookies are not evicted.
3210 const CookiesEntry test14[] = {{1U, true}}; 3197 const CookiesEntry test14[] = {{1U, true}};
3211 const AltHosts test14_alt_hosts(1500, 1800); 3198 const AltHosts test14_alt_hosts(1500, 1800);
3212 TestSecureCookieEviction(test14, arraysize(test14), 1501U, 1499, 3199 TestSecureCookieEviction(test14, arraysize(test14), 1501U, 1499,
3213 &test14_alt_hosts); 3200 &test14_alt_hosts);
3214 } 3201 }
3215 3202
3216 // Tests that strict secure cookies doesn't trip equivalent cookie checks 3203 // Tests that strict secure cookies doesn't trip equivalent cookie checks
3217 // accidentally. Regression test for https://crbug.com/569943. 3204 // accidentally. Regression test for https://crbug.com/569943.
3218 TEST_F(CookieMonsterStrictSecureTest, EquivalentCookies) { 3205 TEST_F(CookieMonsterTest, EquivalentCookies) {
3219 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr)); 3206 std::unique_ptr<CookieMonster> cm(new CookieMonster(nullptr, nullptr));
3220 GURL http_url("http://www.google.com"); 3207 GURL http_url("http://www.google.com");
3221 GURL http_superdomain_url("http://google.com"); 3208 GURL http_superdomain_url("http://google.com");
3222 GURL https_url("https://www.google.com"); 3209 GURL https_url("https://www.google.com");
3223 3210
3224 // Tests that non-equivalent cookies because of the path attribute can be set 3211 // Tests that non-equivalent cookies because of the path attribute can be set
3225 // successfully. 3212 // successfully.
3226 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure")); 3213 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure"));
3227 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; path=/some/other/path")); 3214 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; path=/some/other/path"));
3228 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; path=/some/other/path")); 3215 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; path=/some/other/path"));
3229 3216
3230 // Tests that non-equivalent cookies because of the domain attribute can be 3217 // Tests that non-equivalent cookies because of the domain attribute can be
3231 // set successfully. 3218 // set successfully.
3232 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure")); 3219 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=B; Secure"));
3233 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; domain=google.com")); 3220 EXPECT_TRUE(SetCookie(cm.get(), https_url, "A=C; domain=google.com"));
3234 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; domain=google.com")); 3221 EXPECT_FALSE(SetCookie(cm.get(), http_url, "A=D; domain=google.com"));
3235 } 3222 }
3236 3223
3237 // Test that cookie delete equivalent histograms are recorded correctly for
3238 // strict secure cookies.
3239 TEST_F(CookieMonsterStrictSecureTest, CookieDeleteEquivalentHistogramTest) {
3240 base::HistogramTester histograms;
3241 const std::string cookie_source_histogram = "Cookie.CookieDeleteEquivalent";
3242
3243 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
3244 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
3245
3246 // Set a secure cookie from a secure origin
3247 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; Secure"));
3248 histograms.ExpectTotalCount(cookie_source_histogram, 1);
3249 histograms.ExpectBucketCount(cookie_source_histogram,
3250 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3251 1);
3252
3253 // Set a new cookie with a different name from a variety of origins (including
3254 // the same one).
3255 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "B=A;"));
3256 histograms.ExpectTotalCount(cookie_source_histogram, 2);
3257 histograms.ExpectBucketCount(cookie_source_histogram,
3258 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3259 2);
3260 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "C=A;"));
3261 histograms.ExpectTotalCount(cookie_source_histogram, 3);
3262 histograms.ExpectBucketCount(cookie_source_histogram,
3263 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3264 3);
3265
3266 // Set a non-secure cookie from an insecure origin that matches the name of an
3267 // already existing cookie and additionally is equivalent to the existing
3268 // cookie.
3269 EXPECT_FALSE(SetCookie(cm.get(), http_www_google_.url(), "A=B;"));
3270 histograms.ExpectTotalCount(cookie_source_histogram, 6);
3271 histograms.ExpectBucketCount(cookie_source_histogram,
3272 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3273 4);
3274 histograms.ExpectBucketCount(
3275 cookie_source_histogram,
3276 CookieMonster::COOKIE_DELETE_EQUIVALENT_SKIPPING_SECURE, 1);
3277 histograms.ExpectBucketCount(
3278 cookie_source_histogram,
3279 CookieMonster::COOKIE_DELETE_EQUIVALENT_WOULD_HAVE_DELETED, 1);
3280
3281 // Set a non-secure cookie from an insecure origin that matches the name of an
3282 // already existing cookie but is not equivalent.
3283 EXPECT_FALSE(
3284 SetCookie(cm.get(), http_www_google_.url(), "A=B; path=/some/path"));
3285 histograms.ExpectTotalCount(cookie_source_histogram, 8);
3286 histograms.ExpectBucketCount(cookie_source_histogram,
3287 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3288 5);
3289 histograms.ExpectBucketCount(
3290 cookie_source_histogram,
3291 CookieMonster::COOKIE_DELETE_EQUIVALENT_SKIPPING_SECURE, 2);
3292
3293 // Set a secure cookie from a secure origin that matches the name of an
3294 // already existing cookies and is equivalent.
3295 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(), "A=B; secure"));
3296 histograms.ExpectTotalCount(cookie_source_histogram, 10);
3297 histograms.ExpectBucketCount(cookie_source_histogram,
3298 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3299 6);
3300 histograms.ExpectBucketCount(cookie_source_histogram,
3301 CookieMonster::COOKIE_DELETE_EQUIVALENT_FOUND,
3302 1);
3303
3304 // Set a secure cookie from a secure origin that matches the name of an
3305 // already existing cookie and is not equivalent.
3306 EXPECT_TRUE(SetCookie(cm.get(), https_www_google_.url(),
3307 "A=C; secure; path=/some/path"));
3308 histograms.ExpectTotalCount(cookie_source_histogram, 11);
3309 histograms.ExpectBucketCount(cookie_source_histogram,
3310 CookieMonster::COOKIE_DELETE_EQUIVALENT_ATTEMPT,
3311 7);
3312 }
3313
3314 class CookieMonsterNotificationTest : public CookieMonsterTest { 3224 class CookieMonsterNotificationTest : public CookieMonsterTest {
3315 public: 3225 public:
3316 CookieMonsterNotificationTest() 3226 CookieMonsterNotificationTest()
3317 : test_url_("http://www.google.com/foo"), 3227 : test_url_("http://www.google.com/foo"),
3318 store_(new MockPersistentCookieStore), 3228 store_(new MockPersistentCookieStore),
3319 monster_(new CookieMonster(store_.get(), nullptr)) {} 3229 monster_(new CookieMonster(store_.get(), nullptr)) {}
3320 3230
3321 ~CookieMonsterNotificationTest() override {} 3231 ~CookieMonsterNotificationTest() override {}
3322 3232
3323 CookieMonster* monster() { return monster_.get(); } 3233 CookieMonster* monster() { return monster_.get(); }
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
3461 monster()->AddCallbackForCookie( 3371 monster()->AddCallbackForCookie(
3462 test_url_, "abc", 3372 test_url_, "abc",
3463 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); 3373 base::Bind(&RecordCookieChanges, &cookies1, nullptr)));
3464 SetCookie(monster(), test_url_, "abc=def"); 3374 SetCookie(monster(), test_url_, "abc=def");
3465 base::RunLoop().RunUntilIdle(); 3375 base::RunLoop().RunUntilIdle();
3466 EXPECT_EQ(1U, cookies0.size()); 3376 EXPECT_EQ(1U, cookies0.size());
3467 EXPECT_EQ(1U, cookies0.size()); 3377 EXPECT_EQ(1U, cookies0.size());
3468 } 3378 }
3469 3379
3470 } // namespace net 3380 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster_store_test.cc ('k') | net/cookies/cookie_options.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698