Changeset 87257 in webkit


Ignore:
Timestamp:
May 24, 2011 8:00:58 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-05-24 Greg Simon <gregsimon@chromium.org>

Reviewed by Dimitri Glazkov.

Control Indexeddb backends from LayoutTestController
https://bugs.webkit.org/show_bug.cgi?id=61000

LayoutTest for migration between SQLite and LevelDB
in IndxededDB.

  • storage/indexeddb/migrate-basics-expected.txt: Added.
  • storage/indexeddb/migrate-basics.html: Added.

2011-05-24 Greg Simon <gregsimon@chromium.org>

Reviewed by Dimitri Glazkov.

Control Indexeddb backends from LayoutTestController
https://bugs.webkit.org/show_bug.cgi?id=61000

Test: storage/indexeddb/migrate-basics.html

  • storage/IDBBackingStore.h:
  • storage/IDBFactoryBackendImpl.cpp: (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl): (WebCore::IDBFactoryBackendImpl::open): (WebCore::IDBFactoryBackendImpl::setEnableMigration): (WebCore::IDBFactoryBackendImpl::migrate):
  • storage/IDBFactoryBackendImpl.h:
  • storage/IDBFactoryBackendInterface.h:
  • storage/IDBLevelDBBackingStore.cpp: (WebCore::IDBLevelDBBackingStore::backingStoreExists):
  • storage/IDBLevelDBBackingStore.h: (WebCore::IDBLevelDBBackingStore::backingStoreType):
  • storage/IDBSQLiteBackingStore.cpp: (WebCore::IDBSQLiteBackingStore::backingStoreExists):
  • storage/IDBSQLiteBackingStore.h: (WebCore::IDBSQLiteBackingStore::backingStoreType):

2011-05-24 Greg Simon <gregsimon@chromium.org>

Reviewed by Dimitri Glazkov.

Control Indexeddb backends from LayoutTestController
https://bugs.webkit.org/show_bug.cgi?id=61000

  • public/WebIDBFactory.h: (WebKit::WebIDBFactory::setEnableMigration):
  • src/AssertMatchingEnums.cpp:
  • src/IDBFactoryBackendProxy.cpp: (WebKit::IDBFactoryBackendProxy::setEnableMigration):
  • src/IDBFactoryBackendProxy.h:
  • src/WebIDBFactoryImpl.cpp: (WebKit::WebIDBFactory::setOverrideBackingStoreType): (WebKit::WebIDBFactory::setTemporaryDatabaseFolder): (WebKit::WebIDBFactoryImpl::WebIDBFactoryImpl): (WebKit::WebIDBFactoryImpl::open): (WebKit::WebIDBFactoryImpl::setEnableMigration):
  • src/WebIDBFactoryImpl.h:

2011-05-24 Greg Simon <gregsimon@chromium.org>

Reviewed by Dimitri Glazkov.

Control Indexeddb backends from LayoutTestController
https://bugs.webkit.org/show_bug.cgi?id=61000

  • DumpRenderTree/chromium/LayoutTestController.cpp: (LayoutTestController::LayoutTestController): (LayoutTestController::setOverrideIndexedDBBackingStore): (LayoutTestController::clearAllDatabases):
  • DumpRenderTree/chromium/LayoutTestController.h:
Location:
trunk
Files:
2 added
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r87256 r87257  
     12011-05-24  Greg Simon  <gregsimon@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Control Indexeddb backends from LayoutTestController
     6        https://bugs.webkit.org/show_bug.cgi?id=61000
     7
     8        LayoutTest for migration between SQLite and LevelDB
     9        in IndxededDB.
     10
     11        * storage/indexeddb/migrate-basics-expected.txt: Added.
     12        * storage/indexeddb/migrate-basics.html: Added.
     13
    1142011-05-24  Fumitoshi Ukai  <ukai@chromium.org>
    215
  • trunk/Source/WebCore/ChangeLog

    r87248 r87257  
     12011-05-24  Greg Simon  <gregsimon@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Control Indexeddb backends from LayoutTestController
     6        https://bugs.webkit.org/show_bug.cgi?id=61000
     7
     8        Test: storage/indexeddb/migrate-basics.html
     9
     10        * storage/IDBBackingStore.h:
     11        * storage/IDBFactoryBackendImpl.cpp:
     12        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
     13        (WebCore::IDBFactoryBackendImpl::open):
     14        (WebCore::IDBFactoryBackendImpl::setEnableMigration):
     15        (WebCore::IDBFactoryBackendImpl::migrate):
     16        * storage/IDBFactoryBackendImpl.h:
     17        * storage/IDBFactoryBackendInterface.h:
     18        * storage/IDBLevelDBBackingStore.cpp:
     19        (WebCore::IDBLevelDBBackingStore::backingStoreExists):
     20        * storage/IDBLevelDBBackingStore.h:
     21        (WebCore::IDBLevelDBBackingStore::backingStoreType):
     22        * storage/IDBSQLiteBackingStore.cpp:
     23        (WebCore::IDBSQLiteBackingStore::backingStoreExists):
     24        * storage/IDBSQLiteBackingStore.h:
     25        (WebCore::IDBSQLiteBackingStore::backingStoreType):
     26
    1272011-05-24  Leo Yang  <leo.yang@torchmobile.com.cn>
    228
  • trunk/Source/WebCore/storage/IDBBackingStore.h

    r86422 r87257  
    3030
    3131#include "IDBCursor.h"
     32#include "IDBFactoryBackendImpl.h"
     33#include "IDBFactoryBackendInterface.h"
    3234#include "SQLiteDatabase.h"
    3335#include <wtf/PassRefPtr.h>
     
    3840namespace WebCore {
    3941
    40 class IDBFactoryBackendImpl;
    4142class IDBKey;
    4243class IDBKeyRange;
     
    107108    };
    108109    virtual PassRefPtr<Transaction> createTransaction() = 0;
     110    virtual IDBFactoryBackendInterface::BackingStoreType backingStoreType() = 0;
    109111};
    110112
  • trunk/Source/WebCore/storage/IDBFactoryBackendImpl.cpp

    r83443 r87257  
    4646IDBFactoryBackendImpl::IDBFactoryBackendImpl()
    4747    : m_transactionCoordinator(IDBTransactionCoordinator::create())
     48    , m_migrateEnabled(false)
    4849{
    4950}
     
    7778    IDBDatabaseBackendMap::iterator it = m_databaseBackendMap.find(uniqueIdentifier);
    7879    if (it != m_databaseBackendMap.end()) {
    79         callbacks->onSuccess(it->second);
    80         return;
     80        // Also check that backing store types match: this is important for migration.
     81        if ((backingStoreType == DefaultBackingStore) || (backingStoreType == it->second->backingStore()->backingStoreType())) {
     82            callbacks->onSuccess(it->second);
     83            return;
     84        }
    8185    }
    8286
     
    8589    RefPtr<IDBBackingStore> backingStore;
    8690    IDBBackingStoreMap::iterator it2 = m_backingStoreMap.find(fileIdentifier);
    87     if (it2 != m_backingStoreMap.end())
     91    if (it2 != m_backingStoreMap.end() && (backingStoreType == it2->second->backingStoreType()))
    8892        backingStore = it2->second;
    8993    else {
    90         if (backingStoreType == DefaultBackingStore)
     94#if ENABLE(LEVELDB)
     95        if (m_migrateEnabled) {
     96            bool hasSQLBackend = IDBSQLiteBackingStore::backingStoreExists(securityOrigin.get(), dataDir);
     97            bool hasLevelDbBackend = IDBLevelDBBackingStore::backingStoreExists(securityOrigin.get(), dataDir);
     98
     99            if (hasSQLBackend && hasLevelDbBackend)
     100                backingStoreType = LevelDBBackingStore;
     101
     102            // Migration: if the database exists and is SQLite we want to migrate it to LevelDB.
     103            if (hasSQLBackend && !hasLevelDbBackend) {
     104                if (migrate(name, securityOrigin.get(), dataDir, maximumSize))
     105                    backingStoreType = LevelDBBackingStore;
     106                else
     107                    backingStoreType = DefaultBackingStore;
     108            }
     109        }
     110#endif
     111
     112        if (backingStoreType == DefaultBackingStore || backingStoreType == SQLiteBackingStore)
    91113            backingStore = IDBSQLiteBackingStore::open(securityOrigin.get(), dataDir, maximumSize, fileIdentifier, this);
    92114#if ENABLE(LEVELDB)
     
    105127}
    106128
     129void IDBFactoryBackendImpl::setEnableMigration(bool enabled)
     130{
     131    m_migrateEnabled = enabled;
     132}
     133
     134bool IDBFactoryBackendImpl::migrate(const String& name, SecurityOrigin* securityOrigin, const String& dataDir, int64_t maximumSize)
     135{
     136    // FIXME: Implement migration.
     137    return false;
     138}
     139
    107140} // namespace WebCore
    108141
  • trunk/Source/WebCore/storage/IDBFactoryBackendImpl.h

    r80635 r87257  
    5757
    5858    virtual void open(const String& name, PassRefPtr<IDBCallbacks>, PassRefPtr<SecurityOrigin>, Frame*, const String& dataDir, int64_t maximumSize, BackingStoreType);
     59    virtual void setEnableMigration(bool);
    5960
    6061private:
    6162    IDBFactoryBackendImpl();
     63    bool migrate(const String& name, SecurityOrigin*, const String& dataDir, int64_t maximumSize);
    6264
    6365    typedef HashMap<String, IDBDatabaseBackendImpl*> IDBDatabaseBackendMap;
     
    6870
    6971    RefPtr<IDBTransactionCoordinator> m_transactionCoordinator;
     72
     73    bool m_migrateEnabled;
    7074
    7175    // Only one instance of the factory should exist at any given time.
  • trunk/Source/WebCore/storage/IDBFactoryBackendInterface.h

    r81567 r87257  
    5454    enum BackingStoreType {
    5555        DefaultBackingStore,
    56         LevelDBBackingStore
     56        LevelDBBackingStore,
     57        SQLiteBackingStore
    5758    };
    5859
    5960    virtual void open(const String& name, PassRefPtr<IDBCallbacks>, PassRefPtr<SecurityOrigin>, Frame*, const String& dataDir, int64_t maximumSize, BackingStoreType) = 0;
     61    virtual void setEnableMigration(bool) = 0;
    6062};
    6163
  • trunk/Source/WebCore/storage/IDBLevelDBBackingStore.cpp

    r86422 r87257  
    12671267}
    12681268
     1269bool IDBLevelDBBackingStore::backingStoreExists(SecurityOrigin* securityOrigin, const String& pathBaseArg)
     1270{
     1271    String pathBase = pathBaseArg;
     1272
     1273    if (pathBase.isEmpty())
     1274        return false;
     1275
     1276    // FIXME: We should eventually use the same LevelDB database for all origins.
     1277    String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb.leveldb");
     1278
     1279    // FIXME: It would be more thorough to open the database here but also more expensive.
     1280    if (fileExists(path+"/CURRENT"))
     1281        return true;
     1282
     1283    return false;
     1284}
     1285
    12691286// FIXME: deleteDatabase should be part of IDBBackingStore.
    12701287
  • trunk/Source/WebCore/storage/IDBLevelDBBackingStore.h

    r85122 r87257  
    7373
    7474    virtual PassRefPtr<Transaction> createTransaction();
     75    virtual IDBFactoryBackendInterface::BackingStoreType backingStoreType() { return IDBFactoryBackendInterface::LevelDBBackingStore; }
     76
     77    static bool backingStoreExists(SecurityOrigin*, const String& pathBase);
    7578
    7679private:
  • trunk/Source/WebCore/storage/IDBSQLiteBackingStore.cpp

    r86422 r87257  
    992992}
    993993
     994bool IDBSQLiteBackingStore::backingStoreExists(SecurityOrigin* securityOrigin, const String& pathBase)
     995{
     996    String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb");
     997
     998    SQLiteDatabase db;
     999    if (!db.open(path))
     1000        return false;
     1001
     1002    db.close();
     1003    return true;
     1004}
     1005
    9941006namespace {
    9951007
  • trunk/Source/WebCore/storage/IDBSQLiteBackingStore.h

    r83443 r87257  
    6868
    6969    virtual PassRefPtr<Transaction> createTransaction();
     70    virtual IDBFactoryBackendInterface::BackingStoreType backingStoreType() { return IDBFactoryBackendInterface::SQLiteBackingStore; }
     71
     72    static bool backingStoreExists(SecurityOrigin*, const String& pathBase);
    7073
    7174private:
  • trunk/Source/WebKit/chromium/ChangeLog

    r87189 r87257  
     12011-05-24  Greg Simon  <gregsimon@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Control Indexeddb backends from LayoutTestController
     6        https://bugs.webkit.org/show_bug.cgi?id=61000
     7
     8        * public/WebIDBFactory.h:
     9        (WebKit::WebIDBFactory::setEnableMigration):
     10        * src/AssertMatchingEnums.cpp:
     11        * src/IDBFactoryBackendProxy.cpp:
     12        (WebKit::IDBFactoryBackendProxy::setEnableMigration):
     13        * src/IDBFactoryBackendProxy.h:
     14        * src/WebIDBFactoryImpl.cpp:
     15        (WebKit::WebIDBFactory::setOverrideBackingStoreType):
     16        (WebKit::WebIDBFactory::setTemporaryDatabaseFolder):
     17        (WebKit::WebIDBFactoryImpl::WebIDBFactoryImpl):
     18        (WebKit::WebIDBFactoryImpl::open):
     19        (WebKit::WebIDBFactoryImpl::setEnableMigration):
     20        * src/WebIDBFactoryImpl.h:
     21
    1222011-05-24  Jay Civelli  <jcivelli@chromium.org>
    223
  • trunk/Source/WebKit/chromium/public/WebIDBFactory.h

    r83443 r87257  
    5454    enum BackingStoreType {
    5555        DefaultBackingStore,
    56         LevelDBBackingStore
     56        LevelDBBackingStore,
     57        SQLiteBackingStore
    5758    };
    5859
    5960    // The WebKit implementation of open ignores the WebFrame* parameter.
    6061    virtual void open(const WebString& name, WebIDBCallbacks*, const WebSecurityOrigin&, WebFrame*, const WebString& dataDir, unsigned long long maximumSize, BackingStoreType) { WEBKIT_ASSERT_NOT_REACHED(); }
     62    virtual void setEnableMigration(bool) { WEBKIT_ASSERT_NOT_REACHED(); }
    6163
    6264    virtual void deleteDatabase(const WebString& name, WebIDBCallbacks*, const WebSecurityOrigin&, WebFrame*, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); }
     65
     66    // Used for DumpRenderTree tests.
     67    WEBKIT_API static void setOverrideBackingStoreType(BackingStoreType);
     68    WEBKIT_API static void setTemporaryDatabaseFolder(const WebString& path);
    6369};
    6470
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r86452 r87257  
    400400COMPILE_ASSERT_MATCHING_ENUM(WebIDBFactory::DefaultBackingStore, IDBFactoryBackendInterface::DefaultBackingStore);
    401401COMPILE_ASSERT_MATCHING_ENUM(WebIDBFactory::LevelDBBackingStore, IDBFactoryBackendInterface::LevelDBBackingStore);
     402COMPILE_ASSERT_MATCHING_ENUM(WebIDBFactory::SQLiteBackingStore, IDBFactoryBackendInterface::SQLiteBackingStore);
    402403
    403404#if ENABLE(FILE_SYSTEM)
  • trunk/Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp

    r85966 r87257  
    7878}
    7979
     80void IDBFactoryBackendProxy::setEnableMigration(bool enable)
     81{
     82    m_webIDBFactory->setEnableMigration(enable);
     83}
     84
     85
    8086} // namespace WebKit
    8187
  • trunk/Source/WebKit/chromium/src/IDBFactoryBackendProxy.h

    r82917 r87257  
    4747    PassRefPtr<WebCore::DOMStringList> databases(void) const;
    4848    virtual void open(const String& name, PassRefPtr<WebCore::IDBCallbacks>, PassRefPtr<WebCore::SecurityOrigin>, WebCore::Frame*, const String& dataDir, int64_t maximumSize, BackingStoreType);
     49    virtual void setEnableMigration(bool);
    4950
    5051private:
  • trunk/Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp

    r86067 r87257  
    4545namespace WebKit {
    4646
     47static WebIDBFactory::BackingStoreType overriddenBackingStoreType = WebIDBFactory::DefaultBackingStore;
     48static WebString tempDatabaseFolder;
     49
    4750WebIDBFactory* WebIDBFactory::create()
    4851{
     
    5053}
    5154
     55void WebIDBFactory::setOverrideBackingStoreType(BackingStoreType type)
     56{
     57    overriddenBackingStoreType = type;
     58}
     59
     60void WebIDBFactory::setTemporaryDatabaseFolder(const WebString& path)
     61{
     62    tempDatabaseFolder = path;
     63}
     64
    5265WebIDBFactoryImpl::WebIDBFactoryImpl()
    5366    : m_idbFactoryBackend(IDBFactoryBackendImpl::create())
    5467{
     68    m_idbFactoryBackend->setEnableMigration(true);
    5569}
    5670
     
    6175void WebIDBFactoryImpl::open(const WebString& name, WebIDBCallbacks* callbacks, const WebSecurityOrigin& origin, WebFrame*, const WebString& dataDir, unsigned long long maximumSize, BackingStoreType backingStoreType)
    6276{
    63     m_idbFactoryBackend->open(name, IDBCallbacksProxy::create(adoptPtr(callbacks)), origin, 0, dataDir, maximumSize, static_cast<IDBFactoryBackendInterface::BackingStoreType>(backingStoreType));
     77    WebString path = dataDir;
     78    if (overriddenBackingStoreType != DefaultBackingStore) {
     79        backingStoreType = overriddenBackingStoreType;
     80
     81        // The dataDir is empty for two reasons: LevelDB in icognito mode or
     82        // LevelDB from DumpRenderTree. The first case is taken care of inside
     83        // IDBFactoryBackendImpl.cpp by forcing SQLITE backend for incognito.
     84        // For the DumpRenderTree case we need to keep track of the location
     85        // so we can wipe it out when we're done with the test.
     86        if (dataDir.isEmpty() && backingStoreType == LevelDBBackingStore)
     87            path = tempDatabaseFolder;
     88    }
     89    m_idbFactoryBackend->open(name, IDBCallbacksProxy::create(adoptPtr(callbacks)), origin, 0, path, maximumSize, static_cast<IDBFactoryBackendInterface::BackingStoreType>(backingStoreType));
     90}
     91
     92void WebIDBFactoryImpl::setEnableMigration(bool enable)
     93{
     94    m_idbFactoryBackend->setEnableMigration(enable);
    6495}
    6596
  • trunk/Source/WebKit/chromium/src/WebIDBFactoryImpl.h

    r82917 r87257  
    4646
    4747    virtual void open(const WebString& name, WebIDBCallbacks*, const WebSecurityOrigin&, WebFrame*, const WebString& dataDir, unsigned long long maximumSize, BackingStoreType);
     48    virtual void setEnableMigration(bool);
    4849
    4950private:
  • trunk/Tools/ChangeLog

    r87210 r87257  
     12011-05-24  Greg Simon  <gregsimon@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Control Indexeddb backends from LayoutTestController
     6        https://bugs.webkit.org/show_bug.cgi?id=61000
     7
     8        * DumpRenderTree/chromium/LayoutTestController.cpp:
     9        (LayoutTestController::LayoutTestController):
     10        (LayoutTestController::setOverrideIndexedDBBackingStore):
     11        (LayoutTestController::clearAllDatabases):
     12        * DumpRenderTree/chromium/LayoutTestController.h:
     13
    1142011-05-24  Robert Hogan  <robert@webkit.org>
    215
  • trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp

    r86930 r87257  
    4545#include "WebFrame.h"
    4646#include "WebGeolocationClientMock.h"
     47#include "WebIDBFactory.h"
    4748#include "WebInputElement.h"
    4849#include "WebKit.h"
     
    8384    // by CppBoundClass, the parent to LayoutTestController).
    8485    bindMethod("addFileToPasteboardOnDrag", &LayoutTestController::addFileToPasteboardOnDrag);
     86    bindMethod("addMockSpeechInputResult", &LayoutTestController::addMockSpeechInputResult);
    8587    bindMethod("addOriginAccessWhitelistEntry", &LayoutTestController::addOriginAccessWhitelistEntry);
    8688    bindMethod("addUserScript", &LayoutTestController::addUserScript);
     
    160162    bindMethod("setMockGeolocationError", &LayoutTestController::setMockGeolocationError);
    161163    bindMethod("setMockGeolocationPosition", &LayoutTestController::setMockGeolocationPosition);
    162     bindMethod("addMockSpeechInputResult", &LayoutTestController::addMockSpeechInputResult);
     164    bindMethod("setOverrideIndexedDBBackingStore", &LayoutTestController::setOverrideIndexedDBBackingStore);
    163165    bindMethod("setPageVisibility", &LayoutTestController::setPageVisibility);
    164166    bindMethod("setPluginsEnabled", &LayoutTestController::setPluginsEnabled);
     
    11261128    // We don't use the WebKit icon database.
    11271129    result->setNull();
     1130}
     1131
     1132void LayoutTestController::setOverrideIndexedDBBackingStore(const CppArgumentList& arguments, CppVariant* result)
     1133{
     1134    result->setNull();
     1135#if ENABLE(INDEXED_DATABASE)
     1136    if (arguments.size() < 1 || !arguments[0].isString())
     1137        return;
     1138    string name = arguments[0].toString();
     1139    if (name == "sqlite")
     1140        WebIDBFactory::setOverrideBackingStoreType(WebIDBFactory::SQLiteBackingStore);
     1141    else if (name == "default")
     1142        WebIDBFactory::setOverrideBackingStoreType(WebIDBFactory::DefaultBackingStore);
     1143    else if (name == "leveldb") {
     1144        WebIDBFactory::setOverrideBackingStoreType(WebIDBFactory::LevelDBBackingStore);
     1145
     1146        m_tempFolder = adoptPtr(webkit_support::CreateScopedTempDirectory());
     1147        if (m_tempFolder) {
     1148            if (m_tempFolder->CreateUniqueTempDir())
     1149                WebIDBFactory::setTemporaryDatabaseFolder(WebString::fromUTF8(m_tempFolder->path().c_str()));
     1150        }
     1151    }
     1152#endif
    11281153}
    11291154
     
    14931518    result->setNull();
    14941519    webkit_support::ClearAllDatabases();
     1520    m_tempFolder.clear();
    14951521}
    14961522
  • trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h

    r86930 r87257  
    5757}
    5858
     59namespace webkit_support {
     60class ScopedTempDirectory;
     61}
     62
    5963class TestShell;
    6064
     
    305309    // Sets the default quota for all origins
    306310    void setDatabaseQuota(const CppArgumentList&, CppVariant*);
     311    // Overrides the backend for IndexedDB
     312    void setOverrideIndexedDBBackingStore(const CppArgumentList&, CppVariant*);
    307313
    308314    // Calls setlocale(LC_ALL, ...) for a specified locale.
     
    588594    CppVariant m_globalFlag;
    589595
     596    // Used to create and destroy temporary folders.
     597    OwnPtr<webkit_support::ScopedTempDirectory> m_tempFolder;
     598
    590599    // Bound variable counting the number of top URLs visited.
    591600    CppVariant m_webHistoryItemCount;
Note: See TracChangeset for help on using the changeset viewer.