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

Changeset 194169 in webkit


Ignore:
Timestamp:
Dec 16, 2015, 12:29:09 PM (11 years ago)
Author:
beidson@apple.com
Message:

Modern IDB: Have IDBServerOperations know whether they represent an open or delete request.
​https://bugs.webkit.org/show_bug.cgi?id=152351

Reviewed by NOBODY (OOPS!).

No new tests (Refactor, existing tests pass).

  • Modules/indexeddb/IndexedDB.h:
  • Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:

(WebCore::IDBClient::IDBOpenDBRequest::createDeleteRequest):
(WebCore::IDBClient::IDBOpenDBRequest::createOpenRequest):
(WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest):

  • Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
  • Modules/indexeddb/client/IDBRequestImpl.h:

(WebCore::IDBClient::IDBRequest::requestType):

  • Modules/indexeddb/server/IDBServerOperation.cpp:

(WebCore::IDBServer::IDBServerOperation::isOpenRequest):
(WebCore::IDBServer::IDBServerOperation::isDeleteRequest):

  • Modules/indexeddb/server/IDBServerOperation.h:
  • Modules/indexeddb/server/UniqueIDBDatabase.cpp:

(WebCore::IDBServer::UniqueIDBDatabase::maybeDeleteDatabase):
(WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
(WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade):
(WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):

  • Modules/indexeddb/server/UniqueIDBDatabase.h:
  • Modules/indexeddb/shared/IDBRequestData.cpp:

(WebCore::IDBRequestData::IDBRequestData):

  • Modules/indexeddb/shared/IDBRequestData.h:

(WebCore::IDBRequestData::isOpenRequest):
(WebCore::IDBRequestData::isDeleteRequest):

Location:
trunk/Source/WebCore
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r194161 r194169  
     12015-12-16  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: Have IDBServerOperations know whether they represent an open or delete request.
     4        https://bugs.webkit.org/show_bug.cgi?id=152351
     5
     6        Reviewed by Alex Christensen.
     7
     8        No new tests (Refactor, existing tests pass).
     9
     10        * Modules/indexeddb/IndexedDB.h:
     11       
     12        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
     13        (WebCore::IDBClient::IDBOpenDBRequest::createDeleteRequest):
     14        (WebCore::IDBClient::IDBOpenDBRequest::createOpenRequest):
     15        (WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest):
     16        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
     17       
     18        * Modules/indexeddb/client/IDBRequestImpl.h:
     19        (WebCore::IDBClient::IDBRequest::requestType):
     20       
     21        * Modules/indexeddb/server/IDBServerOperation.cpp:
     22        (WebCore::IDBServer::IDBServerOperation::isOpenRequest):
     23        (WebCore::IDBServer::IDBServerOperation::isDeleteRequest):
     24        * Modules/indexeddb/server/IDBServerOperation.h:
     25       
     26        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
     27        (WebCore::IDBServer::UniqueIDBDatabase::maybeDeleteDatabase):
     28        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
     29        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
     30        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade):
     31        (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):
     32        * Modules/indexeddb/server/UniqueIDBDatabase.h:
     33       
     34        * Modules/indexeddb/shared/IDBRequestData.cpp:
     35        (WebCore::IDBRequestData::IDBRequestData):
     36        * Modules/indexeddb/shared/IDBRequestData.h:
     37        (WebCore::IDBRequestData::isOpenRequest):
     38        (WebCore::IDBRequestData::isDeleteRequest):
     39
    1402015-12-16  Alex Christensen  <achristensen@webkit.org>
    241
  • trunk/Source/WebCore/Modules/indexeddb/IndexedDB.h

    r194010 r194169  
    100100};
    101101
     102enum class RequestType {
     103    Open,
     104    Delete,
     105    Other,
     106};
     107
    102108} // namespace IndexedDB
    103109
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp

    r193970 r194169  
    4242{
    4343    ASSERT(databaseIdentifier.isValid());
    44     return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0));
     44    return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0, IndexedDB::RequestType::Delete));
    4545}
    4646
    … …  
    4848{
    4949    ASSERT(databaseIdentifier.isValid());
    50     return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version));
     50    return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version, IndexedDB::RequestType::Open));
    5151}
    5252   
    53 IDBOpenDBRequest::IDBOpenDBRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
     53IDBOpenDBRequest::IDBOpenDBRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType)
    5454    : IDBRequest(connection, context)
    5555    , m_databaseIdentifier(databaseIdentifier)
    5656    , m_version(version)
    5757{
     58    m_requestType = requestType;
    5859}
    5960
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h

    r193970 r194169  
    5959
    6060private:
    61     IDBOpenDBRequest(IDBConnectionToServer&, ScriptExecutionContext*, const IDBDatabaseIdentifier&, uint64_t version);
     61    IDBOpenDBRequest(IDBConnectionToServer&, ScriptExecutionContext*, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType);
    6262
    6363    void onError(const IDBResultData&);
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.h

    r193970 r194169  
    101101    void setVersionChangeTransaction(IDBTransaction&);
    102102
     103    IndexedDB::RequestType requestType() const { return m_requestType; }
     104
    103105protected:
    104106    IDBRequest(IDBConnectionToServer&, ScriptExecutionContext*);
    … …  
    127129    RefPtr<DOMError> m_domError;
    128130    IDBError m_idbError;
     131    IndexedDB::RequestType m_requestType = { IndexedDB::RequestType::Other };
    129132
    130133private:
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp

    r190379 r194169  
    4545}
    4646
     47bool IDBServerOperation::isOpenRequest() const
     48{
     49    return m_requestData.isOpenRequest();
     50}
     51
     52bool IDBServerOperation::isDeleteRequest() const
     53{
     54    return m_requestData.isDeleteRequest();
     55}
     56
    4757} // namespace IDBServer
    4858} // namespace WebCore
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h

    r190379 r194169  
    4444    const IDBRequestData& requestData() const { return m_requestData; }
    4545
     46    bool isOpenRequest() const;
     47    bool isDeleteRequest() const;
     48
    4649private:
    4750    IDBServerOperation(IDBConnectionToClient&, const IDBRequestData&);
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp

    r194160 r194169  
    110110    for (auto& operation : m_pendingDeleteDatabaseOperations) {
    111111        ASSERT(m_databaseInfo);
     112        ASSERT(operation->isDeleteRequest());
    112113        operation->connection().didDeleteDatabase(IDBResultData::deleteDatabaseSuccess(operation->requestData().requestIdentifier(), *m_databaseInfo));
    113114    }
    … …  
    159160    }
    160161
    161     ASSERT(!m_versionChangeOperation);
     162    ASSERT(!m_currentOperation);
    162163    ASSERT(!m_versionChangeDatabaseConnection);
    163164
    164     m_versionChangeOperation = adoptRef(operation.leakRef());
     165    m_currentOperation = WTF::move(operation);
    165166    m_versionChangeDatabaseConnection = rawConnection;
    166167
    … …  
    176177
    177178    // And we notify this OpenDBRequest that it is blocked until those connections close.
    178     m_versionChangeDatabaseConnection->connectionToClient().notifyOpenDBRequestBlocked(m_versionChangeOperation->requestData().requestIdentifier(), m_databaseInfo->version(), requestedVersion);
     179    m_versionChangeDatabaseConnection->connectionToClient().notifyOpenDBRequestBlocked(m_currentOperation->requestData().requestIdentifier(), m_databaseInfo->version(), requestedVersion);
    179180}
    180181
    … …  
    246247
    247248    ASSERT(!m_versionChangeTransaction);
    248     ASSERT(m_versionChangeOperation);
     249    ASSERT(m_currentOperation);
     250    ASSERT(m_currentOperation->isOpenRequest());
    249251    ASSERT(m_versionChangeDatabaseConnection);
    250252
    251     auto operation = m_versionChangeOperation;
    252     m_versionChangeOperation = nullptr;
     253    auto operation = WTF::move(m_currentOperation);
    253254
    254255    uint64_t requestedVersion = operation->requestData().requestedVersion();
    … …  
    276277void UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade()
    277278{
    278     ASSERT(m_versionChangeOperation);
     279    ASSERT(m_currentOperation);
     280    ASSERT(m_currentOperation->isOpenRequest());
    279281    ASSERT(m_versionChangeDatabaseConnection);
    280282
    281     notifyConnectionsOfVersionChange(m_versionChangeOperation->requestData().requestedVersion());
     283    notifyConnectionsOfVersionChange(m_currentOperation->requestData().requestedVersion());
    282284}
    283285
    … …  
    922924    // If the database was not deleted in the previous step, try to run a transaction now.
    923925    if (m_pendingTransactions.isEmpty()) {
    924         if (!hasAnyOpenConnections() && m_versionChangeOperation) {
     926        if (!hasAnyOpenConnections() && m_currentOperation) {
    925927            startVersionChangeTransaction();
    926928            return;
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h

    r194160 r194169  
    174174    Deque<Ref<IDBServerOperation>> m_pendingOpenDatabaseOperations;
    175175    Deque<Ref<IDBServerOperation>> m_pendingDeleteDatabaseOperations;
     176    RefPtr<IDBServerOperation> m_currentOperation;
    176177
    177178    HashSet<RefPtr<UniqueIDBDatabaseConnection>> m_openDatabaseConnections;
    178179    HashSet<RefPtr<UniqueIDBDatabaseConnection>> m_closePendingDatabaseConnections;
    179180
    180     RefPtr<IDBServerOperation> m_versionChangeOperation;
    181181    RefPtr<UniqueIDBDatabaseConnection> m_versionChangeDatabaseConnection;
    182182    UniqueIDBDatabaseTransaction* m_versionChangeTransaction { nullptr };
  • trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp

    r192490 r194169  
    3939    , m_databaseIdentifier(request.databaseIdentifier())
    4040    , m_requestedVersion(request.version())
     41    , m_requestType(request.requestType())
    4142{
    4243}
    … …  
    6364    , m_databaseIdentifier(other.m_databaseIdentifier)
    6465    , m_requestedVersion(other.m_requestedVersion)
     66    , m_requestType(other.m_requestType)
    6567{
    6668    if (other.m_requestIdentifier)
  • trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h

    r192490 r194169  
    3131#include "IDBDatabaseIdentifier.h"
    3232#include "IDBResourceIdentifier.h"
     33#include "IndexedDB.h"
    3334
    3435namespace WebCore {
    … …  
    6263    uint64_t requestedVersion() const;
    6364
     65    bool isOpenRequest() const { return m_requestType == IndexedDB::RequestType::Open; }
     66    bool isDeleteRequest() const { return m_requestType == IndexedDB::RequestType::Delete; }
     67
    6468    IDBRequestData isolatedCopy();
    6569
    … …  
    7579    IDBDatabaseIdentifier m_databaseIdentifier;
    7680    uint64_t m_requestedVersion { 0 };
     81
     82    IndexedDB::RequestType m_requestType { IndexedDB::RequestType::Other };
    7783};
    7884
Note: See TracChangeset for help on using the changeset viewer.