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 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h" | 5 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 message.type() == IndexedDBHostMsg_AckReceivedBlobs::ID)); | 126 message.type() == IndexedDBHostMsg_AckReceivedBlobs::ID)); |
127 | 127 |
128 bool handled = database_dispatcher_host_->OnMessageReceived(message) || | 128 bool handled = database_dispatcher_host_->OnMessageReceived(message) || |
129 cursor_dispatcher_host_->OnMessageReceived(message); | 129 cursor_dispatcher_host_->OnMessageReceived(message); |
130 | 130 |
131 if (!handled) { | 131 if (!handled) { |
132 handled = true; | 132 handled = true; |
133 IPC_BEGIN_MESSAGE_MAP(IndexedDBDispatcherHost, message) | 133 IPC_BEGIN_MESSAGE_MAP(IndexedDBDispatcherHost, message) |
134 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryGetDatabaseNames, | 134 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryGetDatabaseNames, |
135 OnIDBFactoryGetDatabaseNames) | 135 OnIDBFactoryGetDatabaseNames) |
136 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryOpen, OnIDBFactoryOpen) | |
137 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryDeleteDatabase, | 136 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryDeleteDatabase, |
138 OnIDBFactoryDeleteDatabase) | 137 OnIDBFactoryDeleteDatabase) |
139 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_AckReceivedBlobs, OnAckReceivedBlobs) | 138 IPC_MESSAGE_HANDLER(IndexedDBHostMsg_AckReceivedBlobs, OnAckReceivedBlobs) |
140 IPC_MESSAGE_UNHANDLED(handled = false) | 139 IPC_MESSAGE_UNHANDLED(handled = false) |
141 IPC_END_MESSAGE_MAP() | 140 IPC_END_MESSAGE_MAP() |
142 } | 141 } |
143 return handled; | 142 return handled; |
144 } | 143 } |
145 | 144 |
146 int32_t IndexedDBDispatcherHost::Add(IndexedDBCursor* cursor) { | 145 int32_t IndexedDBDispatcherHost::Add(IndexedDBCursor* cursor) { |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 return; | 315 return; |
317 } | 316 } |
318 | 317 |
319 base::FilePath indexed_db_path = indexed_db_context_->data_path(); | 318 base::FilePath indexed_db_path = indexed_db_context_->data_path(); |
320 context()->GetIDBFactory()->GetDatabaseNames( | 319 context()->GetIDBFactory()->GetDatabaseNames( |
321 new IndexedDBCallbacks(this, params.ipc_thread_id, | 320 new IndexedDBCallbacks(this, params.ipc_thread_id, |
322 params.ipc_callbacks_id), | 321 params.ipc_callbacks_id), |
323 params.origin, indexed_db_path, request_context_getter_); | 322 params.origin, indexed_db_path, request_context_getter_); |
324 } | 323 } |
325 | 324 |
326 void IndexedDBDispatcherHost::OnIDBFactoryOpen( | |
327 const IndexedDBHostMsg_FactoryOpen_Params& params) { | |
328 DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread()); | |
329 | |
330 if (!IsValidOrigin(params.origin)) { | |
331 bad_message::ReceivedBadMessage(this, bad_message::IDBDH_INVALID_ORIGIN); | |
332 return; | |
333 } | |
334 | |
335 base::TimeTicks begin_time = base::TimeTicks::Now(); | |
336 base::FilePath indexed_db_path = indexed_db_context_->data_path(); | |
337 | |
338 int64_t host_transaction_id = HostTransactionId(params.transaction_id); | |
339 | |
340 // TODO(dgrogan): Don't let a non-existing database be opened (and therefore | |
341 // created) if this origin is already over quota. | |
342 scoped_refptr<IndexedDBCallbacks> callbacks = new IndexedDBCallbacks( | |
343 this, params.ipc_thread_id, params.ipc_callbacks_id, | |
344 params.ipc_database_callbacks_id, host_transaction_id, params.origin); | |
345 callbacks->SetConnectionOpenStartTime(begin_time); | |
346 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks = | |
347 new IndexedDBDatabaseCallbacks( | |
348 this, params.ipc_thread_id, params.ipc_database_callbacks_id); | |
349 std::unique_ptr<IndexedDBPendingConnection> connection = | |
350 base::MakeUnique<IndexedDBPendingConnection>( | |
351 callbacks, database_callbacks, ipc_process_id_, host_transaction_id, | |
352 params.version); | |
353 DCHECK(request_context_getter_); | |
354 context()->GetIDBFactory()->Open(params.name, std::move(connection), | |
355 request_context_getter_, params.origin, | |
356 indexed_db_path); | |
357 } | |
358 | |
359 void IndexedDBDispatcherHost::OnIDBFactoryDeleteDatabase( | 325 void IndexedDBDispatcherHost::OnIDBFactoryDeleteDatabase( |
360 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& params) { | 326 const IndexedDBHostMsg_FactoryDeleteDatabase_Params& params) { |
361 DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread()); | 327 DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread()); |
362 | 328 |
363 if (!IsValidOrigin(params.origin)) { | 329 if (!IsValidOrigin(params.origin)) { |
364 bad_message::ReceivedBadMessage(this, bad_message::IDBDH_INVALID_ORIGIN); | 330 bad_message::ReceivedBadMessage(this, bad_message::IDBDH_INVALID_ORIGIN); |
365 return; | 331 return; |
366 } | 332 } |
367 | 333 |
368 base::FilePath indexed_db_path = indexed_db_context_->data_path(); | 334 base::FilePath indexed_db_path = indexed_db_context_->data_path(); |
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1057 DLOG(ERROR) << "Unable to reset prefetch"; | 1023 DLOG(ERROR) << "Unable to reset prefetch"; |
1058 } | 1024 } |
1059 | 1025 |
1060 void IndexedDBDispatcherHost::CursorDispatcherHost::OnDestroyed( | 1026 void IndexedDBDispatcherHost::CursorDispatcherHost::OnDestroyed( |
1061 int32_t ipc_object_id) { | 1027 int32_t ipc_object_id) { |
1062 DCHECK(parent_->context()->TaskRunner()->RunsTasksOnCurrentThread()); | 1028 DCHECK(parent_->context()->TaskRunner()->RunsTasksOnCurrentThread()); |
1063 parent_->DestroyObject(&map_, ipc_object_id); | 1029 parent_->DestroyObject(&map_, ipc_object_id); |
1064 } | 1030 } |
1065 | 1031 |
1066 } // namespace content | 1032 } // namespace content |
OLD | NEW |