| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <memory> | 6 #include <memory> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 } | 32 } |
| 33 | 33 |
| 34 class CookieMonsterTest : public testing::Test { | 34 class CookieMonsterTest : public testing::Test { |
| 35 public: | 35 public: |
| 36 CookieMonsterTest() : message_loop_(new base::MessageLoopForIO()) {} | 36 CookieMonsterTest() : message_loop_(new base::MessageLoopForIO()) {} |
| 37 | 37 |
| 38 private: | 38 private: |
| 39 std::unique_ptr<base::MessageLoop> message_loop_; | 39 std::unique_ptr<base::MessageLoop> message_loop_; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 class BaseCallback { | 42 class CookieTestCallback { |
| 43 public: | 43 public: |
| 44 BaseCallback() : has_run_(false) {} | 44 CookieTestCallback() : has_run_(false) {} |
| 45 | 45 |
| 46 protected: | 46 protected: |
| 47 void WaitForCallback() { | 47 void WaitForCallback() { |
| 48 // Note that the performance tests currently all operate on a loaded cookie | 48 // Note that the performance tests currently all operate on a loaded cookie |
| 49 // store (or, more precisely, one that has no backing persistent store). | 49 // store (or, more precisely, one that has no backing persistent store). |
| 50 // Therefore, callbacks will actually always complete synchronously. If the | 50 // Therefore, callbacks will actually always complete synchronously. If the |
| 51 // tests get more advanced we need to add other means of signaling | 51 // tests get more advanced we need to add other means of signaling |
| 52 // completion. | 52 // completion. |
| 53 base::RunLoop().RunUntilIdle(); | 53 base::RunLoop().RunUntilIdle(); |
| 54 EXPECT_TRUE(has_run_); | 54 EXPECT_TRUE(has_run_); |
| 55 has_run_ = false; | 55 has_run_ = false; |
| 56 } | 56 } |
| 57 | 57 |
| 58 void Run() { has_run_ = true; } | 58 void Run() { has_run_ = true; } |
| 59 | 59 |
| 60 bool has_run_; | 60 bool has_run_; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 class SetCookieCallback : public BaseCallback { | 63 class SetCookieCallback : public CookieTestCallback { |
| 64 public: | 64 public: |
| 65 void SetCookie(CookieMonster* cm, | 65 void SetCookie(CookieMonster* cm, |
| 66 const GURL& gurl, | 66 const GURL& gurl, |
| 67 const std::string& cookie) { | 67 const std::string& cookie) { |
| 68 cm->SetCookieWithOptionsAsync( | 68 cm->SetCookieWithOptionsAsync( |
| 69 gurl, cookie, options_, | 69 gurl, cookie, options_, |
| 70 base::Bind(&SetCookieCallback::Run, base::Unretained(this))); | 70 base::Bind(&SetCookieCallback::Run, base::Unretained(this))); |
| 71 WaitForCallback(); | 71 WaitForCallback(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 private: | 74 private: |
| 75 void Run(bool success) { | 75 void Run(bool success) { |
| 76 EXPECT_TRUE(success); | 76 EXPECT_TRUE(success); |
| 77 BaseCallback::Run(); | 77 CookieTestCallback::Run(); |
| 78 } | 78 } |
| 79 CookieOptions options_; | 79 CookieOptions options_; |
| 80 }; | 80 }; |
| 81 | 81 |
| 82 class GetCookiesCallback : public BaseCallback { | 82 class GetCookiesCallback : public CookieTestCallback { |
| 83 public: | 83 public: |
| 84 const std::string& GetCookies(CookieMonster* cm, const GURL& gurl) { | 84 const std::string& GetCookies(CookieMonster* cm, const GURL& gurl) { |
| 85 cm->GetCookiesWithOptionsAsync( | 85 cm->GetCookiesWithOptionsAsync( |
| 86 gurl, options_, | 86 gurl, options_, |
| 87 base::Bind(&GetCookiesCallback::Run, base::Unretained(this))); | 87 base::Bind(&GetCookiesCallback::Run, base::Unretained(this))); |
| 88 WaitForCallback(); | 88 WaitForCallback(); |
| 89 return cookies_; | 89 return cookies_; |
| 90 } | 90 } |
| 91 | 91 |
| 92 private: | 92 private: |
| 93 void Run(const std::string& cookies) { | 93 void Run(const std::string& cookies) { |
| 94 cookies_ = cookies; | 94 cookies_ = cookies; |
| 95 BaseCallback::Run(); | 95 CookieTestCallback::Run(); |
| 96 } | 96 } |
| 97 std::string cookies_; | 97 std::string cookies_; |
| 98 CookieOptions options_; | 98 CookieOptions options_; |
| 99 }; | 99 }; |
| 100 | 100 |
| 101 class GetAllCookiesCallback : public CookieTestCallback { |
| 102 public: |
| 103 CookieList GetAllCookies(CookieMonster* cm) { |
| 104 cm->GetAllCookiesAsync( |
| 105 base::Bind(&GetAllCookiesCallback::Run, base::Unretained(this))); |
| 106 WaitForCallback(); |
| 107 return cookies_; |
| 108 } |
| 109 |
| 110 private: |
| 111 void Run(const CookieList& cookies) { |
| 112 cookies_ = cookies; |
| 113 CookieTestCallback::Run(); |
| 114 } |
| 115 CookieList cookies_; |
| 116 }; |
| 117 |
| 101 } // namespace | 118 } // namespace |
| 102 | 119 |
| 103 TEST(ParsedCookieTest, TestParseCookies) { | 120 TEST(ParsedCookieTest, TestParseCookies) { |
| 104 std::string cookie(kCookieLine); | 121 std::string cookie(kCookieLine); |
| 105 base::PerfTimeLogger timer("Parsed_cookie_parse_cookies"); | 122 base::PerfTimeLogger timer("Parsed_cookie_parse_cookies"); |
| 106 for (int i = 0; i < kNumCookies; ++i) { | 123 for (int i = 0; i < kNumCookies; ++i) { |
| 107 ParsedCookie pc(cookie); | 124 ParsedCookie pc(cookie); |
| 108 EXPECT_TRUE(pc.IsValid()); | 125 EXPECT_TRUE(pc.IsValid()); |
| 109 } | 126 } |
| 110 timer.Done(); | 127 timer.Done(); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 } | 237 } |
| 221 | 238 |
| 222 EXPECT_EQ(31u, domain_list.size()); | 239 EXPECT_EQ(31u, domain_list.size()); |
| 223 for (std::vector<std::string>::const_iterator it = domain_list.begin(); | 240 for (std::vector<std::string>::const_iterator it = domain_list.begin(); |
| 224 it != domain_list.end(); it++) { | 241 it != domain_list.end(); it++) { |
| 225 GURL gurl("https://" + *it + "/"); | 242 GURL gurl("https://" + *it + "/"); |
| 226 const std::string cookie = | 243 const std::string cookie = |
| 227 base::StringPrintf(domain_cookie_format_tree, it->c_str()); | 244 base::StringPrintf(domain_cookie_format_tree, it->c_str()); |
| 228 setCookieCallback.SetCookie(cm.get(), gurl, cookie); | 245 setCookieCallback.SetCookie(cm.get(), gurl, cookie); |
| 229 } | 246 } |
| 230 EXPECT_EQ(31u, cm->GetAllCookies().size()); | 247 |
| 248 GetAllCookiesCallback getAllCookiesCallback; |
| 249 EXPECT_EQ(31u, getAllCookiesCallback.GetAllCookies(cm.get()).size()); |
| 231 | 250 |
| 232 GURL probe_gurl("https://b.a.b.a.top.com/"); | 251 GURL probe_gurl("https://b.a.b.a.top.com/"); |
| 233 std::string cookie_line = getCookiesCallback.GetCookies(cm.get(), probe_gurl); | 252 std::string cookie_line = getCookiesCallback.GetCookies(cm.get(), probe_gurl); |
| 234 EXPECT_EQ(5, CountInString(cookie_line, '=')) | 253 EXPECT_EQ(5, CountInString(cookie_line, '=')) |
| 235 << "Cookie line: " << cookie_line; | 254 << "Cookie line: " << cookie_line; |
| 236 base::PerfTimeLogger timer("Cookie_monster_query_domain_tree"); | 255 base::PerfTimeLogger timer("Cookie_monster_query_domain_tree"); |
| 237 for (int i = 0; i < kNumCookies; i++) { | 256 for (int i = 0; i < kNumCookies; i++) { |
| 238 getCookiesCallback.GetCookies(cm.get(), probe_gurl); | 257 getCookiesCallback.GetCookies(cm.get(), probe_gurl); |
| 239 } | 258 } |
| 240 timer.Done(); | 259 timer.Done(); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line); | 401 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line); |
| 383 | 402 |
| 384 base::PerfTimeLogger timer((std::string("GC_") + test_case.name).c_str()); | 403 base::PerfTimeLogger timer((std::string("GC_") + test_case.name).c_str()); |
| 385 for (int i = 0; i < kNumCookies; i++) | 404 for (int i = 0; i < kNumCookies; i++) |
| 386 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line); | 405 setCookieCallback.SetCookie(cm.get(), gurl, cookie_line); |
| 387 timer.Done(); | 406 timer.Done(); |
| 388 } | 407 } |
| 389 } | 408 } |
| 390 | 409 |
| 391 } // namespace net | 410 } // namespace net |
| OLD | NEW |