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

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/IDBTransaction.h

Issue 2822453003: Wrap large IndexedDB values into Blobs before writing to LevelDB. (Closed)
Patch Set: Fixed compilation errors on Windows and no-DCHECKs. Created 3 years, 7 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
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 15 matching lines...) Expand all
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698