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

Side by Side Diff: content/browser/in_process_webkit/indexed_db_dispatcher_host.h

Issue 17840006: Move IndexedDB files out of in_process_webkit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_
6 #define CONTENT_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_
7
8 #include <map>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/id_map.h"
13 #include "content/public/browser/browser_message_filter.h"
14
15 class GURL;
16 struct IndexedDBDatabaseMetadata;
17 struct IndexedDBHostMsg_DatabaseCount_Params;
18 struct IndexedDBHostMsg_DatabaseCreateIndex_Params;
19 struct IndexedDBHostMsg_DatabaseCreateObjectStore_Params;
20 struct IndexedDBHostMsg_DatabaseCreateTransaction_Params;
21 struct IndexedDBHostMsg_DatabaseDeleteRange_Params;
22 struct IndexedDBHostMsg_DatabaseGet_Params;
23 struct IndexedDBHostMsg_DatabaseOpenCursor_Params;
24 struct IndexedDBHostMsg_DatabasePut_Params;
25 struct IndexedDBHostMsg_DatabaseSetIndexKeys_Params;
26 struct IndexedDBHostMsg_FactoryDeleteDatabase_Params;
27 struct IndexedDBHostMsg_FactoryGetDatabaseNames_Params;
28 struct IndexedDBHostMsg_FactoryOpen_Params;
29
30 namespace content {
31 class IndexedDBContextImpl;
32 class IndexedDBKey;
33 class IndexedDBKeyPath;
34 class IndexedDBKeyRange;
35 class WebIDBCursorImpl;
36 class WebIDBDatabaseImpl;
37 struct IndexedDBDatabaseMetadata;
38
39 // Handles all IndexedDB related messages from a particular renderer process.
40 class IndexedDBDispatcherHost : public BrowserMessageFilter {
41 public:
42 // Only call the constructor from the UI thread.
43 IndexedDBDispatcherHost(int ipc_process_id,
44 IndexedDBContextImpl* indexed_db_context);
45
46 static ::IndexedDBDatabaseMetadata ConvertMetadata(
47 const content::IndexedDBDatabaseMetadata& metadata);
48
49 // BrowserMessageFilter implementation.
50 virtual void OnChannelClosing() OVERRIDE;
51 virtual void OnDestruct() const OVERRIDE;
52 virtual base::TaskRunner* OverrideTaskRunnerForMessage(
53 const IPC::Message& message) OVERRIDE;
54 virtual bool OnMessageReceived(const IPC::Message& message,
55 bool* message_was_ok) OVERRIDE;
56
57 void FinishTransaction(int64 host_transaction_id, bool committed);
58
59 // A shortcut for accessing our context.
60 IndexedDBContextImpl* Context() { return indexed_db_context_.get(); }
61
62 // The various IndexedDBCallbacks children call these methods to add the
63 // results into the applicable map. See below for more details.
64 int32 Add(WebIDBCursorImpl* idb_cursor);
65 int32 Add(WebIDBDatabaseImpl* idb_database,
66 int32 ipc_thread_id,
67 const GURL& origin_url);
68
69 void RegisterTransactionId(int64 host_transaction_id, const GURL& origin_url);
70
71 WebIDBCursorImpl* GetCursorFromId(int32 ipc_cursor_id);
72
73 int64 HostTransactionId(int64 transaction_id);
74 int64 RendererTransactionId(int64 host_transaction_id);
75
76 private:
77 // Friends to enable OnDestruct() delegation.
78 friend class BrowserThread;
79 friend class base::DeleteHelper<IndexedDBDispatcherHost>;
80
81 virtual ~IndexedDBDispatcherHost();
82
83 // Message processing. Most of the work is delegated to the dispatcher hosts
84 // below.
85 void OnIDBFactoryGetDatabaseNames(
86 const IndexedDBHostMsg_FactoryGetDatabaseNames_Params& p);
87 void OnIDBFactoryOpen(const IndexedDBHostMsg_FactoryOpen_Params& p);
88
89 void OnIDBFactoryDeleteDatabase(
90 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& p);
91
92 void ResetDispatcherHosts();
93
94 // Helper templates.
95 template <class ReturnType>
96 ReturnType* GetOrTerminateProcess(IDMap<ReturnType, IDMapOwnPointer>* map,
97 int32 ipc_return_object_id);
98
99 template <typename ObjectType>
100 void DestroyObject(IDMap<ObjectType, IDMapOwnPointer>* map,
101 int32 ipc_object_id);
102
103 // Used in nested classes.
104 typedef std::map<int32, GURL> WebIDBObjectIDToURLMap;
105
106 typedef std::map<int64, GURL> TransactionIDToURLMap;
107 typedef std::map<int64, uint64> TransactionIDToSizeMap;
108 typedef std::map<int64, int64> TransactionIDToDatabaseIDMap;
109
110 class DatabaseDispatcherHost {
111 public:
112 explicit DatabaseDispatcherHost(IndexedDBDispatcherHost* parent);
113 ~DatabaseDispatcherHost();
114
115 void CloseAll();
116 bool OnMessageReceived(const IPC::Message& message, bool* msg_is_ok);
117 void Send(IPC::Message* message);
118
119 void OnCreateObjectStore(
120 const IndexedDBHostMsg_DatabaseCreateObjectStore_Params& params);
121 void OnDeleteObjectStore(int32 ipc_database_id,
122 int64 transaction_id,
123 int64 object_store_id);
124 void OnCreateTransaction(
125 const IndexedDBHostMsg_DatabaseCreateTransaction_Params&);
126 void OnOpen(int32 ipc_database_id,
127 int32 ipc_thread_id,
128 int32 ipc_callbacks_id);
129 void OnClose(int32 ipc_database_id);
130 void OnDestroyed(int32 ipc_database_id);
131
132 void OnGet(const IndexedDBHostMsg_DatabaseGet_Params& params);
133 void OnPut(const IndexedDBHostMsg_DatabasePut_Params& params);
134 void OnSetIndexKeys(
135 const IndexedDBHostMsg_DatabaseSetIndexKeys_Params& params);
136 void OnSetIndexesReady(int32 ipc_database_id,
137 int64 transaction_id,
138 int64 object_store_id,
139 const std::vector<int64>& ids);
140 void OnOpenCursor(const IndexedDBHostMsg_DatabaseOpenCursor_Params& params);
141 void OnCount(const IndexedDBHostMsg_DatabaseCount_Params& params);
142 void OnDeleteRange(
143 const IndexedDBHostMsg_DatabaseDeleteRange_Params& params);
144 void OnClear(int32 ipc_thread_id,
145 int32 ipc_callbacks_id,
146 int32 ipc_database_id,
147 int64 transaction_id,
148 int64 object_store_id);
149 void OnCreateIndex(
150 const IndexedDBHostMsg_DatabaseCreateIndex_Params& params);
151 void OnDeleteIndex(int32 ipc_database_id,
152 int64 transaction_id,
153 int64 object_store_id,
154 int64 index_id);
155
156 void OnAbort(int32 ipc_database_id, int64 transaction_id);
157 void OnCommit(int32 ipc_database_id, int64 transaction_id);
158 IndexedDBDispatcherHost* parent_;
159 IDMap<WebIDBDatabaseImpl, IDMapOwnPointer> map_;
160 WebIDBObjectIDToURLMap database_url_map_;
161 TransactionIDToSizeMap transaction_size_map_;
162 TransactionIDToURLMap transaction_url_map_;
163 TransactionIDToDatabaseIDMap transaction_database_map_;
164 };
165
166 class CursorDispatcherHost {
167 public:
168 explicit CursorDispatcherHost(IndexedDBDispatcherHost* parent);
169 ~CursorDispatcherHost();
170
171 bool OnMessageReceived(const IPC::Message& message, bool* msg_is_ok);
172 void Send(IPC::Message* message);
173
174 void OnAdvance(int32 ipc_object_store_id,
175 int32 ipc_thread_id,
176 int32 ipc_callbacks_id,
177 unsigned long count);
178 void OnContinue(int32 ipc_object_store_id,
179 int32 ipc_thread_id,
180 int32 ipc_callbacks_id,
181 const IndexedDBKey& key);
182 void OnPrefetch(int32 ipc_cursor_id,
183 int32 ipc_thread_id,
184 int32 ipc_callbacks_id,
185 int n);
186 void OnPrefetchReset(int32 ipc_cursor_id,
187 int used_prefetches,
188 int unused_prefetches);
189 void OnDestroyed(int32 ipc_cursor_id);
190
191 IndexedDBDispatcherHost* parent_;
192 IDMap<WebIDBCursorImpl, IDMapOwnPointer> map_;
193 };
194
195 scoped_refptr<IndexedDBContextImpl> indexed_db_context_;
196
197 // Only access on IndexedDB thread.
198 scoped_ptr<DatabaseDispatcherHost> database_dispatcher_host_;
199 scoped_ptr<CursorDispatcherHost> cursor_dispatcher_host_;
200
201 // Used to dispatch messages to the correct view host.
202 int ipc_process_id_;
203
204 DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost);
205 };
206
207 } // namespace content
208
209 #endif // CONTENT_BROWSER_IN_PROCESS_WEBKIT_INDEXED_DB_DISPATCHER_HOST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698