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

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

Issue 2439863002: Prevent cross-thread refcounting for thread-unsafe IndexedDBCallbacks. (Closed)
Patch Set: Created 4 years, 2 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
Index: content/browser/indexed_db/indexed_db_callbacks.cc
diff --git a/content/browser/indexed_db/indexed_db_callbacks.cc b/content/browser/indexed_db/indexed_db_callbacks.cc
index 0106fbcdd41f0f9b3fec7a396cee5eebaf8f6a85..eb639072bfc5c21cde8db2f750a2e322605bb14b 100644
--- a/content/browser/indexed_db/indexed_db_callbacks.cc
+++ b/content/browser/indexed_db/indexed_db_callbacks.cc
@@ -100,12 +100,18 @@ IndexedDBCallbacks::IndexedDBCallbacks(
ipc_database_id_(kNoDatabase),
data_loss_(blink::WebIDBDataLossNone),
sent_blocked_(false),
- io_helper_(new IOThreadHelper(std::move(callbacks_info))) {}
+ io_helper_(new IOThreadHelper(std::move(callbacks_info))) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ thread_checker_.DetachFromThread();
+}
-IndexedDBCallbacks::~IndexedDBCallbacks() {}
+IndexedDBCallbacks::~IndexedDBCallbacks() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+}
void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) {
- DCHECK(dispatcher_host_.get());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
if (io_helper_) {
BrowserThread::PostTask(
@@ -127,7 +133,8 @@ void IndexedDBCallbacks::OnError(const IndexedDBDatabaseError& error) {
}
void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) {
- DCHECK(dispatcher_host_.get());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(io_helper_);
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoTransaction, host_transaction_id_);
@@ -141,7 +148,8 @@ void IndexedDBCallbacks::OnSuccess(const std::vector<base::string16>& value) {
}
void IndexedDBCallbacks::OnBlocked(int64_t existing_version) {
- DCHECK(dispatcher_host_.get());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(io_helper_);
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
@@ -168,7 +176,8 @@ void IndexedDBCallbacks::OnUpgradeNeeded(
std::unique_ptr<IndexedDBConnection> connection,
const IndexedDBDatabaseMetadata& metadata,
const IndexedDBDataLossInfo& data_loss_info) {
- DCHECK(dispatcher_host_.get());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(io_helper_);
DCHECK_NE(kNoTransaction, host_transaction_id_);
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
@@ -201,7 +210,8 @@ void IndexedDBCallbacks::OnUpgradeNeeded(
void IndexedDBCallbacks::OnSuccess(
std::unique_ptr<IndexedDBConnection> connection,
const IndexedDBDatabaseMetadata& metadata) {
- DCHECK(dispatcher_host_.get());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(io_helper_);
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_NE(kNoTransaction, host_transaction_id_);
@@ -348,8 +358,9 @@ void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
const IndexedDBKey& key,
const IndexedDBKey& primary_key,
IndexedDBValue* value) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
- DCHECK(dispatcher_host_.get());
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoTransaction, host_transaction_id_);
@@ -387,8 +398,9 @@ void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key,
const IndexedDBKey& primary_key,
IndexedDBValue* value) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
- DCHECK(dispatcher_host_.get());
DCHECK_NE(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoTransaction, host_transaction_id_);
@@ -435,12 +447,12 @@ void IndexedDBCallbacks::OnSuccessWithPrefetch(
const std::vector<IndexedDBKey>& keys,
const std::vector<IndexedDBKey>& primary_keys,
std::vector<IndexedDBValue>* values) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
DCHECK_EQ(keys.size(), primary_keys.size());
DCHECK_EQ(keys.size(), values->size());
- DCHECK(dispatcher_host_.get());
-
DCHECK_NE(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoTransaction, host_transaction_id_);
DCHECK_EQ(kNoDatabase, ipc_database_id_);
@@ -492,8 +504,9 @@ void IndexedDBCallbacks::OnSuccessWithPrefetch(
}
void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
- DCHECK(dispatcher_host_.get());
if (value && value->primary_key.IsValid()) {
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
@@ -533,8 +546,9 @@ void IndexedDBCallbacks::OnSuccess(IndexedDBReturnValue* value) {
void IndexedDBCallbacks::OnSuccessArray(
std::vector<IndexedDBReturnValue>* values,
const IndexedDBKeyPath& key_path) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
- DCHECK(dispatcher_host_.get());
DCHECK_EQ(kNoTransaction, host_transaction_id_);
DCHECK_EQ(kNoDatabase, ipc_database_id_);
@@ -576,8 +590,9 @@ void IndexedDBCallbacks::OnSuccessArray(
}
void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
- DCHECK(dispatcher_host_.get());
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoTransaction, host_transaction_id_);
@@ -590,7 +605,8 @@ void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) {
}
void IndexedDBCallbacks::OnSuccess(int64_t value) {
- DCHECK(dispatcher_host_.get());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
if (io_helper_) {
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
@@ -609,8 +625,9 @@ void IndexedDBCallbacks::OnSuccess(int64_t value) {
}
void IndexedDBCallbacks::OnSuccess() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(dispatcher_host_);
DCHECK(!io_helper_);
- DCHECK(dispatcher_host_.get());
DCHECK_EQ(kNoCursor, ipc_cursor_id_);
DCHECK_EQ(kNoTransaction, host_transaction_id_);
« no previous file with comments | « content/browser/indexed_db/indexed_db_callbacks.h ('k') | content/browser/indexed_db/indexed_db_database_callbacks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698