Changeset 199804 in webkit


Ignore:
Timestamp:
Apr 20, 2016 9:42:17 PM (8 years ago)
Author:
beidson@apple.com
Message:

Modern IDB (Workers): Remove IDBRequest/IDBOpenDBRequest's requirement to get an IDBServerConnection around.
https://bugs.webkit.org/show_bug.cgi?id=156826

Reviewed by Alex Christensen.

No new tests (No behavior change, existing tests pass).

This doesn't appear to do much but make things a little more complicated, but it's the first of a few
small pushes in the right direction.

  • Modules/indexeddb/IDBOpenDBRequest.cpp:

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

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

(WebCore::IDBRequest::IDBRequest):
(WebCore::IDBRequest::connectionToServer):

  • Modules/indexeddb/IDBRequest.h:

(WebCore::IDBRequest::connection): Deleted.

  • Modules/indexeddb/client/IDBConnectionProxy.cpp:

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

  • Modules/indexeddb/client/IDBConnectionProxy.h:

(WebCore::IDBClient::IDBConnectionProxy::serverConnectionIdentifier):

  • Modules/indexeddb/shared/IDBResourceIdentifier.cpp:

(WebCore::IDBResourceIdentifier::IDBResourceIdentifier):

  • Modules/indexeddb/shared/IDBResourceIdentifier.h:
Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r199802 r199804  
     12016-04-20  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB (Workers): Remove IDBRequest/IDBOpenDBRequest's requirement to get an IDBServerConnection around.
     4        https://bugs.webkit.org/show_bug.cgi?id=156826
     5
     6        Reviewed by Alex Christensen.
     7
     8        No new tests (No behavior change, existing tests pass).
     9
     10        This doesn't appear to do much but make things a little more complicated, but it's the first of a few
     11        small pushes in the right direction.
     12       
     13        * Modules/indexeddb/IDBOpenDBRequest.cpp:
     14        (WebCore::IDBOpenDBRequest::maybeCreateDeleteRequest):
     15        (WebCore::IDBOpenDBRequest::maybeCreateOpenRequest):
     16        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
     17        (WebCore::IDBOpenDBRequest::onSuccess):
     18        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
     19        (WebCore::IDBOpenDBRequest::requestCompleted):
     20        (WebCore::IDBOpenDBRequest::createDeleteRequest): Deleted.
     21        (WebCore::IDBOpenDBRequest::createOpenRequest): Deleted.
     22        * Modules/indexeddb/IDBOpenDBRequest.h:
     23       
     24        * Modules/indexeddb/IDBRequest.cpp:
     25        (WebCore::IDBRequest::IDBRequest):
     26        (WebCore::IDBRequest::connectionToServer):
     27        * Modules/indexeddb/IDBRequest.h:
     28        (WebCore::IDBRequest::connection): Deleted.
     29       
     30        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
     31        (WebCore::IDBClient::IDBConnectionProxy::IDBConnectionProxy):
     32        (WebCore::IDBClient::IDBConnectionProxy::connectionToServer):
     33        (WebCore::IDBClient::IDBConnectionProxy::openDatabase):
     34        (WebCore::IDBClient::IDBConnectionProxy::deleteDatabase):
     35        * Modules/indexeddb/client/IDBConnectionProxy.h:
     36        (WebCore::IDBClient::IDBConnectionProxy::serverConnectionIdentifier):
     37       
     38        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
     39        (WebCore::IDBResourceIdentifier::IDBResourceIdentifier):
     40        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
     41
    1422016-04-20  John Wilander  <wilander@apple.com>
    243
  • trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp

    r199668 r199804  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015, 2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3030
    3131#include "DOMError.h"
     32#include "IDBConnectionProxy.h"
     33#include "IDBConnectionToServer.h"
    3234#include "IDBDatabase.h"
    3335#include "IDBError.h"
     
    3739#include "IDBVersionChangeEvent.h"
    3840#include "Logging.h"
     41#include "ScriptExecutionContext.h"
    3942
    4043namespace WebCore {
    4144
    42 Ref<IDBOpenDBRequest> IDBOpenDBRequest::createDeleteRequest(IDBClient::IDBConnectionToServer& connection, ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier)
     45RefPtr<IDBOpenDBRequest> IDBOpenDBRequest::maybeCreateDeleteRequest(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier)
    4346{
    4447    ASSERT(databaseIdentifier.isValid());
    45     return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0, IndexedDB::RequestType::Delete));
    46 }
    47 
    48 Ref<IDBOpenDBRequest> IDBOpenDBRequest::createOpenRequest(IDBClient::IDBConnectionToServer& connection, ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
     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
     55RefPtr<IDBOpenDBRequest> IDBOpenDBRequest::maybeCreateOpenRequest(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
    4956{
    5057    ASSERT(databaseIdentifier.isValid());
    51     return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version, IndexedDB::RequestType::Open));
     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));
    5263}
    5364   
    54 IDBOpenDBRequest::IDBOpenDBRequest(IDBClient::IDBConnectionToServer& connection, ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType)
    55     : IDBRequest(connection, context)
     65IDBOpenDBRequest::IDBOpenDBRequest(ScriptExecutionContext& context, uint64_t serverConnectionIdentifier, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType)
     66    : IDBRequest(context, serverConnectionIdentifier)
    5667    , m_databaseIdentifier(databaseIdentifier)
    5768    , m_version(version)
     
    118129    LOG(IndexedDB, "IDBOpenDBRequest::onSuccess()");
    119130
    120     if (!scriptExecutionContext())
    121         return;
    122 
    123     setResult(IDBDatabase::create(*scriptExecutionContext(), connection(), resultData));
     131    auto* connection = connectionToServer();
     132    if (!connection)
     133        return;
     134
     135    setResult(IDBDatabase::create(*scriptExecutionContext(), *connection, resultData));
    124136    m_isDone = true;
    125137
     
    129141void IDBOpenDBRequest::onUpgradeNeeded(const IDBResultData& resultData)
    130142{
    131     Ref<IDBDatabase> database = IDBDatabase::create(*scriptExecutionContext(), connection(), resultData);
     143    auto* connection = connectionToServer();
     144    if (!connection)
     145        return;
     146
     147    Ref<IDBDatabase> database = IDBDatabase::create(*scriptExecutionContext(), *connection, resultData);
    132148    Ref<IDBTransaction> transaction = database->startVersionChangeTransaction(resultData.transactionInfo(), *this);
    133149
     
    163179{
    164180    LOG(IndexedDB, "IDBOpenDBRequest::requestCompleted");
     181
     182    auto* connection = connectionToServer();
     183    if (!connection)
     184        return;
    165185
    166186    // If an Open request was completed after the page has navigated, leaving this request
     
    170190        switch (data.type()) {
    171191        case IDBResultType::OpenDatabaseSuccess:
    172             connection().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), IDBResourceIdentifier::emptyValue());
     192            connection->abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), IDBResourceIdentifier::emptyValue());
    173193            break;
    174194        case IDBResultType::OpenDatabaseUpgradeNeeded:
    175             connection().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), data.transactionInfo().identifier());
     195            connection->abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), data.transactionInfo().identifier());
    176196            break;
    177197        default:
  • trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h

    r199668 r199804  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015, 2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737class IDBOpenDBRequest final : public IDBRequest {
    3838public:
    39     static Ref<IDBOpenDBRequest> createDeleteRequest(IDBClient::IDBConnectionToServer&, ScriptExecutionContext&, const IDBDatabaseIdentifier&);
    40     static Ref<IDBOpenDBRequest> createOpenRequest(IDBClient::IDBConnectionToServer&, ScriptExecutionContext&, const IDBDatabaseIdentifier&, uint64_t version);
     39    static RefPtr<IDBOpenDBRequest> maybeCreateDeleteRequest(ScriptExecutionContext&, const IDBDatabaseIdentifier&);
     40    static RefPtr<IDBOpenDBRequest> maybeCreateOpenRequest(ScriptExecutionContext&, const IDBDatabaseIdentifier&, uint64_t version);
    4141
    4242    virtual ~IDBOpenDBRequest();
     
    5353
    5454private:
    55     IDBOpenDBRequest(IDBClient::IDBConnectionToServer&, ScriptExecutionContext&, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType);
     55    IDBOpenDBRequest(ScriptExecutionContext&, uint64_t serverConnectionIdentifier, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType);
    5656
    5757    bool dispatchEvent(Event&) final;
  • trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp

    r199668 r199804  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015, 2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3333#include "EventQueue.h"
    3434#include "IDBBindingUtilities.h"
     35#include "IDBConnectionProxy.h"
    3536#include "IDBCursor.h"
    3637#include "IDBDatabase.h"
     
    6970}
    7071
    71 IDBRequest::IDBRequest(IDBClient::IDBConnectionToServer& connection, ScriptExecutionContext& context)
     72IDBRequest::IDBRequest(ScriptExecutionContext& context, uint64_t connectionIdentifier)
    7273    : ActiveDOMObject(&context)
    73     , m_connection(connection)
    74     , m_resourceIdentifier(connection)
     74    , m_resourceIdentifier(connectionIdentifier)
    7575{
    7676    suspendIfNeeded();
     
    8080    : ActiveDOMObject(&context)
    8181    , m_transaction(&transaction)
    82     , m_connection(transaction.serverConnection())
    8382    , m_resourceIdentifier(transaction.serverConnection())
    8483    , m_objectStoreSource(&objectStore)
     
    9089    : ActiveDOMObject(&context)
    9190    , m_transaction(&transaction)
    92     , m_connection(transaction.serverConnection())
    9391    , m_resourceIdentifier(transaction.serverConnection())
    9492    , m_objectStoreSource(cursor.objectStore())
     
    104102    : ActiveDOMObject(&context)
    105103    , m_transaction(&transaction)
    106     , m_connection(transaction.serverConnection())
    107104    , m_resourceIdentifier(transaction.serverConnection())
    108105    , m_indexSource(&index)
     
    411408}
    412409
     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.
     413IDBClient::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
    413421} // namespace WebCore
    414422
  • trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h

    r199668 r199804  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015, 2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    105105
    106106protected:
    107     IDBRequest(IDBClient::IDBConnectionToServer&, ScriptExecutionContext&);
     107    IDBRequest(ScriptExecutionContext&, uint64_t connectionIdentifier);
    108108
    109109    void enqueueEvent(Ref<Event>&&);
    110110    bool dispatchEvent(Event&) override;
    111111
    112     IDBClient::IDBConnectionToServer& connection() { return m_connection; }
     112    void setResult(Ref<IDBDatabase>&&);
    113113
    114     void setResult(Ref<IDBDatabase>&&);
     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();
    115118
    116119    // FIXME: Protected data members aren't great for maintainability.
     
    155158
    156159    IDBError m_idbError;
    157     IDBClient::IDBConnectionToServer& m_connection;
    158160    IDBResourceIdentifier m_resourceIdentifier;
    159161
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp

    r199797 r199804  
    3737IDBConnectionProxy::IDBConnectionProxy(IDBConnectionToServer& connection)
    3838    : m_connectionToServer(connection)
     39    , m_serverConnectionIdentifier(connection.identifier())
    3940{
     41    ASSERT(isMainThread());
     42}
     43
     44// FIXME: Temporarily required during bringup of IDB-in-Workers.
     45// Once all IDB object reliance on the IDBConnectionToServer has been shifted to reliance on
     46// IDBConnectionProxy, remove this.
     47IDBConnectionToServer& IDBConnectionProxy::connectionToServer()
     48{
     49    ASSERT(isMainThread());
     50    return m_connectionToServer.get();
    4051}
    4152
     
    4758        return nullptr;
    4859
    49     auto request = IDBOpenDBRequest::createOpenRequest(m_connectionToServer.get(), context, databaseIdentifier, version);
    50     m_connectionToServer->openDatabase(request.get());
     60    auto request = IDBOpenDBRequest::maybeCreateOpenRequest(context, databaseIdentifier, version);
     61    if (!request)
     62        return nullptr;
    5163
    52     return adoptRef(&request.leakRef());
     64    m_connectionToServer->openDatabase(*request);
     65    return request;
    5366}
    5467
     
    6073        return nullptr;
    6174
    62     auto request = IDBOpenDBRequest::createDeleteRequest(m_connectionToServer.get(), context, databaseIdentifier);
    63     m_connectionToServer->deleteDatabase(request.get());
     75    auto request = IDBOpenDBRequest::maybeCreateDeleteRequest(context, databaseIdentifier);
     76    if (!request)
     77        return nullptr;
    6478
    65     return adoptRef(&request.leakRef());
     79    m_connectionToServer->deleteDatabase(*request);
     80    return request;
    6681}
    6782
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h

    r199797 r199804  
    3939
    4040class IDBConnectionProxy {
     41    WTF_MAKE_NONCOPYABLE(IDBConnectionProxy);
    4142public:
    4243    IDBConnectionProxy(IDBConnectionToServer&);
     
    4546    RefPtr<IDBOpenDBRequest> deleteDatabase(ScriptExecutionContext&, const IDBDatabaseIdentifier&);
    4647
     48    uint64_t serverConnectionIdentifier() const { return m_serverConnectionIdentifier; }
     49
     50    // FIXME: Temporarily required during bringup of IDB-in-Workers.
     51    // Once all IDB object reliance on the IDBConnectionToServer has been shifted to reliance on
     52    // IDBConnectionProxy, remove this.
     53    IDBConnectionToServer& connectionToServer();
     54
    4755private:
    4856    Ref<IDBConnectionToServer> m_connectionToServer;
     57    uint64_t m_serverConnectionIdentifier;
    4958};
    5059
  • trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.cpp

    r198762 r199804  
    5454}
    5555
     56IDBResourceIdentifier::IDBResourceIdentifier(uint64_t connectionIdentifier)
     57    : m_idbConnectionIdentifier(connectionIdentifier)
     58    , m_resourceNumber(nextClientResourceNumber())
     59{
     60}
     61
     62
    5663IDBResourceIdentifier::IDBResourceIdentifier(uint64_t connectionIdentifier, uint64_t resourceIdentifier)
    5764    : m_idbConnectionIdentifier(connectionIdentifier)
  • trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h

    r198762 r199804  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015, 2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #ifndef IDBResourceIdentifier_h
    27 #define IDBResourceIdentifier_h
     26#pragma once
    2827
    2928#if ENABLE(INDEXED_DATABASE)
     
    4847    IDBResourceIdentifier(const IDBClient::IDBConnectionToServer&, const IDBRequest&);
    4948    explicit IDBResourceIdentifier(const IDBServer::IDBConnectionToClient&);
     49
     50    // FIXME: This constructor will be needed during the development of IDB-in-Workers.
     51    // It should be removed when no longer necessary.
     52    explicit IDBResourceIdentifier(uint64_t connectionIdentifier);
    5053
    5154    static IDBResourceIdentifier deletedValue();
     
    150153
    151154#endif // ENABLE(INDEXED_DATABASE)
    152 #endif // IDBResourceIdentifier_h
Note: See TracChangeset for help on using the changeset viewer.