| Index: content/browser/net/sqlite_persistent_cookie_store_unittest.cc
|
| diff --git a/content/browser/net/sqlite_persistent_cookie_store_unittest.cc b/content/browser/net/sqlite_persistent_cookie_store_unittest.cc
|
| index 2d3bdefad82c8edfcb621a4d5a2432cb5b013b06..49ac64be46871059617ba3461b32ddc47f960c15 100644
|
| --- a/content/browser/net/sqlite_persistent_cookie_store_unittest.cc
|
| +++ b/content/browser/net/sqlite_persistent_cookie_store_unittest.cc
|
| @@ -19,15 +19,10 @@
|
| #include "base/test/sequenced_worker_pool_owner.h"
|
| #include "base/threading/sequenced_worker_pool.h"
|
| #include "base/time/time.h"
|
| -#include "content/public/browser/cookie_crypto_delegate.h"
|
| -#include "content/public/browser/cookie_store_factory.h"
|
| -#include "crypto/encryptor.h"
|
| -#include "crypto/symmetric_key.h"
|
| #include "net/cookies/canonical_cookie.h"
|
| #include "net/cookies/cookie_constants.h"
|
| #include "sql/connection.h"
|
| #include "sql/meta_table.h"
|
| -#include "sql/statement.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "url/gurl.h"
|
|
|
| @@ -36,36 +31,6 @@
|
| namespace {
|
|
|
| const base::FilePath::CharType kCookieFilename[] = FILE_PATH_LITERAL("Cookies");
|
| -
|
| -class CookieCryptor : public content::CookieCryptoDelegate {
|
| - public:
|
| - CookieCryptor();
|
| - virtual bool EncryptString(const std::string& plaintext,
|
| - std::string* ciphertext) OVERRIDE;
|
| - virtual bool DecryptString(const std::string& ciphertext,
|
| - std::string* plaintext) OVERRIDE;
|
| -
|
| - private:
|
| - scoped_ptr<crypto::SymmetricKey> key_;
|
| - crypto::Encryptor encryptor_;
|
| -};
|
| -
|
| -CookieCryptor::CookieCryptor() : key_(
|
| - crypto::SymmetricKey::DeriveKeyFromPassword(
|
| - crypto::SymmetricKey::AES, "password", "saltiest", 1000, 256)) {
|
| - std::string iv("the iv: 16 bytes");
|
| - encryptor_.Init(key_.get(), crypto::Encryptor::CBC, iv);
|
| -}
|
| -
|
| -bool CookieCryptor::EncryptString(const std::string& plaintext,
|
| - std::string* ciphertext) {
|
| - return encryptor_.Encrypt(plaintext, ciphertext);
|
| -}
|
| -
|
| -bool CookieCryptor::DecryptString(const std::string& ciphertext,
|
| - std::string* plaintext) {
|
| - return encryptor_.Decrypt(ciphertext, plaintext);
|
| -}
|
|
|
| } // namespace
|
|
|
| @@ -125,24 +90,20 @@
|
| pool_owner_.reset(new base::SequencedWorkerPoolOwner(3, "Background Pool"));
|
| }
|
|
|
| - void CreateAndLoad(bool crypt_cookies,
|
| - bool restore_old_session_cookies,
|
| + void CreateAndLoad(bool restore_old_session_cookies,
|
| CanonicalCookieVector* cookies) {
|
| store_ = new SQLitePersistentCookieStore(
|
| temp_dir_.path().Append(kCookieFilename),
|
| client_task_runner(),
|
| background_task_runner(),
|
| restore_old_session_cookies,
|
| - NULL,
|
| - crypt_cookies ?
|
| - scoped_ptr<content::CookieCryptoDelegate>(new CookieCryptor) :
|
| - scoped_ptr<content::CookieCryptoDelegate>());
|
| + NULL);
|
| Load(cookies);
|
| }
|
|
|
| - void InitializeStore(bool crypt, bool restore_old_session_cookies) {
|
| + void InitializeStore(bool restore_old_session_cookies) {
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(crypt, restore_old_session_cookies, &cookies);
|
| + CreateAndLoad(restore_old_session_cookies, &cookies);
|
| EXPECT_EQ(0U, cookies.size());
|
| }
|
|
|
| @@ -164,14 +125,6 @@
|
| net::COOKIE_PRIORITY_DEFAULT));
|
| }
|
|
|
| - std::string ReadRawDBContents() {
|
| - std::string contents;
|
| - if (!base::ReadFileToString(temp_dir_.path().Append(kCookieFilename),
|
| - &contents))
|
| - return std::string();
|
| - return contents;
|
| - }
|
| -
|
| virtual void SetUp() OVERRIDE {
|
| ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| }
|
| @@ -193,13 +146,13 @@
|
| };
|
|
|
| TEST_F(SQLitePersistentCookieStoreTest, TestInvalidMetaTableRecovery) {
|
| - InitializeStore(false, false);
|
| + InitializeStore(false);
|
| AddCookie("A", "B", "foo.bar", "/", base::Time::Now());
|
| DestroyStore();
|
|
|
| // Load up the store and verify that it has good data in it.
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(false, false, &cookies);
|
| + CreateAndLoad(false, &cookies);
|
| ASSERT_EQ(1U, cookies.size());
|
| ASSERT_STREQ("foo.bar", cookies[0]->Domain().c_str());
|
| ASSERT_STREQ("A", cookies[0]->Name().c_str());
|
| @@ -218,13 +171,13 @@
|
| }
|
|
|
| // Upon loading, the database should be reset to a good, blank state.
|
| - CreateAndLoad(false, false, &cookies);
|
| + CreateAndLoad(false, &cookies);
|
| ASSERT_EQ(0U, cookies.size());
|
|
|
| // Verify that, after, recovery, the database persists properly.
|
| AddCookie("X", "Y", "foo.bar", "/", base::Time::Now());
|
| DestroyStore();
|
| - CreateAndLoad(false, false, &cookies);
|
| + CreateAndLoad(false, &cookies);
|
| ASSERT_EQ(1U, cookies.size());
|
| ASSERT_STREQ("foo.bar", cookies[0]->Domain().c_str());
|
| ASSERT_STREQ("X", cookies[0]->Name().c_str());
|
| @@ -234,7 +187,7 @@
|
|
|
| // Test if data is stored as expected in the SQLite database.
|
| TEST_F(SQLitePersistentCookieStoreTest, TestPersistance) {
|
| - InitializeStore(false, false);
|
| + InitializeStore(false);
|
| AddCookie("A", "B", "foo.bar", "/", base::Time::Now());
|
| // Replace the store effectively destroying the current one and forcing it
|
| // to write its data to disk. Then we can see if after loading it again it
|
| @@ -242,7 +195,7 @@
|
| DestroyStore();
|
| // Reload and test for persistence
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(false, false, &cookies);
|
| + CreateAndLoad(false, &cookies);
|
| ASSERT_EQ(1U, cookies.size());
|
| ASSERT_STREQ("foo.bar", cookies[0]->Domain().c_str());
|
| ASSERT_STREQ("A", cookies[0]->Name().c_str());
|
| @@ -254,14 +207,14 @@
|
| STLDeleteElements(&cookies);
|
|
|
| // Reload and check if the cookie has been removed.
|
| - CreateAndLoad(false, false, &cookies);
|
| + CreateAndLoad(false, &cookies);
|
| ASSERT_EQ(0U, cookies.size());
|
| }
|
|
|
| // Test that priority load of cookies for a specfic domain key could be
|
| // completed before the entire store is loaded
|
| TEST_F(SQLitePersistentCookieStoreTest, TestLoadCookiesForKey) {
|
| - InitializeStore(false, false);
|
| + InitializeStore(false);
|
| base::Time t = base::Time::Now();
|
| AddCookie("A", "B", "foo.bar", "/", t);
|
| t += base::TimeDelta::FromInternalValue(10);
|
| @@ -276,9 +229,7 @@
|
| temp_dir_.path().Append(kCookieFilename),
|
| client_task_runner(),
|
| background_task_runner(),
|
| - false, NULL,
|
| - scoped_ptr<content::CookieCryptoDelegate>());
|
| -
|
| + false, NULL);
|
| // Posting a blocking task to db_thread_ makes sure that the DB thread waits
|
| // until both Load and LoadCookiesForKey have been posted to its task queue.
|
| background_task_runner()->PostTask(
|
| @@ -333,7 +284,7 @@
|
|
|
| // Test that we can force the database to be written by calling Flush().
|
| TEST_F(SQLitePersistentCookieStoreTest, TestFlush) {
|
| - InitializeStore(false, false);
|
| + InitializeStore(false);
|
| // File timestamps don't work well on all platforms, so we'll determine
|
| // whether the DB file has been modified by checking its size.
|
| base::FilePath path = temp_dir_.path().Append(kCookieFilename);
|
| @@ -359,7 +310,7 @@
|
|
|
| // Test loading old session cookies from the disk.
|
| TEST_F(SQLitePersistentCookieStoreTest, TestLoadOldSessionCookies) {
|
| - InitializeStore(false, true);
|
| + InitializeStore(true);
|
|
|
| // Add a session cookie.
|
| store_->AddCookie(
|
| @@ -374,7 +325,7 @@
|
| // Create a store that loads session cookies and test that the session cookie
|
| // was loaded.
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(false, true, &cookies);
|
| + CreateAndLoad(true, &cookies);
|
|
|
| ASSERT_EQ(1U, cookies.size());
|
| ASSERT_STREQ("sessioncookie.com", cookies[0]->Domain().c_str());
|
| @@ -387,7 +338,7 @@
|
|
|
| // Test loading old session cookies from the disk.
|
| TEST_F(SQLitePersistentCookieStoreTest, TestDontLoadOldSessionCookies) {
|
| - InitializeStore(false, true);
|
| + InitializeStore(true);
|
|
|
| // Add a session cookie.
|
| store_->AddCookie(
|
| @@ -402,7 +353,7 @@
|
| // Create a store that doesn't load old session cookies and test that the
|
| // session cookie was not loaded.
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(false, false, &cookies);
|
| + CreateAndLoad(false, &cookies);
|
| ASSERT_EQ(0U, cookies.size());
|
|
|
| // The store should also delete the session cookie. Wait until that has been
|
| @@ -411,12 +362,12 @@
|
|
|
| // Create a store that loads old session cookies and test that the session
|
| // cookie is gone.
|
| - CreateAndLoad(false, true, &cookies);
|
| + CreateAndLoad(true, &cookies);
|
| ASSERT_EQ(0U, cookies.size());
|
| }
|
|
|
| TEST_F(SQLitePersistentCookieStoreTest, PersistIsPersistent) {
|
| - InitializeStore(false, true);
|
| + InitializeStore(true);
|
| static const char kSessionName[] = "session";
|
| static const char kPersistentName[] = "persistent";
|
|
|
| @@ -441,7 +392,7 @@
|
| // Create a store that loads session cookie and test that the IsPersistent
|
| // attribute is restored.
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(false, true, &cookies);
|
| + CreateAndLoad(true, &cookies);
|
| ASSERT_EQ(2U, cookies.size());
|
|
|
| std::map<std::string, net::CanonicalCookie*> cookie_map;
|
| @@ -471,7 +422,7 @@
|
| static const char kCookieValue[] = "value";
|
| static const char kCookiePath[] = "/";
|
|
|
| - InitializeStore(false, true);
|
| + InitializeStore(true);
|
|
|
| // Add a low-priority persistent cookie.
|
| store_->AddCookie(
|
| @@ -506,7 +457,7 @@
|
| // Create a store that loads session cookie and test that the priority
|
| // attribute values are restored.
|
| CanonicalCookieVector cookies;
|
| - CreateAndLoad(false, true, &cookies);
|
| + CreateAndLoad(true, &cookies);
|
| ASSERT_EQ(3U, cookies.size());
|
|
|
| // Put the cookies into a map, by name, so we can easily find them.
|
| @@ -534,73 +485,4 @@
|
| STLDeleteElements(&cookies);
|
| }
|
|
|
| -TEST_F(SQLitePersistentCookieStoreTest, UpdateToEncryption) {
|
| - CanonicalCookieVector cookies;
|
| -
|
| - // Create unencrypted cookie store and write something to it.
|
| - InitializeStore(false, false);
|
| - AddCookie("name", "value123XYZ", "foo.bar", "/", base::Time::Now());
|
| - DestroyStore();
|
| -
|
| - // Verify that "value" is visible in the file. This is necessary in order to
|
| - // have confidence in a later test that "encrypted_value" is not visible.
|
| - std::string contents = ReadRawDBContents();
|
| - EXPECT_NE(0U, contents.length());
|
| - EXPECT_NE(contents.find("value123XYZ"), std::string::npos);
|
| -
|
| - // Create encrypted cookie store and ensure old cookie still reads.
|
| - STLDeleteElements(&cookies_);
|
| - EXPECT_EQ(0U, cookies_.size());
|
| - CreateAndLoad(true, false, &cookies);
|
| - EXPECT_EQ(1U, cookies_.size());
|
| - EXPECT_EQ("name", cookies_[0]->Name());
|
| - EXPECT_EQ("value123XYZ", cookies_[0]->Value());
|
| -
|
| - // Make sure we can update existing cookie and add new cookie as encrypted.
|
| - store_->DeleteCookie(*(cookies_[0]));
|
| - AddCookie("name", "encrypted_value123XYZ", "foo.bar", "/", base::Time::Now());
|
| - AddCookie("other", "something456ABC", "foo.bar", "/",
|
| - base::Time::Now() + base::TimeDelta::FromInternalValue(10));
|
| - DestroyStore();
|
| - STLDeleteElements(&cookies_);
|
| - CreateAndLoad(true, false, &cookies);
|
| - EXPECT_EQ(2U, cookies_.size());
|
| - net::CanonicalCookie* cookie_name = NULL;
|
| - net::CanonicalCookie* cookie_other = NULL;
|
| - if (cookies_[0]->Name() == "name") {
|
| - cookie_name = cookies_[0];
|
| - cookie_other = cookies_[1];
|
| - } else {
|
| - cookie_name = cookies_[1];
|
| - cookie_other = cookies_[0];
|
| - }
|
| - EXPECT_EQ("encrypted_value123XYZ", cookie_name->Value());
|
| - EXPECT_EQ("something456ABC", cookie_other->Value());
|
| - DestroyStore();
|
| -
|
| - // Examine the real record to make sure plaintext version doesn't exist.
|
| - sql::Connection db;
|
| - sql::Statement smt;
|
| - int resultcount = 0;
|
| - ASSERT_TRUE(db.Open(temp_dir_.path().Append(kCookieFilename)));
|
| - smt.Assign(db.GetCachedStatement(SQL_FROM_HERE,
|
| - "SELECT * "
|
| - "FROM cookies "
|
| - "WHERE host_key = 'foo.bar'"));
|
| - while (smt.Step()) {
|
| - resultcount++;
|
| - for (int i=0; i < smt.ColumnCount(); i++) {
|
| - EXPECT_EQ(smt.ColumnString(i).find("value"), std::string::npos);
|
| - EXPECT_EQ(smt.ColumnString(i).find("something"), std::string::npos);
|
| - }
|
| - }
|
| - EXPECT_EQ(2, resultcount);
|
| -
|
| - // Verify that "encrypted_value" is NOT visible in the file.
|
| - contents = ReadRawDBContents();
|
| - EXPECT_NE(0U, contents.length());
|
| - EXPECT_EQ(contents.find("encrypted_value123XYZ"), std::string::npos);
|
| - EXPECT_EQ(contents.find("something456ABC"), std::string::npos);
|
| -}
|
| -
|
| } // namespace content
|
|
|