| Index: net/base/cookie_monster_unittest.cc | 
| =================================================================== | 
| --- net/base/cookie_monster_unittest.cc	(revision 100345) | 
| +++ net/base/cookie_monster_unittest.cc	(working copy) | 
| @@ -20,7 +20,8 @@ | 
| #include "base/time.h" | 
| #include "googleurl/src/gurl.h" | 
| #include "net/base/cookie_monster.h" | 
| -#include "net/base/cookie_monster_store_test.h"  // For CookieStore Mock | 
| +#include "net/base/cookie_monster_store_test.h"  // For CookieStore mock | 
| +#include "testing/gmock/include/gmock/gmock.h" | 
| #include "testing/gtest/include/gtest/gtest.h" | 
|  | 
| namespace net { | 
| @@ -31,6 +32,20 @@ | 
|  | 
| namespace { | 
|  | 
| +// TODO(erikwright): Replace the pre-existing MockPersistentCookieStore (and | 
| +// brethren) with this one, and remove the 'New' prefix. | 
| +class NewMockPersistentCookieStore | 
| +    : public CookieMonster::PersistentCookieStore { | 
| + public: | 
| +  MOCK_METHOD1(Load, bool(const LoadedCallback& loaded_callback)); | 
| +  MOCK_METHOD1(AddCookie, void(const CookieMonster::CanonicalCookie& cc)); | 
| +  MOCK_METHOD1(UpdateCookieAccessTime, | 
| +               void(const CookieMonster::CanonicalCookie& cc)); | 
| +  MOCK_METHOD1(DeleteCookie, void(const CookieMonster::CanonicalCookie& cc)); | 
| +  MOCK_METHOD1(SetClearLocalStateOnExit, void(bool clear_local_state)); | 
| +  MOCK_METHOD1(Flush, void(Task* completion_task)); | 
| +}; | 
| + | 
| const int kTimeout = 1000; | 
|  | 
| const char* kTopLevelDomainPlus1 = "http://www.harvard.edu"; | 
| @@ -145,10 +160,10 @@ | 
| : CookieCallback(run_in_thread) {} | 
|  | 
| void Run( | 
| -      std::string* cookie_line, | 
| -      std::vector<CookieStore::CookieInfo>* cookie_info) { | 
| -    cookie_line_ = *cookie_line; | 
| -    cookie_info_ = *cookie_info; | 
| +      const std::string& cookie_line, | 
| +      const std::vector<CookieStore::CookieInfo>& cookie_info) { | 
| +    cookie_line_ = cookie_line; | 
| +    cookie_info_ = cookie_info; | 
| CallbackEpilogue(); | 
| } | 
|  | 
| @@ -417,7 +432,7 @@ | 
| EXPECT_FALSE(pc2.IsSecure()); | 
| } | 
|  | 
| -// TODO some better test cases for invalid cookies. | 
| +// TODO(erikwright): some better test cases for invalid cookies. | 
| TEST(ParsedCookieTest, InvalidWhitespace) { | 
| CookieMonster::ParsedCookie pc("    "); | 
| EXPECT_FALSE(pc.IsValid()); | 
| @@ -499,9 +514,9 @@ | 
| std::string GetCookies(CookieMonster* cm, const GURL& url) { | 
| DCHECK(cm); | 
| GetCookieStringCallback callback; | 
| -    cm->GetCookiesAsync( | 
| -        url, base::Bind(&GetCookieStringCallback::Run, | 
| -                        base::Unretained(&callback))); | 
| +    cm->GetCookiesWithOptionsAsync( | 
| +        url, CookieOptions(), base::Bind(&GetCookieStringCallback::Run, | 
| +                                         base::Unretained(&callback))); | 
| RunFor(kTimeout); | 
| EXPECT_TRUE(callback.did_run()); | 
| return callback.cookie(); | 
| @@ -589,6 +604,13 @@ | 
| return callback.result(); | 
| } | 
|  | 
| +  bool SetCookie(CookieMonster* cm, | 
| +                 const GURL& url, | 
| +                 const std::string& cookie_line) { | 
| +    CookieOptions options; | 
| +    return SetCookieWithOptions(cm, url, cookie_line, options); | 
| +  } | 
| + | 
| bool SetCookieWithDetails(CookieMonster* cm, | 
| const GURL& url, | 
| const std::string& name, | 
| @@ -619,14 +641,23 @@ | 
| EXPECT_TRUE(callback.did_run()); | 
| } | 
|  | 
| +  int DeleteAll(CookieMonster*cm) { | 
| +    DCHECK(cm); | 
| +    DeleteCallback callback; | 
| +    cm->DeleteAllAsync( | 
| +        base::Bind(&DeleteCallback::Run, base::Unretained(&callback))); | 
| +    RunFor(kTimeout); | 
| +    EXPECT_TRUE(callback.did_run()); | 
| +    return callback.num_deleted(); | 
| +  } | 
| + | 
| int DeleteAllCreatedBetween(CookieMonster*cm, | 
| const base::Time& delete_begin, | 
| -                              const base::Time& delete_end, | 
| -                              bool sync_to_store) { | 
| +                              const base::Time& delete_end) { | 
| DCHECK(cm); | 
| DeleteCallback callback; | 
| cm->DeleteAllCreatedBetweenAsync( | 
| -        delete_begin, delete_end, sync_to_store, | 
| +        delete_begin, delete_end, | 
| base::Bind(&DeleteCallback::Run, base::Unretained(&callback))); | 
| RunFor(kTimeout); | 
| EXPECT_TRUE(callback.did_run()); | 
| @@ -675,7 +706,7 @@ | 
| GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3); | 
| GURL url_other(kOtherDomain); | 
|  | 
| -    cm->DeleteAll(true); | 
| +    DeleteAll(cm); | 
|  | 
| // Static population for probe: | 
| //    * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a) | 
| @@ -778,7 +809,7 @@ | 
| cm->SetExpiryAndKeyScheme(key_scheme); | 
| for (int i = 0; i < more_than_enough_cookies; ++i) { | 
| std::string cookie = base::StringPrintf("a%03d=b", i); | 
| -        EXPECT_TRUE(cm->SetCookie(url_google_, cookie)); | 
| +        EXPECT_TRUE(SetCookie(cm, url_google_, cookie)); | 
| std::string cookies = this->GetCookies(cm, url_google_); | 
| // Make sure we find it in the cookies. | 
| EXPECT_NE(cookies.find(cookie), std::string::npos); | 
| @@ -800,9 +831,9 @@ | 
| cm->SetExpiryAndKeyScheme(key_scheme); | 
| for (int i = 0; i < more_than_enough_cookies; ++i) { | 
| std::string cookie_general = base::StringPrintf("a%03d=b", i); | 
| -        EXPECT_TRUE(cm->SetCookie(url_google_, cookie_general)); | 
| +        EXPECT_TRUE(SetCookie(cm, url_google_, cookie_general)); | 
| std::string cookie_specific = base::StringPrintf("c%03d=b", i); | 
| -        EXPECT_TRUE(cm->SetCookie(url_google_specific, cookie_specific)); | 
| +        EXPECT_TRUE(SetCookie(cm, url_google_specific, cookie_specific)); | 
| std::string cookies_general = this->GetCookies(cm, url_google_); | 
| EXPECT_NE(cookies_general.find(cookie_general), std::string::npos); | 
| std::string cookies_specific = | 
| @@ -840,6 +871,16 @@ | 
| } | 
| } | 
|  | 
| +  // Function for creating a CM with a number of cookies in it, | 
| +  // no store (and hence no ability to affect access time). | 
| +  CookieMonster* CreateMonsterForGC(int num_cookies) { | 
| +    CookieMonster* cm(new CookieMonster(NULL, NULL)); | 
| +    for (int i = 0; i < num_cookies; i++) { | 
| +      SetCookie(cm, GURL(StringPrintf("http://h%05d.izzle", i)), "a=1"); | 
| +    } | 
| +    return cm; | 
| +  } | 
| + | 
| protected: | 
| GURL url_google_; | 
| GURL url_google_secure_; | 
| @@ -849,15 +890,472 @@ | 
| ScopedRunnableMethodFactory<MessageLoop> message_loop_factory_; | 
| }; | 
|  | 
| +// TODO(erikwright): Replace the other callbacks and synchronous helper methods | 
| +// in this test suite with these Mocks. | 
| +template<typename T, typename C> class MockCookieCallback { | 
| + public: | 
| +  C AsCallback() { | 
| +    return base::Bind(&T::Invoke, base::Unretained(static_cast<T*>(this))); | 
| +  } | 
| +}; | 
| + | 
| +class MockGetCookiesCallback | 
| +  : public MockCookieCallback<MockGetCookiesCallback, | 
| +                              CookieStore::GetCookiesCallback> { | 
| + public: | 
| +  MOCK_METHOD1(Invoke, void(const std::string& cookies)); | 
| +}; | 
| + | 
| +class MockGetCookieInfoCallback | 
| +  : public MockCookieCallback<MockGetCookieInfoCallback, | 
| +                              CookieStore::GetCookieInfoCallback> { | 
| + public: | 
| +  MOCK_METHOD2(Invoke, | 
| +               void(const std::string& cookies, | 
| +                    const std::vector<CookieStore::CookieInfo>& cookie_infos)); | 
| +}; | 
| + | 
| +class MockSetCookiesCallback | 
| +  : public MockCookieCallback<MockSetCookiesCallback, | 
| +                              CookieStore::SetCookiesCallback> { | 
| + public: | 
| +  MOCK_METHOD1(Invoke, void(bool success)); | 
| +}; | 
| + | 
| +class MockClosure | 
| +  : public MockCookieCallback<MockClosure, base::Closure> { | 
| + public: | 
| +  MOCK_METHOD0(Invoke, void(void)); | 
| +}; | 
| + | 
| +class MockGetCookieListCallback | 
| +  : public MockCookieCallback<MockGetCookieListCallback, | 
| +                              CookieMonster::GetCookieListCallback> { | 
| + public: | 
| +  MOCK_METHOD1(Invoke, void(const CookieList& cookies)); | 
| +}; | 
| + | 
| +class MockDeleteCallback | 
| +  : public MockCookieCallback<MockDeleteCallback, | 
| +                              CookieMonster::DeleteCallback> { | 
| + public: | 
| +  MOCK_METHOD1(Invoke, void(int num_deleted)); | 
| +}; | 
| + | 
| +class MockDeleteCookieCallback | 
| +  : public MockCookieCallback<MockDeleteCookieCallback, | 
| +                              CookieMonster::DeleteCookieCallback> { | 
| + public: | 
| +  MOCK_METHOD1(Invoke, void(bool success)); | 
| +}; | 
| + | 
| +ACTION(QuitCurrentMessageLoop) { | 
| +  MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 
| +} | 
| + | 
| +// TODO(erikwright): When the synchronous helpers 'GetCookies' etc. are removed, | 
| +// rename these, removing the 'Action' suffix. | 
| +ACTION_P4(DeleteCookieAction, cookie_monster, url, name, callback) { | 
| +  cookie_monster->DeleteCookieAsync(url, name, callback->AsCallback()); | 
| +} | 
| +ACTION_P3(GetCookiesAction, cookie_monster, url, callback) { | 
| +  cookie_monster->GetCookiesWithOptionsAsync( | 
| +      url, CookieOptions(), callback->AsCallback()); | 
| +} | 
| +ACTION_P3(GetCookiesWithInfoAction, cookie_monster, url, callback) { | 
| +  cookie_monster->GetCookiesWithInfoAsync( | 
| +      url, CookieOptions(), callback->AsCallback()); | 
| +} | 
| +ACTION_P4(SetCookieAction, cookie_monster, url, cookie_line, callback) { | 
| +  cookie_monster->SetCookieWithOptionsAsync( | 
| +      url, cookie_line, CookieOptions(), callback->AsCallback()); | 
| +} | 
| +ACTION_P4(DeleteAllCreatedBetweenAction, | 
| +          cookie_monster, delete_begin, delete_end, callback) { | 
| +  cookie_monster->DeleteAllCreatedBetweenAsync( | 
| +      delete_begin, delete_end, callback->AsCallback()); | 
| +} | 
| +ACTION_P10(SetCookieWithDetailsAction, | 
| +           cookie_monster, url, name, value, domain, path, expiration_time, | 
| +           secure, http_only, callback) { | 
| +  cookie_monster->SetCookieWithDetailsAsync( | 
| +      url, name, value, domain, path, expiration_time, secure, http_only, | 
| +      callback->AsCallback()); | 
| +} | 
| + | 
| +ACTION_P2(GetAllCookiesAction, cookie_monster, callback) { | 
| +  cookie_monster->GetAllCookiesAsync(callback->AsCallback()); | 
| +} | 
| + | 
| +ACTION_P3(DeleteAllForHostAction, cookie_monster, url, callback) { | 
| +  cookie_monster->DeleteAllForHostAsync(url, callback->AsCallback()); | 
| +} | 
| + | 
| +ACTION_P3(DeleteCanonicalCookieAction, cookie_monster, cookie, callback) { | 
| +  cookie_monster->DeleteCanonicalCookieAsync(cookie, callback->AsCallback()); | 
| +} | 
| + | 
| +ACTION_P2(DeleteAllAction, cookie_monster, callback) { | 
| +  cookie_monster->DeleteAllAsync(callback->AsCallback()); | 
| +} | 
| + | 
| +ACTION_P3(GetAllCookiesForUrlWithOptionsAction, cookie_monster, url, callback) { | 
| +  cookie_monster->GetAllCookiesForURLWithOptionsAsync( | 
| +      url, CookieOptions(), callback->AsCallback()); | 
| +} | 
| + | 
| +ACTION_P3(GetAllCookiesForUrlAction, cookie_monster, url, callback) { | 
| +  cookie_monster->GetAllCookiesForURLAsync(url, callback->AsCallback()); | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| +// This test suite verifies the task deferral behaviour of the CookieMonster. | 
| +// Specifically, for each asynchronous method, verify that: | 
| +// 1. invoking it on an uninitialized cookie store causes the store to begin | 
| +//    loading its backing data. | 
| +// 2. The initial invocation does not complete until the loading completes. | 
| +// 3. Invocations after the loading has completed complete immediately. | 
| +class DeferredCookieTaskTest : public CookieMonsterTest { | 
| + protected: | 
| +  DeferredCookieTaskTest() { | 
| +    persistent_store_ = new NewMockPersistentCookieStore(); | 
| +    cookie_monster_ = new CookieMonster(persistent_store_.get(), NULL); | 
| +  } | 
| + | 
| +  // Defines a cookie to be returned from PersistentCookieStore::Load | 
| +  void DeclareLoadedCookie(const std::string& key, | 
| +                      const std::string& cookie_line, | 
| +                      const base::Time& creation_time) { | 
| +    AddCookieToList(key, cookie_line, creation_time, &loaded_cookies_); | 
| +  } | 
| + | 
| +  // Runs the message loop, waiting until PersistentCookieStore::Load is called. | 
| +  // Call CompleteLoadingAndWait to cause the load to complete. | 
| +  void WaitForLoadCall() { | 
| +    RunFor(kTimeout); | 
| + | 
| +    // Verify that PeristentStore::Load was called. | 
| +    testing::Mock::VerifyAndClear(persistent_store_.get()); | 
| +  } | 
| + | 
| +  // Invokes the PersistentCookieStore::Load completion callback and waits | 
| +  // until the message loop is quit. | 
| +  void CompleteLoadingAndWait() { | 
| +    loaded_callback_.Run(loaded_cookies_); | 
| +    RunFor(kTimeout); | 
| +  } | 
| + | 
| +  // Performs the provided action, expecting it to cause a call to | 
| +  // PersistentCookieStore::Load. Call WaitForLoadCall to verify the load call | 
| +  // is received. | 
| +  void BeginWith(testing::Action<void(void)> action) { | 
| +    EXPECT_CALL(*this, Begin()).WillOnce(action); | 
| +    ExpectLoadCall(); | 
| +    Begin(); | 
| +  } | 
| + | 
| +  // Declares an expectation that PersistentCookieStore::Load will be called, | 
| +  // saving the provided callback and sending a quit to the message loop. | 
| +  void ExpectLoadCall() { | 
| +    EXPECT_CALL(*persistent_store_, Load(testing::_)).WillOnce(testing::DoAll( | 
| +        testing::SaveArg<0>(&loaded_callback_), | 
| +        QuitCurrentMessageLoop(), | 
| +        testing::Return(true))); | 
| +  } | 
| + | 
| +  // Invokes the initial action. | 
| +  MOCK_METHOD0(Begin, void(void)); | 
| + | 
| +  // Returns the CookieMonster instance under test. | 
| +  CookieMonster& cookie_monster() { return *cookie_monster_; } | 
| + | 
| + private: | 
| +  // Declares that mock expectations in this test suite are strictly ordered. | 
| +  testing::InSequence in_sequence_; | 
| +  // Holds cookies to be returned from PersistentCookieStore::Load. | 
| +  std::vector<CookieMonster::CanonicalCookie*> loaded_cookies_; | 
| +  // Stores the callback passed from the CookieMonster to the | 
| +  // PersistentCookieStore | 
| +  CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; | 
| +  // Stores the CookieMonster under test. | 
| +  scoped_refptr<CookieMonster> cookie_monster_; | 
| +  // Stores the mock PersistentCookieStore. | 
| +  scoped_refptr<NewMockPersistentCookieStore> persistent_store_; | 
| +}; | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredGetCookies) { | 
| +  DeclareLoadedCookie("www.google.izzle", | 
| +                      "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                      Time::Now() + TimeDelta::FromDays(3)); | 
| + | 
| +  MockGetCookiesCallback get_cookies_callback; | 
| + | 
| +  BeginWith(GetCookiesAction( | 
| +      &cookie_monster(), url_google_, &get_cookies_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( | 
| +      GetCookiesAction(&cookie_monster(), url_google_, &get_cookies_callback)); | 
| +  EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredGetCookiesWithInfo) { | 
| +  DeclareLoadedCookie("www.google.izzle", | 
| +                      "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                      Time::Now() + TimeDelta::FromDays(3)); | 
| + | 
| +  MockGetCookieInfoCallback get_cookie_info_callback; | 
| + | 
| +  BeginWith(GetCookiesWithInfoAction( | 
| +      &cookie_monster(), url_google_, &get_cookie_info_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(get_cookie_info_callback, Invoke("X=1", testing::_)).WillOnce( | 
| +      GetCookiesWithInfoAction( | 
| +          &cookie_monster(), url_google_, &get_cookie_info_callback)); | 
| +  EXPECT_CALL(get_cookie_info_callback, Invoke("X=1", testing::_)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredSetCookie) { | 
| +  MockSetCookiesCallback set_cookies_callback; | 
| + | 
| +  BeginWith(SetCookieAction( | 
| +      &cookie_monster(), url_google_, "A=B", &set_cookies_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( | 
| +      SetCookieAction( | 
| +          &cookie_monster(), url_google_, "X=Y", &set_cookies_callback)); | 
| +  EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) { | 
| +  MockClosure delete_cookie_callback; | 
| + | 
| +  BeginWith(DeleteCookieAction( | 
| +      &cookie_monster(), url_google_, "A", &delete_cookie_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(delete_cookie_callback, Invoke()).WillOnce( | 
| +      DeleteCookieAction( | 
| +          &cookie_monster(), url_google_, "X", &delete_cookie_callback)); | 
| +  EXPECT_CALL(delete_cookie_callback, Invoke()).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) { | 
| +  MockSetCookiesCallback set_cookies_callback; | 
| + | 
| +  BeginWith(SetCookieWithDetailsAction( | 
| +      &cookie_monster(), url_google_foo_, "A", "B", std::string(), "/foo", | 
| +      base::Time(), false, false, &set_cookies_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( | 
| +      SetCookieWithDetailsAction( | 
| +          &cookie_monster(), url_google_foo_, "A", "B", std::string(), "/foo", | 
| +          base::Time(), false, false, &set_cookies_callback)); | 
| +  EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredGetAllCookies) { | 
| +  DeclareLoadedCookie("www.google.izzle", | 
| +                      "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                      Time::Now() + TimeDelta::FromDays(3)); | 
| + | 
| +  MockGetCookieListCallback get_cookie_list_callback; | 
| + | 
| +  BeginWith(GetAllCookiesAction( | 
| +      &cookie_monster(), &get_cookie_list_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( | 
| +      GetAllCookiesAction(&cookie_monster(), &get_cookie_list_callback)); | 
| +  EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlCookies) { | 
| +  DeclareLoadedCookie("www.google.izzle", | 
| +                      "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                      Time::Now() + TimeDelta::FromDays(3)); | 
| + | 
| +  MockGetCookieListCallback get_cookie_list_callback; | 
| + | 
| +  BeginWith(GetAllCookiesForUrlAction( | 
| +      &cookie_monster(), url_google_, &get_cookie_list_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( | 
| +      GetAllCookiesForUrlAction( | 
| +          &cookie_monster(), url_google_, &get_cookie_list_callback)); | 
| +  EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlWithOptionsCookies) { | 
| +  DeclareLoadedCookie("www.google.izzle", | 
| +                      "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                      Time::Now() + TimeDelta::FromDays(3)); | 
| + | 
| +  MockGetCookieListCallback get_cookie_list_callback; | 
| + | 
| +  BeginWith(GetAllCookiesForUrlWithOptionsAction( | 
| +      &cookie_monster(), url_google_, &get_cookie_list_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( | 
| +      GetAllCookiesForUrlWithOptionsAction( | 
| +          &cookie_monster(), url_google_, &get_cookie_list_callback)); | 
| +  EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCookies) { | 
| +  MockDeleteCallback delete_callback; | 
| + | 
| +  BeginWith(DeleteAllAction( | 
| +      &cookie_monster(), &delete_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( | 
| +      DeleteAllAction(&cookie_monster(), &delete_callback)); | 
| +  EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCreatedBetweenCookies) { | 
| +  MockDeleteCallback delete_callback; | 
| + | 
| +  BeginWith(DeleteAllCreatedBetweenAction( | 
| +      &cookie_monster(), base::Time(), base::Time::Now(), &delete_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( | 
| +      DeleteAllCreatedBetweenAction( | 
| +          &cookie_monster(), base::Time(), base::Time::Now(), | 
| +          &delete_callback)); | 
| +  EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCookies) { | 
| +  MockDeleteCallback delete_callback; | 
| + | 
| +  BeginWith(DeleteAllForHostAction( | 
| +      &cookie_monster(), url_google_, &delete_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( | 
| +      DeleteAllForHostAction( | 
| +          &cookie_monster(), url_google_, &delete_callback)); | 
| +  EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) { | 
| +  std::vector<CookieMonster::CanonicalCookie*> cookies; | 
| +  CookieMonster::CanonicalCookie cookie = BuildCanonicalCookie( | 
| +      "www.google.com", "X=1; path=/", base::Time::Now()); | 
| + | 
| +  MockDeleteCookieCallback delete_cookie_callback; | 
| + | 
| +  BeginWith(DeleteCanonicalCookieAction( | 
| +      &cookie_monster(), cookie, &delete_cookie_callback)); | 
| + | 
| +  WaitForLoadCall(); | 
| + | 
| +  EXPECT_CALL(delete_cookie_callback, Invoke(false)).WillOnce( | 
| +      DeleteCanonicalCookieAction( | 
| +      &cookie_monster(), cookie, &delete_cookie_callback)); | 
| +  EXPECT_CALL(delete_cookie_callback, Invoke(false)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| +// Verify that a series of queued tasks are executed in order upon loading of | 
| +// the backing store and that new tasks received while the queued tasks are | 
| +// being dispatched go to the end of the queue. | 
| +TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) { | 
| +  DeclareLoadedCookie("www.google.izzle", | 
| +                      "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                      Time::Now() + TimeDelta::FromDays(3)); | 
| + | 
| +  MockGetCookiesCallback get_cookies_callback; | 
| +  MockSetCookiesCallback set_cookies_callback; | 
| +  MockClosure delete_cookie_callback; | 
| +  MockGetCookieInfoCallback get_cookie_info_callback; | 
| + | 
| +  EXPECT_CALL(*this, Begin()).WillOnce(testing::DoAll( | 
| +      GetCookiesAction( | 
| +          &cookie_monster(), url_google_, &get_cookies_callback), | 
| +      SetCookieAction( | 
| +          &cookie_monster(), url_google_, "A=B", &set_cookies_callback), | 
| +      DeleteCookieAction( | 
| +          &cookie_monster(), url_google_, "A", &delete_cookie_callback))); | 
| +  ExpectLoadCall(); | 
| +  Begin(); | 
| + | 
| +  WaitForLoadCall(); | 
| +  EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( | 
| +      GetCookiesWithInfoAction( | 
| +          &cookie_monster(), url_google_, &get_cookie_info_callback)); | 
| + | 
| +  EXPECT_CALL(set_cookies_callback, Invoke(true)); | 
| +  EXPECT_CALL(delete_cookie_callback, Invoke()); | 
| +  EXPECT_CALL(get_cookie_info_callback, Invoke("X=1", testing::_)).WillOnce( | 
| +      QuitCurrentMessageLoop()); | 
| + | 
| +  CompleteLoadingAndWait(); | 
| +} | 
| + | 
| TEST_F(CookieMonsterTest, DomainTest) { | 
| scoped_refptr<MockPersistentCookieStore> store( | 
| new MockPersistentCookieStore); | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "C=D; domain=.google.izzle")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "C=D; domain=.google.izzle")); | 
| EXPECT_EQ("A=B; C=D", GetCookies(cm, url_google_)); | 
|  | 
| // Verify that A=B was set as a host cookie rather than a domain | 
| @@ -865,18 +1363,18 @@ | 
| EXPECT_EQ("C=D", GetCookies(cm, GURL("http://foo.www.google.izzle"))); | 
|  | 
| // Test and make sure we find domain cookies on the same domain. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "E=F; domain=.www.google.izzle")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "E=F; domain=.www.google.izzle")); | 
| EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm, url_google_)); | 
|  | 
| // Test setting a domain= that doesn't start w/ a dot, should | 
| // treat it as a domain cookie, as if there was a pre-pended dot. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "G=H; domain=www.google.izzle")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "G=H; domain=www.google.izzle")); | 
| EXPECT_EQ("A=B; C=D; E=F; G=H", GetCookies(cm, url_google_)); | 
|  | 
| // Test domain enforcement, should fail on a sub-domain or something too deep. | 
| -  EXPECT_FALSE(cm->SetCookie(url_google_, "I=J; domain=.izzle")); | 
| +  EXPECT_FALSE(SetCookie(cm, url_google_, "I=J; domain=.izzle")); | 
| EXPECT_EQ("", GetCookies(cm, GURL("http://a.izzle"))); | 
| -  EXPECT_FALSE(cm->SetCookie(url_google_, "K=L; domain=.bla.www.google.izzle")); | 
| +  EXPECT_FALSE(SetCookie(cm, url_google_, "K=L; domain=.bla.www.google.izzle")); | 
| EXPECT_EQ("C=D; E=F; G=H", | 
| GetCookies(cm, GURL("http://bla.www.google.izzle"))); | 
| EXPECT_EQ("A=B; C=D; E=F; G=H", GetCookies(cm, url_google_)); | 
| @@ -891,8 +1389,8 @@ | 
| scoped_refptr<MockPersistentCookieStore> store( | 
| new MockPersistentCookieStore); | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 
| -  EXPECT_FALSE(cm->SetCookie(url_google_, "a=1; domain=.www.google.com.")); | 
| -  EXPECT_FALSE(cm->SetCookie(url_google_, "b=2; domain=.www.google.com..")); | 
| +  EXPECT_FALSE(SetCookie(cm, url_google_, "a=1; domain=.www.google.com.")); | 
| +  EXPECT_FALSE(SetCookie(cm, url_google_, "b=2; domain=.www.google.com..")); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
|  | 
| // Nothing was persisted to the backing store. | 
| @@ -910,10 +1408,10 @@ | 
| GURL url_cd("http://c.d.com"); | 
| GURL url_d("http://d.com"); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_abcd, "a=1; domain=.a.b.c.d.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_abcd, "b=2; domain=.b.c.d.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_abcd, "c=3; domain=.c.d.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_abcd, "d=4; domain=.d.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_abcd, "a=1; domain=.a.b.c.d.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_abcd, "b=2; domain=.b.c.d.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_abcd, "c=3; domain=.c.d.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_abcd, "d=4; domain=.d.com")); | 
|  | 
| EXPECT_EQ("a=1; b=2; c=3; d=4", GetCookies(cm, url_abcd)); | 
| EXPECT_EQ("b=2; c=3; d=4", GetCookies(cm, url_bcd)); | 
| @@ -921,8 +1419,8 @@ | 
| EXPECT_EQ("d=4", GetCookies(cm, url_d)); | 
|  | 
| // Check that the same cookie can exist on different sub-domains. | 
| -  EXPECT_TRUE(cm->SetCookie(url_bcd, "X=bcd; domain=.b.c.d.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_bcd, "X=cd; domain=.c.d.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_bcd, "X=bcd; domain=.b.c.d.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_bcd, "X=cd; domain=.c.d.com")); | 
| EXPECT_EQ("b=2; c=3; d=4; X=bcd; X=cd", GetCookies(cm, url_bcd)); | 
| EXPECT_EQ("c=3; d=4; X=cd", GetCookies(cm, url_cd)); | 
|  | 
| @@ -943,31 +1441,31 @@ | 
| GURL url_foobar("http://foo.bar.com"); | 
|  | 
| // More specific sub-domain than allowed. | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "a=1; domain=.yo.foo.bar.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "a=1; domain=.yo.foo.bar.com")); | 
|  | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "b=2; domain=.foo.com")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "c=3; domain=.bar.foo.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "b=2; domain=.foo.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "c=3; domain=.bar.foo.com")); | 
|  | 
| // Different TLD, but the rest is a substring. | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "d=4; domain=.foo.bar.com.net")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "d=4; domain=.foo.bar.com.net")); | 
|  | 
| // A substring that isn't really a parent domain. | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "e=5; domain=ar.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "e=5; domain=ar.com")); | 
|  | 
| // Completely invalid domains: | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "f=6; domain=.")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "g=7; domain=/")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "h=8; domain=http://foo.bar.com")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "i=9; domain=..foo.bar.com")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "j=10; domain=..bar.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "f=6; domain=.")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "g=7; domain=/")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "h=8; domain=http://foo.bar.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "i=9; domain=..foo.bar.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "j=10; domain=..bar.com")); | 
|  | 
| // Make sure there isn't something quirky in the domain canonicalization | 
| // that supports full URL semantics. | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "k=11; domain=.foo.bar.com?blah")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "l=12; domain=.foo.bar.com/blah")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "m=13; domain=.foo.bar.com:80")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "n=14; domain=.foo.bar.com:")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foobar, "o=15; domain=.foo.bar.com#sup")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "k=11; domain=.foo.bar.com?blah")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "l=12; domain=.foo.bar.com/blah")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "m=13; domain=.foo.bar.com:80")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "n=14; domain=.foo.bar.com:")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foobar, "o=15; domain=.foo.bar.com#sup")); | 
|  | 
| EXPECT_EQ("", GetCookies(cm, url_foobar)); | 
|  | 
| @@ -981,7 +1479,7 @@ | 
| // hosts below have the same domain + registry. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url_foocom("http://foo.com.com"); | 
| -    EXPECT_FALSE(cm->SetCookie(url_foocom, "a=1; domain=.foo.com.com.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_foocom, "a=1; domain=.foo.com.com.com")); | 
| EXPECT_EQ("", GetCookies(cm, url_foocom)); | 
| } | 
| } | 
| @@ -994,7 +1492,7 @@ | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url_hosted("http://manage.hosted.filefront.com"); | 
| GURL url_filefront("http://www.filefront.com"); | 
| -    EXPECT_TRUE(cm->SetCookie(url_hosted, "sawAd=1; domain=filefront.com")); | 
| +    EXPECT_TRUE(SetCookie(cm, url_hosted, "sawAd=1; domain=filefront.com")); | 
| EXPECT_EQ("sawAd=1", GetCookies(cm, url_hosted)); | 
| EXPECT_EQ("sawAd=1", GetCookies(cm, url_filefront)); | 
| } | 
| @@ -1002,7 +1500,7 @@ | 
| {  // Even when the domains match exactly, don't consider it host cookie. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://www.google.com"); | 
| -    EXPECT_TRUE(cm->SetCookie(url, "a=1; domain=www.google.com")); | 
| +    EXPECT_TRUE(SetCookie(cm, url, "a=1; domain=www.google.com")); | 
| EXPECT_EQ("a=1", GetCookies(cm, url)); | 
| EXPECT_EQ("a=1", GetCookies(cm, GURL("http://sub.www.google.com"))); | 
| EXPECT_EQ("", GetCookies(cm, GURL("http://something-else.com"))); | 
| @@ -1014,8 +1512,8 @@ | 
| TEST_F(CookieMonsterTest, CaseInsensitiveDomainTest) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://www.google.com"); | 
| -  EXPECT_TRUE(cm->SetCookie(url, "a=1; domain=.GOOGLE.COM")); | 
| -  EXPECT_TRUE(cm->SetCookie(url, "b=2; domain=.wWw.gOOgLE.coM")); | 
| +  EXPECT_TRUE(SetCookie(cm, url, "a=1; domain=.GOOGLE.COM")); | 
| +  EXPECT_TRUE(SetCookie(cm, url, "b=2; domain=.wWw.gOOgLE.coM")); | 
| EXPECT_EQ("a=1; b=2", GetCookies(cm, url)); | 
| } | 
|  | 
| @@ -1023,20 +1521,20 @@ | 
| GURL url_ip("http://1.2.3.4/weee"); | 
| { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -    EXPECT_TRUE(cm->SetCookie(url_ip, kValidCookieLine)); | 
| +    EXPECT_TRUE(SetCookie(cm, url_ip, kValidCookieLine)); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_ip)); | 
| } | 
|  | 
| {  // IP addresses should not be able to set domain cookies. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -    EXPECT_FALSE(cm->SetCookie(url_ip, "b=2; domain=.1.2.3.4")); | 
| -    EXPECT_FALSE(cm->SetCookie(url_ip, "c=3; domain=.3.4")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_ip, "b=2; domain=.1.2.3.4")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_ip, "c=3; domain=.3.4")); | 
| EXPECT_EQ("", GetCookies(cm, url_ip)); | 
| // It should be allowed to set a cookie if domain= matches the IP address | 
| // exactly.  This matches IE/Firefox, even though it seems a bit wrong. | 
| -    EXPECT_FALSE(cm->SetCookie(url_ip, "b=2; domain=1.2.3.3")); | 
| +    EXPECT_FALSE(SetCookie(cm, url_ip, "b=2; domain=1.2.3.3")); | 
| EXPECT_EQ("", GetCookies(cm, url_ip)); | 
| -    EXPECT_TRUE(cm->SetCookie(url_ip, "b=2; domain=1.2.3.4")); | 
| +    EXPECT_TRUE(SetCookie(cm, url_ip, "b=2; domain=1.2.3.4")); | 
| EXPECT_EQ("b=2", GetCookies(cm, url_ip)); | 
| } | 
| } | 
| @@ -1047,9 +1545,9 @@ | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://com/"); | 
| // Allow setting on "com", (but only as a host cookie). | 
| -    EXPECT_TRUE(cm->SetCookie(url, "a=1")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "b=2; domain=.com")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "c=3; domain=com")); | 
| +    EXPECT_TRUE(SetCookie(cm, url, "a=1")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "b=2; domain=.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "c=3; domain=com")); | 
| EXPECT_EQ("a=1", GetCookies(cm, url)); | 
| // Make sure it doesn't show up for a normal .com, it should be a host | 
| // not a domain cookie. | 
| @@ -1060,7 +1558,7 @@ | 
| {  // http://com. should be treated the same as http://com. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://com./index.html"); | 
| -    EXPECT_TRUE(cm->SetCookie(url, "a=1")); | 
| +    EXPECT_TRUE(SetCookie(cm, url, "a=1")); | 
| EXPECT_EQ("a=1", GetCookies(cm, url)); | 
| EXPECT_EQ("", GetCookies(cm, GURL("http://hopefully-no-cookies.com./"))); | 
| } | 
| @@ -1068,24 +1566,24 @@ | 
| {  // Should not be able to set host cookie from a subdomain. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://a.b"); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "a=1; domain=.b")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "b=2; domain=b")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "a=1; domain=.b")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "b=2; domain=b")); | 
| EXPECT_EQ("", GetCookies(cm, url)); | 
| } | 
|  | 
| {  // Same test as above, but explicitly on a known TLD (com). | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://google.com"); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "a=1; domain=.com")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "b=2; domain=com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "a=1; domain=.com")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "b=2; domain=com")); | 
| EXPECT_EQ("", GetCookies(cm, url)); | 
| } | 
|  | 
| {  // Make sure can't set cookie on TLD which is dotted. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://google.co.uk"); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "a=1; domain=.co.uk")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "b=2; domain=.uk")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "a=1; domain=.co.uk")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "b=2; domain=.uk")); | 
| EXPECT_EQ("", GetCookies(cm, url)); | 
| EXPECT_EQ("", GetCookies(cm, GURL("http://something-else.co.uk"))); | 
| EXPECT_EQ("", GetCookies(cm, GURL("http://something-else.uk"))); | 
| @@ -1094,9 +1592,9 @@ | 
| {  // Intranet URLs should only be able to set host cookies. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://b"); | 
| -    EXPECT_TRUE(cm->SetCookie(url, "a=1")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "b=2; domain=.b")); | 
| -    EXPECT_FALSE(cm->SetCookie(url, "c=3; domain=b")); | 
| +    EXPECT_TRUE(SetCookie(cm, url, "a=1")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "b=2; domain=.b")); | 
| +    EXPECT_FALSE(SetCookie(cm, url, "c=3; domain=b")); | 
| EXPECT_EQ("a=1", GetCookies(cm, url)); | 
| } | 
| } | 
| @@ -1107,15 +1605,15 @@ | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| GURL url("http://www.google.com"); | 
| GURL url_with_dot("http://www.google.com."); | 
| -  EXPECT_TRUE(cm->SetCookie(url, "a=1")); | 
| +  EXPECT_TRUE(SetCookie(cm, url, "a=1")); | 
| EXPECT_EQ("a=1", GetCookies(cm, url)); | 
|  | 
| // Do not share cookie space with the dot version of domain. | 
| // Note: this is not what FireFox does, but it _is_ what IE+Safari do. | 
| -  EXPECT_FALSE(cm->SetCookie(url, "b=2; domain=.www.google.com.")); | 
| +  EXPECT_FALSE(SetCookie(cm, url, "b=2; domain=.www.google.com.")); | 
| EXPECT_EQ("a=1", GetCookies(cm, url)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_with_dot, "b=2; domain=.google.com.")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_with_dot, "b=2; domain=.google.com.")); | 
| EXPECT_EQ("b=2", GetCookies(cm, url_with_dot)); | 
|  | 
| // Make sure there weren't any side effects. | 
| @@ -1125,19 +1623,19 @@ | 
|  | 
| TEST_F(CookieMonsterTest, InvalidScheme) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_FALSE(cm->SetCookie(GURL(kUrlFtp), kValidCookieLine)); | 
| +  EXPECT_FALSE(SetCookie(cm, GURL(kUrlFtp), kValidCookieLine)); | 
| } | 
|  | 
| TEST_F(CookieMonsterTest, InvalidScheme_Read) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL(kUrlGoogle), kValidDomainCookieLine)); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL(kUrlGoogle), kValidDomainCookieLine)); | 
| EXPECT_EQ("", GetCookies(cm, GURL(kUrlFtp))); | 
| } | 
|  | 
| TEST_F(CookieMonsterTest, PathTest) { | 
| std::string url("http://www.google.izzle"); | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL(url), "A=B; path=/wee")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL(url), "A=B; path=/wee")); | 
| EXPECT_EQ("A=B", GetCookies(cm, GURL(url + "/wee"))); | 
| EXPECT_EQ("A=B", GetCookies(cm, GURL(url + "/wee/"))); | 
| EXPECT_EQ("A=B", GetCookies(cm, GURL(url + "/wee/war"))); | 
| @@ -1146,7 +1644,7 @@ | 
| EXPECT_EQ("", GetCookies(cm, GURL(url + "/"))); | 
|  | 
| // If we add a 0 length path, it should default to / | 
| -  EXPECT_TRUE(cm->SetCookie(GURL(url), "A=C; path=")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL(url), "A=C; path=")); | 
| EXPECT_EQ("A=B; A=C", GetCookies(cm, GURL(url + "/wee"))); | 
| EXPECT_EQ("A=C", GetCookies(cm, GURL(url + "/"))); | 
| } | 
| @@ -1164,14 +1662,14 @@ | 
| EXPECT_EQ("A=B", GetCookiesWithOptions(cm, url_google_, options)); | 
|  | 
| // Check httponly overwrite protection. | 
| -  EXPECT_FALSE(cm->SetCookie(url_google_, "A=C")); | 
| +  EXPECT_FALSE(SetCookie(cm, url_google_, "A=C")); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
| EXPECT_EQ("A=B", GetCookiesWithOptions(cm, url_google_, options)); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=C", options)); | 
| EXPECT_EQ("A=C", GetCookies(cm, url_google_)); | 
|  | 
| // Check httponly create protection. | 
| -  EXPECT_FALSE(cm->SetCookie(url_google_, "B=A; httponly")); | 
| +  EXPECT_FALSE(SetCookie(cm, url_google_, "B=A; httponly")); | 
| EXPECT_EQ("A=C", GetCookiesWithOptions(cm, url_google_, options)); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "B=A; httponly", options)); | 
| EXPECT_EQ("A=C; B=A", GetCookiesWithOptions(cm, url_google_, options)); | 
| @@ -1324,24 +1822,24 @@ | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); | 
|  | 
| // Create a session cookie. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, kValidCookieLine)); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, kValidCookieLine)); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| // Delete it via Max-Age. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| std::string(kValidCookieLine) + "; max-age=0")); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
|  | 
| // Create a session cookie. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, kValidCookieLine)); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, kValidCookieLine)); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| // Delete it via Expires. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| std::string(kValidCookieLine) + | 
| "; expires=Mon, 18-Apr-1977 22:50:13 GMT")); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
|  | 
| // Create a persistent cookie. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| std::string(kValidCookieLine) + | 
| "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| ASSERT_EQ(1u, store->commands().size()); | 
| @@ -1349,38 +1847,38 @@ | 
|  | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| // Delete it via Max-Age. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| std::string(kValidCookieLine) + "; max-age=0")); | 
| ASSERT_EQ(2u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
|  | 
| // Create a persistent cookie. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| -                           std::string(kValidCookieLine) + | 
| -                           "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| +                        std::string(kValidCookieLine) + | 
| +                        "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| ASSERT_EQ(3u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| // Delete it via Expires. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| -                           std::string(kValidCookieLine) + | 
| -                           "; expires=Mon, 18-Apr-1977 22:50:13 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| +                        std::string(kValidCookieLine) + | 
| +                        "; expires=Mon, 18-Apr-1977 22:50:13 GMT")); | 
| ASSERT_EQ(4u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
|  | 
| // Create a persistent cookie. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| -                           std::string(kValidCookieLine) + | 
| -                           "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| +                        std::string(kValidCookieLine) + | 
| +                        "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| ASSERT_EQ(5u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[4].type); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| // Delete it via Expires, with a unix epoch of 0. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| -                           std::string(kValidCookieLine) + | 
| -                           "; expires=Thu, 1-Jan-1970 00:00:00 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| +                        std::string(kValidCookieLine) + | 
| +                        "; expires=Thu, 1-Jan-1970 00:00:00 GMT")); | 
| ASSERT_EQ(6u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[5].type); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
| @@ -1393,25 +1891,25 @@ | 
| CookieOptions options; | 
| options.set_include_httponly(); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, kValidCookieLine)); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, kValidCookieLine)); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
|  | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "C=D; httponly", options)); | 
| EXPECT_EQ("A=B; C=D", GetCookiesWithOptions(cm, url_google_, options)); | 
|  | 
| -  EXPECT_EQ(2, cm->DeleteAll(false)); | 
| +  EXPECT_EQ(2, DeleteAll(cm)); | 
| EXPECT_EQ("", GetCookiesWithOptions(cm, url_google_, options)); | 
|  | 
| EXPECT_EQ(0u, store->commands().size()); | 
|  | 
| // Create a persistent cookie. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, | 
| -                            std::string(kValidCookieLine) + | 
| -                            "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, | 
| +                        std::string(kValidCookieLine) + | 
| +                        "; expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| ASSERT_EQ(1u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 
|  | 
| -  EXPECT_EQ(1, cm->DeleteAll(true));  // sync_to_store = true. | 
| +  EXPECT_EQ(1, DeleteAll(cm));  // sync_to_store = true. | 
| ASSERT_EQ(2u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 
|  | 
| @@ -1424,59 +1922,56 @@ | 
|  | 
| // Nothing has been added so nothing should be deleted. | 
| EXPECT_EQ(0, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(99), | 
| -                                       Time(), false)); | 
| +                                       Time())); | 
|  | 
| // Create 3 cookies with creation date of today, yesterday and the day before. | 
| EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-0=Now", now)); | 
| EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-1=Yesterday", | 
| -                                           now - TimeDelta::FromDays(1))); | 
| +                                            now - TimeDelta::FromDays(1))); | 
| EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-2=DayBefore", | 
| -                                           now - TimeDelta::FromDays(2))); | 
| +                                            now - TimeDelta::FromDays(2))); | 
| EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-3=ThreeDays", | 
| -                                           now - TimeDelta::FromDays(3))); | 
| +                                            now - TimeDelta::FromDays(3))); | 
| EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-7=LastWeek", | 
| -                                           now - TimeDelta::FromDays(7))); | 
| +                                            now - TimeDelta::FromDays(7))); | 
|  | 
| // Try to delete threedays and the daybefore. | 
| EXPECT_EQ(2, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(3), | 
| -                                          now - TimeDelta::FromDays(1), | 
| -                                          false)); | 
| +                                       now - TimeDelta::FromDays(1))); | 
|  | 
| // Try to delete yesterday, also make sure that delete_end is not | 
| // inclusive. | 
| EXPECT_EQ(1, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(2), | 
| -                                          now, | 
| -                                          false)); | 
| +                                       now)); | 
|  | 
| // Make sure the delete_begin is inclusive. | 
| EXPECT_EQ(1, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(7), | 
| -                                          now, | 
| -                                          false)); | 
| +                                       now)); | 
|  | 
| // Delete the last (now) item. | 
| -  EXPECT_EQ(1, DeleteAllCreatedBetween(cm, Time(), Time(), false)); | 
| +  EXPECT_EQ(1, DeleteAllCreatedBetween(cm, Time(), Time())); | 
|  | 
| // Really make sure everything is gone. | 
| -  EXPECT_EQ(0, cm->DeleteAll(false)); | 
| +  EXPECT_EQ(0, DeleteAll(cm)); | 
| } | 
|  | 
| TEST_F(CookieMonsterTest, TestSecure) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_secure_)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_secure_, "A=B; secure")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_secure_, "A=B; secure")); | 
| // The secure should overwrite the non-secure. | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_secure_)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_secure_, "D=E; secure")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_secure_, "D=E; secure")); | 
| EXPECT_EQ("", GetCookies(cm, url_google_)); | 
| EXPECT_EQ("A=B; D=E", GetCookies(cm, url_google_secure_)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_secure_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_secure_, "A=B")); | 
| // The non-secure should overwrite the secure. | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| EXPECT_EQ("D=E; A=B", GetCookies(cm, url_google_secure_)); | 
| @@ -1488,7 +1983,7 @@ | 
| scoped_refptr<CookieMonster> cm( | 
| new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| const Time last_access_date(GetFirstCookieAccessDate(cm)); | 
|  | 
| // Reading the cookie again immediately shouldn't update the access date, | 
| @@ -1517,13 +2012,13 @@ | 
|  | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(test_url, "foo=bar")); | 
| +  EXPECT_TRUE(SetCookie(cm, test_url, "foo=bar")); | 
| std::string value = GetCookies(cm, test_url); | 
| EXPECT_EQ("foo=bar", value); | 
|  | 
| // test that we can retrieve all cookies: | 
| -  EXPECT_TRUE(cm->SetCookie(test_url, "x=1")); | 
| -  EXPECT_TRUE(cm->SetCookie(test_url, "y=2")); | 
| +  EXPECT_TRUE(SetCookie(cm, test_url, "x=1")); | 
| +  EXPECT_TRUE(SetCookie(cm, test_url, "y=2")); | 
|  | 
| std::string result = GetCookies(cm, test_url); | 
| EXPECT_FALSE(result.empty()); | 
| @@ -1534,9 +2029,9 @@ | 
| TEST_F(CookieMonsterTest, TestDeleteSingleCookie) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "C=D")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "E=F")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "C=D")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "E=F")); | 
| EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm, url_google_)); | 
|  | 
| EXPECT_TRUE(FindAndDeleteCookie(cm, url_google_.host(), "C")); | 
| @@ -1557,10 +2052,10 @@ | 
| GURL foo_url("foo://host/path"); | 
| GURL http_url("http://host/path"); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(http_url, "x=1")); | 
| -  EXPECT_FALSE(cm->SetCookie(foo_url, "x=1")); | 
| -  EXPECT_TRUE(cm_foo->SetCookie(foo_url, "x=1")); | 
| -  EXPECT_FALSE(cm_foo->SetCookie(http_url, "x=1")); | 
| +  EXPECT_TRUE(SetCookie(cm, http_url, "x=1")); | 
| +  EXPECT_FALSE(SetCookie(cm, foo_url, "x=1")); | 
| +  EXPECT_TRUE(SetCookie(cm_foo, foo_url, "x=1")); | 
| +  EXPECT_FALSE(SetCookie(cm_foo, http_url, "x=1")); | 
| } | 
|  | 
| TEST_F(CookieMonsterTest, GetAllCookiesForURL) { | 
| @@ -1573,11 +2068,11 @@ | 
|  | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B; httponly", options)); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, | 
| -                                       "C=D; domain=.google.izzle", | 
| -                                       options)); | 
| +                                   "C=D; domain=.google.izzle", | 
| +                                   options)); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_secure_, | 
| -                                       "E=F; domain=.google.izzle; secure", | 
| -                                       options)); | 
| +                                   "E=F; domain=.google.izzle; secure", | 
| +                                   options)); | 
|  | 
| const Time last_access_date(GetFirstCookieAccessDate(cm)); | 
|  | 
| @@ -1635,14 +2130,11 @@ | 
| CookieOptions options; | 
|  | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_foo_, | 
| -                                       "A=B; path=/foo;", | 
| -                                       options)); | 
| +                                   "A=B; path=/foo;", options)); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_bar_, | 
| -                                       "C=D; path=/bar;", | 
| -                                       options)); | 
| +                                   "C=D; path=/bar;", options)); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, | 
| -                                       "E=F;", | 
| -                                       options)); | 
| +                                   "E=F;", options)); | 
|  | 
| CookieList cookies = GetAllCookiesForURL(cm, url_google_foo_); | 
| CookieList::iterator it = cookies.begin(); | 
| @@ -1674,12 +2166,12 @@ | 
| TEST_F(CookieMonsterTest, DeleteCookieByName) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=A1; path=/")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=A2; path=/foo")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=A3; path=/bar")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "B=B1; path=/")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "B=B2; path=/foo")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "B=B3; path=/bar")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=A1; path=/")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=A2; path=/foo")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=A3; path=/bar")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "B=B1; path=/")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "B=B2; path=/foo")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "B=B3; path=/bar")); | 
|  | 
| DeleteCookie(cm, GURL(std::string(kUrlGoogle) + "/foo/bar"), "A"); | 
|  | 
| @@ -1742,15 +2234,15 @@ | 
|  | 
| // Insert a cookie "a" for path "/path1" | 
| EXPECT_TRUE( | 
| -      cm->SetCookie(url_google, "a=val1; path=/path1; " | 
| -                                "expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| +      SetCookie(cm, url_google, "a=val1; path=/path1; " | 
| +                "expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| ASSERT_EQ(1u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 
|  | 
| // Insert a cookie "b" for path "/path1" | 
| EXPECT_TRUE( | 
| -      cm->SetCookie(url_google, "b=val1; path=/path1; " | 
| -                                "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| +      SetCookie(cm, url_google, "b=val1; path=/path1; " | 
| +                "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| ASSERT_EQ(2u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[1].type); | 
|  | 
| @@ -1760,35 +2252,35 @@ | 
| allow_httponly.set_include_httponly(); | 
| EXPECT_TRUE( | 
| SetCookieWithOptions(cm, url_google, | 
| -                             "b=val2; path=/path1; httponly; " | 
| -                             "expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| -                             allow_httponly)); | 
| +                         "b=val2; path=/path1; httponly; " | 
| +                         "expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                         allow_httponly)); | 
| ASSERT_EQ(4u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[2].type); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[3].type); | 
|  | 
| // Insert a cookie "a" for path "/path1". This should overwrite. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google, | 
| -                            "a=val33; path=/path1; " | 
| -                            "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google, | 
| +                        "a=val33; path=/path1; " | 
| +                        "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| ASSERT_EQ(6u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[4].type); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[5].type); | 
|  | 
| // Insert a cookie "a" for path "/path2". This should NOT overwrite | 
| // cookie "a", since the path is different. | 
| -  EXPECT_TRUE(cm->SetCookie(url_google, | 
| -                            "a=val9; path=/path2; " | 
| -                            "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google, | 
| +                        "a=val9; path=/path2; " | 
| +                        "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| ASSERT_EQ(7u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[6].type); | 
|  | 
| // Insert a cookie "a" for path "/path1", but this time for "chromium.org". | 
| // Although the name and path match, the hostnames do not, so shouldn't | 
| // overwrite. | 
| -  EXPECT_TRUE(cm->SetCookie(url_chromium, | 
| -                            "a=val99; path=/path1; " | 
| -                            "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_chromium, | 
| +                        "a=val99; path=/path1; " | 
| +                        "expires=Mon, 18-Apr-22 22:50:14 GMT")); | 
| ASSERT_EQ(8u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[7].type); | 
|  | 
| @@ -1929,9 +2421,9 @@ | 
| new MockCookieMonsterDelegate); | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(store, delegate)); | 
|  | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "C=D")); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "E=F")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "C=D")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "E=F")); | 
| EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm, url_google_)); | 
| ASSERT_EQ(3u, delegate->changes().size()); | 
| EXPECT_FALSE(delegate->changes()[0].second); | 
| @@ -1963,7 +2455,7 @@ | 
|  | 
| // Insert a cookie "a" for path "/path1" | 
| EXPECT_TRUE( | 
| -      cm->SetCookie(url_google_, "a=val1; path=/path1; " | 
| +      SetCookie(cm, url_google_, "a=val1; path=/path1; " | 
| "expires=Mon, 18-Apr-22 22:50:13 GMT")); | 
| ASSERT_EQ(1u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); | 
| @@ -1980,9 +2472,9 @@ | 
| allow_httponly.set_include_httponly(); | 
| EXPECT_TRUE( | 
| SetCookieWithOptions(cm, url_google_, | 
| -                             "a=val2; path=/path1; httponly; " | 
| -                             "expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| -                             allow_httponly)); | 
| +                         "a=val2; path=/path1; httponly; " | 
| +                         "expires=Mon, 18-Apr-22 22:50:14 GMT", | 
| +                         allow_httponly)); | 
| ASSERT_EQ(3u, store->commands().size()); | 
| EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); | 
| EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); | 
| @@ -2143,40 +2635,22 @@ | 
| // are not included as they aren't going to be public for very much | 
| // longer. | 
|  | 
| -  // SetCookie, SetCookies, SetCookiesWithOptions, | 
| -  // SetCookieWithOptions, SetCookieWithDetails | 
| +  // SetCookie, SetCookieWithOptions, SetCookieWithDetails | 
|  | 
| -  cm->SetCookie(url_google_, "SetCookie1=A"); | 
| -  cm->SetCookie(url_google_, "SetCookie2=A"); | 
| -  cm->SetCookie(url_google_, "SetCookie3=A"); | 
| +  SetCookie(cm, url_google_, "SetCookie1=A"); | 
| +  SetCookie(cm, url_google_, "SetCookie2=A"); | 
| +  SetCookie(cm, url_google_, "SetCookie3=A"); | 
|  | 
| -  { | 
| -    std::vector<std::string> cookie_lines; | 
| -    cookie_lines.push_back("setCookies1=A"); | 
| -    cookie_lines.push_back("setCookies2=A"); | 
| -    cookie_lines.push_back("setCookies4=A"); | 
| -    cm->SetCookies(url_google_, cookie_lines); | 
| -  } | 
| - | 
| -  { | 
| -    std::vector<std::string> cookie_lines; | 
| -    cookie_lines.push_back("setCookiesWithOptions1=A"); | 
| -    cookie_lines.push_back("setCookiesWithOptions2=A"); | 
| -    cookie_lines.push_back("setCookiesWithOptions3=A"); | 
| - | 
| -    cm->SetCookiesWithOptions(url_google_, cookie_lines, options); | 
| -  } | 
| - | 
| SetCookieWithOptions(cm, url_google_, "setCookieWithOptions1=A", options); | 
| SetCookieWithOptions(cm, url_google_, "setCookieWithOptions2=A", options); | 
| SetCookieWithOptions(cm, url_google_, "setCookieWithOptions3=A", options); | 
|  | 
| SetCookieWithDetails(cm, url_google_, "setCookieWithDetails1", "A", | 
| -                           ".google.com", "/", Time(), false, false); | 
| +                       ".google.com", "/", Time(), false, false); | 
| SetCookieWithDetails(cm, url_google_, "setCookieWithDetails2", "A", | 
| -                           ".google.com", "/", Time(), false, false); | 
| +                       ".google.com", "/", Time(), false, false); | 
| SetCookieWithDetails(cm, url_google_, "setCookieWithDetails3", "A", | 
| -                           ".google.com", "/", Time(), false, false); | 
| +                       ".google.com", "/", Time(), false, false); | 
|  | 
| // Now we check | 
| CookieList cookie_list(GetAllCookies(cm)); | 
| @@ -2263,9 +2737,9 @@ | 
| scoped_refptr<CookieMonster> cmout(new CookieMonster(store, NULL)); | 
| for (const CookiesInputInfo* p = input_info; | 
| p < &input_info[ARRAYSIZE_UNSAFE(input_info)]; p++) { | 
| -      EXPECT_TRUE(cmout->SetCookieWithDetails(GURL(p->gurl), p->name, p->value, | 
| -                                              p->domain, p->path, p->expires, | 
| -                                              p->secure, p->http_only)); | 
| +      EXPECT_TRUE(SetCookieWithDetails(cmout, GURL(p->gurl), p->name, p->value, | 
| +                                       p->domain, p->path, p->expires, | 
| +                                       p->secure, p->http_only)); | 
| } | 
| DeleteCookie(cmout, GURL(std::string(input_info[INPUT_DELETE].gurl) + | 
| input_info[INPUT_DELETE].path), | 
| @@ -2304,26 +2778,26 @@ | 
| // Put a random set of cookies into a monster and make sure | 
| // they're returned in the right order. | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL("http://d.c.b.a.google.com/aa/x.html"), | 
| -                            "c=1")); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL("http://b.a.google.com/aa/bb/cc/x.html"), | 
| -                            "d=1; domain=b.a.google.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL("http://b.a.google.com/aa/bb/cc/x.html"), | 
| -                            "a=4; domain=b.a.google.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), | 
| -                            "e=1; domain=c.b.a.google.com")); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL("http://d.c.b.a.google.com/aa/bb/x.html"), | 
| -                            "b=1")); | 
| -  EXPECT_TRUE(cm->SetCookie(GURL("http://news.bbc.co.uk/midpath/x.html"), | 
| -                            "g=10")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL("http://d.c.b.a.google.com/aa/x.html"), | 
| +                        "c=1")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL("http://b.a.google.com/aa/bb/cc/x.html"), | 
| +                        "d=1; domain=b.a.google.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL("http://b.a.google.com/aa/bb/cc/x.html"), | 
| +                        "a=4; domain=b.a.google.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), | 
| +                        "e=1; domain=c.b.a.google.com")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL("http://d.c.b.a.google.com/aa/bb/x.html"), | 
| +                        "b=1")); | 
| +  EXPECT_TRUE(SetCookie(cm, GURL("http://news.bbc.co.uk/midpath/x.html"), | 
| +                        "g=10")); | 
| EXPECT_EQ("d=1; a=4; e=1; b=1; c=1", | 
| -            GetCookiesWithOptions(cm, | 
| -                GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"), | 
| +            GetCookiesWithOptions( | 
| +                cm, GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"), | 
| CookieOptions())); | 
| { | 
| unsigned int i = 0; | 
| -    CookieList cookies(cm->GetAllCookiesForURL( | 
| -        GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"))); | 
| +    CookieList cookies(GetAllCookiesForURL( | 
| +        cm, GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"))); | 
| ASSERT_EQ(5u, cookies.size()); | 
| EXPECT_EQ("d", cookies[i++].Name()); | 
| EXPECT_EQ("a", cookies[i++].Name()); | 
| @@ -2345,16 +2819,6 @@ | 
| } | 
| } | 
|  | 
| - | 
| -// Function for creating a CM with a number of cookies in it, | 
| -// no store (and hence no ability to affect access time). | 
| -static CookieMonster* CreateMonsterForGC(int num_cookies) { | 
| -  CookieMonster* cm(new CookieMonster(NULL, NULL)); | 
| -  for (int i = 0; i < num_cookies; i++) | 
| -    cm->SetCookie(GURL(StringPrintf("http://h%05d.izzle", i)), "a=1"); | 
| -  return cm; | 
| -} | 
| - | 
| // This test and CookieMonstertest.TestGCTimes (in cookie_monster_perftest.cc) | 
| // are somewhat complementary twins.  This test is probing for whether | 
| // garbage collection always happens when it should (i.e. that we actually | 
| @@ -2368,7 +2832,7 @@ | 
| scoped_refptr<CookieMonster> cm( | 
| CreateMonsterForGC(CookieMonster::kMaxCookies * 2)); | 
| EXPECT_EQ(CookieMonster::kMaxCookies * 2, GetAllCookies(cm).size()); | 
| -    cm->SetCookie(GURL("http://newdomain.com"), "b=2"); | 
| +    SetCookie(cm, GURL("http://newdomain.com"), "b=2"); | 
| EXPECT_EQ(CookieMonster::kMaxCookies * 2 + 1, GetAllCookies(cm).size()); | 
| } | 
|  | 
| @@ -2433,7 +2897,7 @@ | 
| static_cast<int>(GetAllCookies(cm).size())) | 
| << "For test case " << ci; | 
| // Will trigger GC | 
| -      cm->SetCookie(GURL("http://newdomain.com"), "b=2"); | 
| +      SetCookie(cm, GURL("http://newdomain.com"), "b=2"); | 
| EXPECT_EQ(test_case->expected_cookies_after_set[recent_scheme], | 
| static_cast<int>((GetAllCookies(cm).size()))) | 
| << "For test case (" << ci << ", " << recent_scheme << ")"; | 
| @@ -2449,7 +2913,8 @@ | 
|  | 
| // Set a persistent cookie, but force it to be a session cookie. | 
| options.set_force_session(); | 
| -  ASSERT_TRUE(SetCookieWithOptions(cm, url_google_, | 
| +  ASSERT_TRUE(SetCookieWithOptions( | 
| +      cm, url_google_, | 
| std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT", | 
| options)); | 
|  | 
| @@ -2459,7 +2924,8 @@ | 
| ASSERT_FALSE(cookie_list[0].IsPersistent()); | 
|  | 
| // Use a past expiry date to delete the cookie, but force it to session only. | 
| -  ASSERT_TRUE(SetCookieWithOptions(cm, url_google_, | 
| +  ASSERT_TRUE(SetCookieWithOptions( | 
| +      cm, url_google_, | 
| std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", | 
| options)); | 
|  | 
| @@ -2475,7 +2941,8 @@ | 
| CookieOptions options; | 
|  | 
| // Set a persistent cookie. | 
| -  ASSERT_TRUE(SetCookieWithOptions(cm, url_google_, | 
| +  ASSERT_TRUE(SetCookieWithOptions( | 
| +      cm, url_google_, | 
| std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT", | 
| options)); | 
|  | 
| @@ -2484,7 +2951,8 @@ | 
| ASSERT_EQ(1U, cookie_list.size()); | 
|  | 
| // Use a past expiry date to delete the cookie. | 
| -  ASSERT_TRUE(SetCookieWithOptions(cm, url_google_, | 
| +  ASSERT_TRUE(SetCookieWithOptions( | 
| +      cm, url_google_, | 
| std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", | 
| options)); | 
|  | 
| @@ -2502,7 +2970,9 @@ | 
| public: | 
| FlushablePersistentStore() : flush_count_(0) {} | 
|  | 
| -  bool Load(std::vector<CookieMonster::CanonicalCookie*>*) { | 
| +  bool Load(const LoadedCallback& loaded_callback) { | 
| +    std::vector<CookieMonster::CanonicalCookie*> out_cookies; | 
| +    loaded_callback.Run(out_cookies); | 
| return false; | 
| } | 
|  | 
| @@ -2652,7 +3122,7 @@ | 
| histogram_set_2.TotalCount()); | 
|  | 
| // kValidCookieLine creates a session cookie. | 
| -  ASSERT_TRUE(cm->SetCookie(url_google_, kValidCookieLine)); | 
| +  ASSERT_TRUE(SetCookie(cm, url_google_, kValidCookieLine)); | 
| expired_histogram->SnapshotSample(&histogram_set_1); | 
| EXPECT_EQ(histogram_set_2.TotalCount(), | 
| histogram_set_1.TotalCount()); | 
| @@ -2670,8 +3140,8 @@ | 
| void GetCookiesTask(CookieMonster* cm, | 
| const GURL& url, | 
| GetCookieStringCallback* callback) { | 
| -    cm->GetCookiesAsync( | 
| -        url, | 
| +    cm->GetCookiesWithOptionsAsync( | 
| +        url, CookieOptions(), | 
| base::Bind(&GetCookieStringCallback::Run, base::Unretained(callback))); | 
| } | 
|  | 
| @@ -2755,10 +3225,9 @@ | 
| void DeleteAllCreatedBetweenTask(CookieMonster* cm, | 
| const base::Time& delete_begin, | 
| const base::Time& delete_end, | 
| -                                   bool sync_to_store, | 
| DeleteCallback* callback) { | 
| cm->DeleteAllCreatedBetweenAsync( | 
| -        delete_begin, delete_end, sync_to_store, | 
| +        delete_begin, delete_end, | 
| base::Bind(&DeleteCallback::Run, | 
| base::Unretained(callback))); | 
| } | 
| @@ -2798,7 +3267,7 @@ | 
|  | 
| TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetCookies) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| EXPECT_EQ("A=B", GetCookies(cm, url_google_)); | 
| GetCookieStringCallback callback(&other_thread_); | 
| base::Closure task = base::Bind( | 
| @@ -2813,7 +3282,7 @@ | 
| TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetCookiesWithOptions) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| CookieOptions options; | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| EXPECT_EQ("A=B", GetCookiesWithOptions(cm, url_google_, options)); | 
| GetCookieStringCallback callback(&other_thread_); | 
| base::Closure task = base::Bind( | 
| @@ -2830,7 +3299,7 @@ | 
| CookieOptions options; | 
| std::string cookie_line; | 
| std::vector<CookieStore::CookieInfo> cookie_infos; | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| GetCookiesWithInfo(cm, url_google_, options, &cookie_line, &cookie_infos); | 
| EXPECT_EQ("A=B", cookie_line); | 
| EXPECT_EQ(1U, cookie_infos.size()); | 
| @@ -2853,7 +3322,7 @@ | 
|  | 
| TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookies) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| CookieList cookies = GetAllCookies(cm); | 
| CookieList::const_iterator it = cookies.begin(); | 
| ASSERT_TRUE(it != cookies.end()); | 
| @@ -2876,7 +3345,7 @@ | 
|  | 
| TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURL) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| CookieList cookies = GetAllCookiesForURL(cm, url_google_); | 
| CookieList::const_iterator it = cookies.begin(); | 
| ASSERT_TRUE(it != cookies.end()); | 
| @@ -2899,7 +3368,7 @@ | 
|  | 
| TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURLWithOpt) { | 
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); | 
| -  EXPECT_TRUE(cm->SetCookie(url_google_, "A=B")); | 
| +  EXPECT_TRUE(SetCookie(cm, url_google_, "A=B")); | 
| CookieOptions options; | 
| CookieList cookies = | 
| GetAllCookiesForURLWithOptions(cm, url_google_, options); | 
| @@ -2973,14 +3442,14 @@ | 
| Time now = Time::Now(); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 
| EXPECT_EQ(1, DeleteAllCreatedBetween(cm, now - TimeDelta::FromDays(99), | 
| -                                       Time(), false)); | 
| +                                       Time())); | 
| EXPECT_TRUE(SetCookieWithOptions(cm, url_google_, "A=B", options)); | 
| DeleteCallback callback(&other_thread_); | 
| base::Closure task = base::Bind( | 
| &net::MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenTask, | 
| base::Unretained(this), | 
| cm, now - TimeDelta::FromDays(99), | 
| -      Time(), false, &callback); | 
| +      Time(), &callback); | 
| RunOnOtherThread(task); | 
| EXPECT_TRUE(callback.did_run()); | 
| EXPECT_EQ(1, callback.num_deleted()); | 
|  |