| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/cookies/cookie_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 956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 load_run_loop_.Run(); | 967 load_run_loop_.Run(); |
| 968 | 968 |
| 969 // Verify that PeristentStore::Load was called. | 969 // Verify that PeristentStore::Load was called. |
| 970 testing::Mock::VerifyAndClear(persistent_store_.get()); | 970 testing::Mock::VerifyAndClear(persistent_store_.get()); |
| 971 } | 971 } |
| 972 | 972 |
| 973 // Invokes the PersistentCookieStore::LoadCookiesForKey completion callbacks | 973 // Invokes the PersistentCookieStore::LoadCookiesForKey completion callbacks |
| 974 // and PersistentCookieStore::Load completion callback. | 974 // and PersistentCookieStore::Load completion callback. |
| 975 void CompleteLoading() { | 975 void CompleteLoading() { |
| 976 while (!loaded_for_key_callbacks_.empty()) { | 976 while (!loaded_for_key_callbacks_.empty()) { |
| 977 loaded_for_key_callbacks_.front().Run(loaded_cookies_); | 977 loaded_for_key_callbacks_.front().Run(std::move(loaded_cookies_)); |
| 978 loaded_cookies_.clear(); | 978 loaded_cookies_.clear(); |
| 979 loaded_for_key_callbacks_.pop(); | 979 loaded_for_key_callbacks_.pop(); |
| 980 } | 980 } |
| 981 loaded_callback_.Run(loaded_cookies_); | 981 loaded_callback_.Run(std::move(loaded_cookies_)); |
| 982 } | 982 } |
| 983 | 983 |
| 984 // Performs the provided action, expecting it to cause a call to | 984 // Performs the provided action, expecting it to cause a call to |
| 985 // PersistentCookieStore::Load. Call WaitForLoadCall to verify the load call | 985 // PersistentCookieStore::Load. Call WaitForLoadCall to verify the load call |
| 986 // is received. | 986 // is received. |
| 987 void BeginWith(testing::Action<void(void)> action) { | 987 void BeginWith(testing::Action<void(void)> action) { |
| 988 EXPECT_CALL(*this, Begin()).WillOnce(action); | 988 EXPECT_CALL(*this, Begin()).WillOnce(action); |
| 989 ExpectLoadCall(); | 989 ExpectLoadCall(); |
| 990 Begin(); | 990 Begin(); |
| 991 } | 991 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1020 MOCK_METHOD0(Begin, void(void)); | 1020 MOCK_METHOD0(Begin, void(void)); |
| 1021 | 1021 |
| 1022 // Returns the CookieMonster instance under test. | 1022 // Returns the CookieMonster instance under test. |
| 1023 CookieMonster& cookie_monster() { return *cookie_monster_.get(); } | 1023 CookieMonster& cookie_monster() { return *cookie_monster_.get(); } |
| 1024 | 1024 |
| 1025 private: | 1025 private: |
| 1026 // Declares that mock expectations in this test suite are strictly ordered. | 1026 // Declares that mock expectations in this test suite are strictly ordered. |
| 1027 testing::InSequence in_sequence_; | 1027 testing::InSequence in_sequence_; |
| 1028 // Holds cookies to be returned from PersistentCookieStore::Load or | 1028 // Holds cookies to be returned from PersistentCookieStore::Load or |
| 1029 // PersistentCookieStore::LoadCookiesForKey. | 1029 // PersistentCookieStore::LoadCookiesForKey. |
| 1030 std::vector<CanonicalCookie*> loaded_cookies_; | 1030 std::vector<std::unique_ptr<CanonicalCookie>> loaded_cookies_; |
| 1031 // Stores the callback passed from the CookieMonster to the | 1031 // Stores the callback passed from the CookieMonster to the |
| 1032 // PersistentCookieStore::Load | 1032 // PersistentCookieStore::Load |
| 1033 CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; | 1033 CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; |
| 1034 // Stores the callback passed from the CookieMonster to the | 1034 // Stores the callback passed from the CookieMonster to the |
| 1035 // PersistentCookieStore::LoadCookiesForKey | 1035 // PersistentCookieStore::LoadCookiesForKey |
| 1036 std::queue<CookieMonster::PersistentCookieStore::LoadedCallback> | 1036 std::queue<CookieMonster::PersistentCookieStore::LoadedCallback> |
| 1037 loaded_for_key_callbacks_; | 1037 loaded_for_key_callbacks_; |
| 1038 // base::RunLoop used to wait for PersistentCookieStore::Load to be called. | 1038 // base::RunLoop used to wait for PersistentCookieStore::Load to be called. |
| 1039 base::RunLoop load_run_loop_; | 1039 base::RunLoop load_run_loop_; |
| 1040 // Indicates whether ExpectLoadCall() has been called. | 1040 // Indicates whether ExpectLoadCall() has been called. |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 &cookie_monster(), base::Time(), base::Time::Now(), predicate, | 1303 &cookie_monster(), base::Time(), base::Time::Now(), predicate, |
| 1304 &delete_callback)); | 1304 &delete_callback)); |
| 1305 base::RunLoop loop; | 1305 base::RunLoop loop; |
| 1306 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop)); | 1306 EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop)); |
| 1307 | 1307 |
| 1308 CompleteLoading(); | 1308 CompleteLoading(); |
| 1309 loop.Run(); | 1309 loop.Run(); |
| 1310 } | 1310 } |
| 1311 | 1311 |
| 1312 TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) { | 1312 TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) { |
| 1313 std::vector<CanonicalCookie*> cookies; | 1313 std::vector<std::unique_ptr<CanonicalCookie>> cookies; |
| 1314 std::unique_ptr<CanonicalCookie> cookie = BuildCanonicalCookie( | 1314 std::unique_ptr<CanonicalCookie> cookie = BuildCanonicalCookie( |
| 1315 http_www_google_.url(), "X=1; path=/", base::Time::Now()); | 1315 http_www_google_.url(), "X=1; path=/", base::Time::Now()); |
| 1316 | 1316 |
| 1317 MockDeleteCallback delete_cookie_callback; | 1317 MockDeleteCallback delete_cookie_callback; |
| 1318 | 1318 |
| 1319 BeginWith(DeleteCanonicalCookieAction(&cookie_monster(), *cookie, | 1319 BeginWith(DeleteCanonicalCookieAction(&cookie_monster(), *cookie, |
| 1320 &delete_cookie_callback)); | 1320 &delete_cookie_callback)); |
| 1321 | 1321 |
| 1322 WaitForLoadCall(); | 1322 WaitForLoadCall(); |
| 1323 | 1323 |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1782 // | 1782 // |
| 1783 // This is a regression test for: http://crbug.com/17855. | 1783 // This is a regression test for: http://crbug.com/17855. |
| 1784 TEST_F(CookieMonsterTest, DontImportDuplicateCookies) { | 1784 TEST_F(CookieMonsterTest, DontImportDuplicateCookies) { |
| 1785 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); | 1785 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); |
| 1786 | 1786 |
| 1787 // We will fill some initial cookies into the PersistentCookieStore, | 1787 // We will fill some initial cookies into the PersistentCookieStore, |
| 1788 // to simulate a database with 4 duplicates. Note that we need to | 1788 // to simulate a database with 4 duplicates. Note that we need to |
| 1789 // be careful not to have any duplicate creation times at all (as it's a | 1789 // be careful not to have any duplicate creation times at all (as it's a |
| 1790 // violation of a CookieMonster invariant) even if Time::Now() doesn't | 1790 // violation of a CookieMonster invariant) even if Time::Now() doesn't |
| 1791 // move between calls. | 1791 // move between calls. |
| 1792 std::vector<CanonicalCookie*> initial_cookies; | 1792 std::vector<std::unique_ptr<CanonicalCookie>> initial_cookies; |
| 1793 | 1793 |
| 1794 // Insert 4 cookies with name "X" on path "/", with varying creation | 1794 // Insert 4 cookies with name "X" on path "/", with varying creation |
| 1795 // dates. We expect only the most recent one to be preserved following | 1795 // dates. We expect only the most recent one to be preserved following |
| 1796 // the import. | 1796 // the import. |
| 1797 | 1797 |
| 1798 AddCookieToList(GURL("http://www.google.com"), | 1798 AddCookieToList(GURL("http://www.google.com"), |
| 1799 "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 1799 "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", |
| 1800 Time::Now() + TimeDelta::FromDays(3), &initial_cookies); | 1800 Time::Now() + TimeDelta::FromDays(3), &initial_cookies); |
| 1801 | 1801 |
| 1802 AddCookieToList(GURL("http://www.google.com"), | 1802 AddCookieToList(GURL("http://www.google.com"), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1823 AddCookieToList(GURL("http://www.google.com"), | 1823 AddCookieToList(GURL("http://www.google.com"), |
| 1824 "X=a2; path=/2; expires=Mon, 18-Apr-22 22:50:14 GMT", | 1824 "X=a2; path=/2; expires=Mon, 18-Apr-22 22:50:14 GMT", |
| 1825 Time::Now() + TimeDelta::FromDays(2), &initial_cookies); | 1825 Time::Now() + TimeDelta::FromDays(2), &initial_cookies); |
| 1826 | 1826 |
| 1827 // Insert 1 cookie with name "Y" on path "/". | 1827 // Insert 1 cookie with name "Y" on path "/". |
| 1828 AddCookieToList(GURL("http://www.google.com"), | 1828 AddCookieToList(GURL("http://www.google.com"), |
| 1829 "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 1829 "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", |
| 1830 Time::Now() + TimeDelta::FromDays(10), &initial_cookies); | 1830 Time::Now() + TimeDelta::FromDays(10), &initial_cookies); |
| 1831 | 1831 |
| 1832 // Inject our initial cookies into the mock PersistentCookieStore. | 1832 // Inject our initial cookies into the mock PersistentCookieStore. |
| 1833 store->SetLoadExpectation(true, initial_cookies); | 1833 store->SetLoadExpectation(true, std::move(initial_cookies)); |
| 1834 | 1834 |
| 1835 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); | 1835 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); |
| 1836 | 1836 |
| 1837 // Verify that duplicates were not imported for path "/". | 1837 // Verify that duplicates were not imported for path "/". |
| 1838 // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4). | 1838 // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4). |
| 1839 EXPECT_EQ("X=3; Y=a", GetCookies(cm.get(), GURL("http://www.google.com/"))); | 1839 EXPECT_EQ("X=3; Y=a", GetCookies(cm.get(), GURL("http://www.google.com/"))); |
| 1840 | 1840 |
| 1841 // Verify that same-named cookie on a different path ("/x2") didn't get | 1841 // Verify that same-named cookie on a different path ("/x2") didn't get |
| 1842 // messed up. | 1842 // messed up. |
| 1843 EXPECT_EQ("X=a1; X=3; Y=a", | 1843 EXPECT_EQ("X=a1; X=3; Y=a", |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1859 TEST_F(CookieMonsterTest, DontImportDuplicateCreationTimes) { | 1859 TEST_F(CookieMonsterTest, DontImportDuplicateCreationTimes) { |
| 1860 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); | 1860 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); |
| 1861 | 1861 |
| 1862 Time now(Time::Now()); | 1862 Time now(Time::Now()); |
| 1863 Time earlier(now - TimeDelta::FromDays(1)); | 1863 Time earlier(now - TimeDelta::FromDays(1)); |
| 1864 | 1864 |
| 1865 // Insert 8 cookies, four with the current time as creation times, and | 1865 // Insert 8 cookies, four with the current time as creation times, and |
| 1866 // four with the earlier time as creation times. We should only get | 1866 // four with the earlier time as creation times. We should only get |
| 1867 // two cookies remaining, but which two (other than that there should | 1867 // two cookies remaining, but which two (other than that there should |
| 1868 // be one from each set) will be random. | 1868 // be one from each set) will be random. |
| 1869 std::vector<CanonicalCookie*> initial_cookies; | 1869 std::vector<std::unique_ptr<CanonicalCookie>> initial_cookies; |
| 1870 AddCookieToList(GURL("http://www.google.com"), "X=1; path=/", now, | 1870 AddCookieToList(GURL("http://www.google.com"), "X=1; path=/", now, |
| 1871 &initial_cookies); | 1871 &initial_cookies); |
| 1872 AddCookieToList(GURL("http://www.google.com"), "X=2; path=/", now, | 1872 AddCookieToList(GURL("http://www.google.com"), "X=2; path=/", now, |
| 1873 &initial_cookies); | 1873 &initial_cookies); |
| 1874 AddCookieToList(GURL("http://www.google.com"), "X=3; path=/", now, | 1874 AddCookieToList(GURL("http://www.google.com"), "X=3; path=/", now, |
| 1875 &initial_cookies); | 1875 &initial_cookies); |
| 1876 AddCookieToList(GURL("http://www.google.com"), "X=4; path=/", now, | 1876 AddCookieToList(GURL("http://www.google.com"), "X=4; path=/", now, |
| 1877 &initial_cookies); | 1877 &initial_cookies); |
| 1878 | 1878 |
| 1879 AddCookieToList(GURL("http://www.google.com"), "Y=1; path=/", earlier, | 1879 AddCookieToList(GURL("http://www.google.com"), "Y=1; path=/", earlier, |
| 1880 &initial_cookies); | 1880 &initial_cookies); |
| 1881 AddCookieToList(GURL("http://www.google.com"), "Y=2; path=/", earlier, | 1881 AddCookieToList(GURL("http://www.google.com"), "Y=2; path=/", earlier, |
| 1882 &initial_cookies); | 1882 &initial_cookies); |
| 1883 AddCookieToList(GURL("http://www.google.com"), "Y=3; path=/", earlier, | 1883 AddCookieToList(GURL("http://www.google.com"), "Y=3; path=/", earlier, |
| 1884 &initial_cookies); | 1884 &initial_cookies); |
| 1885 AddCookieToList(GURL("http://www.google.com"), "Y=4; path=/", earlier, | 1885 AddCookieToList(GURL("http://www.google.com"), "Y=4; path=/", earlier, |
| 1886 &initial_cookies); | 1886 &initial_cookies); |
| 1887 | 1887 |
| 1888 // Inject our initial cookies into the mock PersistentCookieStore. | 1888 // Inject our initial cookies into the mock PersistentCookieStore. |
| 1889 store->SetLoadExpectation(true, initial_cookies); | 1889 store->SetLoadExpectation(true, std::move(initial_cookies)); |
| 1890 | 1890 |
| 1891 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); | 1891 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); |
| 1892 | 1892 |
| 1893 CookieList list(GetAllCookies(cm.get())); | 1893 CookieList list(GetAllCookies(cm.get())); |
| 1894 EXPECT_EQ(2U, list.size()); | 1894 EXPECT_EQ(2U, list.size()); |
| 1895 // Confirm that we have one of each. | 1895 // Confirm that we have one of each. |
| 1896 std::string name1(list[0].Name()); | 1896 std::string name1(list[0].Name()); |
| 1897 std::string name2(list[1].Name()); | 1897 std::string name2(list[1].Name()); |
| 1898 EXPECT_TRUE(name1 == "X" || name2 == "X"); | 1898 EXPECT_TRUE(name1 == "X" || name2 == "X"); |
| 1899 EXPECT_TRUE(name1 == "Y" || name2 == "Y"); | 1899 EXPECT_TRUE(name1 == "Y" || name2 == "Y"); |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2294 base::Bind(&GetCookieListCallback::Run, | 2294 base::Bind(&GetCookieListCallback::Run, |
| 2295 base::Unretained(&get_cookie_list_callback1))); | 2295 base::Unretained(&get_cookie_list_callback1))); |
| 2296 | 2296 |
| 2297 // Two load events should have been queued. | 2297 // Two load events should have been queued. |
| 2298 ASSERT_EQ(2u, store->commands().size()); | 2298 ASSERT_EQ(2u, store->commands().size()); |
| 2299 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); | 2299 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); |
| 2300 ASSERT_EQ(CookieStoreCommand::LOAD_COOKIES_FOR_KEY, | 2300 ASSERT_EQ(CookieStoreCommand::LOAD_COOKIES_FOR_KEY, |
| 2301 store->commands()[1].type); | 2301 store->commands()[1].type); |
| 2302 | 2302 |
| 2303 // The main load completes first (With no cookies). | 2303 // The main load completes first (With no cookies). |
| 2304 store->commands()[0].loaded_callback.Run(std::vector<CanonicalCookie*>()); | 2304 store->commands()[0].loaded_callback.Run( |
| 2305 std::vector<std::unique_ptr<CanonicalCookie>>()); |
| 2305 | 2306 |
| 2306 // The tasks should run in order, and the get should see the cookies. | 2307 // The tasks should run in order, and the get should see the cookies. |
| 2307 | 2308 |
| 2308 set_cookie_callback.WaitUntilDone(); | 2309 set_cookie_callback.WaitUntilDone(); |
| 2309 EXPECT_TRUE(set_cookie_callback.result()); | 2310 EXPECT_TRUE(set_cookie_callback.result()); |
| 2310 | 2311 |
| 2311 get_cookie_list_callback1.WaitUntilDone(); | 2312 get_cookie_list_callback1.WaitUntilDone(); |
| 2312 EXPECT_EQ(1u, get_cookie_list_callback1.cookies().size()); | 2313 EXPECT_EQ(1u, get_cookie_list_callback1.cookies().size()); |
| 2313 | 2314 |
| 2314 // The loaded for key event completes late, with not cookies (Since they | 2315 // The loaded for key event completes late, with not cookies (Since they |
| 2315 // were already loaded). | 2316 // were already loaded). |
| 2316 store->commands()[1].loaded_callback.Run(std::vector<CanonicalCookie*>()); | 2317 store->commands()[1].loaded_callback.Run( |
| 2318 std::vector<std::unique_ptr<CanonicalCookie>>()); |
| 2317 | 2319 |
| 2318 // The just set cookie should still be in the store. | 2320 // The just set cookie should still be in the store. |
| 2319 GetCookieListCallback get_cookie_list_callback2; | 2321 GetCookieListCallback get_cookie_list_callback2; |
| 2320 cm->GetAllCookiesAsync( | 2322 cm->GetAllCookiesAsync( |
| 2321 base::Bind(&GetCookieListCallback::Run, | 2323 base::Bind(&GetCookieListCallback::Run, |
| 2322 base::Unretained(&get_cookie_list_callback2))); | 2324 base::Unretained(&get_cookie_list_callback2))); |
| 2323 get_cookie_list_callback2.WaitUntilDone(); | 2325 get_cookie_list_callback2.WaitUntilDone(); |
| 2324 EXPECT_EQ(1u, get_cookie_list_callback2.cookies().size()); | 2326 EXPECT_EQ(1u, get_cookie_list_callback2.cookies().size()); |
| 2325 } | 2327 } |
| 2326 | 2328 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2341 GetCookieListCallback get_cookie_list_callback; | 2343 GetCookieListCallback get_cookie_list_callback; |
| 2342 cm->GetCookieListWithOptionsAsync( | 2344 cm->GetCookieListWithOptionsAsync( |
| 2343 kUrl, CookieOptions(), | 2345 kUrl, CookieOptions(), |
| 2344 base::Bind(&GetCookieListCallback::Run, | 2346 base::Bind(&GetCookieListCallback::Run, |
| 2345 base::Unretained(&get_cookie_list_callback))); | 2347 base::Unretained(&get_cookie_list_callback))); |
| 2346 | 2348 |
| 2347 // Only the main load should have been queued. | 2349 // Only the main load should have been queued. |
| 2348 ASSERT_EQ(1u, store->commands().size()); | 2350 ASSERT_EQ(1u, store->commands().size()); |
| 2349 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); | 2351 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); |
| 2350 | 2352 |
| 2351 std::vector<CanonicalCookie*> cookies; | 2353 std::vector<std::unique_ptr<CanonicalCookie>> cookies; |
| 2352 // When passed to the CookieMonster, it takes ownership of the pointed to | 2354 // When passed to the CookieMonster, it takes ownership of the pointed to |
| 2353 // cookies. | 2355 // cookies. |
| 2354 cookies.push_back( | 2356 cookies.push_back( |
| 2355 CanonicalCookie::Create(kUrl, "a=b", base::Time(), CookieOptions()) | 2357 CanonicalCookie::Create(kUrl, "a=b", base::Time(), CookieOptions())); |
| 2356 .release()); | |
| 2357 ASSERT_TRUE(cookies[0]); | 2358 ASSERT_TRUE(cookies[0]); |
| 2358 store->commands()[0].loaded_callback.Run(cookies); | 2359 store->commands()[0].loaded_callback.Run(std::move(cookies)); |
| 2359 | 2360 |
| 2360 delete_callback.WaitUntilDone(); | 2361 delete_callback.WaitUntilDone(); |
| 2361 EXPECT_EQ(1, delete_callback.result()); | 2362 EXPECT_EQ(1, delete_callback.result()); |
| 2362 | 2363 |
| 2363 get_cookie_list_callback.WaitUntilDone(); | 2364 get_cookie_list_callback.WaitUntilDone(); |
| 2364 EXPECT_EQ(0u, get_cookie_list_callback.cookies().size()); | 2365 EXPECT_EQ(0u, get_cookie_list_callback.cookies().size()); |
| 2365 } | 2366 } |
| 2366 | 2367 |
| 2367 // Tests that a set cookie call sandwiched between two get all cookies, all | 2368 // Tests that a set cookie call sandwiched between two get all cookies, all |
| 2368 // before load completes, affects the first but not the second. The set should | 2369 // before load completes, affects the first but not the second. The set should |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2389 GetCookieListCallback get_cookie_list_callback2; | 2390 GetCookieListCallback get_cookie_list_callback2; |
| 2390 cm->GetAllCookiesAsync( | 2391 cm->GetAllCookiesAsync( |
| 2391 base::Bind(&GetCookieListCallback::Run, | 2392 base::Bind(&GetCookieListCallback::Run, |
| 2392 base::Unretained(&get_cookie_list_callback2))); | 2393 base::Unretained(&get_cookie_list_callback2))); |
| 2393 | 2394 |
| 2394 // Only the main load should have been queued. | 2395 // Only the main load should have been queued. |
| 2395 ASSERT_EQ(1u, store->commands().size()); | 2396 ASSERT_EQ(1u, store->commands().size()); |
| 2396 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); | 2397 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); |
| 2397 | 2398 |
| 2398 // The load completes (With no cookies). | 2399 // The load completes (With no cookies). |
| 2399 store->commands()[0].loaded_callback.Run(std::vector<CanonicalCookie*>()); | 2400 store->commands()[0].loaded_callback.Run( |
| 2401 std::vector<std::unique_ptr<CanonicalCookie>>()); |
| 2400 | 2402 |
| 2401 get_cookie_list_callback1.WaitUntilDone(); | 2403 get_cookie_list_callback1.WaitUntilDone(); |
| 2402 EXPECT_EQ(0u, get_cookie_list_callback1.cookies().size()); | 2404 EXPECT_EQ(0u, get_cookie_list_callback1.cookies().size()); |
| 2403 | 2405 |
| 2404 set_cookie_callback.WaitUntilDone(); | 2406 set_cookie_callback.WaitUntilDone(); |
| 2405 EXPECT_TRUE(set_cookie_callback.result()); | 2407 EXPECT_TRUE(set_cookie_callback.result()); |
| 2406 | 2408 |
| 2407 get_cookie_list_callback2.WaitUntilDone(); | 2409 get_cookie_list_callback2.WaitUntilDone(); |
| 2408 EXPECT_EQ(1u, get_cookie_list_callback2.cookies().size()); | 2410 EXPECT_EQ(1u, get_cookie_list_callback2.cookies().size()); |
| 2409 } | 2411 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2441 GetCookieListCallback get_cookie_list_callback1; | 2443 GetCookieListCallback get_cookie_list_callback1; |
| 2442 cm->GetAllCookiesAsync( | 2444 cm->GetAllCookiesAsync( |
| 2443 base::Bind(&GetCookieListCallback::Run, | 2445 base::Bind(&GetCookieListCallback::Run, |
| 2444 base::Unretained(&get_cookie_list_callback1))); | 2446 base::Unretained(&get_cookie_list_callback1))); |
| 2445 | 2447 |
| 2446 // Only the main load should have been queued. | 2448 // Only the main load should have been queued. |
| 2447 ASSERT_EQ(1u, store->commands().size()); | 2449 ASSERT_EQ(1u, store->commands().size()); |
| 2448 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); | 2450 ASSERT_EQ(CookieStoreCommand::LOAD, store->commands()[0].type); |
| 2449 | 2451 |
| 2450 // The load completes. | 2452 // The load completes. |
| 2451 store->commands()[0].loaded_callback.Run(std::vector<CanonicalCookie*>()); | 2453 store->commands()[0].loaded_callback.Run( |
| 2454 std::vector<std::unique_ptr<CanonicalCookie>>()); |
| 2452 | 2455 |
| 2453 // The get cookies call should see no cookies set. | 2456 // The get cookies call should see no cookies set. |
| 2454 get_cookie_list_callback1.WaitUntilDone(); | 2457 get_cookie_list_callback1.WaitUntilDone(); |
| 2455 EXPECT_EQ(0u, get_cookie_list_callback1.cookies().size()); | 2458 EXPECT_EQ(0u, get_cookie_list_callback1.cookies().size()); |
| 2456 | 2459 |
| 2457 set_cookie_callback.WaitUntilDone(); | 2460 set_cookie_callback.WaitUntilDone(); |
| 2458 EXPECT_TRUE(set_cookie_callback.result()); | 2461 EXPECT_TRUE(set_cookie_callback.result()); |
| 2459 | 2462 |
| 2460 // A subsequent get cookies call should see the new cookie. | 2463 // A subsequent get cookies call should see the new cookie. |
| 2461 GetCookieListCallback get_cookie_list_callback2; | 2464 GetCookieListCallback get_cookie_list_callback2; |
| 2462 cm->GetAllCookiesAsync( | 2465 cm->GetAllCookiesAsync( |
| 2463 base::Bind(&GetCookieListCallback::Run, | 2466 base::Bind(&GetCookieListCallback::Run, |
| 2464 base::Unretained(&get_cookie_list_callback2))); | 2467 base::Unretained(&get_cookie_list_callback2))); |
| 2465 get_cookie_list_callback2.WaitUntilDone(); | 2468 get_cookie_list_callback2.WaitUntilDone(); |
| 2466 EXPECT_EQ(1u, get_cookie_list_callback2.cookies().size()); | 2469 EXPECT_EQ(1u, get_cookie_list_callback2.cookies().size()); |
| 2467 } | 2470 } |
| 2468 | 2471 |
| 2469 namespace { | 2472 namespace { |
| 2470 | 2473 |
| 2471 // Mock PersistentCookieStore that keeps track of the number of Flush() calls. | 2474 // Mock PersistentCookieStore that keeps track of the number of Flush() calls. |
| 2472 class FlushablePersistentStore : public CookieMonster::PersistentCookieStore { | 2475 class FlushablePersistentStore : public CookieMonster::PersistentCookieStore { |
| 2473 public: | 2476 public: |
| 2474 FlushablePersistentStore() : flush_count_(0) {} | 2477 FlushablePersistentStore() : flush_count_(0) {} |
| 2475 | 2478 |
| 2476 void Load(const LoadedCallback& loaded_callback) override { | 2479 void Load(const LoadedCallback& loaded_callback) override { |
| 2477 std::vector<CanonicalCookie*> out_cookies; | 2480 std::vector<std::unique_ptr<CanonicalCookie>> out_cookies; |
| 2478 base::ThreadTaskRunnerHandle::Get()->PostTask( | 2481 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 2479 FROM_HERE, | 2482 FROM_HERE, base::Bind(loaded_callback, base::Passed(&out_cookies))); |
| 2480 base::Bind(&LoadedCallbackTask::Run, | |
| 2481 new LoadedCallbackTask(loaded_callback, out_cookies))); | |
| 2482 } | 2483 } |
| 2483 | 2484 |
| 2484 void LoadCookiesForKey(const std::string& key, | 2485 void LoadCookiesForKey(const std::string& key, |
| 2485 const LoadedCallback& loaded_callback) override { | 2486 const LoadedCallback& loaded_callback) override { |
| 2486 Load(loaded_callback); | 2487 Load(loaded_callback); |
| 2487 } | 2488 } |
| 2488 | 2489 |
| 2489 void AddCookie(const CanonicalCookie&) override {} | 2490 void AddCookie(const CanonicalCookie&) override {} |
| 2490 void UpdateCookieAccessTime(const CanonicalCookie&) override {} | 2491 void UpdateCookieAccessTime(const CanonicalCookie&) override {} |
| 2491 void DeleteCookie(const CanonicalCookie&) override {} | 2492 void DeleteCookie(const CanonicalCookie&) override {} |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2874 const Time now1(Time::Now()); | 2875 const Time now1(Time::Now()); |
| 2875 const Time now2(Time::Now() + TimeDelta::FromSeconds(1)); | 2876 const Time now2(Time::Now() + TimeDelta::FromSeconds(1)); |
| 2876 const Time now3(Time::Now() + TimeDelta::FromSeconds(2)); | 2877 const Time now3(Time::Now() + TimeDelta::FromSeconds(2)); |
| 2877 const Time later(now1 + TimeDelta::FromDays(1)); | 2878 const Time later(now1 + TimeDelta::FromDays(1)); |
| 2878 const GURL url("http://host/path"); | 2879 const GURL url("http://host/path"); |
| 2879 const std::string domain("host"); | 2880 const std::string domain("host"); |
| 2880 const std::string path("/path"); | 2881 const std::string path("/path"); |
| 2881 | 2882 |
| 2882 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); | 2883 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); |
| 2883 | 2884 |
| 2884 std::vector<CanonicalCookie*> initial_cookies; | 2885 std::vector<std::unique_ptr<CanonicalCookie>> initial_cookies; |
| 2885 | 2886 |
| 2886 AddCookieToList(url, "foo=bar; path=" + path, now1, &initial_cookies); | 2887 AddCookieToList(url, "foo=bar; path=" + path, now1, &initial_cookies); |
| 2887 | 2888 |
| 2888 // We have to manually build this cookie because it contains a control | 2889 // We have to manually build this cookie because it contains a control |
| 2889 // character, and our cookie line parser rejects control characters. | 2890 // character, and our cookie line parser rejects control characters. |
| 2890 std::unique_ptr<CanonicalCookie> cc = CanonicalCookie::Create( | 2891 std::unique_ptr<CanonicalCookie> cc = CanonicalCookie::Create( |
| 2891 url, "baz", | 2892 url, "baz", |
| 2892 "\x05" | 2893 "\x05" |
| 2893 "boo", | 2894 "boo", |
| 2894 domain, path, now2, later, false, false, CookieSameSite::DEFAULT_MODE, | 2895 domain, path, now2, later, false, false, CookieSameSite::DEFAULT_MODE, |
| 2895 false, COOKIE_PRIORITY_DEFAULT); | 2896 false, COOKIE_PRIORITY_DEFAULT); |
| 2896 initial_cookies.push_back(cc.release()); | 2897 initial_cookies.push_back(std::move(cc)); |
| 2897 | 2898 |
| 2898 AddCookieToList(url, "hello=world; path=" + path, now3, &initial_cookies); | 2899 AddCookieToList(url, "hello=world; path=" + path, now3, &initial_cookies); |
| 2899 | 2900 |
| 2900 // Inject our initial cookies into the mock PersistentCookieStore. | 2901 // Inject our initial cookies into the mock PersistentCookieStore. |
| 2901 store->SetLoadExpectation(true, initial_cookies); | 2902 store->SetLoadExpectation(true, std::move(initial_cookies)); |
| 2902 | 2903 |
| 2903 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); | 2904 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); |
| 2904 | 2905 |
| 2905 EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url)); | 2906 EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url)); |
| 2906 } | 2907 } |
| 2907 | 2908 |
| 2908 // Test that cookie source schemes are histogrammed correctly. | 2909 // Test that cookie source schemes are histogrammed correctly. |
| 2909 TEST_F(CookieMonsterTest, CookieSourceHistogram) { | 2910 TEST_F(CookieMonsterTest, CookieSourceHistogram) { |
| 2910 base::HistogramTester histograms; | 2911 base::HistogramTester histograms; |
| 2911 const std::string cookie_source_histogram = "Cookie.CookieSourceScheme"; | 2912 const std::string cookie_source_histogram = "Cookie.CookieSourceScheme"; |
| (...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3492 monster()->AddCallbackForCookie( | 3493 monster()->AddCallbackForCookie( |
| 3493 test_url_, "abc", | 3494 test_url_, "abc", |
| 3494 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); | 3495 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); |
| 3495 SetCookie(monster(), test_url_, "abc=def"); | 3496 SetCookie(monster(), test_url_, "abc=def"); |
| 3496 base::RunLoop().RunUntilIdle(); | 3497 base::RunLoop().RunUntilIdle(); |
| 3497 EXPECT_EQ(1U, cookies0.size()); | 3498 EXPECT_EQ(1U, cookies0.size()); |
| 3498 EXPECT_EQ(1U, cookies0.size()); | 3499 EXPECT_EQ(1U, cookies0.size()); |
| 3499 } | 3500 } |
| 3500 | 3501 |
| 3501 } // namespace net | 3502 } // namespace net |
| OLD | NEW |