Chromium Code Reviews| Index: content/browser/indexed_db/cursor_impl.cc |
| diff --git a/content/browser/indexed_db/cursor_impl.cc b/content/browser/indexed_db/cursor_impl.cc |
| index 86d0e8f51b773a5a502cd6ef607ac41ecf18d66a..15382eb881781dd04bbb156bece3e92b587d7eaf 100644 |
| --- a/content/browser/indexed_db/cursor_impl.cc |
| +++ b/content/browser/indexed_db/cursor_impl.cc |
| @@ -5,13 +5,14 @@ |
| #include "content/browser/indexed_db/cursor_impl.h" |
| #include "base/memory/ptr_util.h" |
| -#include "base/threading/thread_task_runner_handle.h" |
| +#include "base/sequenced_task_runner.h" |
| #include "content/browser/indexed_db/indexed_db_callbacks.h" |
| #include "content/browser/indexed_db/indexed_db_cursor.h" |
| #include "content/browser/indexed_db/indexed_db_dispatcher_host.h" |
| namespace content { |
| +// Expected to be constructed on IO thread, and used/destroyed on IDB thread. |
| class CursorImpl::IDBThreadHelper { |
| public: |
| explicit IDBThreadHelper(std::unique_ptr<IndexedDBCursor> cursor); |
| @@ -25,20 +26,19 @@ class CursorImpl::IDBThreadHelper { |
| void PrefetchReset(int32_t used_prefetches, int32_t unused_prefetches); |
| private: |
| - scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_; |
| std::unique_ptr<IndexedDBCursor> cursor_; |
| - const url::Origin origin_; |
| DISALLOW_COPY_AND_ASSIGN(IDBThreadHelper); |
| }; |
| CursorImpl::CursorImpl(std::unique_ptr<IndexedDBCursor> cursor, |
| const url::Origin& origin, |
| - scoped_refptr<IndexedDBDispatcherHost> dispatcher_host) |
| + IndexedDBDispatcherHost* dispatcher_host, |
|
pwnall
2017/03/27 21:55:12
Nice job getting rid of ref counting here!
|
| + scoped_refptr<base::SequencedTaskRunner> idb_runner) |
| : helper_(new IDBThreadHelper(std::move(cursor))), |
| - dispatcher_host_(std::move(dispatcher_host)), |
| + dispatcher_host_(dispatcher_host), |
| origin_(origin), |
| - idb_runner_(base::ThreadTaskRunnerHandle::Get()) {} |
| + idb_runner_(std::move(idb_runner)) {} |
| CursorImpl::~CursorImpl() { |
| idb_runner_->DeleteSoon(FROM_HERE, helper_); |
| @@ -47,8 +47,9 @@ CursorImpl::~CursorImpl() { |
| void CursorImpl::Advance( |
| uint32_t count, |
| ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| - scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( |
| - dispatcher_host_.get(), origin_, std::move(callbacks_info))); |
| + scoped_refptr<IndexedDBCallbacks> callbacks( |
| + new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| + std::move(callbacks_info), idb_runner_)); |
| idb_runner_->PostTask(FROM_HERE, base::Bind(&IDBThreadHelper::Advance, |
| base::Unretained(helper_), count, |
| base::Passed(&callbacks))); |
| @@ -58,8 +59,9 @@ void CursorImpl::Continue( |
| const IndexedDBKey& key, |
| const IndexedDBKey& primary_key, |
| ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| - scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( |
| - dispatcher_host_.get(), origin_, std::move(callbacks_info))); |
| + scoped_refptr<IndexedDBCallbacks> callbacks( |
| + new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| + std::move(callbacks_info), idb_runner_)); |
| idb_runner_->PostTask( |
| FROM_HERE, |
| base::Bind(&IDBThreadHelper::Continue, base::Unretained(helper_), key, |
| @@ -69,8 +71,9 @@ void CursorImpl::Continue( |
| void CursorImpl::Prefetch( |
| int32_t count, |
| ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| - scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks( |
| - dispatcher_host_.get(), origin_, std::move(callbacks_info))); |
| + scoped_refptr<IndexedDBCallbacks> callbacks( |
| + new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| + std::move(callbacks_info), idb_runner_)); |
| idb_runner_->PostTask(FROM_HERE, base::Bind(&IDBThreadHelper::Prefetch, |
| base::Unretained(helper_), count, |
| base::Passed(&callbacks))); |