| OLD | NEW |
| 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 #include "content/child/indexed_db/indexed_db_dispatcher.h" | 5 #include "content/child/indexed_db/indexed_db_dispatcher.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "base/threading/thread_local.h" | 10 #include "base/threading/thread_local.h" |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 ipc_cursor_id, used_prefetches, unused_prefetches)); | 212 ipc_cursor_id, used_prefetches, unused_prefetches)); |
| 213 } | 213 } |
| 214 | 214 |
| 215 void IndexedDBDispatcher::RequestIDBFactoryOpen( | 215 void IndexedDBDispatcher::RequestIDBFactoryOpen( |
| 216 const base::string16& name, | 216 const base::string16& name, |
| 217 int64 version, | 217 int64 version, |
| 218 int64 transaction_id, | 218 int64 transaction_id, |
| 219 WebIDBCallbacks* callbacks_ptr, | 219 WebIDBCallbacks* callbacks_ptr, |
| 220 WebIDBDatabaseCallbacks* database_callbacks_ptr, | 220 WebIDBDatabaseCallbacks* database_callbacks_ptr, |
| 221 const std::string& database_identifier) { | 221 const std::string& database_identifier) { |
| 222 ResetCursorPrefetchCaches(); | |
| 223 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 222 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
| 224 scoped_ptr<WebIDBDatabaseCallbacks> database_callbacks( | 223 scoped_ptr<WebIDBDatabaseCallbacks> database_callbacks( |
| 225 database_callbacks_ptr); | 224 database_callbacks_ptr); |
| 226 | 225 |
| 227 IndexedDBHostMsg_FactoryOpen_Params params; | 226 IndexedDBHostMsg_FactoryOpen_Params params; |
| 228 params.ipc_thread_id = CurrentWorkerId(); | 227 params.ipc_thread_id = CurrentWorkerId(); |
| 229 params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); | 228 params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
| 230 params.ipc_database_callbacks_id = | 229 params.ipc_database_callbacks_id = |
| 231 pending_database_callbacks_.Add(database_callbacks.release()); | 230 pending_database_callbacks_.Add(database_callbacks.release()); |
| 232 params.database_identifier = database_identifier; | 231 params.database_identifier = database_identifier; |
| 233 params.name = name; | 232 params.name = name; |
| 234 params.transaction_id = transaction_id; | 233 params.transaction_id = transaction_id; |
| 235 params.version = version; | 234 params.version = version; |
| 236 Send(new IndexedDBHostMsg_FactoryOpen(params)); | 235 Send(new IndexedDBHostMsg_FactoryOpen(params)); |
| 237 } | 236 } |
| 238 | 237 |
| 239 void IndexedDBDispatcher::RequestIDBFactoryGetDatabaseNames( | 238 void IndexedDBDispatcher::RequestIDBFactoryGetDatabaseNames( |
| 240 WebIDBCallbacks* callbacks_ptr, | 239 WebIDBCallbacks* callbacks_ptr, |
| 241 const std::string& database_identifier) { | 240 const std::string& database_identifier) { |
| 242 ResetCursorPrefetchCaches(); | |
| 243 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 241 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
| 244 | 242 |
| 245 IndexedDBHostMsg_FactoryGetDatabaseNames_Params params; | 243 IndexedDBHostMsg_FactoryGetDatabaseNames_Params params; |
| 246 params.ipc_thread_id = CurrentWorkerId(); | 244 params.ipc_thread_id = CurrentWorkerId(); |
| 247 params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); | 245 params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
| 248 params.database_identifier = database_identifier; | 246 params.database_identifier = database_identifier; |
| 249 Send(new IndexedDBHostMsg_FactoryGetDatabaseNames(params)); | 247 Send(new IndexedDBHostMsg_FactoryGetDatabaseNames(params)); |
| 250 } | 248 } |
| 251 | 249 |
| 252 void IndexedDBDispatcher::RequestIDBFactoryDeleteDatabase( | 250 void IndexedDBDispatcher::RequestIDBFactoryDeleteDatabase( |
| 253 const base::string16& name, | 251 const base::string16& name, |
| 254 WebIDBCallbacks* callbacks_ptr, | 252 WebIDBCallbacks* callbacks_ptr, |
| 255 const std::string& database_identifier) { | 253 const std::string& database_identifier) { |
| 256 ResetCursorPrefetchCaches(); | |
| 257 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); | 254 scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); |
| 258 | 255 |
| 259 IndexedDBHostMsg_FactoryDeleteDatabase_Params params; | 256 IndexedDBHostMsg_FactoryDeleteDatabase_Params params; |
| 260 params.ipc_thread_id = CurrentWorkerId(); | 257 params.ipc_thread_id = CurrentWorkerId(); |
| 261 params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); | 258 params.ipc_callbacks_id = pending_callbacks_.Add(callbacks.release()); |
| 262 params.database_identifier = database_identifier; | 259 params.database_identifier = database_identifier; |
| 263 params.name = name; | 260 params.name = name; |
| 264 Send(new IndexedDBHostMsg_FactoryDeleteDatabase(params)); | 261 Send(new IndexedDBHostMsg_FactoryDeleteDatabase(params)); |
| 265 } | 262 } |
| 266 | 263 |
| 267 void IndexedDBDispatcher::RequestIDBDatabaseClose( | 264 void IndexedDBDispatcher::RequestIDBDatabaseClose( |
| 268 int32 ipc_database_id, | 265 int32 ipc_database_id, |
| 269 int32 ipc_database_callbacks_id) { | 266 int32 ipc_database_callbacks_id) { |
| 270 ResetCursorPrefetchCaches(); | |
| 271 Send(new IndexedDBHostMsg_DatabaseClose(ipc_database_id)); | 267 Send(new IndexedDBHostMsg_DatabaseClose(ipc_database_id)); |
| 272 // There won't be pending database callbacks if the transaction was aborted in | 268 // There won't be pending database callbacks if the transaction was aborted in |
| 273 // the initial upgradeneeded event handler. | 269 // the initial upgradeneeded event handler. |
| 274 if (pending_database_callbacks_.Lookup(ipc_database_callbacks_id)) | 270 if (pending_database_callbacks_.Lookup(ipc_database_callbacks_id)) |
| 275 pending_database_callbacks_.Remove(ipc_database_callbacks_id); | 271 pending_database_callbacks_.Remove(ipc_database_callbacks_id); |
| 276 } | 272 } |
| 277 | 273 |
| 278 void IndexedDBDispatcher::RequestIDBDatabaseCreateTransaction( | 274 void IndexedDBDispatcher::RequestIDBDatabaseCreateTransaction( |
| 279 int32 ipc_database_id, | 275 int32 ipc_database_id, |
| 280 int64 transaction_id, | 276 int64 transaction_id, |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 711 pending_database_callbacks_.Lookup(ipc_database_callbacks_id); | 707 pending_database_callbacks_.Lookup(ipc_database_callbacks_id); |
| 712 // callbacks would be NULL if a versionchange event is received after close | 708 // callbacks would be NULL if a versionchange event is received after close |
| 713 // has been called. | 709 // has been called. |
| 714 if (!callbacks) | 710 if (!callbacks) |
| 715 return; | 711 return; |
| 716 callbacks->onVersionChange(old_version, new_version); | 712 callbacks->onVersionChange(old_version, new_version); |
| 717 } | 713 } |
| 718 | 714 |
| 719 void IndexedDBDispatcher::ResetCursorPrefetchCaches( | 715 void IndexedDBDispatcher::ResetCursorPrefetchCaches( |
| 720 int32 ipc_exception_cursor_id) { | 716 int32 ipc_exception_cursor_id) { |
| 717 // TODO(jsbell): Only reset cursors from the same transaction. |
| 721 typedef std::map<int32, WebIDBCursorImpl*>::iterator Iterator; | 718 typedef std::map<int32, WebIDBCursorImpl*>::iterator Iterator; |
| 722 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { | 719 for (Iterator i = cursors_.begin(); i != cursors_.end(); ++i) { |
| 723 if (i->first == ipc_exception_cursor_id) | 720 if (i->first == ipc_exception_cursor_id) |
| 724 continue; | 721 continue; |
| 725 i->second->ResetPrefetchCache(); | 722 i->second->ResetPrefetchCache(); |
| 726 } | 723 } |
| 727 } | 724 } |
| 728 | 725 |
| 729 } // namespace content | 726 } // namespace content |
| OLD | NEW |