| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 { | 53 { |
| 54 IDBRequest* request = new IDBRequest(scriptState, source, transaction); | 54 IDBRequest* request = new IDBRequest(scriptState, source, transaction); |
| 55 request->suspendIfNeeded(); | 55 request->suspendIfNeeded(); |
| 56 // Requests associated with IDBFactory (open/deleteDatabase/getDatabaseNames
) are not associated with transactions. | 56 // Requests associated with IDBFactory (open/deleteDatabase/getDatabaseNames
) are not associated with transactions. |
| 57 if (transaction) | 57 if (transaction) |
| 58 transaction->registerRequest(request); | 58 transaction->registerRequest(request); |
| 59 return request; | 59 return request; |
| 60 } | 60 } |
| 61 | 61 |
| 62 IDBRequest::IDBRequest(ScriptState* scriptState, IDBAny* source, IDBTransaction*
transaction) | 62 IDBRequest::IDBRequest(ScriptState* scriptState, IDBAny* source, IDBTransaction*
transaction) |
| 63 : ActiveDOMObject(scriptState->executionContext()) | 63 : ActiveDOMObject(scriptState->getExecutionContext()) |
| 64 , m_transaction(transaction) | 64 , m_transaction(transaction) |
| 65 , m_scriptState(scriptState) | 65 , m_scriptState(scriptState) |
| 66 , m_source(source) | 66 , m_source(source) |
| 67 { | 67 { |
| 68 } | 68 } |
| 69 | 69 |
| 70 IDBRequest::~IDBRequest() | 70 IDBRequest::~IDBRequest() |
| 71 { | 71 { |
| 72 ASSERT(m_readyState == DONE || m_readyState == EarlyDeath || !executionConte
xt()); | 72 ASSERT(m_readyState == DONE || m_readyState == EarlyDeath || !getExecutionCo
ntext()); |
| 73 } | 73 } |
| 74 | 74 |
| 75 DEFINE_TRACE(IDBRequest) | 75 DEFINE_TRACE(IDBRequest) |
| 76 { | 76 { |
| 77 visitor->trace(m_transaction); | 77 visitor->trace(m_transaction); |
| 78 visitor->trace(m_source); | 78 visitor->trace(m_source); |
| 79 visitor->trace(m_result); | 79 visitor->trace(m_result); |
| 80 visitor->trace(m_error); | 80 visitor->trace(m_error); |
| 81 visitor->trace(m_enqueuedEvents); | 81 visitor->trace(m_enqueuedEvents); |
| 82 visitor->trace(m_pendingCursor); | 82 visitor->trace(m_pendingCursor); |
| 83 visitor->trace(m_cursorKey); | 83 visitor->trace(m_cursorKey); |
| 84 visitor->trace(m_cursorPrimaryKey); | 84 visitor->trace(m_cursorPrimaryKey); |
| 85 RefCountedGarbageCollectedEventTargetWithInlineData<IDBRequest>::trace(visit
or); | 85 RefCountedGarbageCollectedEventTargetWithInlineData<IDBRequest>::trace(visit
or); |
| 86 ActiveDOMObject::trace(visitor); | 86 ActiveDOMObject::trace(visitor); |
| 87 } | 87 } |
| 88 | 88 |
| 89 ScriptValue IDBRequest::result(ExceptionState& exceptionState) | 89 ScriptValue IDBRequest::result(ExceptionState& exceptionState) |
| 90 { | 90 { |
| 91 if (m_readyState != DONE) { | 91 if (m_readyState != DONE) { |
| 92 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::request
NotFinishedErrorMessage); | 92 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::request
NotFinishedErrorMessage); |
| 93 return ScriptValue(); | 93 return ScriptValue(); |
| 94 } | 94 } |
| 95 if (m_contextStopped || !executionContext()) | 95 if (m_contextStopped || !getExecutionContext()) |
| 96 return ScriptValue(); | 96 return ScriptValue(); |
| 97 m_resultDirty = false; | 97 m_resultDirty = false; |
| 98 ScriptValue value = ScriptValue::from(m_scriptState.get(), m_result); | 98 ScriptValue value = ScriptValue::from(m_scriptState.get(), m_result); |
| 99 return value; | 99 return value; |
| 100 } | 100 } |
| 101 | 101 |
| 102 DOMException* IDBRequest::error(ExceptionState& exceptionState) const | 102 DOMException* IDBRequest::error(ExceptionState& exceptionState) const |
| 103 { | 103 { |
| 104 if (m_readyState != DONE) { | 104 if (m_readyState != DONE) { |
| 105 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::request
NotFinishedErrorMessage); | 105 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::request
NotFinishedErrorMessage); |
| 106 return nullptr; | 106 return nullptr; |
| 107 } | 107 } |
| 108 return m_error; | 108 return m_error; |
| 109 } | 109 } |
| 110 | 110 |
| 111 ScriptValue IDBRequest::source() const | 111 ScriptValue IDBRequest::source() const |
| 112 { | 112 { |
| 113 if (m_contextStopped || !executionContext()) | 113 if (m_contextStopped || !getExecutionContext()) |
| 114 return ScriptValue(); | 114 return ScriptValue(); |
| 115 | 115 |
| 116 return ScriptValue::from(m_scriptState.get(), m_source); | 116 return ScriptValue::from(m_scriptState.get(), m_source); |
| 117 } | 117 } |
| 118 | 118 |
| 119 const String& IDBRequest::readyState() const | 119 const String& IDBRequest::readyState() const |
| 120 { | 120 { |
| 121 ASSERT(m_readyState == PENDING || m_readyState == DONE); | 121 ASSERT(m_readyState == PENDING || m_readyState == DONE); |
| 122 | 122 |
| 123 if (m_readyState == PENDING) | 123 if (m_readyState == PENDING) |
| 124 return IndexedDBNames::pending; | 124 return IndexedDBNames::pending; |
| 125 | 125 |
| 126 return IndexedDBNames::done; | 126 return IndexedDBNames::done; |
| 127 } | 127 } |
| 128 | 128 |
| 129 void IDBRequest::abort() | 129 void IDBRequest::abort() |
| 130 { | 130 { |
| 131 ASSERT(!m_requestAborted); | 131 ASSERT(!m_requestAborted); |
| 132 if (m_contextStopped || !executionContext()) | 132 if (m_contextStopped || !getExecutionContext()) |
| 133 return; | 133 return; |
| 134 ASSERT(m_readyState == PENDING || m_readyState == DONE); | 134 ASSERT(m_readyState == PENDING || m_readyState == DONE); |
| 135 if (m_readyState == DONE) | 135 if (m_readyState == DONE) |
| 136 return; | 136 return; |
| 137 | 137 |
| 138 EventQueue* eventQueue = executionContext()->eventQueue(); | 138 EventQueue* eventQueue = getExecutionContext()->getEventQueue(); |
| 139 for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { | 139 for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { |
| 140 bool removed = eventQueue->cancelEvent(m_enqueuedEvents[i].get()); | 140 bool removed = eventQueue->cancelEvent(m_enqueuedEvents[i].get()); |
| 141 ASSERT_UNUSED(removed, removed); | 141 ASSERT_UNUSED(removed, removed); |
| 142 } | 142 } |
| 143 m_enqueuedEvents.clear(); | 143 m_enqueuedEvents.clear(); |
| 144 | 144 |
| 145 m_error.clear(); | 145 m_error.clear(); |
| 146 m_result.clear(); | 146 m_result.clear(); |
| 147 onError(DOMException::create(AbortError, "The transaction was aborted, so th
e request cannot be fulfilled.")); | 147 onError(DOMException::create(AbortError, "The transaction was aborted, so th
e request cannot be fulfilled.")); |
| 148 m_requestAborted = true; | 148 m_requestAborted = true; |
| 149 } | 149 } |
| 150 | 150 |
| 151 void IDBRequest::setCursorDetails(IndexedDB::CursorType cursorType, WebIDBCursor
Direction direction) | 151 void IDBRequest::setCursorDetails(IndexedDB::CursorType cursorType, WebIDBCursor
Direction direction) |
| 152 { | 152 { |
| 153 ASSERT(m_readyState == PENDING); | 153 ASSERT(m_readyState == PENDING); |
| 154 ASSERT(!m_pendingCursor); | 154 ASSERT(!m_pendingCursor); |
| 155 m_cursorType = cursorType; | 155 m_cursorType = cursorType; |
| 156 m_cursorDirection = direction; | 156 m_cursorDirection = direction; |
| 157 } | 157 } |
| 158 | 158 |
| 159 void IDBRequest::setPendingCursor(IDBCursor* cursor) | 159 void IDBRequest::setPendingCursor(IDBCursor* cursor) |
| 160 { | 160 { |
| 161 ASSERT(m_readyState == DONE); | 161 ASSERT(m_readyState == DONE); |
| 162 ASSERT(executionContext()); | 162 ASSERT(getExecutionContext()); |
| 163 ASSERT(m_transaction); | 163 ASSERT(m_transaction); |
| 164 ASSERT(!m_pendingCursor); | 164 ASSERT(!m_pendingCursor); |
| 165 ASSERT(cursor == getResultCursor()); | 165 ASSERT(cursor == getResultCursor()); |
| 166 | 166 |
| 167 m_hasPendingActivity = true; | 167 m_hasPendingActivity = true; |
| 168 m_pendingCursor = cursor; | 168 m_pendingCursor = cursor; |
| 169 setResult(nullptr); | 169 setResult(nullptr); |
| 170 m_readyState = PENDING; | 170 m_readyState = PENDING; |
| 171 m_error.clear(); | 171 m_error.clear(); |
| 172 m_transaction->registerRequest(this); | 172 m_transaction->registerRequest(this); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 } | 204 } |
| 205 | 205 |
| 206 void IDBRequest::ackReceivedBlobs(const Vector<RefPtr<IDBValue>>& values) | 206 void IDBRequest::ackReceivedBlobs(const Vector<RefPtr<IDBValue>>& values) |
| 207 { | 207 { |
| 208 for (size_t i = 0; i < values.size(); ++i) | 208 for (size_t i = 0; i < values.size(); ++i) |
| 209 ackReceivedBlobs(values[i].get()); | 209 ackReceivedBlobs(values[i].get()); |
| 210 } | 210 } |
| 211 | 211 |
| 212 bool IDBRequest::shouldEnqueueEvent() const | 212 bool IDBRequest::shouldEnqueueEvent() const |
| 213 { | 213 { |
| 214 if (m_contextStopped || !executionContext()) | 214 if (m_contextStopped || !getExecutionContext()) |
| 215 return false; | 215 return false; |
| 216 ASSERT(m_readyState == PENDING || m_readyState == DONE); | 216 ASSERT(m_readyState == PENDING || m_readyState == DONE); |
| 217 if (m_requestAborted) | 217 if (m_requestAborted) |
| 218 return false; | 218 return false; |
| 219 ASSERT(m_readyState == PENDING); | 219 ASSERT(m_readyState == PENDING); |
| 220 ASSERT(!m_error && !m_result); | 220 ASSERT(!m_error && !m_result); |
| 221 return true; | 221 return true; |
| 222 } | 222 } |
| 223 | 223 |
| 224 void IDBRequest::onError(DOMException* error) | 224 void IDBRequest::onError(DOMException* error) |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 m_result->contextWillBeDestroyed(); | 398 m_result->contextWillBeDestroyed(); |
| 399 if (m_pendingCursor) | 399 if (m_pendingCursor) |
| 400 m_pendingCursor->contextWillBeDestroyed(); | 400 m_pendingCursor->contextWillBeDestroyed(); |
| 401 } | 401 } |
| 402 | 402 |
| 403 const AtomicString& IDBRequest::interfaceName() const | 403 const AtomicString& IDBRequest::interfaceName() const |
| 404 { | 404 { |
| 405 return EventTargetNames::IDBRequest; | 405 return EventTargetNames::IDBRequest; |
| 406 } | 406 } |
| 407 | 407 |
| 408 ExecutionContext* IDBRequest::executionContext() const | 408 ExecutionContext* IDBRequest::getExecutionContext() const |
| 409 { | 409 { |
| 410 return ActiveDOMObject::executionContext(); | 410 return ActiveDOMObject::getExecutionContext(); |
| 411 } | 411 } |
| 412 | 412 |
| 413 DispatchEventResult IDBRequest::dispatchEventInternal(PassRefPtrWillBeRawPtr<Eve
nt> event) | 413 DispatchEventResult IDBRequest::dispatchEventInternal(PassRefPtrWillBeRawPtr<Eve
nt> event) |
| 414 { | 414 { |
| 415 IDB_TRACE("IDBRequest::dispatchEvent"); | 415 IDB_TRACE("IDBRequest::dispatchEvent"); |
| 416 if (m_contextStopped || !executionContext()) | 416 if (m_contextStopped || !getExecutionContext()) |
| 417 return DispatchEventResult::CanceledBeforeDispatch; | 417 return DispatchEventResult::CanceledBeforeDispatch; |
| 418 ASSERT(m_readyState == PENDING); | 418 ASSERT(m_readyState == PENDING); |
| 419 ASSERT(m_hasPendingActivity); | 419 ASSERT(m_hasPendingActivity); |
| 420 ASSERT(m_enqueuedEvents.size()); | 420 ASSERT(m_enqueuedEvents.size()); |
| 421 ASSERT(event->target() == this); | 421 ASSERT(event->target() == this); |
| 422 | 422 |
| 423 ScriptState::Scope scope(m_scriptState.get()); | 423 ScriptState::Scope scope(m_scriptState.get()); |
| 424 | 424 |
| 425 if (event->type() != EventTypeNames::blocked) | 425 if (event->type() != EventTypeNames::blocked) |
| 426 m_readyState = DONE; | 426 m_readyState = DONE; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 m_transaction->abort(IGNORE_EXCEPTION); | 493 m_transaction->abort(IGNORE_EXCEPTION); |
| 494 } | 494 } |
| 495 } | 495 } |
| 496 | 496 |
| 497 void IDBRequest::transactionDidFinishAndDispatch() | 497 void IDBRequest::transactionDidFinishAndDispatch() |
| 498 { | 498 { |
| 499 ASSERT(m_transaction); | 499 ASSERT(m_transaction); |
| 500 ASSERT(m_transaction->isVersionChange()); | 500 ASSERT(m_transaction->isVersionChange()); |
| 501 ASSERT(m_didFireUpgradeNeededEvent); | 501 ASSERT(m_didFireUpgradeNeededEvent); |
| 502 ASSERT(m_readyState == DONE); | 502 ASSERT(m_readyState == DONE); |
| 503 ASSERT(executionContext()); | 503 ASSERT(getExecutionContext()); |
| 504 m_transaction.clear(); | 504 m_transaction.clear(); |
| 505 | 505 |
| 506 if (m_contextStopped) | 506 if (m_contextStopped) |
| 507 return; | 507 return; |
| 508 | 508 |
| 509 m_readyState = PENDING; | 509 m_readyState = PENDING; |
| 510 } | 510 } |
| 511 | 511 |
| 512 void IDBRequest::enqueueEvent(PassRefPtrWillBeRawPtr<Event> event) | 512 void IDBRequest::enqueueEvent(PassRefPtrWillBeRawPtr<Event> event) |
| 513 { | 513 { |
| 514 ASSERT(m_readyState == PENDING || m_readyState == DONE); | 514 ASSERT(m_readyState == PENDING || m_readyState == DONE); |
| 515 | 515 |
| 516 if (m_contextStopped || !executionContext()) | 516 if (m_contextStopped || !getExecutionContext()) |
| 517 return; | 517 return; |
| 518 | 518 |
| 519 ASSERT_WITH_MESSAGE(m_readyState == PENDING || m_didFireUpgradeNeededEvent,
"When queueing event %s, m_readyState was %d", event->type().utf8().data(), m_re
adyState); | 519 ASSERT_WITH_MESSAGE(m_readyState == PENDING || m_didFireUpgradeNeededEvent,
"When queueing event %s, m_readyState was %d", event->type().utf8().data(), m_re
adyState); |
| 520 | 520 |
| 521 EventQueue* eventQueue = executionContext()->eventQueue(); | 521 EventQueue* eventQueue = getExecutionContext()->getEventQueue(); |
| 522 event->setTarget(this); | 522 event->setTarget(this); |
| 523 | 523 |
| 524 // Keep track of enqueued events in case we need to abort prior to dispatch, | 524 // Keep track of enqueued events in case we need to abort prior to dispatch, |
| 525 // in which case these must be cancelled. If the events not dispatched for | 525 // in which case these must be cancelled. If the events not dispatched for |
| 526 // other reasons they must be removed from this list via dequeueEvent(). | 526 // other reasons they must be removed from this list via dequeueEvent(). |
| 527 if (eventQueue->enqueueEvent(event.get())) | 527 if (eventQueue->enqueueEvent(event.get())) |
| 528 m_enqueuedEvents.append(event); | 528 m_enqueuedEvents.append(event); |
| 529 } | 529 } |
| 530 | 530 |
| 531 void IDBRequest::dequeueEvent(Event* event) | 531 void IDBRequest::dequeueEvent(Event* event) |
| 532 { | 532 { |
| 533 for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { | 533 for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { |
| 534 if (m_enqueuedEvents[i].get() == event) | 534 if (m_enqueuedEvents[i].get() == event) |
| 535 m_enqueuedEvents.remove(i); | 535 m_enqueuedEvents.remove(i); |
| 536 } | 536 } |
| 537 } | 537 } |
| 538 | 538 |
| 539 } // namespace blink | 539 } // namespace blink |
| OLD | NEW |