Index: net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc |
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc |
index e80c5cd454755c425db920b5d6ad0b1066aed480..b59c28ca63216e6c9d67bd179ddced4f836bda8a 100644 |
--- a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc |
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc |
@@ -13,6 +13,7 @@ |
#include "base/files/file_util.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/location.h" |
+#include "base/memory/ptr_util.h" |
#include "base/memory/ref_counted.h" |
#include "base/sequenced_task_runner.h" |
#include "base/synchronization/waitable_event.h" |
@@ -469,7 +470,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestLoadOldSessionCookies) { |
cookies.clear(); |
} |
-// Test loading old session cookies from the disk. |
+// Test refusing to load old session cookies from the disk. |
TEST_F(SQLitePersistentCookieStoreTest, TestDontLoadOldSessionCookies) { |
InitializeStore(false, true); |
@@ -498,6 +499,60 @@ TEST_F(SQLitePersistentCookieStoreTest, TestDontLoadOldSessionCookies) { |
ASSERT_EQ(0U, cookies.size()); |
} |
+// Confirm bad cookies on disk don't get looaded |
+TEST_F(SQLitePersistentCookieStoreTest, FilterBadCookies) { |
+ // Create an on-disk store. |
+ InitializeStore(false, true); |
+ DestroyStore(); |
+ |
+ // Add some cookies in by hand. |
+ base::FilePath store_name(temp_dir_.GetPath().Append(kCookieFilename)); |
+ std::unique_ptr<sql::Connection> db(base::MakeUnique<sql::Connection>()); |
+ ASSERT_TRUE(db->Open(store_name)); |
+ sql::Statement stmt(db->GetUniqueStatement( |
+ "INSERT INTO cookies (creation_utc, host_key, name, value, " |
+ "encrypted_value, path, expires_utc, secure, httponly, " |
+ "firstpartyonly, last_access_utc, has_expires, persistent, priority) " |
+ "VALUES (?,'google.izzle',?,?,'',?,0,0,0,0,0,1,1,0)")); |
+ ASSERT_TRUE(stmt.is_valid()); |
+ |
+ struct CookieInfo { |
+ const char* name; |
+ const char* value; |
+ const char* path; |
+ } cookies_info[] = {// A couple non-canonical cookies. |
+ {"", "B", "/path"}, |
+ {"C ", "D", "/path"}, |
+ |
+ // A canonical cookie. |
+ {"E", "F", "/path"}}; |
+ |
+ int64_t creation_time = 1; |
+ for (int i = 0; |
+ static_cast<unsigned int>(i) < sizeof(cookies_info) / sizeof(CookieInfo); |
+ i++) { |
+ stmt.Reset(true); |
+ |
+ stmt.BindInt64(0, creation_time++); |
+ stmt.BindString(1, cookies_info[i].name); |
+ stmt.BindString(2, cookies_info[i].value); |
+ stmt.BindString(3, cookies_info[i].path); |
+ ASSERT_TRUE(stmt.Run()); |
+ } |
+ stmt.Clear(); |
+ db.reset(); |
+ |
+ // Reopen the store and confirm that the only cookie loaded is the |
+ // canonical one. |
+ CanonicalCookieVector cookies; |
+ CreateAndLoad(false, false, &cookies); |
+ ASSERT_EQ(1U, cookies.size()); |
+ EXPECT_STREQ("E", cookies[0]->Name().c_str()); |
+ EXPECT_STREQ("F", cookies[0]->Value().c_str()); |
+ EXPECT_STREQ("/path", cookies[0]->Path().c_str()); |
+ DestroyStore(); |
+} |
+ |
TEST_F(SQLitePersistentCookieStoreTest, PersistIsPersistent) { |
InitializeStore(false, true); |
static const char kSessionName[] = "session"; |