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

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

Issue 18221003: Convert WebIDBDatabaseImpl to IndexedDBConnection (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review feedback Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_callbacks.h" 5 #include "content/browser/indexed_db/indexed_db_callbacks.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "content/browser/indexed_db/indexed_db_connection.h"
10 #include "content/browser/indexed_db/indexed_db_cursor.h" 11 #include "content/browser/indexed_db/indexed_db_cursor.h"
11 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" 12 #include "content/browser/indexed_db/indexed_db_database_callbacks.h"
12 #include "content/browser/indexed_db/indexed_db_database_error.h" 13 #include "content/browser/indexed_db/indexed_db_database_error.h"
13 #include "content/browser/indexed_db/indexed_db_metadata.h" 14 #include "content/browser/indexed_db/indexed_db_metadata.h"
14 #include "content/browser/indexed_db/webidbdatabase_impl.h"
15 #include "content/common/indexed_db/indexed_db_messages.h" 15 #include "content/common/indexed_db/indexed_db_messages.h"
16 #include "webkit/browser/quota/quota_manager.h" 16 #include "webkit/browser/quota/quota_manager.h"
17 17
18 using WebKit::WebIDBCallbacks; 18 using WebKit::WebIDBCallbacks;
19 19
20 namespace content { 20 namespace content {
21 21
22 namespace { 22 namespace {
23 const int32 kNoCursor = -1; 23 const int32 kNoCursor = -1;
24 const int32 kNoDatabase = -1; 24 const int32 kNoDatabase = -1;
25 const int32 kNoDatabaseCallbacks = -1; 25 const int32 kNoDatabaseCallbacks = -1;
26 const int64 kNoTransaction = -1; 26 const int64 kNoTransaction = -1;
27 } 27 }
28 28
29 IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, 29 IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
30 int32 ipc_thread_id, 30 int32 ipc_thread_id,
31 int32 ipc_callbacks_id) 31 int32 ipc_callbacks_id)
32 : did_complete_(false), 32 : dispatcher_host_(dispatcher_host),
33 did_create_proxy_(false),
34 dispatcher_host_(dispatcher_host),
35 ipc_callbacks_id_(ipc_callbacks_id), 33 ipc_callbacks_id_(ipc_callbacks_id),
36 ipc_thread_id_(ipc_thread_id), 34 ipc_thread_id_(ipc_thread_id),
37 ipc_cursor_id_(kNoCursor), 35 ipc_cursor_id_(kNoCursor),
38 host_transaction_id_(kNoTransaction), 36 host_transaction_id_(kNoTransaction),
39 ipc_database_id_(kNoDatabase), 37 ipc_database_id_(kNoDatabase),
40 ipc_database_callbacks_id_(kNoDatabaseCallbacks) {} 38 ipc_database_callbacks_id_(kNoDatabaseCallbacks) {}
41 39
42 IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, 40 IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
43 int32 ipc_thread_id, 41 int32 ipc_thread_id,
44 int32 ipc_callbacks_id, 42 int32 ipc_callbacks_id,
45 int32 ipc_cursor_id) 43 int32 ipc_cursor_id)
46 : did_complete_(false), 44 : dispatcher_host_(dispatcher_host),
47 did_create_proxy_(false),
48 dispatcher_host_(dispatcher_host),
49 ipc_callbacks_id_(ipc_callbacks_id), 45 ipc_callbacks_id_(ipc_callbacks_id),
50 ipc_thread_id_(ipc_thread_id), 46 ipc_thread_id_(ipc_thread_id),
51 ipc_cursor_id_(ipc_cursor_id), 47 ipc_cursor_id_(ipc_cursor_id),
52 host_transaction_id_(kNoTransaction), 48 host_transaction_id_(kNoTransaction),
53 ipc_database_id_(kNoDatabase), 49 ipc_database_id_(kNoDatabase),
54 ipc_database_callbacks_id_(kNoDatabaseCallbacks) {} 50 ipc_database_callbacks_id_(kNoDatabaseCallbacks) {}
55 51
56 IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host, 52 IndexedDBCallbacks::IndexedDBCallbacks(IndexedDBDispatcherHost* dispatcher_host,
57 int32 ipc_thread_id, 53 int32 ipc_thread_id,
58 int32 ipc_callbacks_id, 54 int32 ipc_callbacks_id,
59 int32 ipc_database_callbacks_id, 55 int32 ipc_database_callbacks_id,
60 int64 host_transaction_id, 56 int64 host_transaction_id,
61 const GURL& origin_url) 57 const GURL& origin_url)
62 : did_complete_(false), 58 : dispatcher_host_(dispatcher_host),
63 did_create_proxy_(false),
64 dispatcher_host_(dispatcher_host),
65 ipc_callbacks_id_(ipc_callbacks_id), 59 ipc_callbacks_id_(ipc_callbacks_id),
66 ipc_thread_id_(ipc_thread_id), 60 ipc_thread_id_(ipc_thread_id),
67 ipc_cursor_id_(kNoCursor), 61 ipc_cursor_id_(kNoCursor),
68 host_transaction_id_(host_transaction_id), 62 host_transaction_id_(host_transaction_id),
69 origin_url_(origin_url), 63 origin_url_(origin_url),
70 ipc_database_id_(kNoDatabase), 64 ipc_database_id_(kNoDatabase),
71 ipc_database_callbacks_id_(ipc_database_callbacks_id) {} 65 ipc_database_callbacks_id_(ipc_database_callbacks_id) {}
72 66
73 IndexedDBCallbacks::~IndexedDBCallbacks() {} 67 IndexedDBCallbacks::~IndexedDBCallbacks() {}
74 68
(...skipping 17 matching lines...) Expand all
92 for (unsigned i = 0; i < value.size(); ++i) 86 for (unsigned i = 0; i < value.size(); ++i)
93 list.push_back(value[i]); 87 list.push_back(value[i]);
94 88
95 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessStringList( 89 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessStringList(
96 ipc_thread_id_, ipc_callbacks_id_, list)); 90 ipc_thread_id_, ipc_callbacks_id_, list));
97 dispatcher_host_ = NULL; 91 dispatcher_host_ = NULL;
98 } 92 }
99 93
100 void IndexedDBCallbacks::OnBlocked(int64 existing_version) { 94 void IndexedDBCallbacks::OnBlocked(int64 existing_version) {
101 DCHECK(dispatcher_host_); 95 DCHECK(dispatcher_host_);
96
102 DCHECK_EQ(kNoCursor, ipc_cursor_id_); 97 DCHECK_EQ(kNoCursor, ipc_cursor_id_);
98 // No transaction/db callbacks for DeleteDatabase.
99 DCHECK_EQ(kNoTransaction == host_transaction_id_,
100 kNoDatabaseCallbacks == ipc_database_callbacks_id_);
101 DCHECK_EQ(kNoDatabase, ipc_database_id_);
103 102
104 dispatcher_host_->Send(new IndexedDBMsg_CallbacksIntBlocked( 103 dispatcher_host_->Send(new IndexedDBMsg_CallbacksIntBlocked(
105 ipc_thread_id_, ipc_callbacks_id_, existing_version)); 104 ipc_thread_id_, ipc_callbacks_id_, existing_version));
106 } 105 }
107 106
108 void IndexedDBCallbacks::OnUpgradeNeeded( 107 void IndexedDBCallbacks::OnUpgradeNeeded(
109 int64 old_version, 108 int64 old_version,
110 scoped_refptr<IndexedDBDatabase> database, 109 scoped_ptr<IndexedDBConnection> connection,
111 const IndexedDBDatabaseMetadata& metadata, 110 const IndexedDBDatabaseMetadata& metadata,
112 WebIDBCallbacks::DataLoss data_loss) { 111 WebIDBCallbacks::DataLoss data_loss) {
113 DCHECK(dispatcher_host_); 112 DCHECK(dispatcher_host_);
113
114 DCHECK_EQ(kNoCursor, ipc_cursor_id_); 114 DCHECK_EQ(kNoCursor, ipc_cursor_id_);
115 did_create_proxy_ = true; 115 DCHECK_NE(kNoTransaction, host_transaction_id_);
116 116 DCHECK_EQ(kNoDatabase, ipc_database_id_);
117 WebIDBDatabaseImpl* web_database = 117 DCHECK_NE(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
118 new WebIDBDatabaseImpl(database, database_callbacks_);
119 118
120 dispatcher_host_->RegisterTransactionId(host_transaction_id_, origin_url_); 119 dispatcher_host_->RegisterTransactionId(host_transaction_id_, origin_url_);
121 int32 ipc_database_id = 120 int32 ipc_database_id =
122 dispatcher_host_->Add(web_database, ipc_thread_id_, origin_url_); 121 dispatcher_host_->Add(connection.release(), ipc_thread_id_, origin_url_);
123 ipc_database_id_ = ipc_database_id; 122 ipc_database_id_ = ipc_database_id;
124 IndexedDBMsg_CallbacksUpgradeNeeded_Params params; 123 IndexedDBMsg_CallbacksUpgradeNeeded_Params params;
125 params.ipc_thread_id = ipc_thread_id_; 124 params.ipc_thread_id = ipc_thread_id_;
126 params.ipc_callbacks_id = ipc_callbacks_id_; 125 params.ipc_callbacks_id = ipc_callbacks_id_;
127 params.ipc_database_id = ipc_database_id; 126 params.ipc_database_id = ipc_database_id;
128 params.ipc_database_callbacks_id = ipc_database_callbacks_id_; 127 params.ipc_database_callbacks_id = ipc_database_callbacks_id_;
129 params.old_version = old_version; 128 params.old_version = old_version;
130 params.idb_metadata = IndexedDBDispatcherHost::ConvertMetadata(metadata); 129 params.idb_metadata = IndexedDBDispatcherHost::ConvertMetadata(metadata);
131 params.data_loss = data_loss; 130 params.data_loss = data_loss;
132 dispatcher_host_->Send(new IndexedDBMsg_CallbacksUpgradeNeeded(params)); 131 dispatcher_host_->Send(new IndexedDBMsg_CallbacksUpgradeNeeded(params));
133
134 database_callbacks_ = NULL;
135 } 132 }
136 133
137 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBDatabase> database, 134 void IndexedDBCallbacks::OnSuccess(scoped_ptr<IndexedDBConnection> connection,
138 const IndexedDBDatabaseMetadata& metadata) { 135 const IndexedDBDatabaseMetadata& metadata) {
139 DCHECK(dispatcher_host_); 136 DCHECK(dispatcher_host_);
137
140 DCHECK_EQ(kNoCursor, ipc_cursor_id_); 138 DCHECK_EQ(kNoCursor, ipc_cursor_id_);
139 DCHECK_NE(kNoTransaction, host_transaction_id_);
140 DCHECK_NE(ipc_database_id_ == kNoDatabase, !connection);
141 DCHECK_NE(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
141 142
142 scoped_refptr<IndexedDBCallbacks> self(this); 143 scoped_refptr<IndexedDBCallbacks> self(this);
143 144
144 WebIDBDatabaseImpl* impl =
145 did_create_proxy_ ? 0
146 : new WebIDBDatabaseImpl(database, database_callbacks_);
147 database_callbacks_ = NULL;
148
149 int32 ipc_object_id = ipc_database_id_; 145 int32 ipc_object_id = ipc_database_id_;
150 if (ipc_object_id == kNoDatabase) 146 if (ipc_object_id == kNoDatabase) {
151 ipc_object_id = dispatcher_host_->Add(impl, ipc_thread_id_, origin_url_); 147 ipc_object_id = dispatcher_host_->Add(
148 connection.release(), ipc_thread_id_, origin_url_);
149 }
152 150
153 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBDatabase( 151 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBDatabase(
154 ipc_thread_id_, 152 ipc_thread_id_,
155 ipc_callbacks_id_, 153 ipc_callbacks_id_,
156 ipc_database_callbacks_id_, 154 ipc_database_callbacks_id_,
157 ipc_object_id, 155 ipc_object_id,
158 IndexedDBDispatcherHost::ConvertMetadata(metadata))); 156 IndexedDBDispatcherHost::ConvertMetadata(metadata)));
159 dispatcher_host_ = NULL; 157 dispatcher_host_ = NULL;
160 } 158 }
161 159
162 void IndexedDBCallbacks::SetDatabaseCallbacks(
163 scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks) {
164 database_callbacks_ = database_callbacks;
165 }
166
167 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, 160 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
168 const IndexedDBKey& key, 161 const IndexedDBKey& key,
169 const IndexedDBKey& primary_key, 162 const IndexedDBKey& primary_key,
170 std::vector<char>* value) { 163 std::vector<char>* value) {
171 DCHECK(dispatcher_host_); 164 DCHECK(dispatcher_host_);
172 165
166 DCHECK_EQ(kNoCursor, ipc_cursor_id_);
173 DCHECK_EQ(kNoTransaction, host_transaction_id_); 167 DCHECK_EQ(kNoTransaction, host_transaction_id_);
174 DCHECK_EQ(kNoDatabase, ipc_database_id_); 168 DCHECK_EQ(kNoDatabase, ipc_database_id_);
175 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); 169 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
176 170
177 int32 ipc_object_id = dispatcher_host_->Add(cursor); 171 int32 ipc_object_id = dispatcher_host_->Add(cursor);
178 IndexedDBMsg_CallbacksSuccessIDBCursor_Params params; 172 IndexedDBMsg_CallbacksSuccessIDBCursor_Params params;
179 params.ipc_thread_id = ipc_thread_id_; 173 params.ipc_thread_id = ipc_thread_id_;
180 params.ipc_callbacks_id = ipc_callbacks_id_; 174 params.ipc_callbacks_id = ipc_callbacks_id_;
181 params.ipc_cursor_id = ipc_object_id; 175 params.ipc_cursor_id = ipc_object_id;
182 params.key = key; 176 params.key = key;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 // TODO(alecflett): Avoid a copy here. 268 // TODO(alecflett): Avoid a copy here.
275 value_copy, 269 value_copy,
276 key, 270 key,
277 key_path)); 271 key_path));
278 dispatcher_host_ = NULL; 272 dispatcher_host_ = NULL;
279 } 273 }
280 274
281 void IndexedDBCallbacks::OnSuccess(std::vector<char>* value) { 275 void IndexedDBCallbacks::OnSuccess(std::vector<char>* value) {
282 DCHECK(dispatcher_host_); 276 DCHECK(dispatcher_host_);
283 277
278 DCHECK(kNoCursor == ipc_cursor_id_ || value == NULL);
284 DCHECK_EQ(kNoTransaction, host_transaction_id_); 279 DCHECK_EQ(kNoTransaction, host_transaction_id_);
285 DCHECK_EQ(kNoDatabase, ipc_database_id_); 280 DCHECK_EQ(kNoDatabase, ipc_database_id_);
286 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); 281 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
287 282
288 std::vector<char> value_copy; 283 std::vector<char> value_copy;
289 if (value && !value->empty()) 284 if (value && !value->empty())
290 std::swap(value_copy, *value); 285 std::swap(value_copy, *value);
291 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue( 286 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue(
292 ipc_thread_id_, 287 ipc_thread_id_,
293 ipc_callbacks_id_, 288 ipc_callbacks_id_,
(...skipping 24 matching lines...) Expand all
318 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); 313 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
319 314
320 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessInteger( 315 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessInteger(
321 ipc_thread_id_, ipc_callbacks_id_, value)); 316 ipc_thread_id_, ipc_callbacks_id_, value));
322 dispatcher_host_ = NULL; 317 dispatcher_host_ = NULL;
323 } 318 }
324 319
325 void IndexedDBCallbacks::OnSuccess() { 320 void IndexedDBCallbacks::OnSuccess() {
326 DCHECK(dispatcher_host_); 321 DCHECK(dispatcher_host_);
327 322
323 DCHECK_EQ(kNoCursor, ipc_cursor_id_);
328 DCHECK_EQ(kNoTransaction, host_transaction_id_); 324 DCHECK_EQ(kNoTransaction, host_transaction_id_);
329 DCHECK_EQ(kNoDatabase, ipc_database_id_); 325 DCHECK_EQ(kNoDatabase, ipc_database_id_);
330 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); 326 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
331 327
332 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined( 328 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined(
333 ipc_thread_id_, ipc_callbacks_id_)); 329 ipc_thread_id_, ipc_callbacks_id_));
334 dispatcher_host_ = NULL; 330 dispatcher_host_ = NULL;
335 } 331 }
336 332
337 } // namespace content 333 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_callbacks.h ('k') | content/browser/indexed_db/indexed_db_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698