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

Side by Side Diff: content/browser/indexed_db/indexed_db_database.cc

Issue 2386683003: IndexedDB: Ignore open/delete requests from terminated renderers. (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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/browser/indexed_db/indexed_db_database.h" 5 #include "content/browser/indexed_db/indexed_db_database.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <set> 10 #include <set>
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 }; 111 };
112 112
113 class IndexedDBDatabase::OpenRequest 113 class IndexedDBDatabase::OpenRequest
114 : public IndexedDBDatabase::ConnectionRequest { 114 : public IndexedDBDatabase::ConnectionRequest {
115 public: 115 public:
116 OpenRequest(scoped_refptr<IndexedDBDatabase> db, 116 OpenRequest(scoped_refptr<IndexedDBDatabase> db,
117 std::unique_ptr<IndexedDBPendingConnection> pending_connection) 117 std::unique_ptr<IndexedDBPendingConnection> pending_connection)
118 : ConnectionRequest(db), pending_(std::move(pending_connection)) {} 118 : ConnectionRequest(db), pending_(std::move(pending_connection)) {}
119 119
120 void Perform() override { 120 void Perform() override {
121 if (!pending_->callbacks->IsValid()) {
122 db_->RequestComplete(this);
123 return;
124 }
125
121 if (db_->metadata_.id == kInvalidId) { 126 if (db_->metadata_.id == kInvalidId) {
122 // The database was deleted then immediately re-opened; OpenInternal() 127 // The database was deleted then immediately re-opened; OpenInternal()
123 // recreates it in the backing store. 128 // recreates it in the backing store.
124 if (!db_->OpenInternal().ok()) { 129 if (!db_->OpenInternal().ok()) {
125 // TODO(jsbell): Consider including sanitized leveldb status message. 130 // TODO(jsbell): Consider including sanitized leveldb status message.
126 base::string16 message; 131 base::string16 message;
127 if (pending_->version == IndexedDBDatabaseMetadata::NO_VERSION) { 132 if (pending_->version == IndexedDBDatabaseMetadata::NO_VERSION) {
128 message = ASCIIToUTF16( 133 message = ASCIIToUTF16(
129 "Internal error opening database with no version specified."); 134 "Internal error opening database with no version specified.");
130 } else { 135 } else {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 }; 288 };
284 289
285 class IndexedDBDatabase::DeleteRequest 290 class IndexedDBDatabase::DeleteRequest
286 : public IndexedDBDatabase::ConnectionRequest { 291 : public IndexedDBDatabase::ConnectionRequest {
287 public: 292 public:
288 DeleteRequest(scoped_refptr<IndexedDBDatabase> db, 293 DeleteRequest(scoped_refptr<IndexedDBDatabase> db,
289 scoped_refptr<IndexedDBCallbacks> callbacks) 294 scoped_refptr<IndexedDBCallbacks> callbacks)
290 : ConnectionRequest(db), callbacks_(callbacks) {} 295 : ConnectionRequest(db), callbacks_(callbacks) {}
291 296
292 void Perform() override { 297 void Perform() override {
298 if (!callbacks_->IsValid()) {
cmumford 2016/10/03 18:39:26 I can see completing the open if disconnecting, bu
jsbell 2016/10/03 19:28:37 Could go either way, yeah. I decided this way for
cmumford 2016/10/03 20:03:34 My main worry is that a normal (i.e. not-crash) sh
jsbell 2016/10/03 20:57:58 That's a very good point, I hadn't considered that
299 db_->RequestComplete(this);
300 return;
301 }
302
293 if (db_->connections_.empty()) { 303 if (db_->connections_.empty()) {
294 // No connections, so delete immediately. 304 // No connections, so delete immediately.
295 DoDelete(); 305 DoDelete();
296 return; 306 return;
297 } 307 }
298 308
299 // Front end ensures the event is not fired at connections that have 309 // Front end ensures the event is not fired at connections that have
300 // close_pending set. 310 // close_pending set.
301 const int64_t old_version = db_->metadata_.version; 311 const int64_t old_version = db_->metadata_.version;
302 const int64_t new_version = IndexedDBDatabaseMetadata::NO_VERSION; 312 const int64_t new_version = IndexedDBDatabaseMetadata::NO_VERSION;
(...skipping 1825 matching lines...) Expand 10 before | Expand all | Expand 10 after
2128 2138
2129 void IndexedDBDatabase::VersionChangeAbortOperation( 2139 void IndexedDBDatabase::VersionChangeAbortOperation(
2130 int64_t previous_version, 2140 int64_t previous_version,
2131 IndexedDBTransaction* transaction) { 2141 IndexedDBTransaction* transaction) {
2132 DCHECK(!transaction); 2142 DCHECK(!transaction);
2133 IDB_TRACE("IndexedDBDatabase::VersionChangeAbortOperation"); 2143 IDB_TRACE("IndexedDBDatabase::VersionChangeAbortOperation");
2134 metadata_.version = previous_version; 2144 metadata_.version = previous_version;
2135 } 2145 }
2136 2146
2137 } // namespace content 2147 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698