2011-06-28 Hans Wennborg <hans@chromium.org>
authorhans@chromium.org <hans@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 30 Jun 2011 18:32:30 +0000 (18:32 +0000)
committerhans@chromium.org <hans@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 30 Jun 2011 18:32:30 +0000 (18:32 +0000)
        Reviewed by Tony Chang.

        IndexedDB: Prepare for running layout tests with LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=63593

        Migration of data from SQLite to LevelDB must be done before the
        m_backingStore map is checked for an open LevelDB, because if a
        previous layout test has used LevelDB, it will be in the
        m_backingStore map.

        Covered by existing layout tests.

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
2011-06-28  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB: Prepare for running layout tests with LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=63593

        WebIDBFactory should decide what DefaultBackingStore means.
        Also fix handling of layout test and incognito mode properly.

        * src/WebIDBFactoryImpl.cpp:
        (WebKit::WebIDBFactoryImpl::open):
2011-06-28  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB: Prepare for running layout tests with LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=63593

        The TestShell must always provide a temporary folder for LevelDB,
        not just when the backing store type is overridden.

        * DumpRenderTree/chromium/LayoutTestController.cpp:
        (LayoutTestController::setOverrideIndexedDBBackingStore):
        (LayoutTestController::clearAllDatabases):
        * DumpRenderTree/chromium/LayoutTestController.h:
        * DumpRenderTree/chromium/TestShell.cpp:
        (TestShell::TestShell):
        * DumpRenderTree/chromium/TestShell.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@90137 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/storage/IDBFactoryBackendImpl.cpp
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp
Tools/ChangeLog
Tools/DumpRenderTree/chromium/LayoutTestController.cpp
Tools/DumpRenderTree/chromium/LayoutTestController.h
Tools/DumpRenderTree/chromium/TestShell.cpp
Tools/DumpRenderTree/chromium/TestShell.h

index 02c5b5f..2a3d6e9 100644 (file)
@@ -1,3 +1,20 @@
+2011-06-28  Hans Wennborg  <hans@chromium.org>
+
+        Reviewed by Tony Chang.
+
+        IndexedDB: Prepare for running layout tests with LevelDB
+        https://bugs.webkit.org/show_bug.cgi?id=63593
+
+        Migration of data from SQLite to LevelDB must be done before the
+        m_backingStore map is checked for an open LevelDB, because if a
+        previous layout test has used LevelDB, it will be in the
+        m_backingStore map.
+
+        Covered by existing layout tests.
+
+        * storage/IDBFactoryBackendImpl.cpp:
+        (WebCore::IDBFactoryBackendImpl::open):
+
 2011-06-30  Pavel Feldman  <pfeldman@chromium.org>
 
         Reviewed by Yury Semikhatsky.
index c79f537..f55365c 100644 (file)
@@ -83,8 +83,7 @@ void IDBFactoryBackendImpl::removeIDBBackingStore(const String& fileIdentifier)
 
 void IDBFactoryBackendImpl::open(const String& name, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<SecurityOrigin> securityOrigin, Frame*, const String& dataDir, int64_t maximumSize, BackingStoreType backingStoreType)
 {
-    if (backingStoreType == DefaultBackingStore)
-        backingStoreType = SQLiteBackingStore; // FIXME: DefaultBackingStore is confusing; get rid of it.
+    ASSERT(backingStoreType != DefaultBackingStore);
 
     const String fileIdentifier = computeFileIdentifier(securityOrigin.get(), backingStoreType);
     const String uniqueIdentifier = computeUniqueIdentifier(name, securityOrigin.get(), backingStoreType);
@@ -97,28 +96,27 @@ void IDBFactoryBackendImpl::open(const String& name, PassRefPtr<IDBCallbacks> ca
 
     // FIXME: Everything from now on should be done on another thread.
 
+#if ENABLE(LEVELDB)
+    if (backingStoreType == LevelDBBackingStore) {
+        bool hasSQLBackingStore = IDBSQLiteBackingStore::backingStoreExists(securityOrigin.get(), name, dataDir);
+
+        // LayoutTests: SQLite backing store may not exist on disk but may exist in cache.
+        String cachedSqliteBackingStoreIdentifier = computeFileIdentifier(securityOrigin.get(), SQLiteBackingStore);
+        if (!hasSQLBackingStore && (m_backingStoreMap.end() != m_backingStoreMap.find(cachedSqliteBackingStoreIdentifier)))
+            hasSQLBackingStore = true;
+
+        if (hasSQLBackingStore) {
+            bool migrationSucceeded = migrateFromSQLiteToLevelDB(name, securityOrigin.get(), dataDir, maximumSize);
+            UNUSED_PARAM(migrationSucceeded); // FIXME: When migration is actually implemented, we need error handling here.
+        }
+    }
+#endif
+
     RefPtr<IDBBackingStore> backingStore;
     IDBBackingStoreMap::iterator it2 = m_backingStoreMap.find(fileIdentifier);
     if (it2 != m_backingStoreMap.end() && (backingStoreType == it2->second->backingStoreType()))
         backingStore = it2->second;
     else {
-
-#if ENABLE(LEVELDB)
-        if (backingStoreType == LevelDBBackingStore) {
-            bool hasSQLBackingStore = IDBSQLiteBackingStore::backingStoreExists(securityOrigin.get(), name, dataDir);
-
-            // LayoutTests: SQLite backing store may not exist on disk but may exist in cache.
-            String cachedSqliteBackingStoreIdentifier = computeFileIdentifier(securityOrigin.get(), SQLiteBackingStore);
-            if (!hasSQLBackingStore && (m_backingStoreMap.end() != m_backingStoreMap.find(cachedSqliteBackingStoreIdentifier)))
-                hasSQLBackingStore = true;
-
-            if (hasSQLBackingStore) {
-                bool migrationSucceeded = migrateFromSQLiteToLevelDB(name, securityOrigin.get(), dataDir, maximumSize);
-                (void)migrationSucceeded; // FIXME: When migration is actually implemented, we need error handling here.
-            }
-        }
-#endif
-
         if (backingStoreType == SQLiteBackingStore)
             backingStore = IDBSQLiteBackingStore::open(securityOrigin.get(), dataDir, maximumSize, fileIdentifier, this);
 #if ENABLE(LEVELDB)
index e70de24..314531a 100644 (file)
@@ -1,3 +1,16 @@
+2011-06-28  Hans Wennborg  <hans@chromium.org>
+
+        Reviewed by Tony Chang.
+
+        IndexedDB: Prepare for running layout tests with LevelDB
+        https://bugs.webkit.org/show_bug.cgi?id=63593
+
+        WebIDBFactory should decide what DefaultBackingStore means.
+        Also fix handling of layout test and incognito mode properly.
+
+        * src/WebIDBFactoryImpl.cpp:
+        (WebKit::WebIDBFactoryImpl::open):
+
 2011-06-30  Alexander Pavlov  <apavlov@chromium.org>
 
         Reviewed by Kent Tamura.
index ab45700..3b5b5e5 100755 (executable)
@@ -74,20 +74,23 @@ WebIDBFactoryImpl::~WebIDBFactoryImpl()
 void WebIDBFactoryImpl::open(const WebString& name, WebIDBCallbacks* callbacks, const WebSecurityOrigin& origin, WebFrame*, const WebString& dataDir, unsigned long long maximumSize, BackingStoreType backingStoreType)
 {
     WebString path = dataDir;
+
     if (overriddenBackingStoreType != DefaultBackingStore) {
         // Backing store type overridden by LayoutTestController.
         backingStoreType = overriddenBackingStoreType;
+    }
 
-        // dataDir is empty for layout tests.
-        ASSERT(dataDir.isEmpty());
+    if (backingStoreType == DefaultBackingStore)
+        backingStoreType = SQLiteBackingStore;
 
-        if (backingStoreType == LevelDBBackingStore) {
-            // LevelDB doesn't support in-memory databases, so use a temporary folder.
+    if (dataDir.isEmpty() && backingStoreType == LevelDBBackingStore) {
+        if (!tempDatabaseFolder.isEmpty()) {
+            // Layout tests provide a temporary folder.
             path = tempDatabaseFolder;
+        } else {
+            // For incognito mode, fall back to SQLite.
+            backingStoreType = SQLiteBackingStore;
         }
-    } else if (dataDir.isEmpty() && backingStoreType == LevelDBBackingStore) {
-        // Fall back to SQLite for incognito mode.
-        backingStoreType = SQLiteBackingStore;
     }
 
     m_idbFactoryBackend->open(name, IDBCallbacksProxy::create(adoptPtr(callbacks)), origin, 0, path, maximumSize, static_cast<IDBFactoryBackendInterface::BackingStoreType>(backingStoreType));
index 789dafd..1c77bfb 100644 (file)
@@ -1,3 +1,21 @@
+2011-06-28  Hans Wennborg  <hans@chromium.org>
+
+        Reviewed by Tony Chang.
+
+        IndexedDB: Prepare for running layout tests with LevelDB
+        https://bugs.webkit.org/show_bug.cgi?id=63593
+
+        The TestShell must always provide a temporary folder for LevelDB,
+        not just when the backing store type is overridden.
+
+        * DumpRenderTree/chromium/LayoutTestController.cpp:
+        (LayoutTestController::setOverrideIndexedDBBackingStore):
+        (LayoutTestController::clearAllDatabases):
+        * DumpRenderTree/chromium/LayoutTestController.h:
+        * DumpRenderTree/chromium/TestShell.cpp:
+        (TestShell::TestShell):
+        * DumpRenderTree/chromium/TestShell.h:
+
 2011-06-30  Zsolt Fehér  <h490267@stud.u-szeged.hu>
 
         Reviewed by Csaba Osztrogonác.
index bf7f3bb..89ebfdf 100644 (file)
@@ -1090,15 +1090,8 @@ void LayoutTestController::setOverrideIndexedDBBackingStore(const CppArgumentLis
         WebIDBFactory::setOverrideBackingStoreType(WebIDBFactory::DefaultBackingStore);
     else if (name == "sqlite")
         WebIDBFactory::setOverrideBackingStoreType(WebIDBFactory::SQLiteBackingStore);
-    else if (name == "leveldb") {
+    else if (name == "leveldb")
         WebIDBFactory::setOverrideBackingStoreType(WebIDBFactory::LevelDBBackingStore);
-
-        m_tempFolder = adoptPtr(webkit_support::CreateScopedTempDirectory());
-        if (m_tempFolder) {
-            if (m_tempFolder->CreateUniqueTempDir())
-                WebIDBFactory::setTemporaryDatabaseFolder(WebString::fromUTF8(m_tempFolder->path().c_str()));
-        }
-    }
 #endif
 }
 
@@ -1483,7 +1476,6 @@ void LayoutTestController::clearAllDatabases(const CppArgumentList& arguments, C
 {
     result->setNull();
     webkit_support::ClearAllDatabases();
-    m_tempFolder.clear();
 }
 
 void LayoutTestController::setDatabaseQuota(const CppArgumentList& arguments, CppVariant* result)
index b09a6e5..5542595 100644 (file)
@@ -606,9 +606,6 @@ private:
 
     CppVariant m_globalFlag;
 
-    // Used to create and destroy temporary folders.
-    OwnPtr<webkit_support::ScopedTempDirectory> m_tempFolder;
-
     // Bound variable counting the number of top URLs visited.
     CppVariant m_webHistoryItemCount;
 
index da5df9b..803222c 100644 (file)
@@ -39,6 +39,7 @@
 #include "WebElement.h"
 #include "WebFrame.h"
 #include "WebHistoryItem.h"
+#include "WebIDBFactory.h"
 #include "WebTestingSupport.h"
 #include "WebKit.h"
 #include "WebPermissions.h"
@@ -132,6 +133,12 @@ TestShell::TestShell(bool testShellMode)
     // timed-out DRT process was crashed.
     m_timeout = 30 * 1000;
 
+#if ENABLE(INDEXED_DATABASE)
+    m_tempIndexedDBDirectory = adoptPtr(webkit_support::CreateScopedTempDirectory());
+    m_tempIndexedDBDirectory->CreateUniqueTempDir();
+    WebIDBFactory::setTemporaryDatabaseFolder(WebString::fromUTF8(m_tempIndexedDBDirectory->path().c_str()));
+#endif
+
     createMainWindow();
 }
 
index dc4c6c8..b3548cb 100644 (file)
@@ -231,6 +231,9 @@ private:
     // Used by the watchdog to know when it's finished.
     HANDLE m_finishedEvent;
 #endif
+
+    // Temporary directory for IndexedDB (LevelDB doesn't support in-memory databases.)
+    OwnPtr<webkit_support::ScopedTempDirectory> m_tempIndexedDBDirectory;
 };
 
 void platformInit(int*, char***);