⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 119525 in webkit


Ignore:
Timestamp:
Jun 5, 2012, 2:31:40 PM (14 years ago)
Author:
kerz@chromium.org
Message:

Revert 119486 - Merge 117978 - IndexedDB: Fire error when there are problems opening a DB
https://bugs.webkit.org/show_bug.cgi?id=85579

Source/WebCore:

We used to either fire success or get into an infinite loop.

Reviewed by Tony Chang.

New unit test in
Source/WebKit/chromium/tests/IDBAbortOnCorruptTest.cpp

  • Modules/indexeddb/IDBDatabaseBackendImpl.cpp:

(WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
(WebCore::IDBDatabaseBackendImpl::openInternal):
(WebCore::IDBDatabaseBackendImpl::openConnection):

  • Modules/indexeddb/IDBDatabaseBackendImpl.h:

(WebCore::IDBDatabaseBackendImpl::create):
(IDBDatabaseBackendImpl):

  • Modules/indexeddb/IDBFactoryBackendImpl.cpp:

(WebCore::IDBFactoryBackendImpl::deleteDatabase):
(WebCore::IDBFactoryBackendImpl::openInternal):

  • Modules/indexeddb/IDBFactoryBackendImpl.h:

(IDBFactoryBackendImpl):

  • Modules/indexeddb/IDBLevelDBBackingStore.h:

(IDBLevelDBBackingStore):

Source/WebKit/chromium:

Reviewed by Tony Chang.

  • WebKit.gypi:
  • tests/IDBAbortOnCorruptTest.cpp: Added.

(WebCore):
(MockIDBCallbacks):
(WebCore::MockIDBCallbacks::MockIDBCallbacks):
(WebCore::MockIDBCallbacks::~MockIDBCallbacks):
(WebCore::MockIDBCallbacks::onError):
(WebCore::MockIDBCallbacks::onSuccess):
(WebCore::MockIDBCallbacks::onSuccessWithContinuation):
(WebCore::MockIDBCallbacks::onSuccessWithPrefetch):
(WebCore::MockIDBCallbacks::onBlocked):
(FailingBackingStore):
(WebCore::FailingBackingStore::~FailingBackingStore):
(WebCore::FailingBackingStore::open):
(WebCore::FailingBackingStore::createIDBDatabaseMetaData):
(FailingIDBFactoryBackendImpl):
(WebCore::FailingIDBFactoryBackendImpl::~FailingIDBFactoryBackendImpl):
(WebCore::FailingIDBFactoryBackendImpl::create):
(WebCore::FailingIDBFactoryBackendImpl::removeIDBDatabaseBackend):
(WebCore::FailingIDBFactoryBackendImpl::openBackingStore):
(WebCore::TEST):

  • tests/IDBFakeBackingStore.h: Copied from Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.h.

(WebCore):
(IDBFakeBackingStore):

TBR=dgrogan@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10536007

TBR=dgrogan@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10534013

Location:
branches/chromium/1132/Source
Files:
2 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • branches/chromium/1132/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp

    r119486 r119525  
    9494};
    9595
    96 PassRefPtr<IDBDatabaseBackendImpl> IDBDatabaseBackendImpl::create(const String& name, IDBBackingStore* database, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier)
    97 {
    98     RefPtr<IDBDatabaseBackendImpl> backend = adoptRef(new IDBDatabaseBackendImpl(name, database, coordinator, factory, uniqueIdentifier));
    99     if (!backend->openInternal())
    100         return 0;
    101     return backend.release();
    102 }
    103 
    10496IDBDatabaseBackendImpl::IDBDatabaseBackendImpl(const String& name, IDBBackingStore* backingStore, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier)
    10597    : m_backingStore(backingStore)
     
    112104{
    113105    ASSERT(!m_name.isNull());
    114 }
    115 
    116 bool IDBDatabaseBackendImpl::openInternal()
     106    openInternal();
     107}
     108
     109void IDBDatabaseBackendImpl::openInternal()
    117110{
    118111    bool success = m_backingStore->getIDBDatabaseMetaData(m_name, m_version, m_id);
     
    120113    if (success) {
    121114        loadObjectStores();
    122         return true;
    123     }
    124     return m_backingStore->createIDBDatabaseMetaData(m_name, m_version, m_id);
     115        return;
     116    }
     117    if (!m_backingStore->createIDBDatabaseMetaData(m_name, m_version, m_id))
     118        ASSERT_NOT_REACHED(); // FIXME: Need better error handling.
    125119}
    126120
     
    332326        m_pendingOpenCalls.append(PendingOpenCall::create(callbacks));
    333327    else {
    334         if (m_id == InvalidId && !openInternal())
    335             callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Internal error."));
    336         else
    337             callbacks->onSuccess(this);
     328        if (m_id == InvalidId)
     329            openInternal();
     330        callbacks->onSuccess(this);
    338331    }
    339332}
  • branches/chromium/1132/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h

    r119486 r119525  
    4646class IDBDatabaseBackendImpl : public IDBDatabaseBackendInterface {
    4747public:
    48     static PassRefPtr<IDBDatabaseBackendImpl> create(const String& name, IDBBackingStore* database, IDBTransactionCoordinator*, IDBFactoryBackendImpl*, const String& uniqueIdentifier);
     48    static PassRefPtr<IDBDatabaseBackendImpl> create(const String& name, IDBBackingStore* database, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier)
     49    {
     50        return adoptRef(new IDBDatabaseBackendImpl(name, database, coordinator, factory, uniqueIdentifier));
     51    }
    4952    virtual ~IDBDatabaseBackendImpl();
    5053
     
    7780    IDBDatabaseBackendImpl(const String& name, IDBBackingStore* database, IDBTransactionCoordinator*, IDBFactoryBackendImpl*, const String& uniqueIdentifier);
    7881
    79     bool openInternal();
     82    void openInternal();
    8083    void loadObjectStores();
    8184    void processPendingCalls();
  • branches/chromium/1132/Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp

    r119486 r119525  
    130130
    131131    RefPtr<IDBDatabaseBackendImpl> databaseBackend = IDBDatabaseBackendImpl::create(name, backingStore.get(), m_transactionCoordinator.get(), this, uniqueIdentifier);
    132     if (databaseBackend) {
    133         m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());
    134         databaseBackend->deleteDatabase(callbacks);
    135     } else
    136         callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Internal error."));
     132    m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());
     133    databaseBackend->deleteDatabase(callbacks);
    137134}
    138135
     
    181178
    182179    RefPtr<IDBDatabaseBackendImpl> databaseBackend = IDBDatabaseBackendImpl::create(name, backingStore.get(), m_transactionCoordinator.get(), this, uniqueIdentifier);
    183     if (databaseBackend) {
    184         callbacks->onSuccess(RefPtr<IDBDatabaseBackendInterface>(databaseBackend.get()).release());
    185         m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());
    186     } else
    187         callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Internal error."));
     180    callbacks->onSuccess(RefPtr<IDBDatabaseBackendInterface>(databaseBackend.get()).release());
     181    m_databaseBackendMap.set(uniqueIdentifier, databaseBackend.get());
    188182}
    189183
  • branches/chromium/1132/Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.h

    r119486 r119525  
    5252
    5353    // Notifications from weak pointers.
    54     virtual void removeIDBDatabaseBackend(const String& uniqueIdentifier);
     54    void removeIDBDatabaseBackend(const String& uniqueIdentifier);
    5555    void addIDBBackingStore(const String& fileIdentifier, IDBBackingStore*);
    56     virtual void removeIDBBackingStore(const String& fileIdentifier);
     56    void removeIDBBackingStore(const String& fileIdentifier);
    5757
    5858    virtual void getDatabaseNames(PassRefPtr<IDBCallbacks>, PassRefPtr<SecurityOrigin>, Frame*, const String& dataDir);
     
    6262    virtual void deleteDatabase(const String& name, PassRefPtr<IDBCallbacks>, PassRefPtr<SecurityOrigin>, Frame*, const String& dataDir);
    6363
    64 protected:
     64private:
    6565    IDBFactoryBackendImpl();
    66     virtual PassRefPtr<IDBBackingStore> openBackingStore(PassRefPtr<SecurityOrigin>, const String& dataDir);
    67 
    68 private:
     66    PassRefPtr<IDBBackingStore> openBackingStore(PassRefPtr<SecurityOrigin>, const String& dataDir);
    6967    void openInternal(const String& name, IDBCallbacks*, PassRefPtr<SecurityOrigin>, const String& dataDir);
    7068
  • branches/chromium/1132/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.h

    r119486 r119525  
    8181    static bool backingStoreExists(SecurityOrigin*, const String& name, const String& pathBase);
    8282
    83 protected:
     83private:
    8484    IDBLevelDBBackingStore(const String& identifier, IDBFactoryBackendImpl*, PassOwnPtr<LevelDBDatabase>);
    8585
    86 private:
    8786    String m_identifier;
    8887    RefPtr<IDBFactoryBackendImpl> m_factory;
  • branches/chromium/1132/Source/WebKit/chromium/WebKit.gypi

    r119486 r119525  
    105105            'tests/FrameTestHelpers.h',
    106106            'tests/GraphicsLayerChromiumTest.cpp',
    107             'tests/IDBAbortOnCorruptTest.cpp',
    108107            'tests/IDBBindingUtilitiesTest.cpp',
    109             'tests/IDBFakeBackingStore.h',
    110108            'tests/IDBKeyPathTest.cpp',
    111109            'tests/IDBLevelDBCodingTest.cpp',
Note: See TracChangeset for help on using the changeset viewer.