Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(455)

Side by Side Diff: Source/modules/indexeddb/IDBRequest.cpp

Issue 623033002: Oilpan: Add support of pre-finalization callback to Oilpan infrastructure. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add a FIXME Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 20 matching lines...) Expand all
31 31
32 #include "bindings/core/v8/ExceptionState.h" 32 #include "bindings/core/v8/ExceptionState.h"
33 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 33 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
34 #include "bindings/modules/v8/IDBBindingUtilities.h" 34 #include "bindings/modules/v8/IDBBindingUtilities.h"
35 #include "core/dom/ExecutionContext.h" 35 #include "core/dom/ExecutionContext.h"
36 #include "core/events/EventQueue.h" 36 #include "core/events/EventQueue.h"
37 #include "modules/IndexedDBNames.h" 37 #include "modules/IndexedDBNames.h"
38 #include "modules/indexeddb/IDBCursorWithValue.h" 38 #include "modules/indexeddb/IDBCursorWithValue.h"
39 #include "modules/indexeddb/IDBDatabase.h" 39 #include "modules/indexeddb/IDBDatabase.h"
40 #include "modules/indexeddb/IDBEventDispatcher.h" 40 #include "modules/indexeddb/IDBEventDispatcher.h"
41 #include "modules/indexeddb/IDBPendingTransactionMonitor.h"
42 #include "modules/indexeddb/IDBTracing.h" 41 #include "modules/indexeddb/IDBTracing.h"
43 #include "platform/SharedBuffer.h" 42 #include "platform/SharedBuffer.h"
44 #include "public/platform/WebBlobInfo.h" 43 #include "public/platform/WebBlobInfo.h"
45 44
46 using blink::WebIDBCursor; 45 using blink::WebIDBCursor;
47 46
48 namespace blink { 47 namespace blink {
49 48
50 IDBRequest* IDBRequest::create(ScriptState* scriptState, IDBAny* source, IDBTran saction* transaction) 49 IDBRequest* IDBRequest::create(ScriptState* scriptState, IDBAny* source, IDBTran saction* transaction)
51 { 50 {
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 setBlobInfo(blobInfo); 207 setBlobInfo(blobInfo);
209 208
210 onSuccessInternal(IDBAny::create(cursor)); 209 onSuccessInternal(IDBAny::create(cursor));
211 } 210 }
212 211
213 void IDBRequest::setBlobInfo(PassOwnPtr<Vector<WebBlobInfo>> blobInfo) 212 void IDBRequest::setBlobInfo(PassOwnPtr<Vector<WebBlobInfo>> blobInfo)
214 { 213 {
215 ASSERT(!m_blobInfo); 214 ASSERT(!m_blobInfo);
216 m_blobInfo = blobInfo; 215 m_blobInfo = blobInfo;
217 if (m_blobInfo && m_blobInfo->size() > 0) 216 if (m_blobInfo && m_blobInfo->size() > 0)
218 V8PerIsolateData::from(scriptState()->isolate())->ensureIDBPendingTransa ctionMonitor()->registerRequest(*this); 217 ThreadState::current()->registerPreFinalizer(*this);
219 } 218 }
220 219
221 void IDBRequest::handleBlobAcks() 220 void IDBRequest::handleBlobAcks()
222 { 221 {
223 if (m_blobInfo.get() && m_blobInfo->size()) { 222 if (m_blobInfo.get() && m_blobInfo->size()) {
224 m_transaction->db()->ackReceivedBlobs(m_blobInfo.get()); 223 m_transaction->db()->ackReceivedBlobs(m_blobInfo.get());
225 m_blobInfo.clear(); 224 m_blobInfo.clear();
226 V8PerIsolateData::from(scriptState()->isolate())->ensureIDBPendingTransa ctionMonitor()->unregisterRequest(*this); 225 ThreadState::current()->unregisterPreFinalizer(*this);
227 } 226 }
228 } 227 }
229 228
230 bool IDBRequest::shouldEnqueueEvent() const 229 bool IDBRequest::shouldEnqueueEvent() const
231 { 230 {
232 if (m_contextStopped || !executionContext()) 231 if (m_contextStopped || !executionContext())
233 return false; 232 return false;
234 ASSERT(m_readyState == PENDING || m_readyState == DONE); 233 ASSERT(m_readyState == PENDING || m_readyState == DONE);
235 if (m_requestAborted) 234 if (m_requestAborted)
236 return false; 235 return false;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 // it stays alive). 453 // it stays alive).
455 targets.append(m_transaction->db()); 454 targets.append(m_transaction->db());
456 } 455 }
457 456
458 // Cursor properties should not be updated until the success event is being dispatched. 457 // Cursor properties should not be updated until the success event is being dispatched.
459 IDBCursor* cursorToNotify = 0; 458 IDBCursor* cursorToNotify = 0;
460 if (event->type() == EventTypeNames::success) { 459 if (event->type() == EventTypeNames::success) {
461 cursorToNotify = getResultCursor(); 460 cursorToNotify = getResultCursor();
462 if (cursorToNotify) { 461 if (cursorToNotify) {
463 if (m_blobInfo && m_blobInfo->size() > 0) 462 if (m_blobInfo && m_blobInfo->size() > 0)
464 V8PerIsolateData::from(scriptState()->isolate())->ensureIDBPendi ngTransactionMonitor()->unregisterRequest(*this); 463 ThreadState::current()->unregisterPreFinalizer(*this);
465 cursorToNotify->setValueReady(m_cursorKey.release(), m_cursorPrimary Key.release(), m_cursorValue.release(), m_blobInfo.release()); 464 cursorToNotify->setValueReady(m_cursorKey.release(), m_cursorPrimary Key.release(), m_cursorValue.release(), m_blobInfo.release());
466 } 465 }
467 } 466 }
468 467
469 if (event->type() == EventTypeNames::upgradeneeded) { 468 if (event->type() == EventTypeNames::upgradeneeded) {
470 ASSERT(!m_didFireUpgradeNeededEvent); 469 ASSERT(!m_didFireUpgradeNeededEvent);
471 m_didFireUpgradeNeededEvent = true; 470 m_didFireUpgradeNeededEvent = true;
472 } 471 }
473 472
474 // FIXME: When we allow custom event dispatching, this will probably need to change. 473 // FIXME: When we allow custom event dispatching, this will probably need to change.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 550
552 void IDBRequest::dequeueEvent(Event* event) 551 void IDBRequest::dequeueEvent(Event* event)
553 { 552 {
554 for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { 553 for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) {
555 if (m_enqueuedEvents[i].get() == event) 554 if (m_enqueuedEvents[i].get() == event)
556 m_enqueuedEvents.remove(i); 555 m_enqueuedEvents.remove(i);
557 } 556 }
558 } 557 }
559 558
560 } // namespace blink 559 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698