Changeset 194904 in webkit


Ignore:
Timestamp:
Jan 12, 2016, 11:17:45 AM (10 years ago)
Author:
beidson@apple.com
Message:

Modern IDB: storage/indexeddb/dont-wedge.html is flaky.
https://bugs.webkit.org/show_bug.cgi?id=152892

Reviewed by Alex Christensen.

Source/WebCore:

No new tests (Reenabled existing test).

  • Modules/indexeddb/client/IDBConnectionToServer.cpp:

(WebCore::IDBClient::IDBConnectionToServer::abortOpenAndUpgradeNeeded):

  • Modules/indexeddb/client/IDBConnectionToServer.h:
  • Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
  • Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:

(WebCore::IDBClient::IDBOpenDBRequest::requestCompleted): If the database was opened

or an upgrade transaction was started, but the script execution context is already
stopped, immediately message back to the server so it doesn't wedge.

  • Modules/indexeddb/server/IDBServer.cpp:

(WebCore::IDBServer::IDBServer::abortOpenAndUpgradeNeeded):

  • Modules/indexeddb/server/IDBServer.h:
  • Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:

(WebCore::IDBServer::UniqueIDBDatabaseTransaction::abortWithoutCallback):

  • Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
  • Modules/indexeddb/shared/InProcessIDBServer.cpp:

(WebCore::InProcessIDBServer::abortOpenAndUpgradeNeeded):

  • Modules/indexeddb/shared/InProcessIDBServer.h:

LayoutTests:

  • platform/mac-wk1/TestExpectations:
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r194898 r194904  
     12016-01-12  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: storage/indexeddb/dont-wedge.html is flaky.
     4        https://bugs.webkit.org/show_bug.cgi?id=152892
     5
     6        Reviewed by Alex Christensen.
     7
     8        * platform/mac-wk1/TestExpectations:
     9
    1102016-01-12  Antti Koivisto  <antti@apple.com>
    211
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r194874 r194904  
    9393storage/indexeddb/delete-closed-database-object.html [ Skip ]
    9494storage/indexeddb/request-leak.html [ Failure ]
    95 
    96 # Flaky timeout on the bots
    97 webkit.org/b/152892 storage/indexeddb/dont-wedge.html [ Pass Timeout ]
    9895
    9996# No workers support in Modern IDB yet
  • trunk/Source/WebCore/ChangeLog

    r194900 r194904  
     12016-01-12  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: storage/indexeddb/dont-wedge.html is flaky.
     4        https://bugs.webkit.org/show_bug.cgi?id=152892
     5
     6        Reviewed by Alex Christensen.
     7
     8        No new tests (Reenabled existing test).
     9
     10        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
     11        (WebCore::IDBClient::IDBConnectionToServer::abortOpenAndUpgradeNeeded):
     12        * Modules/indexeddb/client/IDBConnectionToServer.h:
     13        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
     14
     15        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
     16        (WebCore::IDBClient::IDBOpenDBRequest::requestCompleted): If the database was opened
     17          or an upgrade transaction was started, but the script execution context is already
     18          stopped, immediately message back to the server so it doesn't wedge.
     19
     20        * Modules/indexeddb/server/IDBServer.cpp:
     21        (WebCore::IDBServer::IDBServer::abortOpenAndUpgradeNeeded):
     22        * Modules/indexeddb/server/IDBServer.h:
     23
     24        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
     25        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abortWithoutCallback):
     26        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
     27
     28        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
     29        (WebCore::InProcessIDBServer::abortOpenAndUpgradeNeeded):
     30        * Modules/indexeddb/shared/InProcessIDBServer.h:
     31
    1322016-01-12  Commit Queue  <commit-queue@webkit.org>
    233
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp

    r194452 r194904  
    363363}
    364364
     365void IDBConnectionToServer::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier)
     366{
     367    LOG(IndexedDB, "IDBConnectionToServer::abortOpenAndUpgradeNeeded");
     368
     369    m_delegate->abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier);
     370}
     371
    365372void IDBConnectionToServer::registerDatabaseConnection(IDBDatabase& database)
    366373{
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h

    r194452 r194904  
    113113
    114114    void databaseConnectionClosed(IDBDatabase&);
     115
     116    // To be used when an IDBOpenDBRequest gets a new database connection, optionally with a
     117    // versionchange transaction, but the page is already torn down.
     118    void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier);
     119   
    115120    void registerDatabaseConnection(IDBDatabase&);
    116121    void unregisterDatabaseConnection(IDBDatabase&);
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h

    r194452 r194904  
    7575    virtual void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&) = 0;
    7676    virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) = 0;
     77    virtual void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) = 0;
    7778    virtual void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier) = 0;
    7879
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp

    r194754 r194904  
    166166    LOG(IndexedDB, "IDBOpenDBRequest::requestCompleted");
    167167
    168     if (m_contextStopped)
     168    // If an Open request was completed after the page has navigated, leaving this request
     169    // with a stopped script execution context, we need to message back to the server so it
     170    // doesn't hang waiting on a database connection or transaction that will never exist.
     171    if (m_contextStopped) {
     172        switch (data.type()) {
     173        case IDBResultType::OpenDatabaseSuccess:
     174            connection().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), IDBResourceIdentifier::emptyValue());
     175            break;
     176        case IDBResultType::OpenDatabaseUpgradeNeeded:
     177            connection().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), data.transactionInfo().identifier());
     178            break;
     179        default:
     180            break;
     181        }
     182
    169183        return;
     184    }
    170185
    171186    switch (data.type()) {
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp

    r194496 r194904  
    340340}
    341341
     342void IDBServer::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier)
     343{
     344    LOG(IndexedDB, "IDBServer::abortOpenAndUpgradeNeeded");
     345
     346    auto transaction = m_transactions.get(transactionIdentifier);
     347    if (transaction)
     348        transaction->abortWithoutCallback();
     349
     350    auto databaseConnection = m_databaseConnections.get(databaseConnectionIdentifier);
     351    if (!databaseConnection)
     352        return;
     353
     354    databaseConnection->connectionClosedFromClient();
     355}
     356
    342357void IDBServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier)
    343358{
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h

    r194452 r194904  
    7676    void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&);
    7777    void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
     78    void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier);
    7879    void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier);
    7980
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp

    r194414 r194904  
    7676}
    7777
     78void UniqueIDBDatabaseTransaction::abortWithoutCallback()
     79{
     80    LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abortWithoutCallback");
     81
     82    m_databaseConnection->database().abortTransaction(*this, [](const IDBError&) { });
     83}
     84
    7885bool UniqueIDBDatabaseTransaction::isVersionChange() const
    7986{
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h

    r194414 r194904  
    6565
    6666    void abort();
     67    void abortWithoutCallback();
    6768    void commit();
    6869
  • trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp

    r194452 r194904  
    370370}
    371371
     372void InProcessIDBServer::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier)
     373{
     374    RefPtr<InProcessIDBServer> self(this);
     375    RunLoop::current().dispatch([this, self, databaseConnectionIdentifier, transactionIdentifier] {
     376        m_server->abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier);
     377    });
     378}
     379
    372380void InProcessIDBServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier)
    373381{
  • trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h

    r194452 r194904  
    7373    virtual void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&) override final;
    7474    virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) override final;
     75    virtual void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) override final;
    7576    virtual void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier) override final;
    7677
Note: See TracChangeset for help on using the changeset viewer.