Changeset 199843 in webkit


Ignore:
Timestamp:
Apr 21, 2016 4:25:10 PM (8 years ago)
Author:
beidson@apple.com
Message:

Modern IDB (Workers): Move IDBConnectionProxy into IDBRequest and IDBDatabase.
https://bugs.webkit.org/show_bug.cgi?id=156868

Reviewed by Tim Horton.

No new tests (No behavior change).

  • Modules/indexeddb/IDBDatabase.cpp:

(WebCore::IDBDatabase::create):
(WebCore::IDBDatabase::IDBDatabase):
(WebCore::IDBDatabase::~IDBDatabase):
(WebCore::IDBDatabase::transaction):
(WebCore::IDBDatabase::maybeCloseInServer):

  • Modules/indexeddb/IDBDatabase.h:

(WebCore::IDBDatabase::connectionProxy):
(WebCore::IDBDatabase::serverConnection):

  • Modules/indexeddb/IDBOpenDBRequest.cpp:

(WebCore::IDBOpenDBRequest::createDeleteRequest):
(WebCore::IDBOpenDBRequest::createOpenRequest):
(WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
(WebCore::IDBOpenDBRequest::onSuccess):
(WebCore::IDBOpenDBRequest::onUpgradeNeeded):
(WebCore::IDBOpenDBRequest::requestCompleted):
(WebCore::IDBOpenDBRequest::maybeCreateDeleteRequest): Deleted.
(WebCore::IDBOpenDBRequest::maybeCreateOpenRequest): Deleted.

  • Modules/indexeddb/IDBOpenDBRequest.h:
  • Modules/indexeddb/IDBRequest.cpp:

(WebCore::IDBRequest::IDBRequest):
(WebCore::IDBRequest::connectionToServer): Deleted.

  • Modules/indexeddb/IDBRequest.h:

(WebCore::IDBRequest::connectionProxy):

  • Modules/indexeddb/IDBTransaction.h:
  • Modules/indexeddb/client/IDBConnectionProxy.cpp:

(WebCore::IDBClient::IDBConnectionProxy::openDatabase):
(WebCore::IDBClient::IDBConnectionProxy::deleteDatabase):

Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r199840 r199843  
     12016-04-21  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB (Workers): Move IDBConnectionProxy into IDBRequest and IDBDatabase.
     4        https://bugs.webkit.org/show_bug.cgi?id=156868
     5
     6        Reviewed by Tim Horton.
     7
     8        No new tests (No behavior change).
     9
     10        * Modules/indexeddb/IDBDatabase.cpp:
     11        (WebCore::IDBDatabase::create):
     12        (WebCore::IDBDatabase::IDBDatabase):
     13        (WebCore::IDBDatabase::~IDBDatabase):
     14        (WebCore::IDBDatabase::transaction):
     15        (WebCore::IDBDatabase::maybeCloseInServer):
     16        * Modules/indexeddb/IDBDatabase.h:
     17        (WebCore::IDBDatabase::connectionProxy):
     18        (WebCore::IDBDatabase::serverConnection):
     19
     20        * Modules/indexeddb/IDBOpenDBRequest.cpp:
     21        (WebCore::IDBOpenDBRequest::createDeleteRequest):
     22        (WebCore::IDBOpenDBRequest::createOpenRequest):
     23        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
     24        (WebCore::IDBOpenDBRequest::onSuccess):
     25        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
     26        (WebCore::IDBOpenDBRequest::requestCompleted):
     27        (WebCore::IDBOpenDBRequest::maybeCreateDeleteRequest): Deleted.
     28        (WebCore::IDBOpenDBRequest::maybeCreateOpenRequest): Deleted.
     29        * Modules/indexeddb/IDBOpenDBRequest.h:
     30
     31        * Modules/indexeddb/IDBRequest.cpp:
     32        (WebCore::IDBRequest::IDBRequest):
     33        (WebCore::IDBRequest::connectionToServer): Deleted.
     34        * Modules/indexeddb/IDBRequest.h:
     35        (WebCore::IDBRequest::connectionProxy):
     36
     37        * Modules/indexeddb/IDBTransaction.h:
     38
     39        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
     40        (WebCore::IDBClient::IDBConnectionProxy::openDatabase):
     41        (WebCore::IDBClient::IDBConnectionProxy::deleteDatabase):
     42
    1432016-04-21  Jiewen Tan  <jiewen_tan@apple.com>
    244
  • trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp

    r199668 r199843  
    3131#include "DOMStringList.h"
    3232#include "EventQueue.h"
     33#include "IDBConnectionProxy.h"
    3334#include "IDBConnectionToServer.h"
    3435#include "IDBDatabaseException.h"
     
    4344namespace WebCore {
    4445
    45 Ref<IDBDatabase> IDBDatabase::create(ScriptExecutionContext& context, IDBClient::IDBConnectionToServer& connection, const IDBResultData& resultData)
    46 {
    47     return adoptRef(*new IDBDatabase(context, connection, resultData));
    48 }
    49 
    50 IDBDatabase::IDBDatabase(ScriptExecutionContext& context, IDBClient::IDBConnectionToServer& connection, const IDBResultData& resultData)
     46Ref<IDBDatabase> IDBDatabase::create(ScriptExecutionContext& context, IDBClient::IDBConnectionProxy& connectionProxy, const IDBResultData& resultData)
     47{
     48    return adoptRef(*new IDBDatabase(context, connectionProxy, resultData));
     49}
     50
     51IDBDatabase::IDBDatabase(ScriptExecutionContext& context, IDBClient::IDBConnectionProxy& connectionProxy, const IDBResultData& resultData)
    5152    : WebCore::ActiveDOMObject(&context)
    52     , m_serverConnection(connection)
     53    , m_connectionProxy(connectionProxy)
    5354    , m_info(resultData.databaseInfo())
    5455    , m_databaseConnectionIdentifier(resultData.databaseConnectionIdentifier())
     
    5758    suspendIfNeeded();
    5859    relaxAdoptionRequirement();
    59     m_serverConnection->registerDatabaseConnection(*this);
     60    m_connectionProxy->connectionToServer().registerDatabaseConnection(*this);
    6061}
    6162
    6263IDBDatabase::~IDBDatabase()
    6364{
    64     m_serverConnection->unregisterDatabaseConnection(*this);
     65    m_connectionProxy->connectionToServer().unregisterDatabaseConnection(*this);
    6566}
    6667
     
    181182    }
    182183
    183     auto info = IDBTransactionInfo::clientTransaction(m_serverConnection.get(), objectStores, mode);
     184    auto info = IDBTransactionInfo::clientTransaction(m_connectionProxy->connectionToServer(), objectStores, mode);
    184185    auto transaction = IDBTransaction::create(*this, info);
    185186
     
    245246
    246247    m_closedInServer = true;
    247     m_serverConnection->databaseConnectionClosed(*this);
     248    m_connectionProxy->connectionToServer().databaseConnectionClosed(*this);
    248249}
    249250
  • trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h

    r199668 r199843  
    3131#include "EventTarget.h"
    3232#include "ExceptionCode.h"
     33#include "IDBConnectionProxy.h"
    3334#include "IDBConnectionToServer.h"
    3435#include "IDBDatabaseInfo.h"
     
    4546class IDBDatabase : public RefCounted<IDBDatabase>, public EventTargetWithInlineData, public ActiveDOMObject {
    4647public:
    47     static Ref<IDBDatabase> create(ScriptExecutionContext&, IDBClient::IDBConnectionToServer&, const IDBResultData&);
     48    static Ref<IDBDatabase> create(ScriptExecutionContext&, IDBClient::IDBConnectionProxy&, const IDBResultData&);
    4849
    4950    virtual ~IDBDatabase();
     
    8788    void fireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion);
    8889
    89     IDBClient::IDBConnectionToServer& serverConnection() { return m_serverConnection.get(); }
     90    IDBClient::IDBConnectionProxy& connectionProxy() { return m_connectionProxy.get(); }
     91
     92    // FIXME: Remove the need for this accessor.
     93    IDBClient::IDBConnectionToServer& serverConnection() { return m_connectionProxy->connectionToServer(); }
    9094
    9195    void didCreateIndexInfo(const IDBIndexInfo&);
     
    99103
    100104private:
    101     IDBDatabase(ScriptExecutionContext&, IDBClient::IDBConnectionToServer&, const IDBResultData&);
     105    IDBDatabase(ScriptExecutionContext&, IDBClient::IDBConnectionProxy&, const IDBResultData&);
    102106
    103107    void didCommitOrAbortTransaction(IDBTransaction&);
     
    105109    void maybeCloseInServer();
    106110
    107     Ref<IDBClient::IDBConnectionToServer> m_serverConnection;
     111    Ref<IDBClient::IDBConnectionProxy> m_connectionProxy;
    108112    IDBDatabaseInfo m_info;
    109113    uint64_t m_databaseConnectionIdentifier { 0 };
  • trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp

    r199804 r199843  
    4343namespace WebCore {
    4444
    45 RefPtr<IDBOpenDBRequest> IDBOpenDBRequest::maybeCreateDeleteRequest(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier)
    46 {
    47     ASSERT(databaseIdentifier.isValid());
    48     auto* proxy = context.idbConnectionProxy();
    49     if (!proxy)
    50         return nullptr;
    51 
    52     return adoptRef(new IDBOpenDBRequest(context, proxy->serverConnectionIdentifier(), databaseIdentifier, 0, IndexedDB::RequestType::Delete));
    53 }
    54 
    55 RefPtr<IDBOpenDBRequest> IDBOpenDBRequest::maybeCreateOpenRequest(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
    56 {
    57     ASSERT(databaseIdentifier.isValid());
    58     auto* proxy = context.idbConnectionProxy();
    59     if (!proxy)
    60         return nullptr;
    61 
    62     return adoptRef(new IDBOpenDBRequest(context, proxy->serverConnectionIdentifier(), databaseIdentifier, version, IndexedDB::RequestType::Open));
     45Ref<IDBOpenDBRequest> IDBOpenDBRequest::createDeleteRequest(ScriptExecutionContext& context, IDBClient::IDBConnectionProxy& connectionProxy, const IDBDatabaseIdentifier& databaseIdentifier)
     46{
     47    return adoptRef(*new IDBOpenDBRequest(context, connectionProxy, databaseIdentifier, 0, IndexedDB::RequestType::Delete));
     48}
     49
     50Ref<IDBOpenDBRequest> IDBOpenDBRequest::createOpenRequest(ScriptExecutionContext& context, IDBClient::IDBConnectionProxy& connectionProxy, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
     51{
     52    return adoptRef(*new IDBOpenDBRequest(context, connectionProxy, databaseIdentifier, version, IndexedDB::RequestType::Open));
    6353}
    6454   
    65 IDBOpenDBRequest::IDBOpenDBRequest(ScriptExecutionContext& context, uint64_t serverConnectionIdentifier, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType)
    66     : IDBRequest(context, serverConnectionIdentifier)
     55IDBOpenDBRequest::IDBOpenDBRequest(ScriptExecutionContext& context, IDBClient::IDBConnectionProxy& connectionProxy, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType)
     56    : IDBRequest(context, connectionProxy)
    6757    , m_databaseIdentifier(databaseIdentifier)
    6858    , m_version(version)
     
    129119    LOG(IndexedDB, "IDBOpenDBRequest::onSuccess()");
    130120
    131     auto* connection = connectionToServer();
    132     if (!connection)
    133         return;
    134 
    135     setResult(IDBDatabase::create(*scriptExecutionContext(), *connection, resultData));
     121    setResult(IDBDatabase::create(*scriptExecutionContext(), connectionProxy(), resultData));
    136122    m_isDone = true;
    137123
     
    141127void IDBOpenDBRequest::onUpgradeNeeded(const IDBResultData& resultData)
    142128{
    143     auto* connection = connectionToServer();
    144     if (!connection)
    145         return;
    146 
    147     Ref<IDBDatabase> database = IDBDatabase::create(*scriptExecutionContext(), *connection, resultData);
     129    Ref<IDBDatabase> database = IDBDatabase::create(*scriptExecutionContext(), connectionProxy(), resultData);
    148130    Ref<IDBTransaction> transaction = database->startVersionChangeTransaction(resultData.transactionInfo(), *this);
    149131
     
    179161{
    180162    LOG(IndexedDB, "IDBOpenDBRequest::requestCompleted");
    181 
    182     auto* connection = connectionToServer();
    183     if (!connection)
    184         return;
    185163
    186164    // If an Open request was completed after the page has navigated, leaving this request
     
    190168        switch (data.type()) {
    191169        case IDBResultType::OpenDatabaseSuccess:
    192             connection->abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), IDBResourceIdentifier::emptyValue());
     170            connectionProxy().connectionToServer().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), IDBResourceIdentifier::emptyValue());
    193171            break;
    194172        case IDBResultType::OpenDatabaseUpgradeNeeded:
    195             connection->abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), data.transactionInfo().identifier());
     173            connectionProxy().connectionToServer().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), data.transactionInfo().identifier());
    196174            break;
    197175        default:
  • trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h

    r199804 r199843  
    3737class IDBOpenDBRequest final : public IDBRequest {
    3838public:
    39     static RefPtr<IDBOpenDBRequest> maybeCreateDeleteRequest(ScriptExecutionContext&, const IDBDatabaseIdentifier&);
    40     static RefPtr<IDBOpenDBRequest> maybeCreateOpenRequest(ScriptExecutionContext&, const IDBDatabaseIdentifier&, uint64_t version);
     39    static Ref<IDBOpenDBRequest> createDeleteRequest(ScriptExecutionContext&, IDBClient::IDBConnectionProxy&, const IDBDatabaseIdentifier&);
     40    static Ref<IDBOpenDBRequest> createOpenRequest(ScriptExecutionContext&, IDBClient::IDBConnectionProxy&, const IDBDatabaseIdentifier&, uint64_t version);
    4141
    4242    virtual ~IDBOpenDBRequest();
     
    5353
    5454private:
    55     IDBOpenDBRequest(ScriptExecutionContext&, uint64_t serverConnectionIdentifier, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType);
     55    IDBOpenDBRequest(ScriptExecutionContext&, IDBClient::IDBConnectionProxy&, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType);
    5656
    5757    bool dispatchEvent(Event&) final;
  • trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp

    r199804 r199843  
    7070}
    7171
    72 IDBRequest::IDBRequest(ScriptExecutionContext& context, uint64_t connectionIdentifier)
     72IDBRequest::IDBRequest(ScriptExecutionContext& context, IDBClient::IDBConnectionProxy& connectionProxy)
    7373    : ActiveDOMObject(&context)
    74     , m_resourceIdentifier(connectionIdentifier)
     74    , m_resourceIdentifier(connectionProxy.serverConnectionIdentifier())
     75    , m_connectionProxy(connectionProxy)
    7576{
    7677    suspendIfNeeded();
     
    8283    , m_resourceIdentifier(transaction.serverConnection())
    8384    , m_objectStoreSource(&objectStore)
     85    , m_connectionProxy(transaction.database().connectionProxy())
    8486{
    8587    suspendIfNeeded();
     
    9395    , m_indexSource(cursor.index())
    9496    , m_pendingCursor(&cursor)
     97    , m_connectionProxy(transaction.database().connectionProxy())
    9598{
    9699    suspendIfNeeded();
     
    104107    , m_resourceIdentifier(transaction.serverConnection())
    105108    , m_indexSource(&index)
     109    , m_connectionProxy(transaction.database().connectionProxy())
    106110{
    107111    suspendIfNeeded();
     
    408412}
    409413
    410 // FIXME: Temporarily required during bringup of IDB-in-Workers.
    411 // Once all IDB object reliance on the IDBConnectionToServer has been shifted to reliance on
    412 // IDBConnectionProxy, remove this.
    413 IDBClient::IDBConnectionToServer* IDBRequest::connectionToServer()
    414 {
    415     ASSERT(isMainThread());
    416     auto* context = scriptExecutionContext();
    417     auto* proxy = context ? context->idbConnectionProxy() : nullptr;
    418     return proxy ? &proxy->connectionToServer() : nullptr;
    419 }
    420 
    421414} // namespace WebCore
    422415
  • trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h

    r199804 r199843  
    4949
    5050namespace IDBClient {
     51class IDBConnectionProxy;
    5152class IDBConnectionToServer;
    5253}
     
    105106
    106107protected:
    107     IDBRequest(ScriptExecutionContext&, uint64_t connectionIdentifier);
     108    IDBRequest(ScriptExecutionContext&, IDBClient::IDBConnectionProxy&);
    108109
    109110    void enqueueEvent(Ref<Event>&&);
     
    112113    void setResult(Ref<IDBDatabase>&&);
    113114
    114     // FIXME: Temporarily required during bringup of IDB-in-Workers.
    115     // Once all IDB object reliance on the IDBConnectionToServer has been shifted to reliance on
    116     // IDBConnectionProxy, remove this.
    117     IDBClient::IDBConnectionToServer* connectionToServer();
     115    IDBClient::IDBConnectionProxy& connectionProxy() { return m_connectionProxy.get(); }
    118116
    119117    // FIXME: Protected data members aren't great for maintainability.
     
    171169
    172170    std::unique_ptr<ScopeGuard> m_cursorRequestNotifier;
     171
     172    Ref<IDBClient::IDBConnectionProxy> m_connectionProxy;
    173173};
    174174
  • trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h

    r199668 r199843  
    3131#include "EventTarget.h"
    3232#include "IDBError.h"
     33#include "IDBOpenDBRequest.h"
    3334#include "IDBTransactionInfo.h"
    3435#include "IndexedDB.h"
     
    4950class IDBObjectStore;
    5051class IDBObjectStoreInfo;
    51 class IDBOpenDBRequest;
    5252class IDBResultData;
    5353class SerializedScriptValue;
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp

    r199835 r199843  
    5858RefPtr<IDBOpenDBRequest> IDBConnectionProxy::openDatabase(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
    5959{
    60     // FIXME: Get rid of the need for IDB objects to hold a reference to the IDBConnectionToServer,
    61     // which will enable them to operate on Worker threads.
     60    // FIXME: Handle Workers
    6261    if (!isMainThread())
    6362        return nullptr;
    6463
    65     auto request = IDBOpenDBRequest::maybeCreateOpenRequest(context, databaseIdentifier, version);
    66     if (!request)
    67         return nullptr;
    68 
    69     m_connectionToServer->openDatabase(*request);
    70     return request;
     64    auto request = IDBOpenDBRequest::createOpenRequest(context, *this, databaseIdentifier, version);
     65    m_connectionToServer->openDatabase(request.get());
     66    return WTFMove(request);
    7167}
    7268
    7369RefPtr<IDBOpenDBRequest> IDBConnectionProxy::deleteDatabase(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier)
    7470{
    75     // FIXME: Get rid of the need for IDB objects to hold a reference to the IDBConnectionToServer,
    76     // which will enable them to operate on Worker threads.
     71    // FIXME: Handle Workers
    7772    if (!isMainThread())
    7873        return nullptr;
    7974
    80     auto request = IDBOpenDBRequest::maybeCreateDeleteRequest(context, databaseIdentifier);
    81     if (!request)
    82         return nullptr;
    83 
    84     m_connectionToServer->deleteDatabase(*request);
    85     return request;
     75    auto request = IDBOpenDBRequest::createDeleteRequest(context, *this, databaseIdentifier);
     76    m_connectionToServer->deleteDatabase(request.get());
     77    return WTFMove(request);
    8678}
    8779
Note: See TracChangeset for help on using the changeset viewer.