summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-20 00:58:21 +0000
committerzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-20 00:58:21 +0000
commit93460df54fc34d3a20387e5d49845a4a700c4870 (patch)
tree2f566063be03e85b475e354ec91b0bc56537830a /net
parent4a5d8a763f04a972891cc2103ae37073b5932834 (diff)
downloadchromium_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.cc19
-rw-r--r--net/base/cookie_monster.h6
-rw-r--r--net/base/cookie_monster_unittest.cc37
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) {