Changeset 80038 in webkit


Ignore:
Timestamp:
Mar 1, 2011 2:05:36 PM (13 years ago)
Author:
tonyg@chromium.org
Message:

2011-03-01 Sheriff Bot <webkit.review.bot@gmail.com>

Unreviewed, rolling out r80028.
http://trac.webkit.org/changeset/80028
https://bugs.webkit.org/show_bug.cgi?id=55502

'caused crashes; rolling out while investigating' (Requested
by jorlow on #webkit).

  • storage/indexeddb/transaction-abort-expected.txt: Removed.
  • storage/indexeddb/transaction-abort.html: Removed.

2011-03-01 Sheriff Bot <webkit.review.bot@gmail.com>

Unreviewed, rolling out r80028.
http://trac.webkit.org/changeset/80028
https://bugs.webkit.org/show_bug.cgi?id=55502

'caused crashes; rolling out while investigating' (Requested
by jorlow on #webkit).

  • dom/EventQueue.cpp: (WebCore::EventQueue::enqueueEvent): (WebCore::EventQueue::pendingEventTimerFired): (WebCore::EventQueue::dispatchEvent):
  • dom/EventQueue.h:
  • dom/ExceptionCode.cpp:
  • storage/IDBCursor.cpp: (WebCore::IDBCursor::update): (WebCore::IDBCursor::deleteFunction):
  • storage/IDBDatabaseException.h:
  • storage/IDBDatabaseException.idl:
  • storage/IDBIndex.cpp: (WebCore::IDBIndex::openCursor): (WebCore::IDBIndex::openKeyCursor): (WebCore::IDBIndex::get): (WebCore::IDBIndex::getKey):
  • storage/IDBObjectStore.cpp: (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): (WebCore::IDBObjectStore::deleteFunction): (WebCore::IDBObjectStore::clear): (WebCore::IDBObjectStore::openCursor):
  • storage/IDBRequest.cpp: (WebCore::IDBRequest::IDBRequest): (WebCore::IDBRequest::~IDBRequest): (WebCore::IDBRequest::readyState): (WebCore::IDBRequest::dispatchEvent): (WebCore::IDBRequest::enqueueEvent): (WebCore::IDBRequest::source):
  • storage/IDBRequest.h:
  • storage/IDBTransaction.cpp: (WebCore::IDBTransaction::onAbort):
  • storage/IDBTransaction.h:
Location:
trunk
Files:
2 deleted
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r80037 r80038  
     12011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>
     2
     3        Unreviewed, rolling out r80028.
     4        http://trac.webkit.org/changeset/80028
     5        https://bugs.webkit.org/show_bug.cgi?id=55502
     6
     7        'caused crashes; rolling out while investigating' (Requested
     8        by jorlow on #webkit).
     9
     10        * storage/indexeddb/transaction-abort-expected.txt: Removed.
     11        * storage/indexeddb/transaction-abort.html: Removed.
     12
    1132011-03-01  Carol Szabo  <carol.szabo@nokia.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r80037 r80038  
     12011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>
     2
     3        Unreviewed, rolling out r80028.
     4        http://trac.webkit.org/changeset/80028
     5        https://bugs.webkit.org/show_bug.cgi?id=55502
     6
     7        'caused crashes; rolling out while investigating' (Requested
     8        by jorlow on #webkit).
     9
     10        * dom/EventQueue.cpp:
     11        (WebCore::EventQueue::enqueueEvent):
     12        (WebCore::EventQueue::pendingEventTimerFired):
     13        (WebCore::EventQueue::dispatchEvent):
     14        * dom/EventQueue.h:
     15        * dom/ExceptionCode.cpp:
     16        * storage/IDBCursor.cpp:
     17        (WebCore::IDBCursor::update):
     18        (WebCore::IDBCursor::deleteFunction):
     19        * storage/IDBDatabaseException.h:
     20        * storage/IDBDatabaseException.idl:
     21        * storage/IDBIndex.cpp:
     22        (WebCore::IDBIndex::openCursor):
     23        (WebCore::IDBIndex::openKeyCursor):
     24        (WebCore::IDBIndex::get):
     25        (WebCore::IDBIndex::getKey):
     26        * storage/IDBObjectStore.cpp:
     27        (WebCore::IDBObjectStore::get):
     28        (WebCore::IDBObjectStore::add):
     29        (WebCore::IDBObjectStore::put):
     30        (WebCore::IDBObjectStore::deleteFunction):
     31        (WebCore::IDBObjectStore::clear):
     32        (WebCore::IDBObjectStore::openCursor):
     33        * storage/IDBRequest.cpp:
     34        (WebCore::IDBRequest::IDBRequest):
     35        (WebCore::IDBRequest::~IDBRequest):
     36        (WebCore::IDBRequest::readyState):
     37        (WebCore::IDBRequest::dispatchEvent):
     38        (WebCore::IDBRequest::enqueueEvent):
     39        (WebCore::IDBRequest::source):
     40        * storage/IDBRequest.h:
     41        * storage/IDBTransaction.cpp:
     42        (WebCore::IDBTransaction::onAbort):
     43        * storage/IDBTransaction.h:
     44
    1452011-03-01  Carol Szabo  <carol.szabo@nokia.com>
    246
  • trunk/Source/WebCore/dom/EventQueue.cpp

    r80028 r80038  
    6060{
    6161    ASSERT(event->target());
    62     bool wasAdded = m_queuedEvents.add(event).second;
    63     ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
     62    m_queuedEvents.append(event);
    6463   
    6564    if (!m_pendingEventTimer->isActive())
     
    7978}
    8079
    81 bool EventQueue::cancelEvent(Event* event)
    82 {
    83     bool found = m_queuedEvents.contains(event);
    84     m_queuedEvents.remove(event);
    85     if (m_queuedEvents.isEmpty())
    86         m_pendingEventTimer->stop();
    87     return found;
    88 }
    89 
    9080void EventQueue::pendingEventTimerFired()
    9181{
    9282    ASSERT(!m_pendingEventTimer->isActive());
    93     ASSERT(!m_queuedEvents.isEmpty());
    9483
     84    Vector<RefPtr<Event> > queuedEvents;
     85    queuedEvents.swap(m_queuedEvents);
     86   
    9587    m_nodesWithQueuedScrollEvents.clear();
    9688
    97     // Insert a marker for where we should stop.
    98     ASSERT(!m_queuedEvents.contains(0));
    99     bool wasAdded = m_queuedEvents.add(0).second;
    100     ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
    101 
    102     while (!m_queuedEvents.isEmpty()) {
    103         ListHashSet<RefPtr<Event> >::iterator iter = m_queuedEvents.begin();
    104         RefPtr<Event> event = *iter;
    105         m_queuedEvents.remove(iter);
    106         if (!event)
    107             break;
    108         dispatchEvent(event.get());
    109     }
     89    for (size_t i = 0; i < queuedEvents.size(); i++)
     90        dispatchEvent(queuedEvents[i].release());
    11091}
    11192
     
    11394{
    11495    EventTarget* eventTarget = event->target();
    115     if (eventTarget->toDOMWindow())
     96    if (eventTarget->toNode())
     97        eventTarget->dispatchEvent(event);
     98    else if (eventTarget->toDOMWindow())
    11699        eventTarget->toDOMWindow()->dispatchEvent(event, 0);
    117100    else
  • trunk/Source/WebCore/dom/EventQueue.h

    r80028 r80038  
    2929
    3030#include <wtf/HashSet.h>
    31 #include <wtf/ListHashSet.h>
    3231#include <wtf/Noncopyable.h>
    3332#include <wtf/OwnPtr.h>
    3433#include <wtf/PassOwnPtr.h>
    3534#include <wtf/RefPtr.h>
     35#include <wtf/Vector.h>
    3636
    3737namespace WebCore {
     
    6161    void enqueueEvent(PassRefPtr<Event>);
    6262    void enqueueScrollEvent(PassRefPtr<Node>, ScrollEventTargetType);
    63     bool cancelEvent(Event*);
    6463
    6564private:
     
    7069
    7170    OwnPtr<EventQueueTimer> m_pendingEventTimer;
    72     ListHashSet<RefPtr<Event> > m_queuedEvents;
     71    Vector<RefPtr<Event> > m_queuedEvents;
    7372    HashSet<Node*> m_nodesWithQueuedScrollEvents;
    7473   
  • trunk/Source/WebCore/dom/ExceptionCode.cpp

    r80028 r80038  
    224224    "TIMEOUT_ERR",
    225225    "DEADLOCK_ERR",
    226     "READ_ONLY_ERR",
    227     "ABORT_ERR"
     226    "READ_ONLY_ERR"
    228227};
    229228
     
    240239    "TIMEOUT_ERR", // This can't be thrown.
    241240    "DEADLOCK_ERR", // This can't be thrown.
    242     "Write operations cannot be preformed on a read-only transaction.",
    243     "The transaction was aborted, so the request cannot be fulfilled."
     241    "Write operations cannot be preformed on a read-only transaction."
    244242};
    245243#endif
  • trunk/Source/WebCore/storage/IDBCursor.cpp

    r80028 r80038  
    7373    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    7474    m_backend->update(value, request, ec);
    75     if (ec) {
    76         request->markEarlyDeath();
     75    if (ec)
    7776        return 0;
    78     }
    7977    return request.release();
    8078}
     
    9492    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    9593    m_backend->deleteFunction(request, ec);
    96     if (ec) {
    97         request->markEarlyDeath();
     94    if (ec)
    9895        return 0;
    99     }
    10096    return request.release();
    10197}
  • trunk/Source/WebCore/storage/IDBDatabaseException.h

    r80028 r80038  
    5656        TIMEOUT_ERR = IDBDatabaseExceptionOffset + 10,
    5757        DEADLOCK_ERR = IDBDatabaseExceptionOffset + 11,
    58         READ_ONLY_ERR = IDBDatabaseExceptionOffset + 12,
    59         ABORT_ERR = IDBDatabaseExceptionOffset + 13
     58        READ_ONLY_ERR = IDBDatabaseExceptionOffset + 12
    6059    };
    6160
  • trunk/Source/WebCore/storage/IDBDatabaseException.idl

    r80028 r80038  
    5353        const unsigned short DEADLOCK_ERR = 11;
    5454        const unsigned short READ_ONLY_ERR = 12;
    55         const unsigned short ABORT_ERR = 13;
    5655    };
    5756
  • trunk/Source/WebCore/storage/IDBIndex.cpp

    r80028 r80038  
    6363    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    6464    m_backend->openCursor(keyRange, direction, request, m_transaction->backend(), ec);
    65     if (ec) {
    66         request->markEarlyDeath();
     65    if (ec)
    6766        return 0;
    68     }
    6967    return request;
    7068}
     
    8078    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    8179    m_backend->openKeyCursor(keyRange, direction, request, m_transaction->backend(), ec);
    82     if (ec) {
    83         request->markEarlyDeath();
     80    if (ec)
    8481        return 0;
    85     }
    8682    return request;
    8783}
     
    9187    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    9288    m_backend->get(key, request, m_transaction->backend(), ec);
    93     if (ec) {
    94         request->markEarlyDeath();
     89    if (ec)
    9590        return 0;
    96     }
    9791    return request;
    9892}
     
    10296    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    10397    m_backend->getKey(key, request, m_transaction->backend(), ec);
    104     if (ec) {
    105         request->markEarlyDeath();
     98    if (ec)
    10699        return 0;
    107     }
    108100    return request;
    109101}
  • trunk/Source/WebCore/storage/IDBObjectStore.cpp

    r80028 r80038  
    7272    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    7373    m_objectStore->get(key, request, m_transaction->backend(), ec);
    74     if (ec) {
    75         request->markEarlyDeath();
     74    if (ec)
    7675        return 0;
    77     }
    7876    return request.release();
    7977}
     
    8381    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    8482    m_objectStore->put(value, key, IDBObjectStoreBackendInterface::AddOnly, request, m_transaction->backend(), ec);
    85     if (ec) {
    86         request->markEarlyDeath();
     83    if (ec)
    8784        return 0;
    88     }
    89     return request.release();
     85    return request;
    9086}
    9187
     
    9490    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    9591    m_objectStore->put(value, key, IDBObjectStoreBackendInterface::AddOrUpdate, request, m_transaction->backend(), ec);
    96     if (ec) {
    97         request->markEarlyDeath();
     92    if (ec)
    9893        return 0;
    99     }
    100     return request.release();
     94    return request;
    10195}
    10296
     
    10599    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    106100    m_objectStore->deleteFunction(key, request, m_transaction->backend(), ec);
    107     if (ec) {
    108         request->markEarlyDeath();
     101    if (ec)
    109102        return 0;
    110     }
    111     return request.release();
     103    return request;
    112104}
    113105
     
    116108    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    117109    m_objectStore->clear(request, m_transaction->backend(), ec);
    118     if (ec) {
    119         request->markEarlyDeath();
     110    if (ec)
    120111        return 0;
    121     }
    122     return request.release();
     112    return request;
    123113}
    124114
     
    159149    RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
    160150    m_objectStore->openCursor(range, direction, request, m_transaction->backend(), ec);
    161     if (ec) {
    162         request->markEarlyDeath();
     151    if (ec)
    163152        return 0;
    164     }
    165153    return request.release();
    166154}
  • trunk/Source/WebCore/storage/IDBRequest.cpp

    r80028 r80038  
    4343#include "IDBObjectStore.h"
    4444#include "IDBPendingTransactionMonitor.h"
    45 #include "IDBTransaction.h"
    4645
    4746namespace WebCore {
     
    6059    , m_finished(false)
    6160{
    62     if (m_transaction) {
    63         m_transaction->registerRequest(this);
     61    if (m_transaction)
    6462        IDBPendingTransactionMonitor::removePendingTransaction(m_transaction->backend());
    65     }
    6663}
    6764
    6865IDBRequest::~IDBRequest()
    6966{
    70     ASSERT(m_readyState == DONE || m_readyState == EarlyDeath);
    71     if (m_transaction)
    72         m_transaction->unregisterRequest(this);
    7367}
    7468
     
    112106unsigned short IDBRequest::readyState() const
    113107{
    114     ASSERT(m_readyState == LOADING || m_readyState == DONE);
    115108    return m_readyState;
    116 }
    117 
    118 void IDBRequest::markEarlyDeath()
    119 {
    120     ASSERT(m_readyState == LOADING);
    121     m_readyState = EarlyDeath;
    122109}
    123110
     
    140127}
    141128
    142 IDBAny* IDBRequest::source()
    143 {
    144     return m_source.get();
    145 }
    146 
    147 void IDBRequest::abort()
    148 {
    149     if (m_readyState != LOADING) {
    150         ASSERT(m_readyState == DONE);
    151         return;
    152     }
    153 
    154     ASSERT(scriptExecutionContext()->isDocument());
    155     EventQueue* eventQueue = static_cast<Document*>(scriptExecutionContext())->eventQueue();
    156     for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) {
    157         bool removed = eventQueue->cancelEvent(m_enqueuedEvents[i].get());
    158         ASSERT_UNUSED(removed, removed);
    159     }
    160     m_enqueuedEvents.clear();
    161 
    162     m_errorCode = 0;
    163     m_errorMessage = String();
    164     m_result.clear();
    165     onError(IDBDatabaseError::create(IDBDatabaseException::ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
    166 }
    167 
    168129void IDBRequest::onError(PassRefPtr<IDBDatabaseError> error)
    169130{
     
    258219{
    259220    ASSERT(!m_finished);
    260     ASSERT(m_enqueuedEvents.size());
    261221    ASSERT(scriptExecutionContext());
    262222    ASSERT(event->target() == this);
     
    264224    if (event->type() != eventNames().blockedEvent)
    265225        m_readyState = DONE;
    266 
    267     for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) {
    268         if (m_enqueuedEvents[i].get() == event.get())
    269             m_enqueuedEvents.remove(i);
    270     }
    271226
    272227    Vector<RefPtr<EventTarget> > targets;
     
    286241
    287242    // If the result was of type IDBCursor, then we'll fire again.
     243//    if (m_result && m_result->type() != IDBAny::IDBCursorType && event->type() != eventNames.blockedEvent)
    288244    if (m_result && m_result->type() != IDBAny::IDBCursorType)
    289245        m_finished = true;
     
    314270    EventQueue* eventQueue = static_cast<Document*>(scriptExecutionContext())->eventQueue();
    315271    event->setTarget(this);
    316     eventQueue->enqueueEvent(event.get());
    317     m_enqueuedEvents.append(event);
     272    eventQueue->enqueueEvent(event);
     273}
     274
     275IDBAny* IDBRequest::source()
     276{
     277    return m_source.get();
    318278}
    319279
  • trunk/Source/WebCore/storage/IDBRequest.h

    r80028 r80038  
    5959    enum ReadyState {
    6060        LOADING = 1,
    61         DONE = 2,
    62         EarlyDeath = 3
     61        DONE = 2
    6362    };
    6463    unsigned short readyState() const;
     
    6766    DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
    6867
    69     void markEarlyDeath();
    7068    bool resetReadyState(IDBTransaction*);
    7169    IDBAny* source();
    72     void abort();
    7370
    7471    // IDBCallbacks
     
    115112    ReadyState m_readyState;
    116113    bool m_finished; // Is it possible that we'll fire any more events? If not, we're finished.
    117     Vector<RefPtr<Event> > m_enqueuedEvents;
    118114
    119115    EventTargetData m_eventTargetData;
  • trunk/Source/WebCore/storage/IDBTransaction.cpp

    r80028 r80038  
    104104}
    105105
    106 void IDBTransaction::registerRequest(IDBRequest* request)
    107 {
    108     m_childRequests.add(request);
    109 }
    110 
    111 void IDBTransaction::unregisterRequest(IDBRequest* request)
    112 {
    113     // If we aborted the request, it will already have been removed.
    114     m_childRequests.remove(request);
    115 }
    116 
    117106void IDBTransaction::onAbort()
    118107{
    119     while (!m_childRequests.isEmpty()) {
    120         IDBRequest* request = *m_childRequests.begin();
    121         m_childRequests.remove(request);
    122         request->abort();
    123     }
    124 
    125108    enqueueEvent(Event::create(eventNames().abortEvent, true, false));
    126109}
  • trunk/Source/WebCore/storage/IDBTransaction.h

    r80028 r80038  
    6363    void abort();
    6464
    65     void registerRequest(IDBRequest*);
    66     void unregisterRequest(IDBRequest*);
    67 
    6865    DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
    6966    DEFINE_ATTRIBUTE_EVENT_LISTENER(complete);
     
    104101    bool m_finished; // Is it possible that we'll fire any more events or allow any new transactions? If not, we're finished.
    105102
    106     ListHashSet<IDBRequest*> m_childRequests;
    107 
    108103    EventTargetData m_eventTargetData;
    109104};
Note: See TracChangeset for help on using the changeset viewer.