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 #ifndef NET_COOKIES_COOKIE_STORE_UNITTEST_H_ | 5 #ifndef NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
6 #define NET_COOKIES_COOKIE_STORE_UNITTEST_H_ | 6 #define NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/string_tokenizer.h" | 10 #include "base/strings/string_tokenizer.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 // Helper methods for the asynchronous Cookie Store API that call the | 84 // Helper methods for the asynchronous Cookie Store API that call the |
85 // asynchronous method and then pump the loop until the callback is invoked, | 85 // asynchronous method and then pump the loop until the callback is invoked, |
86 // finally returning the value. | 86 // finally returning the value. |
87 | 87 |
88 std::string GetCookies(CookieStore* cs, const GURL& url) { | 88 std::string GetCookies(CookieStore* cs, const GURL& url) { |
89 DCHECK(cs); | 89 DCHECK(cs); |
90 CookieOptions options; | 90 CookieOptions options; |
91 if (!CookieStoreTestTraits::supports_http_only) | 91 if (!CookieStoreTestTraits::supports_http_only) |
92 options.set_include_httponly(); | 92 options.set_include_httponly(); |
93 StringResultCookieCallback callback; | 93 StringResultCookieCallback callback; |
94 cs->GetCookiesWithOptionsAsync( | 94 cs->GetCookiesWithOptionsAsync(url, |
95 url, options, | 95 options, |
96 base::Bind(&StringResultCookieCallback::Run, | 96 base::Bind(&StringResultCookieCallback::Run, |
97 base::Unretained(&callback))); | 97 base::Unretained(&callback))); |
98 RunFor(kTimeout); | 98 RunFor(kTimeout); |
99 EXPECT_TRUE(callback.did_run()); | 99 EXPECT_TRUE(callback.did_run()); |
100 return callback.result(); | 100 return callback.result(); |
101 } | 101 } |
102 | 102 |
103 std::string GetCookiesWithOptions(CookieStore* cs, | 103 std::string GetCookiesWithOptions(CookieStore* cs, |
104 const GURL& url, | 104 const GURL& url, |
105 const CookieOptions& options) { | 105 const CookieOptions& options) { |
106 DCHECK(cs); | 106 DCHECK(cs); |
107 StringResultCookieCallback callback; | 107 StringResultCookieCallback callback; |
108 cs->GetCookiesWithOptionsAsync( | 108 cs->GetCookiesWithOptionsAsync(url, |
109 url, options, base::Bind(&StringResultCookieCallback::Run, | 109 options, |
110 base::Unretained(&callback))); | 110 base::Bind(&StringResultCookieCallback::Run, |
| 111 base::Unretained(&callback))); |
111 RunFor(kTimeout); | 112 RunFor(kTimeout); |
112 EXPECT_TRUE(callback.did_run()); | 113 EXPECT_TRUE(callback.did_run()); |
113 return callback.result(); | 114 return callback.result(); |
114 } | 115 } |
115 | 116 |
116 bool SetCookieWithOptions(CookieStore* cs, | 117 bool SetCookieWithOptions(CookieStore* cs, |
117 const GURL& url, | 118 const GURL& url, |
118 const std::string& cookie_line, | 119 const std::string& cookie_line, |
119 const CookieOptions& options) { | 120 const CookieOptions& options) { |
120 DCHECK(cs); | 121 DCHECK(cs); |
121 ResultSavingCookieCallback<bool> callback; | 122 ResultSavingCookieCallback<bool> callback; |
122 cs->SetCookieWithOptionsAsync( | 123 cs->SetCookieWithOptionsAsync( |
123 url, cookie_line, options, | 124 url, |
124 base::Bind( | 125 cookie_line, |
125 &ResultSavingCookieCallback<bool>::Run, | 126 options, |
126 base::Unretained(&callback))); | 127 base::Bind(&ResultSavingCookieCallback<bool>::Run, |
| 128 base::Unretained(&callback))); |
127 RunFor(kTimeout); | 129 RunFor(kTimeout); |
128 EXPECT_TRUE(callback.did_run()); | 130 EXPECT_TRUE(callback.did_run()); |
129 return callback.result(); | 131 return callback.result(); |
130 } | 132 } |
131 | 133 |
132 bool SetCookieWithServerTime(CookieStore* cs, | 134 bool SetCookieWithServerTime(CookieStore* cs, |
133 const GURL& url, | 135 const GURL& url, |
134 const std::string& cookie_line, | 136 const std::string& cookie_line, |
135 const base::Time& server_time) { | 137 const base::Time& server_time) { |
136 CookieOptions options; | 138 CookieOptions options; |
(...skipping 11 matching lines...) Expand all Loading... |
148 options.set_include_httponly(); | 150 options.set_include_httponly(); |
149 return SetCookieWithOptions(cs, url, cookie_line, options); | 151 return SetCookieWithOptions(cs, url, cookie_line, options); |
150 } | 152 } |
151 | 153 |
152 void DeleteCookie(CookieStore* cs, | 154 void DeleteCookie(CookieStore* cs, |
153 const GURL& url, | 155 const GURL& url, |
154 const std::string& cookie_name) { | 156 const std::string& cookie_name) { |
155 DCHECK(cs); | 157 DCHECK(cs); |
156 NoResultCookieCallback callback; | 158 NoResultCookieCallback callback; |
157 cs->DeleteCookieAsync( | 159 cs->DeleteCookieAsync( |
158 url, cookie_name, | 160 url, |
| 161 cookie_name, |
159 base::Bind(&NoResultCookieCallback::Run, base::Unretained(&callback))); | 162 base::Bind(&NoResultCookieCallback::Run, base::Unretained(&callback))); |
160 RunFor(kTimeout); | 163 RunFor(kTimeout); |
161 EXPECT_TRUE(callback.did_run()); | 164 EXPECT_TRUE(callback.did_run()); |
162 } | 165 } |
163 | 166 |
164 int DeleteCreatedBetween(CookieStore* cs, | 167 int DeleteCreatedBetween(CookieStore* cs, |
165 const base::Time& delete_begin, | 168 const base::Time& delete_begin, |
166 const base::Time& delete_end) { | 169 const base::Time& delete_end) { |
167 DCHECK(cs); | 170 DCHECK(cs); |
168 ResultSavingCookieCallback<int> callback; | 171 ResultSavingCookieCallback<int> callback; |
169 cs->DeleteAllCreatedBetweenAsync( | 172 cs->DeleteAllCreatedBetweenAsync( |
170 delete_begin, delete_end, | 173 delete_begin, |
171 base::Bind( | 174 delete_end, |
172 &ResultSavingCookieCallback<int>::Run, | 175 base::Bind(&ResultSavingCookieCallback<int>::Run, |
173 base::Unretained(&callback))); | 176 base::Unretained(&callback))); |
174 RunFor(kTimeout); | 177 RunFor(kTimeout); |
175 EXPECT_TRUE(callback.did_run()); | 178 EXPECT_TRUE(callback.did_run()); |
176 return callback.result(); | 179 return callback.result(); |
177 } | 180 } |
178 | 181 |
179 int DeleteAllCreatedBetweenForHost(CookieStore* cs, | 182 int DeleteAllCreatedBetweenForHost(CookieStore* cs, |
180 const base::Time delete_begin, | 183 const base::Time delete_begin, |
181 const base::Time delete_end, | 184 const base::Time delete_end, |
182 const GURL& url) { | 185 const GURL& url) { |
183 DCHECK(cs); | 186 DCHECK(cs); |
184 ResultSavingCookieCallback<int> callback; | 187 ResultSavingCookieCallback<int> callback; |
185 cs->DeleteAllCreatedBetweenForHostAsync( | 188 cs->DeleteAllCreatedBetweenForHostAsync( |
186 delete_begin, delete_end, url, | 189 delete_begin, |
187 base::Bind( | 190 delete_end, |
188 &ResultSavingCookieCallback<int>::Run, | 191 url, |
189 base::Unretained(&callback))); | 192 base::Bind(&ResultSavingCookieCallback<int>::Run, |
| 193 base::Unretained(&callback))); |
190 RunFor(kTimeout); | 194 RunFor(kTimeout); |
191 EXPECT_TRUE(callback.did_run()); | 195 EXPECT_TRUE(callback.did_run()); |
192 return callback.result(); | 196 return callback.result(); |
193 } | 197 } |
194 | 198 |
195 int DeleteSessionCookies(CookieStore* cs) { | 199 int DeleteSessionCookies(CookieStore* cs) { |
196 DCHECK(cs); | 200 DCHECK(cs); |
197 ResultSavingCookieCallback<int> callback; | 201 ResultSavingCookieCallback<int> callback; |
198 cs->DeleteSessionCookiesAsync( | 202 cs->DeleteSessionCookiesAsync(base::Bind( |
199 base::Bind( | 203 &ResultSavingCookieCallback<int>::Run, base::Unretained(&callback))); |
200 &ResultSavingCookieCallback<int>::Run, | |
201 base::Unretained(&callback))); | |
202 RunFor(kTimeout); | 204 RunFor(kTimeout); |
203 EXPECT_TRUE(callback.did_run()); | 205 EXPECT_TRUE(callback.did_run()); |
204 return callback.result(); | 206 return callback.result(); |
205 } | 207 } |
206 | 208 |
207 void RunFor(int ms) { | 209 void RunFor(int ms) { |
208 // Runs the test thread message loop for up to |ms| milliseconds. | 210 // Runs the test thread message loop for up to |ms| milliseconds. |
209 base::MessageLoop::current()->PostDelayedTask( | 211 base::MessageLoop::current()->PostDelayedTask( |
210 FROM_HERE, | 212 FROM_HERE, |
211 base::Bind(&base::MessageLoop::Quit, weak_factory_->GetWeakPtr()), | 213 base::Bind(&base::MessageLoop::Quit, weak_factory_->GetWeakPtr()), |
(...skipping 10 matching lines...) Expand all Loading... |
222 void MatchCookieLines(const std::string& line1, const std::string& line2) { | 224 void MatchCookieLines(const std::string& line1, const std::string& line2) { |
223 EXPECT_EQ(TokenizeCookieLine(line1), TokenizeCookieLine(line2)); | 225 EXPECT_EQ(TokenizeCookieLine(line1), TokenizeCookieLine(line2)); |
224 } | 226 } |
225 | 227 |
226 // Check the cookie line by polling until equality or a timeout is reached. | 228 // Check the cookie line by polling until equality or a timeout is reached. |
227 void MatchCookieLineWithTimeout(CookieStore* cs, | 229 void MatchCookieLineWithTimeout(CookieStore* cs, |
228 const GURL& url, | 230 const GURL& url, |
229 const std::string& line) { | 231 const std::string& line) { |
230 std::string cookies = GetCookies(cs, url); | 232 std::string cookies = GetCookies(cs, url); |
231 bool matched = (TokenizeCookieLine(line) == TokenizeCookieLine(cookies)); | 233 bool matched = (TokenizeCookieLine(line) == TokenizeCookieLine(cookies)); |
232 base::Time polling_end_date = base::Time::Now() + | 234 base::Time polling_end_date = |
| 235 base::Time::Now() + |
233 base::TimeDelta::FromMilliseconds( | 236 base::TimeDelta::FromMilliseconds( |
234 CookieStoreTestTraits::creation_time_granularity_in_ms); | 237 CookieStoreTestTraits::creation_time_granularity_in_ms); |
235 | 238 |
236 while (!matched && base::Time::Now() <= polling_end_date) { | 239 while (!matched && base::Time::Now() <= polling_end_date) { |
237 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); | 240 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); |
238 cookies = GetCookies(cs, url); | 241 cookies = GetCookies(cs, url); |
239 matched = (TokenizeCookieLine(line) == TokenizeCookieLine(cookies)); | 242 matched = (TokenizeCookieLine(line) == TokenizeCookieLine(cookies)); |
240 } | 243 } |
241 | 244 |
242 EXPECT_TRUE(matched) << "\"" << cookies | 245 EXPECT_TRUE(matched) << "\"" << cookies << "\" does not match \"" << line |
243 << "\" does not match \"" << line << "\""; | 246 << "\""; |
244 } | 247 } |
245 | 248 |
246 GURL url_google_; | 249 GURL url_google_; |
247 GURL url_google_secure_; | 250 GURL url_google_secure_; |
248 GURL url_google_foo_; | 251 GURL url_google_foo_; |
249 GURL url_google_bar_; | 252 GURL url_google_bar_; |
250 | 253 |
251 scoped_ptr<base::WeakPtrFactory<base::MessageLoop> > weak_factory_; | 254 scoped_ptr<base::WeakPtrFactory<base::MessageLoop> > weak_factory_; |
252 scoped_ptr<base::MessageLoop> message_loop_; | 255 scoped_ptr<base::MessageLoop> message_loop_; |
253 | 256 |
254 private: | 257 private: |
255 // Returns a set of strings of type "name=value". Fails in case of duplicate. | 258 // Returns a set of strings of type "name=value". Fails in case of duplicate. |
256 std::set<std::string> TokenizeCookieLine(const std::string& line) { | 259 std::set<std::string> TokenizeCookieLine(const std::string& line) { |
257 std::set<std::string> tokens; | 260 std::set<std::string> tokens; |
258 base::StringTokenizer tokenizer(line, " ;"); | 261 base::StringTokenizer tokenizer(line, " ;"); |
259 while (tokenizer.GetNext()) | 262 while (tokenizer.GetNext()) |
260 EXPECT_TRUE(tokens.insert(tokenizer.token()).second); | 263 EXPECT_TRUE(tokens.insert(tokenizer.token()).second); |
261 return tokens; | 264 return tokens; |
262 } | 265 } |
263 }; | 266 }; |
264 | 267 |
265 TYPED_TEST_CASE_P(CookieStoreTest); | 268 TYPED_TEST_CASE_P(CookieStoreTest); |
266 | 269 |
267 TYPED_TEST_P(CookieStoreTest, TypeTest) { | 270 TYPED_TEST_P(CookieStoreTest, TypeTest) { |
268 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 271 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
269 EXPECT_EQ(cs->GetCookieMonster(), | 272 EXPECT_EQ(cs->GetCookieMonster(), |
270 (TypeParam::is_cookie_monster) ? | 273 (TypeParam::is_cookie_monster) |
271 static_cast<CookieMonster*>(cs.get()) : NULL); | 274 ? static_cast<CookieMonster*>(cs.get()) |
| 275 : NULL); |
272 } | 276 } |
273 | 277 |
274 TYPED_TEST_P(CookieStoreTest, DomainTest) { | 278 TYPED_TEST_P(CookieStoreTest, DomainTest) { |
275 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 279 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
276 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); | 280 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
277 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); | 281 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
278 EXPECT_TRUE(this->SetCookie( | 282 EXPECT_TRUE(this->SetCookie( |
279 cs.get(), this->url_google_, "C=D; domain=.google.izzle")); | 283 cs.get(), this->url_google_, "C=D; domain=.google.izzle")); |
280 this->MatchCookieLines("A=B; C=D", | 284 this->MatchCookieLines("A=B; C=D", |
281 this->GetCookies(cs.get(), this->url_google_)); | 285 this->GetCookies(cs.get(), this->url_google_)); |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 "a=1", this->GetCookies(cs.get(), GURL("http://sub.www.google.com"))); | 444 "a=1", this->GetCookies(cs.get(), GURL("http://sub.www.google.com"))); |
441 this->MatchCookieLines( | 445 this->MatchCookieLines( |
442 std::string(), | 446 std::string(), |
443 this->GetCookies(cs.get(), GURL("http://something-else.com"))); | 447 this->GetCookies(cs.get(), GURL("http://something-else.com"))); |
444 } | 448 } |
445 } | 449 } |
446 | 450 |
447 // Test that the domain specified in cookie string is treated case-insensitive | 451 // Test that the domain specified in cookie string is treated case-insensitive |
448 // http://b/issue?id=896475. | 452 // http://b/issue?id=896475. |
449 TYPED_TEST_P(CookieStoreTest, CaseInsensitiveDomainTest) { | 453 TYPED_TEST_P(CookieStoreTest, CaseInsensitiveDomainTest) { |
450 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 454 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
451 GURL url("http://www.google.com"); | 455 GURL url("http://www.google.com"); |
452 EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1; domain=.GOOGLE.COM")); | 456 EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1; domain=.GOOGLE.COM")); |
453 EXPECT_TRUE(this->SetCookie(cs.get(), url, "b=2; domain=.wWw.gOOgLE.coM")); | 457 EXPECT_TRUE(this->SetCookie(cs.get(), url, "b=2; domain=.wWw.gOOgLE.coM")); |
454 this->MatchCookieLines("a=1; b=2", this->GetCookies(cs.get(), url)); | 458 this->MatchCookieLines("a=1; b=2", this->GetCookies(cs.get(), url)); |
455 } | 459 } |
456 | 460 |
457 TYPED_TEST_P(CookieStoreTest, TestIpAddress) { | 461 TYPED_TEST_P(CookieStoreTest, TestIpAddress) { |
458 GURL url_ip("http://1.2.3.4/weee"); | 462 GURL url_ip("http://1.2.3.4/weee"); |
459 { | 463 { |
460 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 464 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
745 this->GetCookies(cs.get(), this->url_google_)); | 749 this->GetCookies(cs.get(), this->url_google_)); |
746 | 750 |
747 // Create a persistent cookie. | 751 // Create a persistent cookie. |
748 EXPECT_TRUE(this->SetCookie( | 752 EXPECT_TRUE(this->SetCookie( |
749 cs.get(), | 753 cs.get(), |
750 this->url_google_, | 754 this->url_google_, |
751 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 755 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
752 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); | 756 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
753 // Check that it is not deleted with significant enough clock skew. | 757 // Check that it is not deleted with significant enough clock skew. |
754 base::Time server_time; | 758 base::Time server_time; |
755 EXPECT_TRUE(base::Time::FromString("Sun, 17-Apr-1977 22:50:13 GMT", | 759 EXPECT_TRUE( |
756 &server_time)); | 760 base::Time::FromString("Sun, 17-Apr-1977 22:50:13 GMT", &server_time)); |
757 EXPECT_TRUE(this->SetCookieWithServerTime( | 761 EXPECT_TRUE(this->SetCookieWithServerTime( |
758 cs.get(), | 762 cs.get(), |
759 this->url_google_, | 763 this->url_google_, |
760 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", | 764 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", |
761 server_time)); | 765 server_time)); |
762 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); | 766 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
763 | 767 |
764 // Create a persistent cookie. | 768 // Create a persistent cookie. |
765 EXPECT_TRUE(this->SetCookie( | 769 EXPECT_TRUE(this->SetCookie( |
766 cs.get(), | 770 cs.get(), |
767 this->url_google_, | 771 this->url_google_, |
768 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 772 std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
769 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); | 773 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
770 // Delete it via Expires, with a unix epoch of 0. | 774 // Delete it via Expires, with a unix epoch of 0. |
771 EXPECT_TRUE(this->SetCookie(cs.get(), | 775 EXPECT_TRUE(this->SetCookie(cs.get(), |
772 this->url_google_, | 776 this->url_google_, |
773 std::string(kValidCookieLine) + | 777 std::string(kValidCookieLine) + |
774 "; expires=Thu, 1-Jan-1970 00:00:00 GMT")); | 778 "; expires=Thu, 1-Jan-1970 00:00:00 GMT")); |
775 this->MatchCookieLines(std::string(), | 779 this->MatchCookieLines(std::string(), |
776 this->GetCookies(cs.get(), this->url_google_)); | 780 this->GetCookies(cs.get(), this->url_google_)); |
777 } | 781 } |
778 | 782 |
779 TYPED_TEST_P(CookieStoreTest, TestDeleteAllCreatedBetween) { | 783 TYPED_TEST_P(CookieStoreTest, TestDeleteAllCreatedBetween) { |
780 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 784 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
781 const base::Time last_month = base::Time::Now() - | 785 const base::Time last_month = |
782 base::TimeDelta::FromDays(30); | 786 base::Time::Now() - base::TimeDelta::FromDays(30); |
783 const base::Time last_minute = base::Time::Now() - | 787 const base::Time last_minute = |
784 base::TimeDelta::FromMinutes(1); | 788 base::Time::Now() - base::TimeDelta::FromMinutes(1); |
785 const base::Time next_minute = base::Time::Now() + | 789 const base::Time next_minute = |
786 base::TimeDelta::FromMinutes(1); | 790 base::Time::Now() + base::TimeDelta::FromMinutes(1); |
787 const base::Time next_month = base::Time::Now() + | 791 const base::Time next_month = |
788 base::TimeDelta::FromDays(30); | 792 base::Time::Now() + base::TimeDelta::FromDays(30); |
789 | 793 |
790 // Add a cookie. | 794 // Add a cookie. |
791 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); | 795 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
792 // Check that the cookie is in the store. | 796 // Check that the cookie is in the store. |
793 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); | 797 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
794 | 798 |
795 // Remove cookies in empty intervals. | 799 // Remove cookies in empty intervals. |
796 EXPECT_EQ(0, this->DeleteCreatedBetween(cs.get(), last_month, last_minute)); | 800 EXPECT_EQ(0, this->DeleteCreatedBetween(cs.get(), last_month, last_minute)); |
797 EXPECT_EQ(0, this->DeleteCreatedBetween(cs.get(), next_minute, next_month)); | 801 EXPECT_EQ(0, this->DeleteCreatedBetween(cs.get(), next_minute, next_month)); |
798 // Check that the cookie is still there. | 802 // Check that the cookie is still there. |
(...skipping 24 matching lines...) Expand all Loading... |
823 | 827 |
824 // These 3 cookies match the time range and host. | 828 // These 3 cookies match the time range and host. |
825 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); | 829 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
826 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "C=D")); | 830 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "C=D")); |
827 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "Y=Z")); | 831 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "Y=Z")); |
828 | 832 |
829 // This cookie does not match host. | 833 // This cookie does not match host. |
830 EXPECT_TRUE(this->SetCookie(cs.get(), url_not_google, "E=F")); | 834 EXPECT_TRUE(this->SetCookie(cs.get(), url_not_google, "E=F")); |
831 | 835 |
832 // Delete cookies. | 836 // Delete cookies. |
833 EXPECT_EQ( | 837 EXPECT_EQ(3, // Deletes A=B, C=D, Y=Z |
834 3, // Deletes A=B, C=D, Y=Z | 838 this->DeleteAllCreatedBetweenForHost( |
835 this->DeleteAllCreatedBetweenForHost( | 839 cs.get(), now, base::Time::Max(), this->url_google_)); |
836 cs.get(), now, base::Time::Max(), this->url_google_)); | |
837 } | 840 } |
838 | 841 |
839 TYPED_TEST_P(CookieStoreTest, TestSecure) { | 842 TYPED_TEST_P(CookieStoreTest, TestSecure) { |
840 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 843 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
841 | 844 |
842 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); | 845 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
843 this->MatchCookieLines("A=B", | 846 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
844 this->GetCookies(cs.get(), this->url_google_)); | 847 this->MatchCookieLines("A=B", |
845 this->MatchCookieLines( | 848 this->GetCookies(cs.get(), this->url_google_secure_)); |
846 "A=B", this->GetCookies(cs.get(), this->url_google_secure_)); | |
847 | 849 |
848 EXPECT_TRUE( | 850 EXPECT_TRUE( |
849 this->SetCookie(cs.get(), this->url_google_secure_, "A=B; secure")); | 851 this->SetCookie(cs.get(), this->url_google_secure_, "A=B; secure")); |
850 // The secure should overwrite the non-secure. | 852 // The secure should overwrite the non-secure. |
851 this->MatchCookieLines(std::string(), | 853 this->MatchCookieLines(std::string(), |
852 this->GetCookies(cs.get(), this->url_google_)); | 854 this->GetCookies(cs.get(), this->url_google_)); |
853 this->MatchCookieLines("A=B", | 855 this->MatchCookieLines("A=B", |
854 this->GetCookies(cs.get(), this->url_google_secure_)); | 856 this->GetCookies(cs.get(), this->url_google_secure_)); |
855 | 857 |
856 EXPECT_TRUE( | 858 EXPECT_TRUE( |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1017 HttpOnlyTest, | 1019 HttpOnlyTest, |
1018 TestCookieDeletion, | 1020 TestCookieDeletion, |
1019 TestDeleteAllCreatedBetween, | 1021 TestDeleteAllCreatedBetween, |
1020 TestDeleteAllCreatedBetweenForHost, | 1022 TestDeleteAllCreatedBetweenForHost, |
1021 TestSecure, | 1023 TestSecure, |
1022 NetUtilCookieTest, | 1024 NetUtilCookieTest, |
1023 OverwritePersistentCookie, | 1025 OverwritePersistentCookie, |
1024 CookieOrdering, | 1026 CookieOrdering, |
1025 DeleteSessionCookie); | 1027 DeleteSessionCookie); |
1026 | 1028 |
1027 template<class CookieStoreTestTraits> | 1029 template <class CookieStoreTestTraits> |
1028 class MultiThreadedCookieStoreTest : | 1030 class MultiThreadedCookieStoreTest |
1029 public CookieStoreTest<CookieStoreTestTraits> { | 1031 : public CookieStoreTest<CookieStoreTestTraits> { |
1030 public: | 1032 public: |
1031 MultiThreadedCookieStoreTest() : other_thread_("CMTthread") {} | 1033 MultiThreadedCookieStoreTest() : other_thread_("CMTthread") {} |
1032 | 1034 |
1033 // Helper methods for calling the asynchronous CookieStore methods | 1035 // Helper methods for calling the asynchronous CookieStore methods |
1034 // from a different thread. | 1036 // from a different thread. |
1035 | 1037 |
1036 void GetCookiesTask(CookieStore* cs, | 1038 void GetCookiesTask(CookieStore* cs, |
1037 const GURL& url, | 1039 const GURL& url, |
1038 StringResultCookieCallback* callback) { | 1040 StringResultCookieCallback* callback) { |
1039 CookieOptions options; | 1041 CookieOptions options; |
1040 if (!CookieStoreTestTraits::supports_http_only) | 1042 if (!CookieStoreTestTraits::supports_http_only) |
1041 options.set_include_httponly(); | 1043 options.set_include_httponly(); |
1042 cs->GetCookiesWithOptionsAsync( | 1044 cs->GetCookiesWithOptionsAsync(url, |
1043 url, options, | 1045 options, |
1044 base::Bind(&StringResultCookieCallback::Run, | 1046 base::Bind(&StringResultCookieCallback::Run, |
1045 base::Unretained(callback))); | 1047 base::Unretained(callback))); |
1046 } | 1048 } |
1047 | 1049 |
1048 void GetCookiesWithOptionsTask(CookieStore* cs, | 1050 void GetCookiesWithOptionsTask(CookieStore* cs, |
1049 const GURL& url, | 1051 const GURL& url, |
1050 const CookieOptions& options, | 1052 const CookieOptions& options, |
1051 StringResultCookieCallback* callback) { | 1053 StringResultCookieCallback* callback) { |
1052 cs->GetCookiesWithOptionsAsync( | 1054 cs->GetCookiesWithOptionsAsync(url, |
1053 url, options, | 1055 options, |
1054 base::Bind(&StringResultCookieCallback::Run, | 1056 base::Bind(&StringResultCookieCallback::Run, |
1055 base::Unretained(callback))); | 1057 base::Unretained(callback))); |
1056 } | 1058 } |
1057 | 1059 |
1058 void SetCookieWithOptionsTask(CookieStore* cs, | 1060 void SetCookieWithOptionsTask(CookieStore* cs, |
1059 const GURL& url, | 1061 const GURL& url, |
1060 const std::string& cookie_line, | 1062 const std::string& cookie_line, |
1061 const CookieOptions& options, | 1063 const CookieOptions& options, |
1062 ResultSavingCookieCallback<bool>* callback) { | 1064 ResultSavingCookieCallback<bool>* callback) { |
1063 cs->SetCookieWithOptionsAsync( | 1065 cs->SetCookieWithOptionsAsync( |
1064 url, cookie_line, options, | 1066 url, |
1065 base::Bind( | 1067 cookie_line, |
1066 &ResultSavingCookieCallback<bool>::Run, | 1068 options, |
1067 base::Unretained(callback))); | 1069 base::Bind(&ResultSavingCookieCallback<bool>::Run, |
| 1070 base::Unretained(callback))); |
1068 } | 1071 } |
1069 | 1072 |
1070 void DeleteCookieTask(CookieStore* cs, | 1073 void DeleteCookieTask(CookieStore* cs, |
1071 const GURL& url, | 1074 const GURL& url, |
1072 const std::string& cookie_name, | 1075 const std::string& cookie_name, |
1073 NoResultCookieCallback* callback) { | 1076 NoResultCookieCallback* callback) { |
1074 cs->DeleteCookieAsync( | 1077 cs->DeleteCookieAsync( |
1075 url, cookie_name, | 1078 url, |
| 1079 cookie_name, |
1076 base::Bind(&NoResultCookieCallback::Run, base::Unretained(callback))); | 1080 base::Bind(&NoResultCookieCallback::Run, base::Unretained(callback))); |
1077 } | 1081 } |
1078 | 1082 |
1079 void DeleteSessionCookiesTask(CookieStore* cs, | 1083 void DeleteSessionCookiesTask(CookieStore* cs, |
1080 ResultSavingCookieCallback<int>* callback) { | 1084 ResultSavingCookieCallback<int>* callback) { |
1081 cs->DeleteSessionCookiesAsync( | 1085 cs->DeleteSessionCookiesAsync(base::Bind( |
1082 base::Bind( | 1086 &ResultSavingCookieCallback<int>::Run, base::Unretained(callback))); |
1083 &ResultSavingCookieCallback<int>::Run, | |
1084 base::Unretained(callback))); | |
1085 } | 1087 } |
1086 | 1088 |
1087 protected: | 1089 protected: |
1088 void RunOnOtherThread(const base::Closure& task) { | 1090 void RunOnOtherThread(const base::Closure& task) { |
1089 other_thread_.Start(); | 1091 other_thread_.Start(); |
1090 other_thread_.message_loop()->PostTask(FROM_HERE, task); | 1092 other_thread_.message_loop()->PostTask(FROM_HERE, task); |
1091 CookieStoreTest<CookieStoreTestTraits>::RunFor(kTimeout); | 1093 CookieStoreTest<CookieStoreTestTraits>::RunFor(kTimeout); |
1092 other_thread_.Stop(); | 1094 other_thread_.Stop(); |
1093 } | 1095 } |
1094 | 1096 |
1095 Thread other_thread_; | 1097 Thread other_thread_; |
1096 }; | 1098 }; |
1097 | 1099 |
1098 TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest); | 1100 TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest); |
1099 | 1101 |
1100 // TODO(ycxiao): Eventually, we will need to create a separate thread, create | 1102 // TODO(ycxiao): Eventually, we will need to create a separate thread, create |
1101 // the cookie store on that thread (or at least its store, i.e., the DB | 1103 // the cookie store on that thread (or at least its store, i.e., the DB |
1102 // thread). | 1104 // thread). |
1103 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookies) { | 1105 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookies) { |
1104 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 1106 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
1105 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); | 1107 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
1106 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); | 1108 this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
1107 StringResultCookieCallback callback(&this->other_thread_); | 1109 StringResultCookieCallback callback(&this->other_thread_); |
1108 base::Closure task = base::Bind( | 1110 base::Closure task = |
1109 &net::MultiThreadedCookieStoreTest<TypeParam>::GetCookiesTask, | 1111 base::Bind(&net::MultiThreadedCookieStoreTest<TypeParam>::GetCookiesTask, |
1110 base::Unretained(this), | 1112 base::Unretained(this), |
1111 cs, this->url_google_, &callback); | 1113 cs, |
| 1114 this->url_google_, |
| 1115 &callback); |
1112 this->RunOnOtherThread(task); | 1116 this->RunOnOtherThread(task); |
1113 EXPECT_TRUE(callback.did_run()); | 1117 EXPECT_TRUE(callback.did_run()); |
1114 EXPECT_EQ("A=B", callback.result()); | 1118 EXPECT_EQ("A=B", callback.result()); |
1115 } | 1119 } |
1116 | 1120 |
1117 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookiesWithOptions) { | 1121 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookiesWithOptions) { |
1118 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 1122 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
1119 CookieOptions options; | 1123 CookieOptions options; |
1120 if (!TypeParam::supports_http_only) | 1124 if (!TypeParam::supports_http_only) |
1121 options.set_include_httponly(); | 1125 options.set_include_httponly(); |
1122 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); | 1126 EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
1123 this->MatchCookieLines( | 1127 this->MatchCookieLines( |
1124 "A=B", this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); | 1128 "A=B", this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); |
1125 StringResultCookieCallback callback(&this->other_thread_); | 1129 StringResultCookieCallback callback(&this->other_thread_); |
1126 base::Closure task = base::Bind( | 1130 base::Closure task = base::Bind( |
1127 &net::MultiThreadedCookieStoreTest<TypeParam>::GetCookiesWithOptionsTask, | 1131 &net::MultiThreadedCookieStoreTest<TypeParam>::GetCookiesWithOptionsTask, |
1128 base::Unretained(this), | 1132 base::Unretained(this), |
1129 cs, this->url_google_, options, &callback); | 1133 cs, |
| 1134 this->url_google_, |
| 1135 options, |
| 1136 &callback); |
1130 this->RunOnOtherThread(task); | 1137 this->RunOnOtherThread(task); |
1131 EXPECT_TRUE(callback.did_run()); | 1138 EXPECT_TRUE(callback.did_run()); |
1132 EXPECT_EQ("A=B", callback.result()); | 1139 EXPECT_EQ("A=B", callback.result()); |
1133 } | 1140 } |
1134 | 1141 |
1135 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckSetCookieWithOptions) { | 1142 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckSetCookieWithOptions) { |
1136 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 1143 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
1137 CookieOptions options; | 1144 CookieOptions options; |
1138 if (!TypeParam::supports_http_only) | 1145 if (!TypeParam::supports_http_only) |
1139 options.set_include_httponly(); | 1146 options.set_include_httponly(); |
1140 EXPECT_TRUE( | 1147 EXPECT_TRUE( |
1141 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); | 1148 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
1142 ResultSavingCookieCallback<bool> callback(&this->other_thread_); | 1149 ResultSavingCookieCallback<bool> callback(&this->other_thread_); |
1143 base::Closure task = base::Bind( | 1150 base::Closure task = base::Bind( |
1144 &net::MultiThreadedCookieStoreTest<TypeParam>::SetCookieWithOptionsTask, | 1151 &net::MultiThreadedCookieStoreTest<TypeParam>::SetCookieWithOptionsTask, |
1145 base::Unretained(this), | 1152 base::Unretained(this), |
1146 cs, this->url_google_, "A=B", options, &callback); | 1153 cs, |
| 1154 this->url_google_, |
| 1155 "A=B", |
| 1156 options, |
| 1157 &callback); |
1147 this->RunOnOtherThread(task); | 1158 this->RunOnOtherThread(task); |
1148 EXPECT_TRUE(callback.did_run()); | 1159 EXPECT_TRUE(callback.did_run()); |
1149 EXPECT_TRUE(callback.result()); | 1160 EXPECT_TRUE(callback.result()); |
1150 } | 1161 } |
1151 | 1162 |
1152 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteCookie) { | 1163 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteCookie) { |
1153 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 1164 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
1154 CookieOptions options; | 1165 CookieOptions options; |
1155 if (!TypeParam::supports_http_only) | 1166 if (!TypeParam::supports_http_only) |
1156 options.set_include_httponly(); | 1167 options.set_include_httponly(); |
1157 EXPECT_TRUE( | 1168 EXPECT_TRUE( |
1158 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); | 1169 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
1159 this->DeleteCookie(cs.get(), this->url_google_, "A"); | 1170 this->DeleteCookie(cs.get(), this->url_google_, "A"); |
1160 EXPECT_TRUE( | 1171 EXPECT_TRUE( |
1161 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); | 1172 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
1162 NoResultCookieCallback callback(&this->other_thread_); | 1173 NoResultCookieCallback callback(&this->other_thread_); |
1163 base::Closure task = base::Bind( | 1174 base::Closure task = base::Bind( |
1164 &net::MultiThreadedCookieStoreTest<TypeParam>::DeleteCookieTask, | 1175 &net::MultiThreadedCookieStoreTest<TypeParam>::DeleteCookieTask, |
1165 base::Unretained(this), | 1176 base::Unretained(this), |
1166 cs, this->url_google_, "A", &callback); | 1177 cs, |
| 1178 this->url_google_, |
| 1179 "A", |
| 1180 &callback); |
1167 this->RunOnOtherThread(task); | 1181 this->RunOnOtherThread(task); |
1168 EXPECT_TRUE(callback.did_run()); | 1182 EXPECT_TRUE(callback.did_run()); |
1169 } | 1183 } |
1170 | 1184 |
1171 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteSessionCookies) { | 1185 TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteSessionCookies) { |
1172 scoped_refptr<CookieStore> cs(this->GetCookieStore()); | 1186 scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
1173 CookieOptions options; | 1187 CookieOptions options; |
1174 if (!TypeParam::supports_http_only) | 1188 if (!TypeParam::supports_http_only) |
1175 options.set_include_httponly(); | 1189 options.set_include_httponly(); |
1176 EXPECT_TRUE( | 1190 EXPECT_TRUE( |
1177 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); | 1191 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
1178 EXPECT_TRUE( | 1192 EXPECT_TRUE( |
1179 this->SetCookieWithOptions(cs.get(), | 1193 this->SetCookieWithOptions(cs.get(), |
1180 this->url_google_, | 1194 this->url_google_, |
1181 "B=C; expires=Mon, 18-Apr-22 22:50:13 GMT", | 1195 "B=C; expires=Mon, 18-Apr-22 22:50:13 GMT", |
1182 options)); | 1196 options)); |
1183 EXPECT_EQ(1, this->DeleteSessionCookies(cs.get())); | 1197 EXPECT_EQ(1, this->DeleteSessionCookies(cs.get())); |
1184 EXPECT_EQ(0, this->DeleteSessionCookies(cs.get())); | 1198 EXPECT_EQ(0, this->DeleteSessionCookies(cs.get())); |
1185 EXPECT_TRUE( | 1199 EXPECT_TRUE( |
1186 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); | 1200 this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
1187 ResultSavingCookieCallback<int> callback(&this->other_thread_); | 1201 ResultSavingCookieCallback<int> callback(&this->other_thread_); |
1188 base::Closure task = base::Bind( | 1202 base::Closure task = base::Bind( |
1189 &net::MultiThreadedCookieStoreTest<TypeParam>::DeleteSessionCookiesTask, | 1203 &net::MultiThreadedCookieStoreTest<TypeParam>::DeleteSessionCookiesTask, |
1190 base::Unretained(this), | 1204 base::Unretained(this), |
1191 cs, &callback); | 1205 cs, |
| 1206 &callback); |
1192 this->RunOnOtherThread(task); | 1207 this->RunOnOtherThread(task); |
1193 EXPECT_TRUE(callback.did_run()); | 1208 EXPECT_TRUE(callback.did_run()); |
1194 EXPECT_EQ(1, callback.result()); | 1209 EXPECT_EQ(1, callback.result()); |
1195 } | 1210 } |
1196 | 1211 |
1197 REGISTER_TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest, | 1212 REGISTER_TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest, |
1198 ThreadCheckGetCookies, | 1213 ThreadCheckGetCookies, |
1199 ThreadCheckGetCookiesWithOptions, | 1214 ThreadCheckGetCookiesWithOptions, |
1200 ThreadCheckSetCookieWithOptions, | 1215 ThreadCheckSetCookieWithOptions, |
1201 ThreadCheckDeleteCookie, | 1216 ThreadCheckDeleteCookie, |
1202 ThreadCheckDeleteSessionCookies); | 1217 ThreadCheckDeleteSessionCookies); |
1203 | 1218 |
1204 } // namespace net | 1219 } // namespace net |
1205 | 1220 |
1206 #endif // NET_COOKIES_COOKIE_STORE_UNITTEST_H_ | 1221 #endif // NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
OLD | NEW |