OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ | 5 #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ |
6 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ | 6 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 96 |
97 void HoldBlobDataHandle(const std::string& uuid, | 97 void HoldBlobDataHandle(const std::string& uuid, |
98 scoped_ptr<storage::BlobDataHandle> blob_data_handle); | 98 scoped_ptr<storage::BlobDataHandle> blob_data_handle); |
99 void DropBlobDataHandle(const std::string& uuid); | 99 void DropBlobDataHandle(const std::string& uuid); |
100 | 100 |
101 private: | 101 private: |
102 // Friends to enable OnDestruct() delegation. | 102 // Friends to enable OnDestruct() delegation. |
103 friend class BrowserThread; | 103 friend class BrowserThread; |
104 friend class base::DeleteHelper<IndexedDBDispatcherHost>; | 104 friend class base::DeleteHelper<IndexedDBDispatcherHost>; |
105 | 105 |
106 virtual ~IndexedDBDispatcherHost(); | 106 // Used in nested classes. |
107 | 107 typedef std::map<std::string, storage::BlobDataHandle*> BlobDataHandleMap; |
108 // Message processing. Most of the work is delegated to the dispatcher hosts | 108 typedef std::map<int64, int64> TransactionIDToDatabaseIDMap; |
109 // below. | 109 typedef std::map<int64, uint64> TransactionIDToSizeMap; |
110 void OnIDBFactoryGetDatabaseNames( | 110 typedef std::map<int64, GURL> TransactionIDToURLMap; |
111 const IndexedDBHostMsg_FactoryGetDatabaseNames_Params& p); | 111 typedef std::map<int32, GURL> WebIDBObjectIDToURLMap; |
112 void OnIDBFactoryOpen(const IndexedDBHostMsg_FactoryOpen_Params& p); | |
113 | |
114 void OnIDBFactoryDeleteDatabase( | |
115 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& p); | |
116 | |
117 void OnAckReceivedBlobs(const std::vector<std::string>& uuids); | |
118 void OnPutHelper(const IndexedDBHostMsg_DatabasePut_Params& params, | |
119 std::vector<storage::BlobDataHandle*> handles); | |
120 | |
121 void ResetDispatcherHosts(); | |
122 | 112 |
123 // IDMap for RefCounted types | 113 // IDMap for RefCounted types |
124 template <typename RefCountedType> | 114 template <typename RefCountedType> |
125 class RefIDMap { | 115 class RefIDMap { |
126 private: | 116 public: |
127 typedef int32 KeyType; | 117 typedef int32 KeyType; |
128 | 118 |
129 public: | |
130 RefIDMap() {} | 119 RefIDMap() {} |
131 ~RefIDMap() {} | 120 ~RefIDMap() {} |
132 | 121 |
133 KeyType Add(RefCountedType* data) { | 122 KeyType Add(RefCountedType* data) { |
134 return map_.Add(new scoped_refptr<RefCountedType>(data)); | 123 return map_.Add(new scoped_refptr<RefCountedType>(data)); |
135 } | 124 } |
136 | 125 |
137 RefCountedType* Lookup(KeyType id) { | 126 RefCountedType* Lookup(KeyType id) { |
138 scoped_refptr<RefCountedType>* ptr = map_.Lookup(id); | 127 scoped_refptr<RefCountedType>* ptr = map_.Lookup(id); |
139 if (ptr == NULL) | 128 if (ptr == NULL) |
140 return NULL; | 129 return NULL; |
141 return ptr->get(); | 130 return ptr->get(); |
142 } | 131 } |
143 | 132 |
144 void Remove(KeyType id) { map_.Remove(id); } | 133 void Remove(KeyType id) { map_.Remove(id); } |
145 | 134 |
146 void set_check_on_null_data(bool value) { | 135 void set_check_on_null_data(bool value) { |
147 map_.set_check_on_null_data(value); | 136 map_.set_check_on_null_data(value); |
148 } | 137 } |
149 | 138 |
150 private: | 139 private: |
151 IDMap<scoped_refptr<RefCountedType>, IDMapOwnPointer> map_; | 140 IDMap<scoped_refptr<RefCountedType>, IDMapOwnPointer> map_; |
152 | 141 |
153 DISALLOW_COPY_AND_ASSIGN(RefIDMap); | 142 DISALLOW_COPY_AND_ASSIGN(RefIDMap); |
154 }; | 143 }; |
155 | 144 |
156 // Helper templates. | |
157 template <class ReturnType> | |
158 ReturnType* GetOrTerminateProcess(IDMap<ReturnType, IDMapOwnPointer>* map, | |
159 int32 ipc_return_object_id); | |
160 template <class ReturnType> | |
161 ReturnType* GetOrTerminateProcess(RefIDMap<ReturnType>* map, | |
162 int32 ipc_return_object_id); | |
163 | |
164 template <typename MapType> | |
165 void DestroyObject(MapType* map, int32 ipc_object_id); | |
166 | |
167 // Used in nested classes. | |
168 typedef std::map<int32, GURL> WebIDBObjectIDToURLMap; | |
169 | |
170 typedef std::map<int64, GURL> TransactionIDToURLMap; | |
171 typedef std::map<int64, uint64> TransactionIDToSizeMap; | |
172 typedef std::map<int64, int64> TransactionIDToDatabaseIDMap; | |
173 | |
174 class DatabaseDispatcherHost { | 145 class DatabaseDispatcherHost { |
175 public: | 146 public: |
176 explicit DatabaseDispatcherHost(IndexedDBDispatcherHost* parent); | 147 explicit DatabaseDispatcherHost(IndexedDBDispatcherHost* parent); |
177 ~DatabaseDispatcherHost(); | 148 ~DatabaseDispatcherHost(); |
178 | 149 |
179 void CloseAll(); | 150 void CloseAll(); |
180 bool OnMessageReceived(const IPC::Message& message); | 151 bool OnMessageReceived(const IPC::Message& message); |
181 | 152 |
182 void OnCreateObjectStore( | 153 void OnCreateObjectStore( |
183 const IndexedDBHostMsg_DatabaseCreateObjectStore_Params& params); | 154 const IndexedDBHostMsg_DatabaseCreateObjectStore_Params& params); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 int unused_prefetches); | 227 int unused_prefetches); |
257 void OnDestroyed(int32 ipc_cursor_id); | 228 void OnDestroyed(int32 ipc_cursor_id); |
258 | 229 |
259 IndexedDBDispatcherHost* parent_; | 230 IndexedDBDispatcherHost* parent_; |
260 RefIDMap<IndexedDBCursor> map_; | 231 RefIDMap<IndexedDBCursor> map_; |
261 | 232 |
262 private: | 233 private: |
263 DISALLOW_COPY_AND_ASSIGN(CursorDispatcherHost); | 234 DISALLOW_COPY_AND_ASSIGN(CursorDispatcherHost); |
264 }; | 235 }; |
265 | 236 |
| 237 virtual ~IndexedDBDispatcherHost(); |
| 238 |
| 239 // Helper templates. |
| 240 template <class ReturnType> |
| 241 ReturnType* GetOrTerminateProcess(IDMap<ReturnType, IDMapOwnPointer>* map, |
| 242 int32 ipc_return_object_id); |
| 243 template <class ReturnType> |
| 244 ReturnType* GetOrTerminateProcess(RefIDMap<ReturnType>* map, |
| 245 int32 ipc_return_object_id); |
| 246 |
| 247 template <typename MapType> |
| 248 void DestroyObject(MapType* map, int32 ipc_object_id); |
| 249 |
| 250 // Message processing. Most of the work is delegated to the dispatcher hosts |
| 251 // below. |
| 252 void OnIDBFactoryGetDatabaseNames( |
| 253 const IndexedDBHostMsg_FactoryGetDatabaseNames_Params& p); |
| 254 void OnIDBFactoryOpen(const IndexedDBHostMsg_FactoryOpen_Params& p); |
| 255 |
| 256 void OnIDBFactoryDeleteDatabase( |
| 257 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& p); |
| 258 |
| 259 void OnAckReceivedBlobs(const std::vector<std::string>& uuids); |
| 260 void OnPutHelper(const IndexedDBHostMsg_DatabasePut_Params& params, |
| 261 std::vector<storage::BlobDataHandle*> handles); |
| 262 |
| 263 void ResetDispatcherHosts(); |
| 264 |
266 // The getter holds the context until OnChannelConnected() can be called from | 265 // The getter holds the context until OnChannelConnected() can be called from |
267 // the IO thread, which will extract the net::URLRequestContext from it. | 266 // the IO thread, which will extract the net::URLRequestContext from it. |
268 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; | 267 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
269 net::URLRequestContext* request_context_; | 268 net::URLRequestContext* request_context_; |
270 scoped_refptr<IndexedDBContextImpl> indexed_db_context_; | 269 scoped_refptr<IndexedDBContextImpl> indexed_db_context_; |
271 scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; | 270 scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; |
272 | 271 |
273 typedef std::map<std::string, storage::BlobDataHandle*> BlobDataHandleMap; | |
274 BlobDataHandleMap blob_data_handle_map_; | 272 BlobDataHandleMap blob_data_handle_map_; |
275 | 273 |
276 // Only access on IndexedDB thread. | 274 // Only access on IndexedDB thread. |
277 scoped_ptr<DatabaseDispatcherHost> database_dispatcher_host_; | 275 scoped_ptr<DatabaseDispatcherHost> database_dispatcher_host_; |
278 scoped_ptr<CursorDispatcherHost> cursor_dispatcher_host_; | 276 scoped_ptr<CursorDispatcherHost> cursor_dispatcher_host_; |
279 | 277 |
280 // Used to set file permissions for blob storage. | 278 // Used to set file permissions for blob storage. |
281 int ipc_process_id_; | 279 int ipc_process_id_; |
282 | 280 |
283 DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost); | 281 DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost); |
284 }; | 282 }; |
285 | 283 |
286 } // namespace content | 284 } // namespace content |
287 | 285 |
288 #endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ | 286 #endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ |
OLD | NEW |