Changeset 191400 in webkit


Ignore:
Timestamp:
Oct 21, 2015, 1:22:31 PM (10 years ago)
Author:
beidson@apple.com
Message:

Modern IDB: Add basic transaction aborting.
https://bugs.webkit.org/show_bug.cgi?id=150148

Reviewed by Alex Christensen.

Source/WebCore:

Tests: storage/indexeddb/modern/double-abort.html

storage/indexeddb/modern/versionchange-abort-then-reopen.html

  • CMakeLists.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • Modules/indexeddb/IndexedDB.h:
  • Modules/indexeddb/client/IDBConnectionToServer.cpp:

(WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
(WebCore::IDBClient::IDBConnectionToServer::didAbortTransaction):

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

(WebCore::IDBClient::IDBDatabase::abortTransaction):
(WebCore::IDBClient::IDBDatabase::didCommitOrAbortTransaction):

  • Modules/indexeddb/client/IDBDatabaseImpl.h:
  • Modules/indexeddb/client/IDBTransactionImpl.cpp:

(WebCore::IDBClient::IDBTransaction::IDBTransaction):
(WebCore::IDBClient::IDBTransaction::abort):
(WebCore::IDBClient::IDBTransaction::isFinishedOrFinishing):
(WebCore::IDBClient::IDBTransaction::activationTimerFired):
(WebCore::IDBClient::IDBTransaction::didAbort):

  • Modules/indexeddb/client/IDBTransactionImpl.h:
  • Modules/indexeddb/server/IDBBackingStore.h:
  • Modules/indexeddb/server/IDBConnectionToClient.cpp:

(WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):

  • Modules/indexeddb/server/IDBConnectionToClient.h:
  • Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
  • Modules/indexeddb/server/IDBServer.cpp:

(WebCore::IDBServer::IDBServer::abortTransaction):

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

(WebCore::IDBServer::MemoryBackingStoreTransaction::create):
(WebCore::IDBServer::MemoryBackingStoreTransaction::MemoryBackingStoreTransaction):
(WebCore::IDBServer::MemoryBackingStoreTransaction::~MemoryBackingStoreTransaction):
(WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
(WebCore::IDBServer::MemoryBackingStoreTransaction::commit):

  • Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

(WebCore::IDBServer::MemoryBackingStoreTransaction::isVersionChange):

  • Modules/indexeddb/server/MemoryIDBBackingStore.cpp:

(WebCore::IDBServer::MemoryIDBBackingStore::setDatabaseInfo):
(WebCore::IDBServer::MemoryIDBBackingStore::beginTransaction):
(WebCore::IDBServer::MemoryIDBBackingStore::abortTransaction):
(WebCore::IDBServer::MemoryIDBBackingStore::commitTransaction):

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

(WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::beginTransactionInBackingStore):
(WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::performCommitTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::didPerformCommitTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::performAbortTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):

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

(WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):

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

(WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
(WebCore::IDBServer::UniqueIDBDatabaseTransaction::originalDatabaseInfo):
(WebCore::IDBServer::UniqueIDBDatabaseTransaction::abort):

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

(WebCore::idbErrorName):
(WebCore::idbErrorDescription):

  • Modules/indexeddb/shared/IDBError.h:
  • Modules/indexeddb/shared/InProcessIDBServer.cpp:

(WebCore::InProcessIDBServer::didAbortTransaction):
(WebCore::InProcessIDBServer::abortTransaction):

  • Modules/indexeddb/shared/InProcessIDBServer.h:

LayoutTests:

  • storage/indexeddb/modern/double-abort-expected.txt: Added.
  • storage/indexeddb/modern/double-abort.html: Added.
  • storage/indexeddb/modern/versionchange-abort-then-reopen-expected.txt: Added.
  • storage/indexeddb/modern/versionchange-abort-then-reopen.html: Added.
Location:
trunk
Files:
4 added
30 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r191392 r191400  
     12015-10-21  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: Add basic transaction aborting.
     4        https://bugs.webkit.org/show_bug.cgi?id=150148
     5
     6        Reviewed by Alex Christensen.
     7
     8        * storage/indexeddb/modern/double-abort-expected.txt: Added.
     9        * storage/indexeddb/modern/double-abort.html: Added.
     10        * storage/indexeddb/modern/versionchange-abort-then-reopen-expected.txt: Added.
     11        * storage/indexeddb/modern/versionchange-abort-then-reopen.html: Added.
     12
    1132015-10-21  Antoine Quint  <graouts@apple.com>
    214
  • trunk/Source/WebCore/CMakeLists.txt

    r191383 r191400  
    905905    Modules/indexeddb/server/IDBServer.cpp
    906906    Modules/indexeddb/server/IDBServerOperation.cpp
     907    Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp
    907908    Modules/indexeddb/server/MemoryIDBBackingStore.cpp
    908909    Modules/indexeddb/server/UniqueIDBDatabase.cpp
  • trunk/Source/WebCore/ChangeLog

    r191398 r191400  
     12015-10-21  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: Add basic transaction aborting.
     4        https://bugs.webkit.org/show_bug.cgi?id=150148
     5
     6        Reviewed by Alex Christensen.
     7
     8        Tests: storage/indexeddb/modern/double-abort.html
     9               storage/indexeddb/modern/versionchange-abort-then-reopen.html
     10
     11        * CMakeLists.txt:
     12        * WebCore.xcodeproj/project.pbxproj:
     13       
     14        * Modules/indexeddb/IndexedDB.h:
     15       
     16        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
     17        (WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
     18        (WebCore::IDBClient::IDBConnectionToServer::didAbortTransaction):
     19        * Modules/indexeddb/client/IDBConnectionToServer.h:
     20        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
     21       
     22        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
     23        (WebCore::IDBClient::IDBDatabase::abortTransaction):
     24        (WebCore::IDBClient::IDBDatabase::didCommitOrAbortTransaction):
     25        * Modules/indexeddb/client/IDBDatabaseImpl.h:
     26       
     27        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
     28        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
     29        (WebCore::IDBClient::IDBTransaction::abort):
     30        (WebCore::IDBClient::IDBTransaction::isFinishedOrFinishing):
     31        (WebCore::IDBClient::IDBTransaction::activationTimerFired):
     32        (WebCore::IDBClient::IDBTransaction::didAbort):
     33        * Modules/indexeddb/client/IDBTransactionImpl.h:
     34       
     35        * Modules/indexeddb/server/IDBBackingStore.h:
     36       
     37        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
     38        (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
     39        * Modules/indexeddb/server/IDBConnectionToClient.h:
     40        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
     41       
     42        * Modules/indexeddb/server/IDBServer.cpp:
     43        (WebCore::IDBServer::IDBServer::abortTransaction):
     44        * Modules/indexeddb/server/IDBServer.h:
     45       
     46        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
     47        (WebCore::IDBServer::MemoryBackingStoreTransaction::create):
     48        (WebCore::IDBServer::MemoryBackingStoreTransaction::MemoryBackingStoreTransaction):
     49        (WebCore::IDBServer::MemoryBackingStoreTransaction::~MemoryBackingStoreTransaction):
     50        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
     51        (WebCore::IDBServer::MemoryBackingStoreTransaction::commit):
     52        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
     53        (WebCore::IDBServer::MemoryBackingStoreTransaction::isVersionChange):
     54       
     55        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
     56        (WebCore::IDBServer::MemoryIDBBackingStore::setDatabaseInfo):
     57        (WebCore::IDBServer::MemoryIDBBackingStore::beginTransaction):
     58        (WebCore::IDBServer::MemoryIDBBackingStore::abortTransaction):
     59        (WebCore::IDBServer::MemoryIDBBackingStore::commitTransaction):
     60        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
     61
     62        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
     63        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
     64        (WebCore::IDBServer::UniqueIDBDatabase::beginTransactionInBackingStore):
     65        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
     66        (WebCore::IDBServer::UniqueIDBDatabase::performCommitTransaction):
     67        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCommitTransaction):
     68        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
     69        (WebCore::IDBServer::UniqueIDBDatabase::performAbortTransaction):
     70        (WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):
     71        * Modules/indexeddb/server/UniqueIDBDatabase.h:
     72       
     73        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
     74        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
     75        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
     76       
     77        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
     78        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
     79        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::originalDatabaseInfo):
     80        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abort):
     81        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
     82       
     83        * Modules/indexeddb/shared/IDBError.cpp:
     84        (WebCore::idbErrorName):
     85        (WebCore::idbErrorDescription):
     86        * Modules/indexeddb/shared/IDBError.h:
     87
     88        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
     89        (WebCore::InProcessIDBServer::didAbortTransaction):
     90        (WebCore::InProcessIDBServer::abortTransaction):
     91        * Modules/indexeddb/shared/InProcessIDBServer.h:
     92
    1932015-10-21  Chris Dumez  <cdumez@apple.com>
    294
  • trunk/Source/WebCore/Modules/indexeddb/IndexedDB.h

    r191210 r191400  
    4444    Running,
    4545    Committing,
     46    Aborting,
    4647    Finished,
    4748};
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp

    r191198 r191400  
    114114}
    115115
     116void IDBConnectionToServer::abortTransaction(IDBTransaction& transaction)
     117{
     118    LOG(IndexedDB, "IDBConnectionToServer::abortTransaction");
     119    ASSERT(!m_abortingTransactions.contains(transaction.info().identifier()));
     120    m_abortingTransactions.set(transaction.info().identifier(), &transaction);
     121
     122    auto identifier = transaction.info().identifier();
     123    m_delegate->abortTransaction(identifier);
     124}
     125
     126void IDBConnectionToServer::didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
     127{
     128    LOG(IndexedDB, "IDBConnectionToServer::didAbortTransaction");
     129
     130    auto transaction = m_abortingTransactions.take(transactionIdentifier);
     131    ASSERT(transaction);
     132
     133    transaction->didAbort(error);
     134}
     135
    116136void IDBConnectionToServer::fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, uint64_t requestedVersion)
    117137{
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h

    r191198 r191400  
    6262    void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
    6363
     64    void abortTransaction(IDBTransaction&);
     65    void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
     66
    6467    void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, uint64_t requestedVersion);
    6568
     
    7679    HashMap<uint64_t, IDBDatabase*> m_databaseConnectionMap;
    7780    HashMap<IDBResourceIdentifier, RefPtr<IDBTransaction>> m_committingTransactions;
     81    HashMap<IDBResourceIdentifier, RefPtr<IDBTransaction>> m_abortingTransactions;
    7882};
    7983
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h

    r191182 r191400  
    4343    virtual void deleteDatabase(IDBRequestData&) = 0;
    4444    virtual void openDatabase(IDBRequestData&) = 0;
     45    virtual void abortTransaction(IDBResourceIdentifier&) = 0;
    4546    virtual void commitTransaction(IDBResourceIdentifier&) = 0;
    4647    virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) = 0;
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp

    r191265 r191400  
    176176}
    177177
     178void IDBDatabase::abortTransaction(IDBTransaction& transaction)
     179{
     180    LOG(IndexedDB, "IDBDatabase::abortTransaction");
     181
     182    auto refTransaction = m_activeTransactions.take(transaction.info().identifier());
     183    ASSERT(refTransaction);
     184    m_abortingTransactions.set(transaction.info().identifier(), WTF::move(refTransaction));
     185
     186    m_serverConnection->abortTransaction(transaction);
     187}
     188
    178189void IDBDatabase::didAbortTransaction(IDBTransaction& transaction)
    179190{
     
    188199    if (m_versionChangeTransaction == &transaction)
    189200        m_versionChangeTransaction = nullptr;
    190    
    191     ASSERT(m_activeTransactions.contains(transaction.info().identifier()) || m_committingTransactions.contains(transaction.info().identifier()));
     201
     202#ifndef NDBEBUG
     203    unsigned count = 0;
     204    if (m_activeTransactions.contains(transaction.info().identifier()))
     205        ++count;
     206    if (m_committingTransactions.contains(transaction.info().identifier()))
     207        ++count;
     208    if (m_abortingTransactions.contains(transaction.info().identifier()))
     209        ++count;
     210
     211    ASSERT(count == 1);
     212#endif
    192213
    193214    m_activeTransactions.remove(transaction.info().identifier());
    194215    m_committingTransactions.remove(transaction.info().identifier());
     216    m_abortingTransactions.remove(transaction.info().identifier());
    195217}
    196218
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.h

    r191198 r191400  
    7676    void commitTransaction(IDBTransaction&);
    7777    void didCommitTransaction(IDBTransaction&);
     78    void abortTransaction(IDBTransaction&);
    7879    void didAbortTransaction(IDBTransaction&);
    7980
     
    9798    HashMap<IDBResourceIdentifier, RefPtr<IDBTransaction>> m_activeTransactions;
    9899    HashMap<IDBResourceIdentifier, RefPtr<IDBTransaction>> m_committingTransactions;
     100    HashMap<IDBResourceIdentifier, RefPtr<IDBTransaction>> m_abortingTransactions;
    99101};
    100102
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp

    r191114 r191400  
    3232#include "EventQueue.h"
    3333#include "IDBDatabaseImpl.h"
     34#include "IDBError.h"
    3435#include "IDBEventDispatcher.h"
    3536#include "IDBObjectStore.h"
     
    5253
    5354{
     55    m_activationTimer = std::make_unique<Timer>(*this, &IDBTransaction::activationTimerFired);
     56    m_activationTimer->startOneShot(0);
     57
     58    if (m_info.mode() == IndexedDB::TransactionMode::VersionChange)
     59        m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(m_database->info());
     60
    5461    suspendIfNeeded();
    55     scheduleOperationTimer();
    5662    m_state = IndexedDB::TransactionState::Running;
    5763}
     
    9298}
    9399
    94 void IDBTransaction::abort(ExceptionCode&)
    95 {
    96     ASSERT_NOT_REACHED();
     100void IDBTransaction::abort(ExceptionCode& ec)
     101{
     102    LOG(IndexedDB, "IDBTransaction::abort");
     103
     104    if (isFinishedOrFinishing()) {
     105        ec = INVALID_STATE_ERR;
     106        return;
     107    }
     108
     109    m_state = IndexedDB::TransactionState::Aborting;
     110
     111    m_database->abortTransaction(*this);
    97112}
    98113
     
    115130{
    116131    return m_state == IndexedDB::TransactionState::Running;
     132}
     133
     134bool IDBTransaction::isFinishedOrFinishing() const
     135{
     136    return m_state == IndexedDB::TransactionState::Committing
     137        || m_state == IndexedDB::TransactionState::Aborting
     138        || m_state == IndexedDB::TransactionState::Finished;
     139}
     140
     141void IDBTransaction::activationTimerFired()
     142{
     143    scheduleOperationTimer();
     144    m_activationTimer = nullptr;
    117145}
    118146
     
    150178
    151179    m_database->commitTransaction(*this);
     180}
     181
     182void IDBTransaction::didAbort(const IDBError& error)
     183{
     184    LOG(IndexedDB, "IDBTransaction::didAbort");
     185
     186    ASSERT(m_state == IndexedDB::TransactionState::Aborting || m_state == IndexedDB::TransactionState::Running);
     187
     188    m_database->didAbortTransaction(*this);
     189
     190    m_idbError = error;
     191    fireOnAbort();
     192
     193    m_state = IndexedDB::TransactionState::Finished;
    152194}
    153195
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.h

    r191114 r191400  
    2929#if ENABLE(INDEXED_DATABASE)
    3030
     31#include "IDBDatabaseInfo.h"
    3132#include "IDBError.h"
    3233#include "IDBTransaction.h"
     
    6970    const IDBDatabase& database() const { return m_database.get(); }
    7071
     72    void didAbort(const IDBError&);
    7173    void didCommit(const IDBError&);
    7274
     
    7577
    7678    bool isActive() const;
     79    bool isFinishedOrFinishing() const;
    7780    void commit();
    7881
    7982    void scheduleOperationTimer();
    8083    void operationTimerFired();
     84    void activationTimerFired();
    8185
    8286    void fireOnComplete();
     
    8690    Ref<IDBDatabase> m_database;
    8791    IDBTransactionInfo m_info;
     92    std::unique_ptr<IDBDatabaseInfo> m_originalDatabaseInfo;
    8893
    8994    IndexedDB::TransactionState m_state { IndexedDB::TransactionState::Unstarted };
     
    9196
    9297    Timer m_operationTimer;
     98    std::unique_ptr<Timer> m_activationTimer;
    9399};
    94100
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h

    r190379 r191400  
    3030
    3131#include "IDBDatabaseInfo.h"
     32#include "IDBError.h"
    3233
    3334namespace WebCore {
     35
     36class IDBResourceIdentifier;
     37class IDBTransactionInfo;
     38
    3439namespace IDBServer {
    3540
     
    3944
    4045    virtual const IDBDatabaseInfo& getOrEstablishDatabaseInfo() = 0;
     46
     47    virtual IDBError beginTransaction(const IDBTransactionInfo&) = 0;
     48    virtual IDBError abortTransaction(const IDBResourceIdentifier& transactionIdentifier) = 0;
     49    virtual IDBError commitTransaction(const IDBResourceIdentifier& transactionIdentifier) = 0;
    4150};
    4251
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp

    r191114 r191400  
    5959}
    6060
     61void IDBConnectionToClient::didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
     62{
     63    m_delegate->didAbortTransaction(transactionIdentifier, error);
     64}
     65
    6166void IDBConnectionToClient::didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
    6267{
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h

    r191114 r191400  
    5151    void didDeleteDatabase(const IDBResultData&);
    5252    void didOpenDatabase(const IDBResultData&);
     53    void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
    5354    void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
    5455
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h

    r191114 r191400  
    4747    virtual void didDeleteDatabase(const IDBResultData&) = 0;
    4848    virtual void didOpenDatabase(const IDBResultData&) = 0;
     49    virtual void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&) = 0;
    4950    virtual void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&) = 0;
    5051
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp

    r191182 r191400  
    143143}
    144144
     145void IDBServer::abortTransaction(const IDBResourceIdentifier& transactionIdentifier)
     146{
     147    LOG(IndexedDB, "IDBServer::abortTransaction");
     148
     149    auto transaction = m_transactions.get(transactionIdentifier);
     150    if (!transaction) {
     151        // If there is no transaction there is nothing to abort.
     152        // We also have no access to a connection over which to message failure-to-abort.
     153        return;
     154    }
     155
     156    transaction->abort();
     157}
     158
    145159void IDBServer::commitTransaction(const IDBResourceIdentifier& transactionIdentifier)
    146160{
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h

    r191182 r191400  
    5858    void openDatabase(const IDBRequestData&);
    5959    void deleteDatabase(const IDBRequestData&);
     60    void abortTransaction(const IDBResourceIdentifier&);
    6061    void commitTransaction(const IDBResourceIdentifier&);
    6162    void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
  • trunk/Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp

    r191399 r191400  
    2424 */
    2525
    26 #ifndef IDBError_h
    27 #define IDBError_h
     26#include "config.h"
     27#include "MemoryBackingStoreTransaction.h"
    2828
    2929#if ENABLE(INDEXED_DATABASE)
    3030
    31 #include <wtf/text/WTFString.h>
     31#include "IndexedDB.h"
     32#include "Logging.h"
     33#include "MemoryIDBBackingStore.h"
    3234
    3335namespace WebCore {
     36namespace IDBServer {
    3437
    35 enum class IDBExceptionCode {
    36     None = 0,
    37     Unknown,
    38     VersionError,
    39 };
     38std::unique_ptr<MemoryBackingStoreTransaction> MemoryBackingStoreTransaction::create(MemoryIDBBackingStore& backingStore, const IDBTransactionInfo& info)
     39{
     40    return std::make_unique<MemoryBackingStoreTransaction>(backingStore, info);
     41}
    4042
    41 class IDBError {
    42 public:
    43     IDBError() { }
    44     IDBError(IDBExceptionCode);
    45     IDBError(IDBExceptionCode, const String& message);
     43MemoryBackingStoreTransaction::MemoryBackingStoreTransaction(MemoryIDBBackingStore& backingStore, const IDBTransactionInfo& info)
     44    : m_backingStore(backingStore)
     45    , m_info(info)
     46{
     47    if (m_info.mode() == IndexedDB::TransactionMode::VersionChange)
     48        m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(m_backingStore.getOrEstablishDatabaseInfo());
     49}
    4650
    47     IDBError& operator=(const IDBError&);
     51MemoryBackingStoreTransaction::~MemoryBackingStoreTransaction()
     52{
     53    ASSERT(!m_inProgress);
     54}
    4855
    49     const String& name() const;
    50     const String& message() const;
     56void MemoryBackingStoreTransaction::abort()
     57{
     58    LOG(IndexedDB, "MemoryBackingStoreTransaction::abort()");
    5159
    52     bool isNull() const { return m_code == IDBExceptionCode::None; }
     60    if (m_originalDatabaseInfo) {
     61        ASSERT(m_info.mode() == IndexedDB::TransactionMode::VersionChange);
     62        m_backingStore.setDatabaseInfo(*m_originalDatabaseInfo);
     63    }
    5364
    54     IDBError isolatedCopy() const;
     65    m_inProgress = false;
     66}
    5567
    56 private:
    57     IDBExceptionCode m_code { IDBExceptionCode::None };
    58     String m_message;
    59 };
     68void MemoryBackingStoreTransaction::commit()
     69{
     70    LOG(IndexedDB, "MemoryBackingStoreTransaction::commit()");
    6071
     72    m_inProgress = false;
     73}
     74
     75} // namespace IDBServer
    6176} // namespace WebCore
    6277
    6378#endif // ENABLE(INDEXED_DATABASE)
    64 #endif // IDBError_h
  • trunk/Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.h

    r191399 r191400  
    2424 */
    2525
    26 #ifndef IDBError_h
    27 #define IDBError_h
     26#ifndef MemoryBackingStoreTransaction_h
     27#define MemoryBackingStoreTransaction_h
    2828
    2929#if ENABLE(INDEXED_DATABASE)
    3030
    31 #include <wtf/text/WTFString.h>
     31#include "IDBDatabaseInfo.h"
     32#include "IDBTransactionInfo.h"
    3233
    3334namespace WebCore {
     35namespace IDBServer {
    3436
    35 enum class IDBExceptionCode {
    36     None = 0,
    37     Unknown,
    38     VersionError,
     37class MemoryIDBBackingStore;
     38
     39class MemoryBackingStoreTransaction {
     40    friend std::unique_ptr<MemoryBackingStoreTransaction> std::make_unique<MemoryBackingStoreTransaction>(WebCore::IDBServer::MemoryIDBBackingStore&, const WebCore::IDBTransactionInfo&);
     41public:
     42    static std::unique_ptr<MemoryBackingStoreTransaction> create(MemoryIDBBackingStore&, const IDBTransactionInfo&);
     43
     44    ~MemoryBackingStoreTransaction();
     45
     46    bool isVersionChange() const { return m_info.mode() == IndexedDB::TransactionMode::VersionChange; }
     47
     48    const IDBDatabaseInfo& originalDatabaseInfo() const;
     49
     50    void abort();
     51    void commit();
     52
     53private:
     54    MemoryBackingStoreTransaction(MemoryIDBBackingStore&, const IDBTransactionInfo&);
     55
     56    MemoryIDBBackingStore& m_backingStore;
     57    IDBTransactionInfo m_info;
     58
     59    std::unique_ptr<IDBDatabaseInfo> m_originalDatabaseInfo;
     60
     61    bool m_inProgress { true };
    3962};
    4063
    41 class IDBError {
    42 public:
    43     IDBError() { }
    44     IDBError(IDBExceptionCode);
    45     IDBError(IDBExceptionCode, const String& message);
    46 
    47     IDBError& operator=(const IDBError&);
    48 
    49     const String& name() const;
    50     const String& message() const;
    51 
    52     bool isNull() const { return m_code == IDBExceptionCode::None; }
    53 
    54     IDBError isolatedCopy() const;
    55 
    56 private:
    57     IDBExceptionCode m_code { IDBExceptionCode::None };
    58     String m_message;
    59 };
    60 
     64} // namespace IDBServer
    6165} // namespace WebCore
    6266
    6367#endif // ENABLE(INDEXED_DATABASE)
    64 #endif // IDBError_h
     68#endif // MemoryBackingStoreTransaction_h
  • trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp

    r190379 r191400  
    2929#if ENABLE(INDEXED_DATABASE)
    3030
     31#include "Logging.h"
     32
    3133namespace WebCore {
    3234namespace IDBServer {
     
    5456}
    5557
     58void MemoryIDBBackingStore::setDatabaseInfo(const IDBDatabaseInfo& info)
     59{
     60    // It is not valid to directly set database info on a backing store that hasn't already set its own database info.
     61    ASSERT(m_databaseInfo);
     62
     63    m_databaseInfo = std::make_unique<IDBDatabaseInfo>(info);
     64}
     65
     66IDBError MemoryIDBBackingStore::beginTransaction(const IDBTransactionInfo& info)
     67{
     68    LOG(IndexedDB, "MemoryIDBBackingStore::beginTransaction");
     69
     70    if (m_transactions.contains(info.identifier()))
     71        return IDBError(IDBExceptionCode::InvalidStateError, "Backing store asked to create transaction it already has a record of");
     72
     73    auto transaction = MemoryBackingStoreTransaction::create(*this, info);
     74    m_transactions.set(info.identifier(), WTF::move(transaction));
     75
     76    return IDBError();
     77}
     78
     79IDBError MemoryIDBBackingStore::abortTransaction(const IDBResourceIdentifier& transactionIdentifier)
     80{
     81    LOG(IndexedDB, "MemoryIDBBackingStore::abortTransaction");
     82
     83    auto transaction = m_transactions.take(transactionIdentifier);
     84    if (!transaction)
     85        return IDBError(IDBExceptionCode::InvalidStateError, "Backing store asked to abort transaction it didn't have record of");
     86
     87    transaction->abort();
     88
     89    return IDBError();
     90}
     91
     92IDBError MemoryIDBBackingStore::commitTransaction(const IDBResourceIdentifier& transactionIdentifier)
     93{
     94    LOG(IndexedDB, "MemoryIDBBackingStore::commitTransaction");
     95
     96    auto transaction = m_transactions.take(transactionIdentifier);
     97    if (!transaction)
     98        return IDBError(IDBExceptionCode::InvalidStateError, "Backing store asked to commit transaction it didn't have record of");
     99
     100    transaction->commit();
     101
     102    return IDBError();
     103}
     104
    56105} // namespace IDBServer
    57106} // namespace WebCore
  • trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h

    r190384 r191400  
    3131#include "IDBBackingStore.h"
    3232#include "IDBDatabaseIdentifier.h"
     33#include "IDBResourceIdentifier.h"
     34#include "MemoryBackingStoreTransaction.h"
     35#include <wtf/HashMap.h>
    3336
    3437namespace WebCore {
     
    4346
    4447    virtual const IDBDatabaseInfo& getOrEstablishDatabaseInfo() override final;
    45    
     48    void setDatabaseInfo(const IDBDatabaseInfo&);
     49
     50    virtual IDBError beginTransaction(const IDBTransactionInfo&) override final;
     51    virtual IDBError abortTransaction(const IDBResourceIdentifier& transactionIdentifier) override final;
     52    virtual IDBError commitTransaction(const IDBResourceIdentifier& transactionIdentifier) override final;
     53
    4654private:
    4755    MemoryIDBBackingStore(const IDBDatabaseIdentifier&);
     
    4957    IDBDatabaseIdentifier m_identifier;
    5058    std::unique_ptr<IDBDatabaseInfo> m_databaseInfo;
     59
     60    HashMap<IDBResourceIdentifier, std::unique_ptr<MemoryBackingStoreTransaction>> m_transactions;
     61
    5162};
    5263
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp

    r191265 r191400  
    3131#include "IDBResultData.h"
    3232#include "IDBServer.h"
     33#include "IDBTransactionInfo.h"
    3334#include "Logging.h"
    3435#include "UniqueIDBDatabaseConnection.h"
     
    157158
    158159    m_versionChangeTransaction = &m_versionChangeDatabaseConnection->createVersionChangeTransaction(requestedVersion);
     160    m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::beginTransactionInBackingStore, m_versionChangeTransaction->info()));
    159161
    160162    auto result = IDBResultData::openDatabaseUpgradeNeeded(operation->requestData().requestIdentifier(), *m_versionChangeTransaction);
    161163    operation->connection().didOpenDatabase(result);
     164}
     165
     166void UniqueIDBDatabase::beginTransactionInBackingStore(const IDBTransactionInfo& info)
     167{
     168    LOG(IndexedDB, "(db) UniqueIDBDatabase::beginTransactionInBackingStore");
     169    m_backingStore->beginTransaction(info);
    162170}
    163171
     
    215223    LOG(IndexedDB, "(main) UniqueIDBDatabase::commitTransaction");
    216224
     225    ASSERT(&transaction.databaseConnection().database() == this);
     226
    217227    if (m_versionChangeTransaction == &transaction) {
    218228        ASSERT(&m_versionChangeTransaction->databaseConnection() == m_versionChangeDatabaseConnection);
     
    226236}
    227237
    228 void UniqueIDBDatabase::performCommitTransaction(uint64_t callbackIdentifier, const IDBResourceIdentifier&)
     238void UniqueIDBDatabase::performCommitTransaction(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier)
    229239{
    230240    ASSERT(!isMainThread());
    231241    LOG(IndexedDB, "(db) UniqueIDBDatabase::performCommitTransaction");
    232242
    233     // FIXME: Commit transaction in backing store, once that exists.
    234 
    235     IDBError error;
     243    IDBError error = m_backingStore->commitTransaction(transactionIdentifier);
    236244    m_server.postDatabaseTaskReply(createCrossThreadTask(*this, &UniqueIDBDatabase::didPerformCommitTransaction, callbackIdentifier, error));
    237 
    238245}
    239246
     
    242249    ASSERT(isMainThread());
    243250    LOG(IndexedDB, "(main) UniqueIDBDatabase::didPerformCommitTransaction");
     251
     252    // Previously blocked transactions might now be unblocked.
     253    invokeTransactionScheduler();
     254
     255    performErrorCallback(callbackIdentifier, error);
     256}
     257
     258void UniqueIDBDatabase::abortTransaction(UniqueIDBDatabaseTransaction& transaction, ErrorCallback callback)
     259{
     260    ASSERT(isMainThread());
     261    LOG(IndexedDB, "(main) UniqueIDBDatabase::abortTransaction");
     262
     263    ASSERT(&transaction.databaseConnection().database() == this);
     264
     265    if (m_versionChangeTransaction == &transaction) {
     266        ASSERT(&m_versionChangeTransaction->databaseConnection() == m_versionChangeDatabaseConnection);
     267        ASSERT(transaction.originalDatabaseInfo());
     268        m_databaseInfo = std::make_unique<IDBDatabaseInfo>(*transaction.originalDatabaseInfo());
     269        m_versionChangeTransaction = nullptr;
     270        m_versionChangeDatabaseConnection = nullptr;
     271    }
     272
     273    uint64_t callbackID = storeCallback(callback);
     274    m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::performAbortTransaction, callbackID, transaction.info().identifier()));
     275}
     276
     277void UniqueIDBDatabase::performAbortTransaction(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier)
     278{
     279    ASSERT(!isMainThread());
     280    LOG(IndexedDB, "(db) UniqueIDBDatabase::performAbortTransaction");
     281
     282    IDBError error = m_backingStore->abortTransaction(transactionIdentifier);
     283    m_server.postDatabaseTaskReply(createCrossThreadTask(*this, &UniqueIDBDatabase::didPerformAbortTransaction, callbackIdentifier, error));
     284}
     285
     286void UniqueIDBDatabase::didPerformAbortTransaction(uint64_t callbackIdentifier, const IDBError& error)
     287{
     288    ASSERT(isMainThread());
     289    LOG(IndexedDB, "(main) UniqueIDBDatabase::didPerformAbortTransaction");
     290
     291    // Previously blocked transactions might now be unblocked.
     292    invokeTransactionScheduler();
    244293
    245294    performErrorCallback(callbackIdentifier, error);
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h

    r191198 r191400  
    4545class IDBError;
    4646class IDBRequestData;
     47class IDBTransactionInfo;
    4748
    4849namespace IDBServer {
     
    6667
    6768    void commitTransaction(UniqueIDBDatabaseTransaction&, ErrorCallback);
     69    void abortTransaction(UniqueIDBDatabaseTransaction&, ErrorCallback);
    6870    void transactionDestroyed(UniqueIDBDatabaseTransaction&);
    6971    void connectionClosedFromClient(UniqueIDBDatabaseConnection&);
     
    8486    void openBackingStore(const IDBDatabaseIdentifier&);
    8587    void performCommitTransaction(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier);
     88    void performAbortTransaction(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier);
     89    void beginTransactionInBackingStore(const IDBTransactionInfo&);
    8690
    8791    // Main thread callbacks
    8892    void didOpenBackingStore(const IDBDatabaseInfo&);
    8993    void didPerformCommitTransaction(uint64_t callbackIdentifier, const IDBError&);
     94    void didPerformAbortTransaction(uint64_t callbackIdentifier, const IDBError&);
    9095
    9196    void performErrorCallback(uint64_t callbackIdentifier, const IDBError&);
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp

    r191182 r191400  
    9494}
    9595
     96void UniqueIDBDatabaseConnection::didAbortTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error)
     97{
     98    LOG(IndexedDB, "UniqueIDBDatabaseConnection::didAbortTransaction");
     99
     100    auto transactionIdentifier = transaction.info().identifier();
     101
     102    ASSERT(m_transactionMap.contains(transactionIdentifier));
     103    m_transactionMap.remove(transactionIdentifier);
     104
     105    m_connectionToClient.didAbortTransaction(transactionIdentifier, error);
     106}
     107
    96108void UniqueIDBDatabaseConnection::didCommitTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error)
    97109{
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h

    r191182 r191400  
    6363    UniqueIDBDatabaseTransaction& createVersionChangeTransaction(uint64_t newVersion);
    6464
     65    void didAbortTransaction(UniqueIDBDatabaseTransaction&, const IDBError&);
    6566    void didCommitTransaction(UniqueIDBDatabaseTransaction&, const IDBError&);
    6667
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp

    r191114 r191400  
    4545    , m_transactionInfo(info)
    4646{
     47    if (m_transactionInfo.mode() == IndexedDB::TransactionMode::VersionChange)
     48        m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(m_databaseConnection->database().info());
     49
    4750    m_databaseConnection->database().server().registerTransaction(*this);
    4851}
     
    5255    m_databaseConnection->database().transactionDestroyed(*this);
    5356    m_databaseConnection->database().server().unregisterTransaction(*this);
     57}
     58
     59IDBDatabaseInfo* UniqueIDBDatabaseTransaction::originalDatabaseInfo() const
     60{
     61    ASSERT(m_transactionInfo.mode() == IndexedDB::TransactionMode::VersionChange);
     62    return m_originalDatabaseInfo.get();
     63}
     64
     65void UniqueIDBDatabaseTransaction::abort()
     66{
     67    LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abort");
     68
     69    RefPtr<UniqueIDBDatabaseTransaction> self(this);
     70    m_databaseConnection->database().abortTransaction(*this, [this, self](const IDBError& error) {
     71        LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abort (callback)");
     72        m_databaseConnection->didAbortTransaction(*this, error);
     73    });
    5474}
    5575
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h

    r191114 r191400  
    3535
    3636namespace WebCore {
     37
     38class IDBDatabaseInfo;
     39
    3740namespace IDBServer {
    3841
     
    4851    const IDBTransactionInfo& info() const { return m_transactionInfo; }
    4952
     53    IDBDatabaseInfo* originalDatabaseInfo() const;
     54
     55    void abort();
    5056    void commit();
    5157
     
    5561    Ref<UniqueIDBDatabaseConnection> m_databaseConnection;
    5662    IDBTransactionInfo m_transactionInfo;
     63
     64    std::unique_ptr<IDBDatabaseInfo> m_originalDatabaseInfo;
    5765};
    5866
  • trunk/Source/WebCore/Modules/indexeddb/shared/IDBError.cpp

    r191182 r191400  
    4444        return entry;
    4545    }
     46    case IDBExceptionCode::InvalidStateError: {
     47        static NeverDestroyed<String> entry = ASCIILiteral("InvalidStateError");
     48        return entry;
     49    }
    4650    case IDBExceptionCode::None:
    4751        RELEASE_ASSERT_NOT_REACHED();
     
    5559    switch (code) {
    5660    case IDBExceptionCode::Unknown: {
    57         NeverDestroyed<String> entry = ASCIILiteral("Operation failed for reasons unrelated to the database itself and not covered by any other errors.");
     61        static NeverDestroyed<String> entry = ASCIILiteral("Operation failed for reasons unrelated to the database itself and not covered by any other errors.");
    5862        return entry.get();
    5963    }
    6064    case IDBExceptionCode::VersionError: {
    61         NeverDestroyed<String> entry = ASCIILiteral("An attempt was made to open a database using a lower version than the existing version.");
     65        static NeverDestroyed<String> entry = ASCIILiteral("An attempt was made to open a database using a lower version than the existing version.");
    6266        return entry.get();
     67    }
     68    case IDBExceptionCode::InvalidStateError: {
     69        static NeverDestroyed<String> entry = ASCIILiteral("Operation was called on an object on which it is not allowed or at a time when it is not allowed.");
     70        return entry;
    6371    }
    6472    case IDBExceptionCode::None:
  • trunk/Source/WebCore/Modules/indexeddb/shared/IDBError.h

    r191114 r191400  
    3737    Unknown,
    3838    VersionError,
     39
     40    // Indexed DB existing exception codes with IDB-specific error messages:
     41    InvalidStateError,
    3942};
    4043
  • trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp

    r191182 r191400  
    103103}
    104104
     105void InProcessIDBServer::didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
     106{
     107    RefPtr<InProcessIDBServer> self(this);
     108    RunLoop::current().dispatch([this, self, transactionIdentifier, error] {
     109        m_connectionToServer->didAbortTransaction(transactionIdentifier, error);
     110    });
     111}
     112
    105113void InProcessIDBServer::didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
    106114{
     
    108116    RunLoop::current().dispatch([this, self, transactionIdentifier, error] {
    109117        m_connectionToServer->didCommitTransaction(transactionIdentifier, error);
     118    });
     119}
     120
     121void InProcessIDBServer::abortTransaction(IDBResourceIdentifier& resourceIdentifier)
     122{
     123    RefPtr<InProcessIDBServer> self(this);
     124    RunLoop::current().dispatch([this, self, resourceIdentifier] {
     125        m_server->abortTransaction(resourceIdentifier);
    110126    });
    111127}
  • trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h

    r191182 r191400  
    5757    virtual void deleteDatabase(IDBRequestData&) override final;
    5858    virtual void openDatabase(IDBRequestData&) override final;
     59    virtual void abortTransaction(IDBResourceIdentifier&) override final;
    5960    virtual void commitTransaction(IDBResourceIdentifier&) override final;
    6061    virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) override final;
     
    6465    virtual void didDeleteDatabase(const IDBResultData&) override final;
    6566    virtual void didOpenDatabase(const IDBResultData&) override final;
     67    virtual void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&) override final;
    6668    virtual void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&) override final;
    6769    virtual void fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&, uint64_t requestedVersion) override final;
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r191383 r191400  
    15171517                416E29A6102FA962007FC14E /* WorkerReportingProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 416E29A5102FA962007FC14E /* WorkerReportingProxy.h */; };
    15181518                416E6FE81BBD12DF000A6033 /* StreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764C9 /* StreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1519                416E6FE81BBD12DF000A6043 /* ReadableStreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D9 /* ReadableStreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1520                416E6FE81BBD12DF000A6053 /* WritableStreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764E9 /* WritableStreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1521                416E6FE91BBD12E5000A6043 /* ReadableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D8 /* ReadableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1522                416E6FE91BBD12E5000A6053 /* WritableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764E8 /* WritableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
    15191523                416E6FEA1BBD1684000A6034 /* StreamInternalsBuiltinsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8071BB3110D00B764CA /* StreamInternalsBuiltinsWrapper.h */; settings = {ATTRIBUTES = (Private, ); }; };
    1520                 416E6FE81BBD12DF000A6043 /* ReadableStreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D9 /* ReadableStreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
    1521                 416E6FE91BBD12E5000A6043 /* ReadableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D8 /* ReadableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
    15221524                416E6FEA1BBD1684000A6044 /* ReadableStreamInternalsBuiltinsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8071BB3110D00B764DA /* ReadableStreamInternalsBuiltinsWrapper.h */; settings = {ATTRIBUTES = (Private, ); }; };
    1523                 416E6FE81BBD12DF000A6053 /* WritableStreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764E9 /* WritableStreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
    1524                 416E6FE91BBD12E5000A6053 /* WritableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764E8 /* WritableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
    15251525                416E6FEA1BBD1684000A6054 /* WritableStreamInternalsBuiltinsWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8071BB3110D00B764EA /* WritableStreamInternalsBuiltinsWrapper.h */; settings = {ATTRIBUTES = (Private, ); }; };
    15261526                417253AA1354BBBC00360F2A /* MediaControlElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 417253A81354BBBC00360F2A /* MediaControlElements.cpp */; };
     
    21862186                51E0BB380DA5ACB600A9E417 /* StorageMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E0BB360DA5ACB600A9E417 /* StorageMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
    21872187                51E0BB390DA5ACB600A9E417 /* StorageMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51E0BB370DA5ACB600A9E417 /* StorageMap.cpp */; };
     2188                51E1BAC21BD8064E0055D81F /* MemoryBackingStoreTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51E1BAC01BD806470055D81F /* MemoryBackingStoreTransaction.cpp */; };
     2189                51E1BAC31BD8064E0055D81F /* MemoryBackingStoreTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E1BAC11BD806470055D81F /* MemoryBackingStoreTransaction.h */; };
    21882190                51E1ECBE0C91C90400DC255B /* IconDatabaseClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E1ECB80C91C90400DC255B /* IconDatabaseClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    21892191                51E1ECC00C91C90400DC255B /* IconRecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51E1ECBA0C91C90400DC255B /* IconRecord.cpp */; };
     
    26622664                7C4902A218B825F8007D9298 /* DOMWheelEventInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85989DCA0ACC8BBD00A0BC51 /* DOMWheelEventInternal.h */; };
    26632665                7C4C96DC1AD4483500365A50 /* JSReadableStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4C96D81AD4483500365A50 /* JSReadableStream.cpp */; };
     2666                7C4C96DC1AD4483500365A60 /* JSWritableStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4C96D81AD4483500365A60 /* JSWritableStream.cpp */; };
    26642667                7C4C96DD1AD4483500365A50 /* JSReadableStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4C96D91AD4483500365A50 /* JSReadableStream.h */; };
     2668                7C4C96DD1AD4483500365A60 /* JSWritableStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4C96D91AD4483500365A60 /* JSWritableStream.h */; };
    26652669                7C4C96DE1AD4483500365A50 /* JSReadableStreamReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4C96DA1AD4483500365A50 /* JSReadableStreamReader.cpp */; };
    26662670                7C4C96DF1AD4483500365A50 /* JSReadableStreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4C96DB1AD4483500365A50 /* JSReadableStreamReader.h */; };
    2667                 7C4C96DC1AD4483500365A60 /* JSWritableStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4C96D81AD4483500365A60 /* JSWritableStream.cpp */; };
    2668                 7C4C96DD1AD4483500365A60 /* JSWritableStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4C96D91AD4483500365A60 /* JSWritableStream.h */; };
    26692671                7C4C96E31AD44ABF00365A50 /* LaunchServicesSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4C96E21AD44ABF00365A50 /* LaunchServicesSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
    26702672                7C4EDD741A7B607800198C4D /* FontCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C4EDD731A7B607800198C4D /* FontCocoa.mm */; };
     
    95929594                51E0BB360DA5ACB600A9E417 /* StorageMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageMap.h; sourceTree = "<group>"; };
    95939595                51E0BB370DA5ACB600A9E417 /* StorageMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageMap.cpp; sourceTree = "<group>"; };
     9596                51E1BAC01BD806470055D81F /* MemoryBackingStoreTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryBackingStoreTransaction.cpp; sourceTree = "<group>"; };
     9597                51E1BAC11BD806470055D81F /* MemoryBackingStoreTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryBackingStoreTransaction.h; sourceTree = "<group>"; };
    95949598                51E1ECB80C91C90400DC255B /* IconDatabaseClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IconDatabaseClient.h; sourceTree = "<group>"; };
    95959599                51E1ECBA0C91C90400DC255B /* IconRecord.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IconRecord.cpp; sourceTree = "<group>"; };
     
    1012110125                7C48A6D2191C9D8E00026674 /* WebKitNamespace.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebKitNamespace.idl; sourceTree = "<group>"; };
    1012210126                7C4C96D81AD4483500365A50 /* JSReadableStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSReadableStream.cpp; sourceTree = "<group>"; };
     10127                7C4C96D81AD4483500365A60 /* JSWritableStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWritableStream.cpp; sourceTree = "<group>"; };
    1012310128                7C4C96D91AD4483500365A50 /* JSReadableStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSReadableStream.h; sourceTree = "<group>"; };
     10129                7C4C96D91AD4483500365A60 /* JSWritableStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWritableStream.h; sourceTree = "<group>"; };
    1012410130                7C4C96DA1AD4483500365A50 /* JSReadableStreamReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSReadableStreamReader.cpp; sourceTree = "<group>"; };
    1012510131                7C4C96DB1AD4483500365A50 /* JSReadableStreamReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSReadableStreamReader.h; sourceTree = "<group>"; };
    10126                 7C4C96D81AD4483500365A60 /* JSWritableStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWritableStream.cpp; sourceTree = "<group>"; };
    10127                 7C4C96D91AD4483500365A60 /* JSWritableStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWritableStream.h; sourceTree = "<group>"; };
    1012810132                7C4C96E21AD44ABF00365A50 /* LaunchServicesSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchServicesSPI.h; sourceTree = "<group>"; };
    1012910133                7C4EDD731A7B607800198C4D /* FontCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FontCocoa.mm; sourceTree = "<group>"; };
     
    1136511369                9908B0ED1BCACF9100ED0F65 /* ByteLengthQueuingStrategy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ByteLengthQueuingStrategy.js; sourceTree = "<group>"; };
    1136611370                9908B0EE1BCACF9100ED0F65 /* CountQueuingStrategy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CountQueuingStrategy.js; sourceTree = "<group>"; };
     11371                9908B0EF1BCACF9100ED0F65 /* ReadableStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStream.js; sourceTree = "<group>"; };
     11372                9908B0EF1BCACF9100ED0F75 /* WritableStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WritableStream.js; sourceTree = "<group>"; };
     11373                9908B0F01BCACF9100ED0F65 /* ReadableStreamController.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStreamController.js; sourceTree = "<group>"; };
    1136711374                9908B0F11BCACF9100ED0F55 /* StreamInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = StreamInternals.js; sourceTree = "<group>"; };
    11368                 9908B0FD1BCAD07D00ED0F55 /* StreamInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StreamInternalsBuiltins.cpp; sourceTree = "<group>"; };
    11369                 9908B0EF1BCACF9100ED0F65 /* ReadableStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStream.js; sourceTree = "<group>"; };
    11370                 9908B0F01BCACF9100ED0F65 /* ReadableStreamController.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStreamController.js; sourceTree = "<group>"; };
    1137111375                9908B0F11BCACF9100ED0F65 /* ReadableStreamInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStreamInternals.js; sourceTree = "<group>"; };
     11376                9908B0F11BCACF9100ED0F75 /* WritableStreamInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WritableStreamInternals.js; sourceTree = "<group>"; };
    1137211377                9908B0F21BCACF9100ED0F65 /* ReadableStreamReader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReadableStreamReader.js; sourceTree = "<group>"; };
    11373                 9908B0EF1BCACF9100ED0F75 /* WritableStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WritableStream.js; sourceTree = "<group>"; };
    11374                 9908B0F11BCACF9100ED0F75 /* WritableStreamInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WritableStreamInternals.js; sourceTree = "<group>"; };
    1137511378                9908B0F31BCACFFE00ED0F65 /* ByteLengthQueuingStrategyBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteLengthQueuingStrategyBuiltins.cpp; sourceTree = "<group>"; };
    1137611379                9908B0F41BCACFFE00ED0F65 /* ByteLengthQueuingStrategyBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteLengthQueuingStrategyBuiltinsWrapper.h; sourceTree = "<group>"; };
     
    1138011383                9908B0F81BCAD07D00ED0F65 /* CountQueuingStrategyBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CountQueuingStrategyBuiltinsWrapper.h; sourceTree = "<group>"; };
    1138111384                9908B0F91BCAD07D00ED0F65 /* ReadableStreamBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReadableStreamBuiltins.cpp; sourceTree = "<group>"; };
     11385                9908B0F91BCAD07D00ED0F75 /* WritableStreamBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WritableStreamBuiltins.cpp; sourceTree = "<group>"; };
    1138211386                9908B0FA1BCAD07D00ED0F65 /* ReadableStreamControllerBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReadableStreamControllerBuiltins.cpp; sourceTree = "<group>"; };
    1138311387                9908B0FB1BCAD07D00ED0F65 /* ReadableStreamControllerBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamControllerBuiltins.h; sourceTree = "<group>"; };
    1138411388                9908B0FC1BCAD07D00ED0F65 /* ReadableStreamControllerBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamControllerBuiltinsWrapper.h; sourceTree = "<group>"; };
     11389                9908B0FD1BCAD07D00ED0F55 /* StreamInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StreamInternalsBuiltins.cpp; sourceTree = "<group>"; };
    1138511390                9908B0FD1BCAD07D00ED0F65 /* ReadableStreamInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReadableStreamInternalsBuiltins.cpp; sourceTree = "<group>"; };
     11391                9908B0FD1BCAD07D00ED0F75 /* WritableStreamInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WritableStreamInternalsBuiltins.cpp; sourceTree = "<group>"; };
    1138611392                9908B0FE1BCAD07D00ED0F65 /* ReadableStreamReaderBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReadableStreamReaderBuiltins.cpp; sourceTree = "<group>"; };
    1138711393                9908B0FF1BCAD07D00ED0F65 /* ReadableStreamReaderBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamReaderBuiltins.h; sourceTree = "<group>"; };
    1138811394                9908B1001BCAD07D00ED0F65 /* ReadableStreamReaderBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamReaderBuiltinsWrapper.h; sourceTree = "<group>"; };
    11389                 9908B0F91BCAD07D00ED0F75 /* WritableStreamBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WritableStreamBuiltins.cpp; sourceTree = "<group>"; };
    11390                 9908B0FD1BCAD07D00ED0F75 /* WritableStreamInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WritableStreamInternalsBuiltins.cpp; sourceTree = "<group>"; };
    1139111395                9920398018B95BC600B39AF9 /* UserInputBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserInputBridge.cpp; sourceTree = "<group>"; };
    1139211396                9920398118B95BC600B39AF9 /* UserInputBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInputBridge.h; sourceTree = "<group>"; };
     
    1142611430                9AB1F37F18E2489A00534743 /* CSSToLengthConversionData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSToLengthConversionData.cpp; sourceTree = "<group>"; };
    1142711431                9B03D8061BB3110D00B764C9 /* StreamInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamInternalsBuiltins.h; sourceTree = "<group>"; };
    11428                 9B03D8071BB3110D00B764CA /* StreamInternalsBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamInternalsBuiltinsWrapper.h; sourceTree = "<group>"; };
    1142911432                9B03D8061BB3110D00B764D8 /* ReadableStreamBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamBuiltins.h; sourceTree = "<group>"; };
    1143011433                9B03D8061BB3110D00B764D9 /* ReadableStreamInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamInternalsBuiltins.h; sourceTree = "<group>"; };
     11434                9B03D8061BB3110D00B764E8 /* WritableStreamBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WritableStreamBuiltins.h; sourceTree = "<group>"; };
     11435                9B03D8061BB3110D00B764E9 /* WritableStreamInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WritableStreamInternalsBuiltins.h; sourceTree = "<group>"; };
     11436                9B03D8071BB3110D00B764CA /* StreamInternalsBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamInternalsBuiltinsWrapper.h; sourceTree = "<group>"; };
    1143111437                9B03D8071BB3110D00B764D8 /* ReadableStreamBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamBuiltinsWrapper.h; sourceTree = "<group>"; };
    1143211438                9B03D8071BB3110D00B764DA /* ReadableStreamInternalsBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamInternalsBuiltinsWrapper.h; sourceTree = "<group>"; };
    11433                 9B03D8061BB3110D00B764E8 /* WritableStreamBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WritableStreamBuiltins.h; sourceTree = "<group>"; };
    11434                 9B03D8061BB3110D00B764E9 /* WritableStreamInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WritableStreamInternalsBuiltins.h; sourceTree = "<group>"; };
    1143511439                9B03D8071BB3110D00B764E8 /* WritableStreamBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WritableStreamBuiltinsWrapper.h; sourceTree = "<group>"; };
    1143611440                9B03D8071BB3110D00B764EA /* WritableStreamInternalsBuiltinsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WritableStreamInternalsBuiltinsWrapper.h; sourceTree = "<group>"; };
     
    1640916413                                9908B0EF1BCACF9100ED0F75 /* WritableStream.js */,
    1641016414                                9908B0F11BCACF9100ED0F75 /* WritableStreamInternals.js */,
    16411 
    1641216415                        );
    1641316416                        path = streams;
     
    1683016833                                518864E41BBB4B7E00E540C9 /* IDBServerOperation.cpp */,
    1683116834                                518864E51BBB4B7E00E540C9 /* IDBServerOperation.h */,
     16835                                51E1BAC01BD806470055D81F /* MemoryBackingStoreTransaction.cpp */,
     16836                                51E1BAC11BD806470055D81F /* MemoryBackingStoreTransaction.h */,
    1683216837                                51BA4AC81BBC5B9E00DF3D6D /* MemoryIDBBackingStore.cpp */,
    1683316838                                51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */,
     
    2696126966                                439046E012DA25E800AF80A2 /* RenderMathMLOperator.h in Headers */,
    2696226967                                439046E012DA25E800BF80A3 /* RenderMathMLRadicalOperator.h in Headers */,
     26968                                51E1BAC31BD8064E0055D81F /* MemoryBackingStoreTransaction.h in Headers */,
    2696326969                                439046E212DA25E800AF80A2 /* RenderMathMLRoot.h in Headers */,
    2696426970                                439046E412DA25E800AF80A2 /* RenderMathMLRow.h in Headers */,
     
    2998129987                                B2FA3DBE0AB75A6F000E5AC4 /* JSSVGPathSegCurvetoCubicAbs.cpp in Sources */,
    2998229988                                B2FA3DC00AB75A6F000E5AC4 /* JSSVGPathSegCurvetoCubicRel.cpp in Sources */,
     29989                                51E1BAC21BD8064E0055D81F /* MemoryBackingStoreTransaction.cpp in Sources */,
    2998329990                                B2FA3DC20AB75A6F000E5AC4 /* JSSVGPathSegCurvetoCubicSmoothAbs.cpp in Sources */,
    2998429991                                B2FA3DC40AB75A6F000E5AC4 /* JSSVGPathSegCurvetoCubicSmoothRel.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.