| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "ios/net/cookies/cookie_store_ios.h" | 5 #include "ios/net/cookies/cookie_store_ios.h" |
| 6 | 6 |
| 7 #import <Foundation/Foundation.h> | 7 #import <Foundation/Foundation.h> |
| 8 | 8 |
| 9 #include <memory> |
| 10 |
| 9 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 12 #include "base/memory/ptr_util.h" |
| 10 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 11 #include "base/memory/scoped_ptr.h" | |
| 12 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 13 #include "base/strings/sys_string_conversions.h" | 15 #include "base/strings/sys_string_conversions.h" |
| 14 #import "net/base/mac/url_conversions.h" | 16 #import "net/base/mac/url_conversions.h" |
| 15 #include "net/cookies/cookie_store_unittest.h" | 17 #include "net/cookies/cookie_store_unittest.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 19 |
| 18 namespace { | 20 namespace { |
| 19 // Clears the underlying NSHTTPCookieStorage. | 21 // Clears the underlying NSHTTPCookieStorage. |
| 20 void ClearCookies() { | 22 void ClearCookies() { |
| 21 NSHTTPCookieStorage* store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; | 23 NSHTTPCookieStorage* store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; |
| 22 [store setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; | 24 [store setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; |
| 23 NSArray* cookies = [store cookies]; | 25 NSArray* cookies = [store cookies]; |
| 24 for (NSHTTPCookie* cookie in cookies) | 26 for (NSHTTPCookie* cookie in cookies) |
| 25 [store deleteCookie:cookie]; | 27 [store deleteCookie:cookie]; |
| 26 EXPECT_EQ(0u, [[store cookies] count]); | 28 EXPECT_EQ(0u, [[store cookies] count]); |
| 27 } | 29 } |
| 28 } // namespace | 30 } // namespace |
| 29 | 31 |
| 30 namespace net { | 32 namespace net { |
| 31 | 33 |
| 32 struct CookieStoreIOSTestTraits { | 34 struct CookieStoreIOSTestTraits { |
| 33 static scoped_ptr<net::CookieStore> Create() { | 35 static std::unique_ptr<net::CookieStore> Create() { |
| 34 ClearCookies(); | 36 ClearCookies(); |
| 35 scoped_ptr<CookieStoreIOS> store(new CookieStoreIOS(nullptr)); | 37 std::unique_ptr<CookieStoreIOS> store(new CookieStoreIOS(nullptr)); |
| 36 store->synchronization_state_ = CookieStoreIOS::SYNCHRONIZED; | 38 store->synchronization_state_ = CookieStoreIOS::SYNCHRONIZED; |
| 37 return std::move(store); | 39 return std::move(store); |
| 38 } | 40 } |
| 39 | 41 |
| 40 static const bool supports_http_only = false; | 42 static const bool supports_http_only = false; |
| 41 static const bool supports_non_dotted_domains = false; | 43 static const bool supports_non_dotted_domains = false; |
| 42 static const bool preserves_trailing_dots = false; | 44 static const bool preserves_trailing_dots = false; |
| 43 static const bool filters_schemes = false; | 45 static const bool filters_schemes = false; |
| 44 static const bool has_path_prefix_bug = true; | 46 static const bool has_path_prefix_bug = true; |
| 45 static const int creation_time_granularity_in_ms = 1000; | 47 static const int creation_time_granularity_in_ms = 1000; |
| 46 static const bool enforce_strict_secure = false; | 48 static const bool enforce_strict_secure = false; |
| 47 | 49 |
| 48 base::MessageLoop loop_; | 50 base::MessageLoop loop_; |
| 49 }; | 51 }; |
| 50 | 52 |
| 51 struct InactiveCookieStoreIOSTestTraits { | 53 struct InactiveCookieStoreIOSTestTraits { |
| 52 static scoped_ptr<net::CookieStore> Create() { | 54 static std::unique_ptr<net::CookieStore> Create() { |
| 53 return make_scoped_ptr(new CookieStoreIOS(nullptr)); | 55 return base::WrapUnique(new CookieStoreIOS(nullptr)); |
| 54 } | 56 } |
| 55 | 57 |
| 56 static const bool is_cookie_monster = false; | 58 static const bool is_cookie_monster = false; |
| 57 static const bool supports_http_only = false; | 59 static const bool supports_http_only = false; |
| 58 static const bool supports_non_dotted_domains = true; | 60 static const bool supports_non_dotted_domains = true; |
| 59 static const bool preserves_trailing_dots = true; | 61 static const bool preserves_trailing_dots = true; |
| 60 static const bool filters_schemes = false; | 62 static const bool filters_schemes = false; |
| 61 static const bool has_path_prefix_bug = false; | 63 static const bool has_path_prefix_bug = false; |
| 62 static const int creation_time_granularity_in_ms = 0; | 64 static const int creation_time_granularity_in_ms = 0; |
| 63 static const int enforces_prefixes = true; | 65 static const int enforces_prefixes = true; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 void DeleteSessionCookiesAsync(const DeleteCallback& callback) override { | 167 void DeleteSessionCookiesAsync(const DeleteCallback& callback) override { |
| 166 RoundTrip(); | 168 RoundTrip(); |
| 167 store_->DeleteSessionCookiesAsync(callback); | 169 store_->DeleteSessionCookiesAsync(callback); |
| 168 } | 170 } |
| 169 | 171 |
| 170 void FlushStore(const base::Closure& callback) override { | 172 void FlushStore(const base::Closure& callback) override { |
| 171 RoundTrip(); | 173 RoundTrip(); |
| 172 store_->FlushStore(callback); | 174 store_->FlushStore(callback); |
| 173 } | 175 } |
| 174 | 176 |
| 175 scoped_ptr<CookieStore::CookieChangedSubscription> AddCallbackForCookie( | 177 std::unique_ptr<CookieStore::CookieChangedSubscription> AddCallbackForCookie( |
| 176 const GURL& url, | 178 const GURL& url, |
| 177 const std::string& name, | 179 const std::string& name, |
| 178 const CookieChangedCallback& callback) override { | 180 const CookieChangedCallback& callback) override { |
| 179 return scoped_ptr<CookieStore::CookieChangedSubscription>(); | 181 return std::unique_ptr<CookieStore::CookieChangedSubscription>(); |
| 180 } | 182 } |
| 181 | 183 |
| 182 bool IsEphemeral() override { | 184 bool IsEphemeral() override { |
| 183 return store_->IsEphemeral(); | 185 return store_->IsEphemeral(); |
| 184 } | 186 } |
| 185 | 187 |
| 186 private: | 188 private: |
| 187 void RoundTrip() { | 189 void RoundTrip() { |
| 188 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store_.get()); | 190 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store_.get()); |
| 189 // Check that the system store is empty, because it is synchronized with | 191 // Check that the system store is empty, because it is synchronized with |
| 190 // |dummy_store_| which is empty. | 192 // |dummy_store_| which is empty. |
| 191 NSHTTPCookieStorage* store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; | 193 NSHTTPCookieStorage* store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; |
| 192 EXPECT_EQ(0u, [[store cookies] count]); | 194 EXPECT_EQ(0u, [[store cookies] count]); |
| 193 CookieStoreIOS::SwitchSynchronizedStore(dummy_store_.get(), store_.get()); | 195 CookieStoreIOS::SwitchSynchronizedStore(dummy_store_.get(), store_.get()); |
| 194 } | 196 } |
| 195 | 197 |
| 196 scoped_ptr<CookieStoreIOS> store_; | 198 std::unique_ptr<CookieStoreIOS> store_; |
| 197 // |dummy_store_| is not directly used, but is needed to make |store_| | 199 // |dummy_store_| is not directly used, but is needed to make |store_| |
| 198 // inactive. | 200 // inactive. |
| 199 scoped_ptr<CookieStoreIOS> dummy_store_; | 201 std::unique_ptr<CookieStoreIOS> dummy_store_; |
| 200 }; | 202 }; |
| 201 | 203 |
| 202 struct RoundTripTestCookieStoreTraits { | 204 struct RoundTripTestCookieStoreTraits { |
| 203 static scoped_ptr<net::CookieStore> Create() { | 205 static std::unique_ptr<net::CookieStore> Create() { |
| 204 ClearCookies(); | 206 ClearCookies(); |
| 205 return make_scoped_ptr(new RoundTripTestCookieStore()); | 207 return base::WrapUnique(new RoundTripTestCookieStore()); |
| 206 } | 208 } |
| 207 | 209 |
| 208 static const bool is_cookie_monster = false; | 210 static const bool is_cookie_monster = false; |
| 209 static const bool supports_http_only = false; | 211 static const bool supports_http_only = false; |
| 210 static const bool supports_non_dotted_domains = false; | 212 static const bool supports_non_dotted_domains = false; |
| 211 static const bool preserves_trailing_dots = false; | 213 static const bool preserves_trailing_dots = false; |
| 212 static const bool filters_schemes = false; | 214 static const bool filters_schemes = false; |
| 213 static const bool has_path_prefix_bug = true; | 215 static const bool has_path_prefix_bug = true; |
| 214 static const int creation_time_granularity_in_ms = 1000; | 216 static const int creation_time_granularity_in_ms = 1000; |
| 215 static const int enforces_prefixes = true; | 217 static const int enforces_prefixes = true; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 243 public: | 245 public: |
| 244 TestPersistentCookieStore() | 246 TestPersistentCookieStore() |
| 245 : kTestCookieURL("http://foo.google.com/bar"), flushed_(false) {} | 247 : kTestCookieURL("http://foo.google.com/bar"), flushed_(false) {} |
| 246 | 248 |
| 247 // Runs the completion callback with a "a=b" cookie. | 249 // Runs the completion callback with a "a=b" cookie. |
| 248 void RunLoadedCallback() { | 250 void RunLoadedCallback() { |
| 249 std::vector<net::CanonicalCookie*> cookies; | 251 std::vector<net::CanonicalCookie*> cookies; |
| 250 net::CookieOptions options; | 252 net::CookieOptions options; |
| 251 options.set_include_httponly(); | 253 options.set_include_httponly(); |
| 252 | 254 |
| 253 scoped_ptr<net::CanonicalCookie> cookie(net::CanonicalCookie::Create( | 255 std::unique_ptr<net::CanonicalCookie> cookie(net::CanonicalCookie::Create( |
| 254 kTestCookieURL, "a=b", base::Time::Now(), options)); | 256 kTestCookieURL, "a=b", base::Time::Now(), options)); |
| 255 cookies.push_back(cookie.release()); | 257 cookies.push_back(cookie.release()); |
| 256 | 258 |
| 257 // Some canonical cookies cannot be converted into System cookies, for | 259 // Some canonical cookies cannot be converted into System cookies, for |
| 258 // example if value is not valid utf8. Such cookies are ignored. | 260 // example if value is not valid utf8. Such cookies are ignored. |
| 259 net::CanonicalCookie* bad_canonical_cookie = new net::CanonicalCookie( | 261 net::CanonicalCookie* bad_canonical_cookie = new net::CanonicalCookie( |
| 260 kTestCookieURL, "name", "\x81r\xe4\xbd\xa0\xe5\xa5\xbd", "domain", | 262 kTestCookieURL, "name", "\x81r\xe4\xbd\xa0\xe5\xa5\xbd", "domain", |
| 261 "path/", | 263 "path/", |
| 262 base::Time(), // creation | 264 base::Time(), // creation |
| 263 base::Time(), // expires | 265 base::Time(), // expires |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 } | 428 } |
| 427 | 429 |
| 428 protected: | 430 protected: |
| 429 const GURL kTestCookieURL; | 431 const GURL kTestCookieURL; |
| 430 const GURL kTestCookieURL2; | 432 const GURL kTestCookieURL2; |
| 431 const GURL kTestCookieURL3; | 433 const GURL kTestCookieURL3; |
| 432 const GURL kTestCookieURL4; | 434 const GURL kTestCookieURL4; |
| 433 | 435 |
| 434 base::MessageLoop loop_; | 436 base::MessageLoop loop_; |
| 435 scoped_refptr<TestPersistentCookieStore> backend_; | 437 scoped_refptr<TestPersistentCookieStore> backend_; |
| 436 scoped_ptr<net::CookieStoreIOS> store_; | 438 std::unique_ptr<net::CookieStoreIOS> store_; |
| 437 scoped_ptr<net::CookieStore::CookieChangedSubscription> | 439 std::unique_ptr<net::CookieStore::CookieChangedSubscription> |
| 438 cookie_changed_callback_; | 440 cookie_changed_callback_; |
| 439 std::vector<net::CanonicalCookie> cookies_changed_; | 441 std::vector<net::CanonicalCookie> cookies_changed_; |
| 440 std::vector<bool> cookies_removed_; | 442 std::vector<bool> cookies_removed_; |
| 441 }; | 443 }; |
| 442 | 444 |
| 443 } // namespace | 445 } // namespace |
| 444 | 446 |
| 445 namespace net { | 447 namespace net { |
| 446 | 448 |
| 447 TEST_F(CookieStoreIOSWithBackend, SetCookieCallsHookWhenNotSynchronized) { | 449 TEST_F(CookieStoreIOSWithBackend, SetCookieCallsHookWhenNotSynchronized) { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 EXPECT_EQ(1U, cookies_changed_.size()); | 528 EXPECT_EQ(1U, cookies_changed_.size()); |
| 527 SetCookie("abc=def"); | 529 SetCookie("abc=def"); |
| 528 EXPECT_EQ(1U, cookies_changed_.size()); | 530 EXPECT_EQ(1U, cookies_changed_.size()); |
| 529 store_->UnSynchronize(); | 531 store_->UnSynchronize(); |
| 530 } | 532 } |
| 531 | 533 |
| 532 TEST(CookieStoreIOS, GetAllCookiesForURLAsync) { | 534 TEST(CookieStoreIOS, GetAllCookiesForURLAsync) { |
| 533 base::MessageLoop loop; | 535 base::MessageLoop loop; |
| 534 const GURL kTestCookieURL("http://foo.google.com/bar"); | 536 const GURL kTestCookieURL("http://foo.google.com/bar"); |
| 535 ClearCookies(); | 537 ClearCookies(); |
| 536 scoped_ptr<CookieStoreIOS> cookie_store(new CookieStoreIOS(nullptr)); | 538 std::unique_ptr<CookieStoreIOS> cookie_store(new CookieStoreIOS(nullptr)); |
| 537 CookieStoreIOS::SwitchSynchronizedStore(nullptr, cookie_store.get()); | 539 CookieStoreIOS::SwitchSynchronizedStore(nullptr, cookie_store.get()); |
| 538 // Add a cookie. | 540 // Add a cookie. |
| 539 net::CookieOptions options; | 541 net::CookieOptions options; |
| 540 options.set_include_httponly(); | 542 options.set_include_httponly(); |
| 541 cookie_store->SetCookieWithOptionsAsync( | 543 cookie_store->SetCookieWithOptionsAsync( |
| 542 kTestCookieURL, "a=b", options, net::CookieStore::SetCookiesCallback()); | 544 kTestCookieURL, "a=b", options, net::CookieStore::SetCookiesCallback()); |
| 543 // Disallow cookies. | 545 // Disallow cookies. |
| 544 CookieStoreIOS::SetCookiePolicy(CookieStoreIOS::BLOCK); | 546 CookieStoreIOS::SetCookiePolicy(CookieStoreIOS::BLOCK); |
| 545 // No cookie in the system store. | 547 // No cookie in the system store. |
| 546 NSHTTPCookieStorage* system_store = | 548 NSHTTPCookieStorage* system_store = |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 backend_->RunLoadedCallback(); | 606 backend_->RunLoadedCallback(); |
| 605 EXPECT_TRUE(callback.did_run()); | 607 EXPECT_TRUE(callback.did_run()); |
| 606 EXPECT_EQ("a=b", callback.cookie_line()); | 608 EXPECT_EQ("a=b", callback.cookie_line()); |
| 607 store_->UnSynchronize(); | 609 store_->UnSynchronize(); |
| 608 } | 610 } |
| 609 | 611 |
| 610 // Tests that Synchronization can be "aborted" (i.e. the cookie store is | 612 // Tests that Synchronization can be "aborted" (i.e. the cookie store is |
| 611 // unsynchronized while synchronization is in progress). | 613 // unsynchronized while synchronization is in progress). |
| 612 TEST_F(CookieStoreIOSWithBackend, SyncThenUnsync) { | 614 TEST_F(CookieStoreIOSWithBackend, SyncThenUnsync) { |
| 613 ClearCookies(); | 615 ClearCookies(); |
| 614 scoped_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr)); | 616 std::unique_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr)); |
| 615 // Switch back and forth before synchronization can complete. | 617 // Switch back and forth before synchronization can complete. |
| 616 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 618 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 617 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get()); | 619 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get()); |
| 618 backend_->RunLoadedCallback(); | 620 backend_->RunLoadedCallback(); |
| 619 // No cookie leak in the system store. | 621 // No cookie leak in the system store. |
| 620 NSHTTPCookieStorage* store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; | 622 NSHTTPCookieStorage* store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; |
| 621 EXPECT_EQ(0u, [[store cookies] count]); | 623 EXPECT_EQ(0u, [[store cookies] count]); |
| 622 // No cookie lost. | 624 // No cookie lost. |
| 623 GetCookieCallback callback; | 625 GetCookieCallback callback; |
| 624 GetCookies(base::Bind(&GetCookieCallback::Run, base::Unretained(&callback))); | 626 GetCookies(base::Bind(&GetCookieCallback::Run, base::Unretained(&callback))); |
| 625 EXPECT_TRUE(callback.did_run()); | 627 EXPECT_TRUE(callback.did_run()); |
| 626 EXPECT_EQ("a=b", callback.cookie_line()); | 628 EXPECT_EQ("a=b", callback.cookie_line()); |
| 627 dummy_store->UnSynchronize(); | 629 dummy_store->UnSynchronize(); |
| 628 } | 630 } |
| 629 | 631 |
| 630 // Tests that Synchronization can be "aborted" while there are pending tasks | 632 // Tests that Synchronization can be "aborted" while there are pending tasks |
| 631 // (i.e. the cookie store is unsynchronized while synchronization is in progress | 633 // (i.e. the cookie store is unsynchronized while synchronization is in progress |
| 632 // and there are pending tasks). | 634 // and there are pending tasks). |
| 633 TEST_F(CookieStoreIOSWithBackend, SyncThenUnsyncWithPendingTasks) { | 635 TEST_F(CookieStoreIOSWithBackend, SyncThenUnsyncWithPendingTasks) { |
| 634 ClearCookies(); | 636 ClearCookies(); |
| 635 scoped_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr)); | 637 std::unique_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr)); |
| 636 // Start synchornization. | 638 // Start synchornization. |
| 637 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 639 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 638 // Create a pending task while synchronization is in progress. | 640 // Create a pending task while synchronization is in progress. |
| 639 GetCookieCallback callback; | 641 GetCookieCallback callback; |
| 640 GetCookies(base::Bind(&GetCookieCallback::Run, base::Unretained(&callback))); | 642 GetCookies(base::Bind(&GetCookieCallback::Run, base::Unretained(&callback))); |
| 641 // Cancel the synchronization. | 643 // Cancel the synchronization. |
| 642 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get()); | 644 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get()); |
| 643 // Synchronization completes after being cancelled. | 645 // Synchronization completes after being cancelled. |
| 644 backend_->RunLoadedCallback(); | 646 backend_->RunLoadedCallback(); |
| 645 // The task is not lost. | 647 // The task is not lost. |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 } | 725 } |
| 724 | 726 |
| 725 TEST_F(CookieStoreIOSWithBackend, FlushOnUnSynchronize) { | 727 TEST_F(CookieStoreIOSWithBackend, FlushOnUnSynchronize) { |
| 726 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 728 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 727 EXPECT_FALSE(backend_->flushed()); | 729 EXPECT_FALSE(backend_->flushed()); |
| 728 store_->UnSynchronize(); | 730 store_->UnSynchronize(); |
| 729 EXPECT_TRUE(backend_->flushed()); | 731 EXPECT_TRUE(backend_->flushed()); |
| 730 } | 732 } |
| 731 | 733 |
| 732 TEST_F(CookieStoreIOSWithBackend, FlushOnSwitch) { | 734 TEST_F(CookieStoreIOSWithBackend, FlushOnSwitch) { |
| 733 scoped_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr)); | 735 std::unique_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr)); |
| 734 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 736 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 735 EXPECT_FALSE(backend_->flushed()); | 737 EXPECT_FALSE(backend_->flushed()); |
| 736 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get()); | 738 CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get()); |
| 737 EXPECT_TRUE(backend_->flushed()); | 739 EXPECT_TRUE(backend_->flushed()); |
| 738 dummy_store->UnSynchronize(); | 740 dummy_store->UnSynchronize(); |
| 739 } | 741 } |
| 740 | 742 |
| 741 TEST_F(CookieStoreIOSWithBackend, FlushOnCookieChanged) { | 743 TEST_F(CookieStoreIOSWithBackend, FlushOnCookieChanged) { |
| 742 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 744 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 743 store_->set_flush_delay_for_testing(base::TimeDelta()); | 745 store_->set_flush_delay_for_testing(base::TimeDelta()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 EXPECT_EQ(0U, cookies.size()); | 796 EXPECT_EQ(0U, cookies.size()); |
| 795 DeleteSystemCookie(kTestCookieURL, "abc"); | 797 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 796 store_->UnSynchronize(); | 798 store_->UnSynchronize(); |
| 797 } | 799 } |
| 798 | 800 |
| 799 TEST_F(CookieStoreIOSWithBackend, NotifyOnAdd) { | 801 TEST_F(CookieStoreIOSWithBackend, NotifyOnAdd) { |
| 800 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 802 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 801 backend_->RunLoadedCallback(); | 803 backend_->RunLoadedCallback(); |
| 802 std::vector<net::CanonicalCookie> cookies; | 804 std::vector<net::CanonicalCookie> cookies; |
| 803 std::vector<bool> removes; | 805 std::vector<bool> removes; |
| 804 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 806 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 805 store_->AddCallbackForCookie( | 807 store_->AddCallbackForCookie( |
| 806 kTestCookieURL, "abc", | 808 kTestCookieURL, "abc", |
| 807 base::Bind(&RecordCookieChanges, &cookies, &removes)); | 809 base::Bind(&RecordCookieChanges, &cookies, &removes)); |
| 808 EXPECT_EQ(0U, cookies.size()); | 810 EXPECT_EQ(0U, cookies.size()); |
| 809 EXPECT_EQ(0U, removes.size()); | 811 EXPECT_EQ(0U, removes.size()); |
| 810 SetSystemCookie(kTestCookieURL, "abc", "def"); | 812 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 811 EXPECT_EQ(1U, cookies.size()); | 813 EXPECT_EQ(1U, cookies.size()); |
| 812 EXPECT_EQ(1U, removes.size()); | 814 EXPECT_EQ(1U, removes.size()); |
| 813 EXPECT_EQ("abc", cookies[0].Name()); | 815 EXPECT_EQ("abc", cookies[0].Name()); |
| 814 EXPECT_EQ("def", cookies[0].Value()); | 816 EXPECT_EQ("def", cookies[0].Value()); |
| 815 EXPECT_FALSE(removes[0]); | 817 EXPECT_FALSE(removes[0]); |
| 816 | 818 |
| 817 SetSystemCookie(kTestCookieURL, "ghi", "jkl"); | 819 SetSystemCookie(kTestCookieURL, "ghi", "jkl"); |
| 818 EXPECT_EQ(1U, cookies.size()); | 820 EXPECT_EQ(1U, cookies.size()); |
| 819 EXPECT_EQ(1U, removes.size()); | 821 EXPECT_EQ(1U, removes.size()); |
| 820 | 822 |
| 821 DeleteSystemCookie(kTestCookieURL, "abc"); | 823 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 822 DeleteSystemCookie(kTestCookieURL, "ghi"); | 824 DeleteSystemCookie(kTestCookieURL, "ghi"); |
| 823 store_->UnSynchronize(); | 825 store_->UnSynchronize(); |
| 824 } | 826 } |
| 825 | 827 |
| 826 TEST_F(CookieStoreIOSWithBackend, NotifyOnChange) { | 828 TEST_F(CookieStoreIOSWithBackend, NotifyOnChange) { |
| 827 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 829 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 828 backend_->RunLoadedCallback(); | 830 backend_->RunLoadedCallback(); |
| 829 std::vector<net::CanonicalCookie> cookies; | 831 std::vector<net::CanonicalCookie> cookies; |
| 830 std::vector<bool> removes; | 832 std::vector<bool> removes; |
| 831 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 833 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 832 store_->AddCallbackForCookie( | 834 store_->AddCallbackForCookie( |
| 833 kTestCookieURL, "abc", | 835 kTestCookieURL, "abc", |
| 834 base::Bind(&RecordCookieChanges, &cookies, &removes)); | 836 base::Bind(&RecordCookieChanges, &cookies, &removes)); |
| 835 EXPECT_EQ(0U, cookies.size()); | 837 EXPECT_EQ(0U, cookies.size()); |
| 836 SetSystemCookie(kTestCookieURL, "abc", "def"); | 838 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 837 EXPECT_EQ(1U, cookies.size()); | 839 EXPECT_EQ(1U, cookies.size()); |
| 838 SetSystemCookie(kTestCookieURL, "abc", "ghi"); | 840 SetSystemCookie(kTestCookieURL, "abc", "ghi"); |
| 839 EXPECT_EQ(3U, cookies.size()); | 841 EXPECT_EQ(3U, cookies.size()); |
| 840 EXPECT_EQ(3U, removes.size()); | 842 EXPECT_EQ(3U, removes.size()); |
| 841 EXPECT_EQ("abc", cookies[1].Name()); | 843 EXPECT_EQ("abc", cookies[1].Name()); |
| 842 EXPECT_EQ("def", cookies[1].Value()); | 844 EXPECT_EQ("def", cookies[1].Value()); |
| 843 EXPECT_TRUE(removes[1]); | 845 EXPECT_TRUE(removes[1]); |
| 844 EXPECT_EQ("abc", cookies[2].Name()); | 846 EXPECT_EQ("abc", cookies[2].Name()); |
| 845 EXPECT_EQ("ghi", cookies[2].Value()); | 847 EXPECT_EQ("ghi", cookies[2].Value()); |
| 846 EXPECT_FALSE(removes[2]); | 848 EXPECT_FALSE(removes[2]); |
| 847 | 849 |
| 848 DeleteSystemCookie(kTestCookieURL, "abc"); | 850 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 849 store_->UnSynchronize(); | 851 store_->UnSynchronize(); |
| 850 } | 852 } |
| 851 | 853 |
| 852 TEST_F(CookieStoreIOSWithBackend, NotifyOnDelete) { | 854 TEST_F(CookieStoreIOSWithBackend, NotifyOnDelete) { |
| 853 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 855 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 854 backend_->RunLoadedCallback(); | 856 backend_->RunLoadedCallback(); |
| 855 std::vector<net::CanonicalCookie> cookies; | 857 std::vector<net::CanonicalCookie> cookies; |
| 856 std::vector<bool> removes; | 858 std::vector<bool> removes; |
| 857 SetSystemCookie(kTestCookieURL, "abc", "def"); | 859 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 858 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 860 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 859 store_->AddCallbackForCookie( | 861 store_->AddCallbackForCookie( |
| 860 kTestCookieURL, "abc", | 862 kTestCookieURL, "abc", |
| 861 base::Bind(&RecordCookieChanges, &cookies, &removes)); | 863 base::Bind(&RecordCookieChanges, &cookies, &removes)); |
| 862 EXPECT_EQ(0U, cookies.size()); | 864 EXPECT_EQ(0U, cookies.size()); |
| 863 DeleteSystemCookie(kTestCookieURL, "abc"); | 865 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 864 EXPECT_EQ(1U, cookies.size()); | 866 EXPECT_EQ(1U, cookies.size()); |
| 865 EXPECT_EQ(1U, removes.size()); | 867 EXPECT_EQ(1U, removes.size()); |
| 866 EXPECT_TRUE(removes[0]); | 868 EXPECT_TRUE(removes[0]); |
| 867 SetSystemCookie(kTestCookieURL, "abc", "def"); | 869 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 868 EXPECT_EQ(2U, cookies.size()); | 870 EXPECT_EQ(2U, cookies.size()); |
| 869 EXPECT_EQ(2U, removes.size()); | 871 EXPECT_EQ(2U, removes.size()); |
| 870 EXPECT_FALSE(removes[1]); | 872 EXPECT_FALSE(removes[1]); |
| 871 DeleteSystemCookie(kTestCookieURL, "abc"); | 873 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 872 store_->UnSynchronize(); | 874 store_->UnSynchronize(); |
| 873 } | 875 } |
| 874 | 876 |
| 875 TEST_F(CookieStoreIOSWithBackend, NoNotifyOnNoChange) { | 877 TEST_F(CookieStoreIOSWithBackend, NoNotifyOnNoChange) { |
| 876 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 878 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 877 backend_->RunLoadedCallback(); | 879 backend_->RunLoadedCallback(); |
| 878 std::vector<net::CanonicalCookie> cookies; | 880 std::vector<net::CanonicalCookie> cookies; |
| 879 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 881 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 880 store_->AddCallbackForCookie( | 882 store_->AddCallbackForCookie( |
| 881 kTestCookieURL, "abc", | 883 kTestCookieURL, "abc", |
| 882 base::Bind(&RecordCookieChanges, &cookies, nullptr)); | 884 base::Bind(&RecordCookieChanges, &cookies, nullptr)); |
| 883 EXPECT_EQ(0U, cookies.size()); | 885 EXPECT_EQ(0U, cookies.size()); |
| 884 SetSystemCookie(kTestCookieURL, "abc", "def"); | 886 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 885 EXPECT_EQ(1U, cookies.size()); | 887 EXPECT_EQ(1U, cookies.size()); |
| 886 SetSystemCookie(kTestCookieURL, "abc", "def"); | 888 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 887 EXPECT_EQ(1U, cookies.size()); | 889 EXPECT_EQ(1U, cookies.size()); |
| 888 DeleteSystemCookie(kTestCookieURL, "abc"); | 890 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 889 store_->UnSynchronize(); | 891 store_->UnSynchronize(); |
| 890 } | 892 } |
| 891 | 893 |
| 892 TEST_F(CookieStoreIOSWithBackend, MultipleNotifies) { | 894 TEST_F(CookieStoreIOSWithBackend, MultipleNotifies) { |
| 893 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 895 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 894 backend_->RunLoadedCallback(); | 896 backend_->RunLoadedCallback(); |
| 895 std::vector<net::CanonicalCookie> cookies; | 897 std::vector<net::CanonicalCookie> cookies; |
| 896 std::vector<net::CanonicalCookie> cookies2; | 898 std::vector<net::CanonicalCookie> cookies2; |
| 897 std::vector<net::CanonicalCookie> cookies3; | 899 std::vector<net::CanonicalCookie> cookies3; |
| 898 std::vector<net::CanonicalCookie> cookies4; | 900 std::vector<net::CanonicalCookie> cookies4; |
| 899 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 901 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 900 store_->AddCallbackForCookie( | 902 store_->AddCallbackForCookie( |
| 901 kTestCookieURL, "abc", | 903 kTestCookieURL, "abc", |
| 902 base::Bind(&RecordCookieChanges, &cookies, nullptr)); | 904 base::Bind(&RecordCookieChanges, &cookies, nullptr)); |
| 903 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle2 = | 905 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle2 = |
| 904 store_->AddCallbackForCookie( | 906 store_->AddCallbackForCookie( |
| 905 kTestCookieURL2, "abc", | 907 kTestCookieURL2, "abc", |
| 906 base::Bind(&RecordCookieChanges, &cookies2, nullptr)); | 908 base::Bind(&RecordCookieChanges, &cookies2, nullptr)); |
| 907 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle3 = | 909 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle3 = |
| 908 store_->AddCallbackForCookie( | 910 store_->AddCallbackForCookie( |
| 909 kTestCookieURL3, "abc", | 911 kTestCookieURL3, "abc", |
| 910 base::Bind(&RecordCookieChanges, &cookies3, nullptr)); | 912 base::Bind(&RecordCookieChanges, &cookies3, nullptr)); |
| 911 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle4 = | 913 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle4 = |
| 912 store_->AddCallbackForCookie( | 914 store_->AddCallbackForCookie( |
| 913 kTestCookieURL4, "abc", | 915 kTestCookieURL4, "abc", |
| 914 base::Bind(&RecordCookieChanges, &cookies4, nullptr)); | 916 base::Bind(&RecordCookieChanges, &cookies4, nullptr)); |
| 915 SetSystemCookie(kTestCookieURL, "abc", "def"); | 917 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 916 SetSystemCookie(kTestCookieURL2, "abc", "def"); | 918 SetSystemCookie(kTestCookieURL2, "abc", "def"); |
| 917 SetSystemCookie(kTestCookieURL3, "abc", "def"); | 919 SetSystemCookie(kTestCookieURL3, "abc", "def"); |
| 918 SetSystemCookie(kTestCookieURL4, "abc", "def"); | 920 SetSystemCookie(kTestCookieURL4, "abc", "def"); |
| 919 EXPECT_EQ(2U, cookies.size()); | 921 EXPECT_EQ(2U, cookies.size()); |
| 920 EXPECT_EQ(2U, cookies2.size()); | 922 EXPECT_EQ(2U, cookies2.size()); |
| 921 EXPECT_EQ(1U, cookies3.size()); | 923 EXPECT_EQ(1U, cookies3.size()); |
| 922 EXPECT_EQ(1U, cookies4.size()); | 924 EXPECT_EQ(1U, cookies4.size()); |
| 923 DeleteSystemCookie(kTestCookieURL, "abc"); | 925 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 924 DeleteSystemCookie(kTestCookieURL2, "abc"); | 926 DeleteSystemCookie(kTestCookieURL2, "abc"); |
| 925 DeleteSystemCookie(kTestCookieURL3, "abc"); | 927 DeleteSystemCookie(kTestCookieURL3, "abc"); |
| 926 DeleteSystemCookie(kTestCookieURL4, "abc"); | 928 DeleteSystemCookie(kTestCookieURL4, "abc"); |
| 927 store_->UnSynchronize(); | 929 store_->UnSynchronize(); |
| 928 } | 930 } |
| 929 | 931 |
| 930 TEST_F(CookieStoreIOSWithBackend, LessSpecificNestedCookie) { | 932 TEST_F(CookieStoreIOSWithBackend, LessSpecificNestedCookie) { |
| 931 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 933 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 932 backend_->RunLoadedCallback(); | 934 backend_->RunLoadedCallback(); |
| 933 std::vector<net::CanonicalCookie> cookies; | 935 std::vector<net::CanonicalCookie> cookies; |
| 934 SetSystemCookie(kTestCookieURL2, "abc", "def"); | 936 SetSystemCookie(kTestCookieURL2, "abc", "def"); |
| 935 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 937 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 936 store_->AddCallbackForCookie( | 938 store_->AddCallbackForCookie( |
| 937 kTestCookieURL2, "abc", | 939 kTestCookieURL2, "abc", |
| 938 base::Bind(&RecordCookieChanges, &cookies, nullptr)); | 940 base::Bind(&RecordCookieChanges, &cookies, nullptr)); |
| 939 EXPECT_EQ(0U, cookies.size()); | 941 EXPECT_EQ(0U, cookies.size()); |
| 940 SetSystemCookie(kTestCookieURL3, "abc", "ghi"); | 942 SetSystemCookie(kTestCookieURL3, "abc", "ghi"); |
| 941 EXPECT_EQ(1U, cookies.size()); | 943 EXPECT_EQ(1U, cookies.size()); |
| 942 DeleteSystemCookie(kTestCookieURL, "abc"); | 944 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 943 store_->UnSynchronize(); | 945 store_->UnSynchronize(); |
| 944 } | 946 } |
| 945 | 947 |
| 946 TEST_F(CookieStoreIOSWithBackend, MoreSpecificNestedCookie) { | 948 TEST_F(CookieStoreIOSWithBackend, MoreSpecificNestedCookie) { |
| 947 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 949 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 948 backend_->RunLoadedCallback(); | 950 backend_->RunLoadedCallback(); |
| 949 std::vector<net::CanonicalCookie> cookies; | 951 std::vector<net::CanonicalCookie> cookies; |
| 950 SetSystemCookie(kTestCookieURL3, "abc", "def"); | 952 SetSystemCookie(kTestCookieURL3, "abc", "def"); |
| 951 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 953 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 952 store_->AddCallbackForCookie( | 954 store_->AddCallbackForCookie( |
| 953 kTestCookieURL2, "abc", | 955 kTestCookieURL2, "abc", |
| 954 base::Bind(&RecordCookieChanges, &cookies, nullptr)); | 956 base::Bind(&RecordCookieChanges, &cookies, nullptr)); |
| 955 EXPECT_EQ(0U, cookies.size()); | 957 EXPECT_EQ(0U, cookies.size()); |
| 956 SetSystemCookie(kTestCookieURL2, "abc", "ghi"); | 958 SetSystemCookie(kTestCookieURL2, "abc", "ghi"); |
| 957 EXPECT_EQ(1U, cookies.size()); | 959 EXPECT_EQ(1U, cookies.size()); |
| 958 DeleteSystemCookie(kTestCookieURL, "abc"); | 960 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 959 store_->UnSynchronize(); | 961 store_->UnSynchronize(); |
| 960 } | 962 } |
| 961 | 963 |
| 962 TEST_F(CookieStoreIOSWithBackend, MoreSpecificNestedCookieWithSameValue) { | 964 TEST_F(CookieStoreIOSWithBackend, MoreSpecificNestedCookieWithSameValue) { |
| 963 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 965 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 964 backend_->RunLoadedCallback(); | 966 backend_->RunLoadedCallback(); |
| 965 std::vector<net::CanonicalCookie> cookies; | 967 std::vector<net::CanonicalCookie> cookies; |
| 966 SetSystemCookie(kTestCookieURL3, "abc", "def"); | 968 SetSystemCookie(kTestCookieURL3, "abc", "def"); |
| 967 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 969 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 968 store_->AddCallbackForCookie( | 970 store_->AddCallbackForCookie( |
| 969 kTestCookieURL2, "abc", | 971 kTestCookieURL2, "abc", |
| 970 base::Bind(&RecordCookieChanges, &cookies, nullptr)); | 972 base::Bind(&RecordCookieChanges, &cookies, nullptr)); |
| 971 EXPECT_EQ(0U, cookies.size()); | 973 EXPECT_EQ(0U, cookies.size()); |
| 972 SetSystemCookie(kTestCookieURL2, "abc", "def"); | 974 SetSystemCookie(kTestCookieURL2, "abc", "def"); |
| 973 EXPECT_EQ(1U, cookies.size()); | 975 EXPECT_EQ(1U, cookies.size()); |
| 974 DeleteSystemCookie(kTestCookieURL, "abc"); | 976 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 975 store_->UnSynchronize(); | 977 store_->UnSynchronize(); |
| 976 } | 978 } |
| 977 | 979 |
| 978 TEST_F(CookieStoreIOSWithBackend, RemoveCallback) { | 980 TEST_F(CookieStoreIOSWithBackend, RemoveCallback) { |
| 979 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); | 981 CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get()); |
| 980 backend_->RunLoadedCallback(); | 982 backend_->RunLoadedCallback(); |
| 981 std::vector<net::CanonicalCookie> cookies; | 983 std::vector<net::CanonicalCookie> cookies; |
| 982 SetSystemCookie(kTestCookieURL, "abc", "def"); | 984 SetSystemCookie(kTestCookieURL, "abc", "def"); |
| 983 scoped_ptr<net::CookieStore::CookieChangedSubscription> handle = | 985 std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle = |
| 984 store_->AddCallbackForCookie( | 986 store_->AddCallbackForCookie( |
| 985 kTestCookieURL, "abc", | 987 kTestCookieURL, "abc", |
| 986 base::Bind(&RecordCookieChanges, &cookies, nullptr)); | 988 base::Bind(&RecordCookieChanges, &cookies, nullptr)); |
| 987 EXPECT_EQ(0U, cookies.size()); | 989 EXPECT_EQ(0U, cookies.size()); |
| 988 SetSystemCookie(kTestCookieURL, "abc", "ghi"); | 990 SetSystemCookie(kTestCookieURL, "abc", "ghi"); |
| 989 EXPECT_EQ(2U, cookies.size()); | 991 EXPECT_EQ(2U, cookies.size()); |
| 990 // this deletes the callback | 992 // this deletes the callback |
| 991 handle.reset(); | 993 handle.reset(); |
| 992 SetSystemCookie(kTestCookieURL, "abc", "jkl"); | 994 SetSystemCookie(kTestCookieURL, "abc", "jkl"); |
| 993 EXPECT_EQ(2U, cookies.size()); | 995 EXPECT_EQ(2U, cookies.size()); |
| 994 DeleteSystemCookie(kTestCookieURL, "abc"); | 996 DeleteSystemCookie(kTestCookieURL, "abc"); |
| 995 store_->UnSynchronize(); | 997 store_->UnSynchronize(); |
| 996 } | 998 } |
| 997 | 999 |
| 998 } // namespace net | 1000 } // namespace net |
| OLD | NEW |