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

Side by Side Diff: content/child/indexed_db/indexed_db_dispatcher.h

Issue 2449953008: Port messages sent by WebIDBDatabaseImpl to Mojo. (Closed)
Patch Set: Address more comments from dcheng@. Created 4 years, 1 month 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 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_CHILD_INDEXED_DB_INDEXED_DB_DISPATCHER_H_ 5 #ifndef CONTENT_CHILD_INDEXED_DB_INDEXED_DB_DISPATCHER_H_
6 #define CONTENT_CHILD_INDEXED_DB_INDEXED_DB_DISPATCHER_H_ 6 #define CONTENT_CHILD_INDEXED_DB_INDEXED_DB_DISPATCHER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 void WillStopCurrentWorkerThread() override; 69 void WillStopCurrentWorkerThread() override;
70 70
71 static std::vector<blink::WebIDBObservation> ConvertObservations( 71 static std::vector<blink::WebIDBObservation> ConvertObservations(
72 const std::vector<IndexedDBMsg_Observation>& idb_observation); 72 const std::vector<IndexedDBMsg_Observation>& idb_observation);
73 73
74 void OnMessageReceived(const IPC::Message& msg); 74 void OnMessageReceived(const IPC::Message& msg);
75 75
76 // This method is virtual so it can be overridden in unit tests. 76 // This method is virtual so it can be overridden in unit tests.
77 virtual bool Send(IPC::Message* msg); 77 virtual bool Send(IPC::Message* msg);
78 78
79 int32_t AddIDBObserver(int32_t ipc_database_id, 79 int32_t RegisterObserver(std::unique_ptr<blink::WebIDBObserver> observer);
80 int64_t transaction_id,
81 std::unique_ptr<blink::WebIDBObserver> observer);
82 80
83 // The observer with ID's in |observer_ids_to_remove| observe the 81 // Removes observers from our local map observers_.
84 // |ipc_database_id|. 82 void RemoveObservers(const std::vector<int32_t>& observer_ids_to_remove);
85 // We remove our local references to these observer objects, and send an IPC
86 // to clean up the observers from the backend.
87 void RemoveIDBObserversFromDatabase(
88 int32_t ipc_database_id,
89 const std::vector<int32_t>& observer_ids_to_remove);
90
91 // Removes observers from our local map observers_ . No IPC message generated.
92 void RemoveIDBObservers(const std::set<int32_t>& observer_ids_to_remove);
93 83
94 // This method is virtual so it can be overridden in unit tests. 84 // This method is virtual so it can be overridden in unit tests.
95 virtual void RequestIDBCursorAdvance(unsigned long count, 85 virtual void RequestIDBCursorAdvance(unsigned long count,
96 blink::WebIDBCallbacks* callbacks_ptr, 86 blink::WebIDBCallbacks* callbacks_ptr,
97 int32_t ipc_cursor_id, 87 int32_t ipc_cursor_id,
98 int64_t transaction_id); 88 int64_t transaction_id);
99 89
100 // This method is virtual so it can be overridden in unit tests. 90 // This method is virtual so it can be overridden in unit tests.
101 virtual void RequestIDBCursorContinue(const IndexedDBKey& key, 91 virtual void RequestIDBCursorContinue(const IndexedDBKey& key,
102 const IndexedDBKey& primary_key, 92 const IndexedDBKey& primary_key,
103 blink::WebIDBCallbacks* callbacks_ptr, 93 blink::WebIDBCallbacks* callbacks_ptr,
104 int32_t ipc_cursor_id, 94 int32_t ipc_cursor_id,
105 int64_t transaction_id); 95 int64_t transaction_id);
106 96
107 // This method is virtual so it can be overridden in unit tests. 97 // This method is virtual so it can be overridden in unit tests.
108 virtual void RequestIDBCursorPrefetch(int n, 98 virtual void RequestIDBCursorPrefetch(int n,
109 blink::WebIDBCallbacks* callbacks_ptr, 99 blink::WebIDBCallbacks* callbacks_ptr,
110 int32_t ipc_cursor_id); 100 int32_t ipc_cursor_id);
111 101
112 // This method is virtual so it can be overridden in unit tests. 102 // This method is virtual so it can be overridden in unit tests.
113 virtual void RequestIDBCursorPrefetchReset(int used_prefetches, 103 virtual void RequestIDBCursorPrefetchReset(int used_prefetches,
114 int unused_prefetches, 104 int unused_prefetches,
115 int32_t ipc_cursor_id); 105 int32_t ipc_cursor_id);
116 106
117 void RequestIDBDatabaseClose(int32_t ipc_database_id); 107 void RegisterCursor(int32_t ipc_cursor_id, WebIDBCursorImpl* cursor);
118
119 void NotifyIDBDatabaseVersionChangeIgnored(int32_t ipc_database_id);
120
121 void RequestIDBDatabaseCreateTransaction(
122 int32_t ipc_database_id,
123 int64_t transaction_id,
124 blink::WebVector<long long> object_store_ids,
125 blink::WebIDBTransactionMode mode);
126
127 void RequestIDBDatabaseGet(int32_t ipc_database_id,
128 int64_t transaction_id,
129 int64_t object_store_id,
130 int64_t index_id,
131 const IndexedDBKeyRange& key_range,
132 bool key_only,
133 blink::WebIDBCallbacks* callbacks);
134
135 void RequestIDBDatabaseGetAll(int32_t ipc_database_id,
136 int64_t transaction_id,
137 int64_t object_store_id,
138 int64_t index_id,
139 const IndexedDBKeyRange& key_range,
140 bool key_only,
141 int64_t max_count,
142 blink::WebIDBCallbacks* callbacks);
143
144 void RequestIDBDatabasePut(
145 int32_t ipc_database_id,
146 int64_t transaction_id,
147 int64_t object_store_id,
148 const blink::WebData& value,
149 const blink::WebVector<blink::WebBlobInfo>& web_blob_info,
150 const IndexedDBKey& key,
151 blink::WebIDBPutMode put_mode,
152 blink::WebIDBCallbacks* callbacks,
153 const blink::WebVector<long long>& index_ids,
154 const blink::WebVector<blink::WebVector<blink::WebIDBKey>>& index_keys);
155
156 void RequestIDBDatabaseOpenCursor(int32_t ipc_database_id,
157 int64_t transaction_id,
158 int64_t object_store_id,
159 int64_t index_id,
160 const IndexedDBKeyRange& key_range,
161 blink::WebIDBCursorDirection direction,
162 bool key_only,
163 blink::WebIDBTaskType task_type,
164 blink::WebIDBCallbacks* callbacks);
165
166 void RequestIDBDatabaseCount(int32_t ipc_database_id,
167 int64_t transaction_id,
168 int64_t object_store_id,
169 int64_t index_id,
170 const IndexedDBKeyRange& key_range,
171 blink::WebIDBCallbacks* callbacks);
172
173 void RequestIDBDatabaseDeleteRange(int32_t ipc_database_id,
174 int64_t transaction_id,
175 int64_t object_store_id,
176 const IndexedDBKeyRange& key_range,
177 blink::WebIDBCallbacks* callbacks);
178
179 void RequestIDBDatabaseClear(int32_t ipc_database_id,
180 int64_t transaction_id,
181 int64_t object_store_id,
182 blink::WebIDBCallbacks* callbacks);
183 108
184 virtual void CursorDestroyed(int32_t ipc_cursor_id); 109 virtual void CursorDestroyed(int32_t ipc_cursor_id);
185 void DatabaseDestroyed(int32_t ipc_database_id); 110
186 blink::WebIDBDatabase* RegisterDatabase(int32_t ipc_database_id); 111 enum { kAllCursors = -1 };
112
113 // Reset cursor prefetch caches for all cursors except exception_cursor_id.
114 void ResetCursorPrefetchCaches(int64_t transaction_id,
115 int32_t ipc_exception_cursor_id);
187 116
188 void RegisterMojoOwnedCallbacks( 117 void RegisterMojoOwnedCallbacks(
189 IndexedDBCallbacksImpl::InternalState* callback_state); 118 IndexedDBCallbacksImpl::InternalState* callback_state);
190 void UnregisterMojoOwnedCallbacks( 119 void UnregisterMojoOwnedCallbacks(
191 IndexedDBCallbacksImpl::InternalState* callback_state); 120 IndexedDBCallbacksImpl::InternalState* callback_state);
192 void RegisterMojoOwnedDatabaseCallbacks( 121 void RegisterMojoOwnedDatabaseCallbacks(
193 blink::WebIDBDatabaseCallbacks* callback_state); 122 blink::WebIDBDatabaseCallbacks* callback_state);
194 void UnregisterMojoOwnedDatabaseCallbacks( 123 void UnregisterMojoOwnedDatabaseCallbacks(
195 blink::WebIDBDatabaseCallbacks* callback_state); 124 blink::WebIDBDatabaseCallbacks* callback_state);
196 125
197 private: 126 private:
198 FRIEND_TEST_ALL_PREFIXES(IndexedDBDispatcherTest, CursorReset); 127 FRIEND_TEST_ALL_PREFIXES(IndexedDBDispatcherTest, CursorReset);
199 FRIEND_TEST_ALL_PREFIXES(IndexedDBDispatcherTest, CursorTransactionId); 128 FRIEND_TEST_ALL_PREFIXES(IndexedDBDispatcherTest, CursorTransactionId);
200 FRIEND_TEST_ALL_PREFIXES(IndexedDBDispatcherTest, ValueSizeTest);
201 FRIEND_TEST_ALL_PREFIXES(IndexedDBDispatcherTest, KeyAndValueSizeTest);
202
203 enum { kAllCursors = -1 };
204 129
205 static int32_t CurrentWorkerId() { return WorkerThread::GetCurrentId(); } 130 static int32_t CurrentWorkerId() { return WorkerThread::GetCurrentId(); }
206 131
207 template <typename T> 132 template <typename T>
208 void init_params(T* params, blink::WebIDBCallbacks* callbacks_ptr) { 133 void init_params(T* params, blink::WebIDBCallbacks* callbacks_ptr) {
209 std::unique_ptr<blink::WebIDBCallbacks> callbacks(callbacks_ptr); 134 std::unique_ptr<blink::WebIDBCallbacks> callbacks(callbacks_ptr);
210 params->ipc_thread_id = CurrentWorkerId(); 135 params->ipc_thread_id = CurrentWorkerId();
211 params->ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); 136 params->ipc_callbacks_id = pending_callbacks_.Add(callbacks.release());
212 } 137 }
213 138
214 // IDBCallback message handlers. 139 // IDBCallback message handlers.
215 void OnSuccessIndexedDBKey(int32_t ipc_thread_id,
216 int32_t ipc_callbacks_id,
217 const IndexedDBKey& key);
218
219 void OnSuccessOpenCursor(
220 const IndexedDBMsg_CallbacksSuccessIDBCursor_Params& p);
221 void OnSuccessCursorContinue( 140 void OnSuccessCursorContinue(
222 const IndexedDBMsg_CallbacksSuccessCursorContinue_Params& p); 141 const IndexedDBMsg_CallbacksSuccessCursorContinue_Params& p);
223 void OnSuccessCursorPrefetch( 142 void OnSuccessCursorPrefetch(
224 const IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params& p); 143 const IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params& p);
225 void OnSuccessValue(const IndexedDBMsg_CallbacksSuccessValue_Params& p); 144 void OnSuccessValue(const IndexedDBMsg_CallbacksSuccessValue_Params& p);
226 void OnSuccessArray(const IndexedDBMsg_CallbacksSuccessArray_Params& p);
227 void OnSuccessInteger(int32_t ipc_thread_id, 145 void OnSuccessInteger(int32_t ipc_thread_id,
228 int32_t ipc_callbacks_id, 146 int32_t ipc_callbacks_id,
229 int64_t value); 147 int64_t value);
230 void OnSuccessUndefined(int32_t ipc_thread_id, int32_t ipc_callbacks_id);
231 void OnError(int32_t ipc_thread_id, 148 void OnError(int32_t ipc_thread_id,
232 int32_t ipc_callbacks_id, 149 int32_t ipc_callbacks_id,
233 int code, 150 int code,
234 const base::string16& message); 151 const base::string16& message);
235 void OnDatabaseChanges(int32_t ipc_thread_id, 152 void OnDatabaseChanges(int32_t ipc_thread_id,
236 const IndexedDBMsg_ObserverChanges&); 153 const IndexedDBMsg_ObserverChanges&);
237 154
238 // Reset cursor prefetch caches for all cursors except exception_cursor_id.
239 void ResetCursorPrefetchCaches(int64_t transaction_id,
240 int32_t ipc_exception_cursor_id);
241
242 scoped_refptr<ThreadSafeSender> thread_safe_sender_; 155 scoped_refptr<ThreadSafeSender> thread_safe_sender_;
243 156
244 // Maximum size (in bytes) of value/key pair allowed for put requests. Any
245 // requests larger than this size will be rejected.
246 // Used by unit tests to exercise behavior without allocating huge chunks
247 // of memory.
248 size_t max_put_value_size_ = kMaxIDBMessageSizeInBytes;
249
250 // Careful! WebIDBCallbacks wraps non-threadsafe data types. It must be 157 // Careful! WebIDBCallbacks wraps non-threadsafe data types. It must be
251 // destroyed and used on the same thread it was created on. 158 // destroyed and used on the same thread it was created on.
252 IDMap<blink::WebIDBCallbacks, IDMapOwnPointer> pending_callbacks_; 159 IDMap<blink::WebIDBCallbacks, IDMapOwnPointer> pending_callbacks_;
253 IDMap<blink::WebIDBObserver, IDMapOwnPointer> observers_; 160 IDMap<blink::WebIDBObserver, IDMapOwnPointer> observers_;
254 161
255 // Holds pointers to the worker-thread owned state of IndexedDBCallbacksImpl 162 // Holds pointers to the worker-thread owned state of IndexedDBCallbacksImpl
256 // and IndexedDBDatabaseCallbacksImpl objects to makes sure that it is 163 // and IndexedDBDatabaseCallbacksImpl objects to makes sure that it is
257 // destroyed on thread exit if the Mojo pipe is not yet closed. Otherwise the 164 // destroyed on thread exit if the Mojo pipe is not yet closed. Otherwise the
258 // object will leak because the thread's task runner is no longer executing 165 // object will leak because the thread's task runner is no longer executing
259 // tasks. 166 // tasks.
260 std::unordered_set<IndexedDBCallbacksImpl::InternalState*> 167 std::unordered_set<IndexedDBCallbacksImpl::InternalState*>
261 mojo_owned_callback_state_; 168 mojo_owned_callback_state_;
262 std::unordered_set<blink::WebIDBDatabaseCallbacks*> 169 std::unordered_set<blink::WebIDBDatabaseCallbacks*>
263 mojo_owned_database_callback_state_; 170 mojo_owned_database_callback_state_;
264 171
265 // Maps the ipc_callback_id from an open cursor request to the request's 172 // Maps the ipc_callback_id from an open cursor request to the request's
266 // transaction_id. Used to assign the transaction_id to the WebIDBCursorImpl 173 // transaction_id. Used to assign the transaction_id to the WebIDBCursorImpl
267 // when it is created. 174 // when it is created.
268 std::map<int32_t, int64_t> cursor_transaction_ids_; 175 std::map<int32_t, int64_t> cursor_transaction_ids_;
269 176
270 // Map from cursor id to WebIDBCursorImpl. 177 // Map from cursor id to WebIDBCursorImpl.
271 std::map<int32_t, WebIDBCursorImpl*> cursors_; 178 std::map<int32_t, WebIDBCursorImpl*> cursors_;
272 179
273 std::map<int32_t, WebIDBDatabaseImpl*> databases_;
274
275 DISALLOW_COPY_AND_ASSIGN(IndexedDBDispatcher); 180 DISALLOW_COPY_AND_ASSIGN(IndexedDBDispatcher);
276 }; 181 };
277 182
278 } // namespace content 183 } // namespace content
279 184
280 #endif // CONTENT_CHILD_INDEXED_DB_INDEXED_DB_DISPATCHER_H_ 185 #endif // CONTENT_CHILD_INDEXED_DB_INDEXED_DB_DISPATCHER_H_
OLDNEW
« no previous file with comments | « content/child/indexed_db/indexed_db_callbacks_impl.cc ('k') | content/child/indexed_db/indexed_db_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698