diff options
author | zelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-20 00:58:21 +0000 |
---|---|---|
committer | zelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-20 00:58:21 +0000 |
commit | 93460df54fc34d3a20387e5d49845a4a700c4870 (patch) | |
tree | 2f566063be03e85b475e354ec91b0bc56537830a /net | |
parent | 4a5d8a763f04a972891cc2103ae37073b5932834 (diff) | |
download | chromium_src-93460df54fc34d3a20387e5d49845a4a700c4870.zip chromium_src-93460df54fc34d3a20387e5d49845a4a700c4870.tar.gz chromium_src-93460df54fc34d3a20387e5d49845a4a700c4870.tar.bz2 |
Cookie transfer for initial account creation case on ChromeOS.
BUG=chromium-os:17470
TEST=CookieMonsterTest.InitializeFromCookieMonster
Review URL: http://codereview.chromium.org/7397007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93140 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/base/cookie_monster.cc | 19 | ||||
-rw-r--r-- | net/base/cookie_monster.h | 6 | ||||
-rw-r--r-- | net/base/cookie_monster_unittest.cc | 37 |
3 files changed, 61 insertions, 1 deletions
diff --git a/net/base/cookie_monster.cc b/net/base/cookie_monster.cc index 300cb9d..5ef86cb 100644 --- a/net/base/cookie_monster.cc +++ b/net/base/cookie_monster.cc @@ -611,6 +611,25 @@ void CookieMonster::SetCookieWithDetailsAsync( callback.Run(success_); } +bool CookieMonster::InitializeFrom(CookieMonster* cookie_monster) { + net::CookieList list = cookie_monster->GetAllCookies(); + + base::AutoLock autolock(lock_); + InitIfNecessary(); + for (net::CookieList::const_iterator iter = list.begin(); + iter != list.end(); ++iter) { + scoped_ptr<net::CookieMonster::CanonicalCookie> cookie; + cookie.reset(new net::CookieMonster::CanonicalCookie(*iter)); + net::CookieOptions options; + options.set_include_httponly(); + if (!SetCanonicalCookie(&cookie, cookie->CreationDate(), + options)) { + return false; + } + } + return true; +} + CookieList CookieMonster::GetAllCookies() { base::AutoLock autolock(lock_); InitIfNecessary(); diff --git a/net/base/cookie_monster.h b/net/base/cookie_monster.h index 910e9f8..d6161ce 100644 --- a/net/base/cookie_monster.h +++ b/net/base/cookie_monster.h @@ -160,6 +160,11 @@ class NET_API CookieMonster : public CookieStore { bool secure, bool http_only, const SetCookiesCallback& callback); + + // Helper function that adds all cookies from |cookie_monster| into this + // instance. + bool InitializeFrom(CookieMonster* cookie_monster); + // Returns all the cookies, for use in management UI, etc. This does not mark // the cookies as having been accessed. // The returned cookies are ordered by longest path, then by earliest @@ -461,7 +466,6 @@ class NET_API CookieMonster : public CookieStore { const base::Time& creation_time, const CookieOptions& options); - // Helper function that sets a canonical cookie, deleting equivalents and // performing garbage collection. bool SetCanonicalCookie(scoped_ptr<CanonicalCookie>* cc, diff --git a/net/base/cookie_monster_unittest.cc b/net/base/cookie_monster_unittest.cc index 8e92fa1..b5ac168 100644 --- a/net/base/cookie_monster_unittest.cc +++ b/net/base/cookie_monster_unittest.cc @@ -1693,6 +1693,43 @@ TEST_F(CookieMonsterTest, DeleteCookieByName) { } } +TEST_F(CookieMonsterTest, InitializeFromCookieMonster) { + scoped_refptr<CookieMonster> cm_1(new CookieMonster(NULL, NULL)); + CookieOptions options; + + EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_foo_, + "A1=B; path=/foo;", + options)); + EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_bar_, + "A2=D; path=/bar;", + options)); + EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_, + "A3=F;", + options)); + + scoped_refptr<CookieMonster> cm_2(new CookieMonster(NULL, NULL)); + ASSERT_TRUE(cm_2->InitializeFrom(cm_1.get())); + CookieList cookies = cm_2->GetAllCookies(); + + size_t expected_size = 3; + EXPECT_EQ(expected_size, cookies.size()); + + CookieList::iterator it = cookies.begin(); + + ASSERT_TRUE(it != cookies.end()); + EXPECT_EQ("A1", it->Name()); + EXPECT_EQ("/foo", it->Path()); + + ASSERT_TRUE(++it != cookies.end()); + EXPECT_EQ("A2", it->Name()); + EXPECT_EQ("/bar", it->Path()); + + ASSERT_TRUE(++it != cookies.end()); + EXPECT_EQ("A3", it->Name()); + EXPECT_EQ("/", it->Path()); +} + + // Test that overwriting persistent cookies deletes the old one from the // backing store. TEST_F(CookieMonsterTest, OverwritePersistentCookie) { |