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

Unified Diff: content/browser/indexed_db/cursor_impl.cc

Issue 2727733004: [IndexedDB] Closing mojo connections when renderer quits (Closed)
Patch Set: comments Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/indexed_db/cursor_impl.h ('k') | content/browser/indexed_db/database_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
+ 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)));
« no previous file with comments | « content/browser/indexed_db/cursor_impl.h ('k') | content/browser/indexed_db/database_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698