| Index: content/browser/in_process_webkit/indexed_db_browsertest.cc
|
| diff --git a/content/browser/in_process_webkit/indexed_db_browsertest.cc b/content/browser/in_process_webkit/indexed_db_browsertest.cc
|
| index afacd3fe7b5bdf207c8f96f72ee2a9e3894f076f..5d7d794f5348c324100799146681139c694cf17d 100644
|
| --- a/content/browser/in_process_webkit/indexed_db_browsertest.cc
|
| +++ b/content/browser/in_process_webkit/indexed_db_browsertest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/file_path.h"
|
| #include "base/file_util.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/message_loop.h"
|
| #include "base/process_util.h"
|
| #include "base/test/thread_test_helper.h"
|
| #include "base/utf_string_conversions.h"
|
| @@ -68,6 +69,13 @@ class IndexedDBBrowserTest : public ContentBrowserTest {
|
| NavigateToURL(shell, url);
|
| EXPECT_EQ(expected_title16, title_watcher.WaitAndGetTitle());
|
| }
|
| +
|
| + scoped_refptr<IndexedDBContext> GetContext() {
|
| + StoragePartition* partition =
|
| + BrowserContext::GetDefaultStoragePartition(
|
| + shell()->web_contents()->GetBrowserContext());
|
| + return partition->GetIndexedDBContext();
|
| + };
|
| };
|
|
|
| IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTest, CursorTest) {
|
| @@ -192,41 +200,73 @@ IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTestWithGCExposed,
|
| SimpleTest(GetTestUrl("indexeddb", "database_callbacks_first.html"));
|
| }
|
|
|
| -class IndexedDBBrowserTestWithVersion0Schema : public IndexedDBBrowserTest {
|
| +static void CopyLevelDBToProfile(Shell* shell,
|
| + scoped_refptr<IndexedDBContext> context,
|
| + const std::string& test_directory) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
|
| + FilePath leveldb_dir(FILE_PATH_LITERAL("file__0.indexeddb.leveldb"));
|
| + FilePath test_data_dir =
|
| + GetTestFilePath("indexeddb", test_directory.c_str()).Append(leveldb_dir);
|
| + IndexedDBContextImpl* context_impl =
|
| + static_cast<IndexedDBContextImpl*>(context.get());
|
| + FilePath dest = context_impl->data_path().Append(leveldb_dir);
|
| + // If we don't create the destination directory first, the contents of the
|
| + // leveldb directory are copied directly into profile/IndexedDB instead of
|
| + // profile/IndexedDB/file__0.xxx/
|
| + ASSERT_TRUE(file_util::CreateDirectory(dest));
|
| + const bool kRecursive = true;
|
| + ASSERT_TRUE(file_util::CopyDirectory(test_data_dir,
|
| + context_impl->data_path(),
|
| + kRecursive));
|
| +}
|
| +
|
| +class IndexedDBBrowserTestWithPreexistingLevelDB : public IndexedDBBrowserTest {
|
| public:
|
| + IndexedDBBrowserTestWithPreexistingLevelDB() : disk_usage_(-1) { }
|
| +
|
| virtual void SetUpOnMainThread() {
|
| - scoped_refptr<IndexedDBContext> context =
|
| - BrowserContext::GetDefaultStoragePartition(
|
| - shell()->web_contents()->GetBrowserContext())->
|
| - GetIndexedDBContext();
|
| + scoped_refptr<IndexedDBContext> context = GetContext();
|
| BrowserThread::PostTask(
|
| BrowserThread::WEBKIT_DEPRECATED, FROM_HERE,
|
| - base::Bind(
|
| - &IndexedDBBrowserTestWithVersion0Schema::CopyLevelDBToProfile,
|
| - shell(),
|
| - context));
|
| + base::Bind(&CopyLevelDBToProfile, shell(), context,
|
| + EnclosingLevelDBDir()));
|
| scoped_refptr<base::ThreadTestHelper> helper(
|
| new base::ThreadTestHelper(BrowserThread::GetMessageLoopProxyForThread(
|
| BrowserThread::WEBKIT_DEPRECATED)));
|
| ASSERT_TRUE(helper->Run());
|
| }
|
| - static void CopyLevelDBToProfile(Shell* shell,
|
| - scoped_refptr<IndexedDBContext> context) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
|
| - FilePath leveldb_dir(FILE_PATH_LITERAL("file__0.indexeddb.leveldb"));
|
| - FilePath test_data_dir =
|
| - GetTestFilePath("indexeddb", "migration_from_0").Append(leveldb_dir);
|
| - IndexedDBContextImpl* context_impl =
|
| - static_cast<IndexedDBContextImpl*>(context.get());
|
| - FilePath dest = context_impl->data_path().Append(leveldb_dir);
|
| - // If we don't create the destination directory first, the contents of the
|
| - // leveldb directory are copied directly into profile/IndexedDB instead of
|
| - // profile/IndexedDB/file__0.xxx/
|
| - ASSERT_TRUE(file_util::CreateDirectory(dest));
|
| - const bool kRecursive = true;
|
| - ASSERT_TRUE(file_util::CopyDirectory(test_data_dir,
|
| - context_impl->data_path(),
|
| - kRecursive));
|
| +
|
| + virtual std::string EnclosingLevelDBDir() = 0;
|
| +
|
| + protected:
|
| + virtual int64 RequestDiskUsage() {
|
| + BrowserThread::PostTaskAndReplyWithResult(
|
| + BrowserThread::WEBKIT_DEPRECATED, FROM_HERE,
|
| + base::Bind(&IndexedDBContext::GetOriginDiskUsage, GetContext(),
|
| + GURL("file:///")), base::Bind(
|
| + &IndexedDBBrowserTestWithPreexistingLevelDB::DidGetDiskUsage,
|
| + this));
|
| + scoped_refptr<base::ThreadTestHelper> helper(
|
| + new base::ThreadTestHelper(BrowserThread::GetMessageLoopProxyForThread(
|
| + BrowserThread::WEBKIT_DEPRECATED)));
|
| + EXPECT_TRUE(helper->Run());
|
| + // Wait for DidGetDiskUsage to be called.
|
| + MessageLoop::current()->RunUntilIdle();
|
| + return disk_usage_;
|
| + }
|
| + private:
|
| + virtual void DidGetDiskUsage(int64 bytes) {
|
| + EXPECT_GT(bytes, 0);
|
| + disk_usage_ = bytes;
|
| + }
|
| +
|
| + int64 disk_usage_;
|
| +};
|
| +
|
| +class IndexedDBBrowserTestWithVersion0Schema : public
|
| + IndexedDBBrowserTestWithPreexistingLevelDB {
|
| + virtual std::string EnclosingLevelDBDir() {
|
| + return "migration_from_0";
|
| }
|
| };
|
|
|
| @@ -234,6 +274,38 @@ IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTestWithVersion0Schema, MigrationTest) {
|
| SimpleTest(GetTestUrl("indexeddb", "migration_test.html"));
|
| }
|
|
|
| +class IndexedDBBrowserTestWithVersion123456Schema : public
|
| + IndexedDBBrowserTestWithPreexistingLevelDB {
|
| + virtual std::string EnclosingLevelDBDir() {
|
| + return "schema_version_123456";
|
| + }
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTestWithVersion123456Schema,
|
| + DestroyTest) {
|
| + int64 original_size = RequestDiskUsage();
|
| + EXPECT_GT(original_size, 0);
|
| + SimpleTest(GetTestUrl("indexeddb", "open_bad_db.html"));
|
| + int64 new_size = RequestDiskUsage();
|
| + EXPECT_NE(original_size, new_size);
|
| +}
|
| +
|
| +class IndexedDBBrowserTestWithCorruptLevelDB : public
|
| + IndexedDBBrowserTestWithPreexistingLevelDB {
|
| + virtual std::string EnclosingLevelDBDir() {
|
| + return "corrupt_leveldb";
|
| + }
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTestWithCorruptLevelDB,
|
| + DestroyTest) {
|
| + int64 original_size = RequestDiskUsage();
|
| + EXPECT_GT(original_size, 0);
|
| + SimpleTest(GetTestUrl("indexeddb", "open_bad_db.html"));
|
| + int64 new_size = RequestDiskUsage();
|
| + EXPECT_NE(original_size, new_size);
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTest, LevelDBLogFileTest) {
|
| // Any page that opens an IndexedDB will work here.
|
| SimpleTest(GetTestUrl("indexeddb", "database_test.html"));
|
|
|