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 15 matching lines...) Expand all Loading... |
26 #ifndef IDBTransaction_h | 26 #ifndef IDBTransaction_h |
27 #define IDBTransaction_h | 27 #define IDBTransaction_h |
28 | 28 |
29 #include "core/dom/ContextLifecycleObserver.h" | 29 #include "core/dom/ContextLifecycleObserver.h" |
30 #include "core/dom/DOMStringList.h" | 30 #include "core/dom/DOMStringList.h" |
31 #include "core/events/EventListener.h" | 31 #include "core/events/EventListener.h" |
32 #include "modules/EventModules.h" | 32 #include "modules/EventModules.h" |
33 #include "modules/EventTargetModules.h" | 33 #include "modules/EventTargetModules.h" |
34 #include "modules/ModulesExport.h" | 34 #include "modules/ModulesExport.h" |
35 #include "modules/indexeddb/IDBMetadata.h" | 35 #include "modules/indexeddb/IDBMetadata.h" |
| 36 #include "modules/indexeddb/IDBRequestQueue.h" |
36 #include "modules/indexeddb/IndexedDB.h" | 37 #include "modules/indexeddb/IndexedDB.h" |
37 #include "platform/bindings/ActiveScriptWrappable.h" | 38 #include "platform/bindings/ActiveScriptWrappable.h" |
38 #include "platform/heap/Handle.h" | 39 #include "platform/heap/Handle.h" |
39 #include "platform/wtf/HashSet.h" | 40 #include "platform/wtf/HashSet.h" |
40 #include "platform/wtf/Vector.h" | 41 #include "platform/wtf/Vector.h" |
41 #include "public/platform/modules/indexeddb/WebIDBDatabase.h" | 42 #include "public/platform/modules/indexeddb/WebIDBDatabase.h" |
42 #include "public/platform/modules/indexeddb/WebIDBTypes.h" | 43 #include "public/platform/modules/indexeddb/WebIDBTypes.h" |
43 | 44 |
44 namespace blink { | 45 namespace blink { |
45 | 46 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 const String& mode() const; | 99 const String& mode() const; |
99 DOMStringList* objectStoreNames() const; | 100 DOMStringList* objectStoreNames() const; |
100 IDBDatabase* db() const { return database_.Get(); } | 101 IDBDatabase* db() const { return database_.Get(); } |
101 DOMException* error() const { return error_; } | 102 DOMException* error() const { return error_; } |
102 IDBObjectStore* objectStore(const String& name, ExceptionState&); | 103 IDBObjectStore* objectStore(const String& name, ExceptionState&); |
103 void abort(ExceptionState&); | 104 void abort(ExceptionState&); |
104 | 105 |
105 void RegisterRequest(IDBRequest*); | 106 void RegisterRequest(IDBRequest*); |
106 void UnregisterRequest(IDBRequest*); | 107 void UnregisterRequest(IDBRequest*); |
107 | 108 |
| 109 // True if this transaction has at least one request whose result is being |
| 110 // post-processed. |
| 111 // |
| 112 // While this is true, new results must be queued using QueueResult(). |
| 113 inline bool HasQueuedResult() const { return !result_queue_.empty(); } |
| 114 void EnqueueResult(IDBRequestQueueItem* result); |
| 115 // Called when a result's post-processing has completed. |
| 116 void OnResultReady(); |
| 117 |
108 // The methods below are called right before the changes are applied to the | 118 // The methods below are called right before the changes are applied to the |
109 // database's metadata. We use this unusual sequencing because some of the | 119 // database's metadata. We use this unusual sequencing because some of the |
110 // methods below need to access the metadata values before the change, and | 120 // methods below need to access the metadata values before the change, and |
111 // following the same lifecycle for all methods makes the code easier to | 121 // following the same lifecycle for all methods makes the code easier to |
112 // reason about. | 122 // reason about. |
113 void ObjectStoreCreated(const String& name, IDBObjectStore*); | 123 void ObjectStoreCreated(const String& name, IDBObjectStore*); |
114 void ObjectStoreDeleted(const int64_t object_store_id, const String& name); | 124 void ObjectStoreDeleted(const int64_t object_store_id, const String& name); |
115 void ObjectStoreRenamed(const String& old_name, const String& new_name); | 125 void ObjectStoreRenamed(const String& old_name, const String& new_name); |
116 // Called when deleting an index whose IDBIndex had been created. | 126 // Called when deleting an index whose IDBIndex had been created. |
117 void IndexDeleted(IDBIndex*); | 127 void IndexDeleted(IDBIndex*); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 // because object stores cannot be renamed in non-versionchange | 215 // because object stores cannot be renamed in non-versionchange |
206 // transactions. | 216 // transactions. |
207 const HashSet<String> scope_; | 217 const HashSet<String> scope_; |
208 | 218 |
209 State state_ = kActive; | 219 State state_ = kActive; |
210 bool has_pending_activity_ = true; | 220 bool has_pending_activity_ = true; |
211 Member<DOMException> error_; | 221 Member<DOMException> error_; |
212 | 222 |
213 HeapListHashSet<Member<IDBRequest>> request_list_; | 223 HeapListHashSet<Member<IDBRequest>> request_list_; |
214 | 224 |
| 225 // The IDBRequest results whose events have not fired yet. |
| 226 // |
| 227 // When a result requires post-processing, such as large value unwrapping, all |
| 228 // the results that arrive during the post-processing phase are queued up. |
| 229 // This guarantees that result events are fired in the order in which the |
| 230 // requests were performed, as prescribed by the IndexedDB specification. |
| 231 IDBRequestQueue result_queue_; |
| 232 |
215 #if DCHECK_IS_ON() | 233 #if DCHECK_IS_ON() |
216 bool finish_called_ = false; | 234 bool finish_called_ = false; |
217 #endif // DCHECK_IS_ON() | 235 #endif // DCHECK_IS_ON() |
218 | 236 |
219 // Caches the IDBObjectStore instances returned by the objectStore() method. | 237 // Caches the IDBObjectStore instances returned by the objectStore() method. |
220 // | 238 // |
221 // The spec requires that a transaction's objectStore() returns the same | 239 // The spec requires that a transaction's objectStore() returns the same |
222 // IDBObjectStore instance for a specific store, so this cache is necessary | 240 // IDBObjectStore instance for a specific store, so this cache is necessary |
223 // for correctness. | 241 // for correctness. |
224 // | 242 // |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 // This does not include a snapshot of the database's object store / index | 274 // This does not include a snapshot of the database's object store / index |
257 // metadata. | 275 // metadata. |
258 // | 276 // |
259 // Only valid for versionchange transactions. | 277 // Only valid for versionchange transactions. |
260 IDBDatabaseMetadata old_database_metadata_; | 278 IDBDatabaseMetadata old_database_metadata_; |
261 }; | 279 }; |
262 | 280 |
263 } // namespace blink | 281 } // namespace blink |
264 | 282 |
265 #endif // IDBTransaction_h | 283 #endif // IDBTransaction_h |
OLD | NEW |