| OLD | NEW |
| 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 | 8 |
| 9 #include "content/browser/indexed_db/indexed_db_connection.h" | 9 #include "content/browser/indexed_db/indexed_db_connection.h" |
| 10 #include "content/browser/indexed_db/indexed_db_cursor.h" | 10 #include "content/browser/indexed_db/indexed_db_cursor.h" |
| 11 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" | 11 #include "content/browser/indexed_db/indexed_db_database_callbacks.h" |
| 12 #include "content/browser/indexed_db/indexed_db_database_error.h" | 12 #include "content/browser/indexed_db/indexed_db_database_error.h" |
| 13 #include "content/browser/indexed_db/indexed_db_metadata.h" | 13 #include "content/browser/indexed_db/indexed_db_metadata.h" |
| 14 #include "content/browser/indexed_db/indexed_db_value.h" |
| 14 #include "content/common/indexed_db/indexed_db_constants.h" | 15 #include "content/common/indexed_db/indexed_db_constants.h" |
| 15 #include "content/common/indexed_db/indexed_db_messages.h" | 16 #include "content/common/indexed_db/indexed_db_messages.h" |
| 16 #include "webkit/browser/quota/quota_manager.h" | 17 #include "webkit/browser/quota/quota_manager.h" |
| 17 | 18 |
| 18 namespace content { | 19 namespace content { |
| 19 | 20 |
| 20 namespace { | 21 namespace { |
| 21 const int32 kNoCursor = -1; | 22 const int32 kNoCursor = -1; |
| 22 const int32 kNoDatabaseCallbacks = -1; | 23 const int32 kNoDatabaseCallbacks = -1; |
| 23 const int64 kNoTransaction = -1; | 24 const int64 kNoTransaction = -1; |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 ipc_callbacks_id_, | 165 ipc_callbacks_id_, |
| 165 ipc_database_callbacks_id_, | 166 ipc_database_callbacks_id_, |
| 166 ipc_object_id, | 167 ipc_object_id, |
| 167 IndexedDBDispatcherHost::ConvertMetadata(metadata))); | 168 IndexedDBDispatcherHost::ConvertMetadata(metadata))); |
| 168 dispatcher_host_ = NULL; | 169 dispatcher_host_ = NULL; |
| 169 } | 170 } |
| 170 | 171 |
| 171 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, | 172 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor, |
| 172 const IndexedDBKey& key, | 173 const IndexedDBKey& key, |
| 173 const IndexedDBKey& primary_key, | 174 const IndexedDBKey& primary_key, |
| 174 std::string* value) { | 175 IndexedDBValue* value) { |
| 175 DCHECK(dispatcher_host_.get()); | 176 DCHECK(dispatcher_host_.get()); |
| 176 | 177 |
| 177 DCHECK_EQ(kNoCursor, ipc_cursor_id_); | 178 DCHECK_EQ(kNoCursor, ipc_cursor_id_); |
| 178 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 179 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
| 179 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 180 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 180 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 181 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 181 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 182 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 182 | 183 |
| 183 int32 ipc_object_id = dispatcher_host_->Add(cursor.get()); | 184 int32 ipc_object_id = dispatcher_host_->Add(cursor.get()); |
| 184 IndexedDBMsg_CallbacksSuccessIDBCursor_Params params; | 185 IndexedDBMsg_CallbacksSuccessIDBCursor_Params params; |
| 185 params.ipc_thread_id = ipc_thread_id_; | 186 params.ipc_thread_id = ipc_thread_id_; |
| 186 params.ipc_callbacks_id = ipc_callbacks_id_; | 187 params.ipc_callbacks_id = ipc_callbacks_id_; |
| 187 params.ipc_cursor_id = ipc_object_id; | 188 params.ipc_cursor_id = ipc_object_id; |
| 188 params.key = key; | 189 params.key = key; |
| 189 params.primary_key = primary_key; | 190 params.primary_key = primary_key; |
| 190 if (value && !value->empty()) | 191 if (value && !value->empty()) |
| 191 std::swap(params.value, *value); | 192 std::swap(params.value, value->bits); |
| 192 // TODO(alecflett): Avoid a copy here: the whole params object is | 193 // TODO(alecflett): Avoid a copy here: the whole params object is |
| 193 // being copied into the message. | 194 // being copied into the message. |
| 194 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params)); | 195 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params)); |
| 195 | 196 |
| 196 dispatcher_host_ = NULL; | 197 dispatcher_host_ = NULL; |
| 197 } | 198 } |
| 198 | 199 |
| 199 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, | 200 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& key, |
| 200 const IndexedDBKey& primary_key, | 201 const IndexedDBKey& primary_key, |
| 201 std::string* value) { | 202 IndexedDBValue* value) { |
| 202 DCHECK(dispatcher_host_.get()); | 203 DCHECK(dispatcher_host_.get()); |
| 203 | 204 |
| 204 DCHECK_NE(kNoCursor, ipc_cursor_id_); | 205 DCHECK_NE(kNoCursor, ipc_cursor_id_); |
| 205 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 206 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
| 206 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 207 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 207 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 208 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 208 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 209 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 209 | 210 |
| 210 IndexedDBCursor* idb_cursor = | 211 IndexedDBCursor* idb_cursor = |
| 211 dispatcher_host_->GetCursorFromId(ipc_cursor_id_); | 212 dispatcher_host_->GetCursorFromId(ipc_cursor_id_); |
| 212 | 213 |
| 213 DCHECK(idb_cursor); | 214 DCHECK(idb_cursor); |
| 214 if (!idb_cursor) | 215 if (!idb_cursor) |
| 215 return; | 216 return; |
| 216 IndexedDBMsg_CallbacksSuccessCursorContinue_Params params; | 217 IndexedDBMsg_CallbacksSuccessCursorContinue_Params params; |
| 217 params.ipc_thread_id = ipc_thread_id_; | 218 params.ipc_thread_id = ipc_thread_id_; |
| 218 params.ipc_callbacks_id = ipc_callbacks_id_; | 219 params.ipc_callbacks_id = ipc_callbacks_id_; |
| 219 params.ipc_cursor_id = ipc_cursor_id_; | 220 params.ipc_cursor_id = ipc_cursor_id_; |
| 220 params.key = key; | 221 params.key = key; |
| 221 params.primary_key = primary_key; | 222 params.primary_key = primary_key; |
| 222 if (value && !value->empty()) | 223 if (value && !value->empty()) |
| 223 std::swap(params.value, *value); | 224 std::swap(params.value, value->bits); |
| 224 // TODO(alecflett): Avoid a copy here: the whole params object is | 225 // TODO(alecflett): Avoid a copy here: the whole params object is |
| 225 // being copied into the message. | 226 // being copied into the message. |
| 226 dispatcher_host_->Send( | 227 dispatcher_host_->Send( |
| 227 new IndexedDBMsg_CallbacksSuccessCursorContinue(params)); | 228 new IndexedDBMsg_CallbacksSuccessCursorContinue(params)); |
| 228 dispatcher_host_ = NULL; | 229 dispatcher_host_ = NULL; |
| 229 } | 230 } |
| 230 | 231 |
| 231 void IndexedDBCallbacks::OnSuccessWithPrefetch( | 232 void IndexedDBCallbacks::OnSuccessWithPrefetch( |
| 232 const std::vector<IndexedDBKey>& keys, | 233 const std::vector<IndexedDBKey>& keys, |
| 233 const std::vector<IndexedDBKey>& primary_keys, | 234 const std::vector<IndexedDBKey>& primary_keys, |
| 234 const std::vector<std::string>& values) { | 235 const std::vector<IndexedDBValue>& values) { |
| 235 DCHECK_EQ(keys.size(), primary_keys.size()); | 236 DCHECK_EQ(keys.size(), primary_keys.size()); |
| 236 DCHECK_EQ(keys.size(), values.size()); | 237 DCHECK_EQ(keys.size(), values.size()); |
| 237 | 238 |
| 238 DCHECK(dispatcher_host_.get()); | 239 DCHECK(dispatcher_host_.get()); |
| 239 | 240 |
| 240 DCHECK_NE(kNoCursor, ipc_cursor_id_); | 241 DCHECK_NE(kNoCursor, ipc_cursor_id_); |
| 241 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 242 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
| 242 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 243 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 243 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 244 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 244 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 245 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 245 | 246 |
| 246 std::vector<IndexedDBKey> msgKeys; | 247 std::vector<IndexedDBKey> msgKeys; |
| 247 std::vector<IndexedDBKey> msgPrimaryKeys; | 248 std::vector<IndexedDBKey> msgPrimaryKeys; |
| 248 | 249 |
| 249 for (size_t i = 0; i < keys.size(); ++i) { | 250 for (size_t i = 0; i < keys.size(); ++i) { |
| 250 msgKeys.push_back(keys[i]); | 251 msgKeys.push_back(keys[i]); |
| 251 msgPrimaryKeys.push_back(primary_keys[i]); | 252 msgPrimaryKeys.push_back(primary_keys[i]); |
| 252 } | 253 } |
| 253 | 254 |
| 254 IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params params; | 255 IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params params; |
| 255 params.ipc_thread_id = ipc_thread_id_; | 256 params.ipc_thread_id = ipc_thread_id_; |
| 256 params.ipc_callbacks_id = ipc_callbacks_id_; | 257 params.ipc_callbacks_id = ipc_callbacks_id_; |
| 257 params.ipc_cursor_id = ipc_cursor_id_; | 258 params.ipc_cursor_id = ipc_cursor_id_; |
| 258 params.keys = msgKeys; | 259 params.keys = msgKeys; |
| 259 params.primary_keys = msgPrimaryKeys; | 260 params.primary_keys = msgPrimaryKeys; |
| 260 params.values = values; | 261 std::vector<IndexedDBValue>::const_iterator iter; |
| 262 for (iter = values.begin(); iter != values.end(); ++iter) |
| 263 params.values.push_back(iter->bits); |
| 261 dispatcher_host_->Send( | 264 dispatcher_host_->Send( |
| 262 new IndexedDBMsg_CallbacksSuccessCursorPrefetch(params)); | 265 new IndexedDBMsg_CallbacksSuccessCursorPrefetch(params)); |
| 263 dispatcher_host_ = NULL; | 266 dispatcher_host_ = NULL; |
| 264 } | 267 } |
| 265 | 268 |
| 266 void IndexedDBCallbacks::OnSuccess(std::string* value, | 269 void IndexedDBCallbacks::OnSuccess(IndexedDBValue* value, |
| 267 const IndexedDBKey& key, | 270 const IndexedDBKey& key, |
| 268 const IndexedDBKeyPath& key_path) { | 271 const IndexedDBKeyPath& key_path) { |
| 269 DCHECK(dispatcher_host_.get()); | 272 DCHECK(dispatcher_host_.get()); |
| 270 | 273 |
| 271 DCHECK_EQ(kNoCursor, ipc_cursor_id_); | 274 DCHECK_EQ(kNoCursor, ipc_cursor_id_); |
| 272 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 275 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
| 273 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 276 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 274 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 277 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 275 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 278 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 276 | 279 |
| 277 std::string value_copy; | 280 std::string value_copy; |
| 278 if (value && !value->empty()) | 281 if (value && !value->empty()) |
| 279 std::swap(value_copy, *value); | 282 std::swap(value_copy, value->bits); |
| 280 | 283 |
| 281 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey( | 284 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey( |
| 282 ipc_thread_id_, | 285 ipc_thread_id_, |
| 283 ipc_callbacks_id_, | 286 ipc_callbacks_id_, |
| 284 // TODO(alecflett): Avoid a copy here. | 287 // TODO(alecflett): Avoid a copy here. |
| 285 value_copy, | 288 value_copy, |
| 286 key, | 289 key, |
| 287 key_path)); | 290 key_path)); |
| 288 dispatcher_host_ = NULL; | 291 dispatcher_host_ = NULL; |
| 289 } | 292 } |
| 290 | 293 |
| 291 void IndexedDBCallbacks::OnSuccess(std::string* value) { | 294 void IndexedDBCallbacks::OnSuccess(IndexedDBValue* value) { |
| 292 DCHECK(dispatcher_host_.get()); | 295 DCHECK(dispatcher_host_.get()); |
| 293 | 296 |
| 294 DCHECK(kNoCursor == ipc_cursor_id_ || value == NULL); | 297 DCHECK(kNoCursor == ipc_cursor_id_ || value == NULL); |
| 295 DCHECK_EQ(kNoTransaction, host_transaction_id_); | 298 DCHECK_EQ(kNoTransaction, host_transaction_id_); |
| 296 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 299 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 297 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 300 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 298 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 301 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 299 | 302 |
| 300 std::string value_copy; | 303 std::string value_copy; |
| 301 if (value && !value->empty()) | 304 if (value && !value->empty()) |
| 302 std::swap(value_copy, *value); | 305 std::swap(value_copy, value->bits); |
| 303 | 306 |
| 304 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue( | 307 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue( |
| 305 ipc_thread_id_, | 308 ipc_thread_id_, |
| 306 ipc_callbacks_id_, | 309 ipc_callbacks_id_, |
| 307 // TODO(alecflett): avoid a copy here. | 310 // TODO(alecflett): avoid a copy here. |
| 308 value_copy)); | 311 value_copy)); |
| 309 dispatcher_host_ = NULL; | 312 dispatcher_host_ = NULL; |
| 310 } | 313 } |
| 311 | 314 |
| 312 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { | 315 void IndexedDBCallbacks::OnSuccess(const IndexedDBKey& value) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 DCHECK_EQ(kNoDatabase, ipc_database_id_); | 348 DCHECK_EQ(kNoDatabase, ipc_database_id_); |
| 346 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); | 349 DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_); |
| 347 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); | 350 DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_); |
| 348 | 351 |
| 349 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined( | 352 dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessUndefined( |
| 350 ipc_thread_id_, ipc_callbacks_id_)); | 353 ipc_thread_id_, ipc_callbacks_id_)); |
| 351 dispatcher_host_ = NULL; | 354 dispatcher_host_ = NULL; |
| 352 } | 355 } |
| 353 | 356 |
| 354 } // namespace content | 357 } // namespace content |
| OLD | NEW |