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

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp

Issue 1963293002: Replacing Indexed DB Chromium IPC with Mojo Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactoring after Passing URLRequestContextGetter. Created 4 years, 4 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 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the 11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution. 12 * documentation and/or other materials provided with the distribution.
13 * 13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "modules/indexeddb/IDBObjectStore.h" 26 #include "modules/indexeddb/IDBObjectStore.h"
27 27
28 #include "Source/modules/indexeddb/indexed_db.mojom-blink.h"
28 #include "bindings/core/v8/ExceptionState.h" 29 #include "bindings/core/v8/ExceptionState.h"
29 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 30 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
30 #include "bindings/core/v8/ScriptState.h" 31 #include "bindings/core/v8/ScriptState.h"
31 #include "bindings/core/v8/SerializedScriptValueFactory.h" 32 #include "bindings/core/v8/SerializedScriptValueFactory.h"
32 #include "bindings/modules/v8/ToV8ForModules.h" 33 #include "bindings/modules/v8/ToV8ForModules.h"
33 #include "bindings/modules/v8/V8BindingForModules.h" 34 #include "bindings/modules/v8/V8BindingForModules.h"
34 #include "core/dom/DOMStringList.h" 35 #include "core/dom/DOMStringList.h"
35 #include "core/dom/ExceptionCode.h" 36 #include "core/dom/ExceptionCode.h"
36 #include "core/dom/ExecutionContext.h" 37 #include "core/dom/ExecutionContext.h"
37 #include "modules/indexeddb/IDBAny.h" 38 #include "modules/indexeddb/IDBAny.h"
38 #include "modules/indexeddb/IDBCursorWithValue.h" 39 #include "modules/indexeddb/IDBCursorWithValue.h"
39 #include "modules/indexeddb/IDBDatabase.h" 40 #include "modules/indexeddb/IDBDatabase.h"
41 #include "modules/indexeddb/IDBDatabaseProxy.h"
40 #include "modules/indexeddb/IDBKeyPath.h" 42 #include "modules/indexeddb/IDBKeyPath.h"
41 #include "modules/indexeddb/IDBTracing.h" 43 #include "modules/indexeddb/IDBTracing.h"
42 #include "modules/indexeddb/WebIDBCallbacksImpl.h"
43 #include "platform/SharedBuffer.h" 44 #include "platform/SharedBuffer.h"
44 #include "public/platform/WebBlobInfo.h" 45 #include "public/platform/WebBlobInfo.h"
45 #include "public/platform/WebData.h" 46 #include "public/platform/WebData.h"
46 #include "public/platform/WebVector.h" 47 #include "public/platform/WebVector.h"
47 #include "public/platform/modules/indexeddb/WebIDBKey.h" 48 #include "public/platform/modules/indexeddb/WebIDBKey.h"
48 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h" 49 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h"
49 #include <memory> 50 #include <memory>
50 #include <v8.h> 51 #include <v8.h>
51 52
52 using blink::WebBlobInfo; 53 using indexed_db::mojom::blink::CursorDirection;
53 using blink::WebIDBCallbacks; 54 using indexed_db::mojom::blink::KeyPtr;
54 using blink::WebIDBCursor; 55 using indexed_db::mojom::blink::KeyRangePtr;
55 using blink::WebIDBDatabase; 56 using indexed_db::mojom::blink::PutMode;
56 using blink::WebVector;
57 57
58 namespace blink { 58 namespace blink {
59 59
60 IDBObjectStore::IDBObjectStore(const IDBObjectStoreMetadata& metadata, IDBTransa ction* transaction) 60 IDBObjectStore::IDBObjectStore(const IDBObjectStoreMetadata& metadata, IDBTransa ction* transaction)
61 : m_metadata(metadata) 61 : m_metadata(metadata)
62 , m_transaction(transaction) 62 , m_transaction(transaction)
63 { 63 {
64 ASSERT(m_transaction); 64 ASSERT(m_transaction);
65 } 65 }
66 66
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 if (!keyRange) { 107 if (!keyRange) {
108 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage); 108 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage);
109 return nullptr; 109 return nullptr;
110 } 110 }
111 if (!backendDB()) { 111 if (!backendDB()) {
112 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 112 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
113 return nullptr; 113 return nullptr;
114 } 114 }
115 115
116 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 116 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
117 backendDB()->get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, key Range, false, WebIDBCallbacksImpl::create(request).release()); 117 indexed_db::mojom::blink::Database::GetCallback getCallback = convertToBaseC allback(WTF::bind(&IDBRequest::onGetResult, wrapWeakPersistent(request)));
118 backendDB()->Get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, key Range, false, getCallback);
118 return request; 119 return request;
119 } 120 }
120 121
121 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, ExceptionState& exceptionState) 122 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, ExceptionState& exceptionState)
122 { 123 {
123 return getAll(scriptState, keyRange, std::numeric_limits<uint32_t>::max(), e xceptionState); 124 return getAll(scriptState, keyRange, std::numeric_limits<uint32_t>::max(), e xceptionState);
124 } 125 }
125 126
126 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, unsigned long maxCount, ExceptionState& exceptionState) 127 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, unsigned long maxCount, ExceptionState& exceptionState)
127 { 128 {
(...skipping 15 matching lines...) Expand all
143 } 144 }
144 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState); 145 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState);
145 if (exceptionState.hadException()) 146 if (exceptionState.hadException())
146 return nullptr; 147 return nullptr;
147 if (!backendDB()) { 148 if (!backendDB()) {
148 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 149 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
149 return nullptr; 150 return nullptr;
150 } 151 }
151 152
152 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 153 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
153 backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false, WebIDBCallbacksImpl::create(request).release()); 154 backendDB()->GetAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false);
154 return request; 155 return request;
155 } 156 }
156 157
157 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, ExceptionState& exceptionState) 158 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, ExceptionState& exceptionState)
158 { 159 {
159 return getAllKeys(scriptState, keyRange, std::numeric_limits<uint32_t>::max( ), exceptionState); 160 return getAllKeys(scriptState, keyRange, std::numeric_limits<uint32_t>::max( ), exceptionState);
160 } 161 }
161 162
162 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, unsigned long maxCount, ExceptionState& exceptionState) 163 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, unsigned long maxCount, ExceptionState& exceptionState)
163 { 164 {
(...skipping 15 matching lines...) Expand all
179 } 180 }
180 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState); 181 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState);
181 if (exceptionState.hadException()) 182 if (exceptionState.hadException())
182 return nullptr; 183 return nullptr;
183 if (!backendDB()) { 184 if (!backendDB()) {
184 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 185 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
185 return nullptr; 186 return nullptr;
186 } 187 }
187 188
188 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 189 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
189 backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true, WebIDBCallbacksImpl::create(request).release()); 190 backendDB()->GetAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true);
190 return request; 191 return request;
191 } 192 }
192 193
193 static void generateIndexKeysForValue(v8::Isolate* isolate, const IDBIndexMetada ta& indexMetadata, const ScriptValue& objectValue, IDBObjectStore::IndexKeys* in dexKeys) 194 static void generateIndexKeysForValue(v8::Isolate* isolate, const IDBIndexMetada ta& indexMetadata, const ScriptValue& objectValue, IDBObjectStore::IndexKeys* in dexKeys)
194 { 195 {
195 ASSERT(indexKeys); 196 ASSERT(indexKeys);
196 NonThrowableExceptionState exceptionState; 197 NonThrowableExceptionState exceptionState;
197 IDBKey* indexKey = ScriptValue::to<IDBKey*>(isolate, objectValue, exceptionS tate, indexMetadata.keyPath); 198 IDBKey* indexKey = ScriptValue::to<IDBKey*>(isolate, objectValue, exceptionS tate, indexMetadata.keyPath);
198 199
199 if (!indexKey) 200 if (!indexKey)
(...skipping 10 matching lines...) Expand all
210 indexKey = IDBKey::createMultiEntryArray(indexKey->array()); 211 indexKey = IDBKey::createMultiEntryArray(indexKey->array());
211 212
212 for (size_t i = 0; i < indexKey->array().size(); ++i) 213 for (size_t i = 0; i < indexKey->array().size(); ++i)
213 indexKeys->append(indexKey->array()[i]); 214 indexKeys->append(indexKey->array()[i]);
214 } 215 }
215 } 216 }
216 217
217 IDBRequest* IDBObjectStore::add(ScriptState* scriptState, const ScriptValue& val ue, const ScriptValue& key, ExceptionState& exceptionState) 218 IDBRequest* IDBObjectStore::add(ScriptState* scriptState, const ScriptValue& val ue, const ScriptValue& key, ExceptionState& exceptionState)
218 { 219 {
219 IDB_TRACE("IDBObjectStore::add"); 220 IDB_TRACE("IDBObjectStore::add");
220 return put(scriptState, WebIDBPutModeAddOnly, IDBAny::create(this), value, k ey, exceptionState); 221 return put(scriptState, PutMode::AddOnly, IDBAny::create(this), value, key, exceptionState);
221 } 222 }
222 223
223 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, const ScriptValue& val ue, const ScriptValue& key, ExceptionState& exceptionState) 224 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, const ScriptValue& val ue, const ScriptValue& key, ExceptionState& exceptionState)
224 { 225 {
225 IDB_TRACE("IDBObjectStore::put"); 226 IDB_TRACE("IDBObjectStore::put");
226 return put(scriptState, WebIDBPutModeAddOrUpdate, IDBAny::create(this), valu e, key, exceptionState); 227 return put(scriptState, PutMode::AddOrUpdate, IDBAny::create(this), value, k ey, exceptionState);
227 } 228 }
228 229
229 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode, IDBAny* source, const ScriptValue& value, const ScriptValue& keyValue, Exceptio nState& exceptionState) 230 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, PutMode putMode, IDBAn y* source, const ScriptValue& value, const ScriptValue& keyValue, ExceptionState & exceptionState)
230 { 231 {
231 IDBKey* key = keyValue.isUndefined() ? nullptr : ScriptValue::to<IDBKey*>(sc riptState->isolate(), keyValue, exceptionState); 232 IDBKey* key = keyValue.isUndefined() ? nullptr : ScriptValue::to<IDBKey*>(sc riptState->isolate(), keyValue, exceptionState);
232 if (exceptionState.hadException()) 233 if (exceptionState.hadException())
233 return nullptr; 234 return nullptr;
234 return put(scriptState, putMode, source, value, key, exceptionState); 235 return put(scriptState, putMode, source, value, key, exceptionState);
235 } 236 }
236 237
237 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode, IDBAny* source, const ScriptValue& value, IDBKey* key, ExceptionState& exceptio nState) 238 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, PutMode putMode, IDBAn y* source, const ScriptValue& value, IDBKey* key, ExceptionState& exceptionState )
238 { 239 {
239 if (isDeleted()) { 240 if (isDeleted()) {
240 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 241 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
241 return nullptr; 242 return nullptr;
242 } 243 }
243 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 244 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
244 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 245 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
245 return nullptr; 246 return nullptr;
246 } 247 }
247 if (!m_transaction->isActive()) { 248 if (!m_transaction->isActive()) {
(...skipping 14 matching lines...) Expand all
262 263
263 // Keys that need to be extracted must be taken from a clone so that 264 // Keys that need to be extracted must be taken from a clone so that
264 // side effects (i.e. getters) are not triggered. Construct the 265 // side effects (i.e. getters) are not triggered. Construct the
265 // clone lazily since the operation may be expensive. 266 // clone lazily since the operation may be expensive.
266 ScriptValue clone; 267 ScriptValue clone;
267 268
268 const IDBKeyPath& keyPath = m_metadata.keyPath; 269 const IDBKeyPath& keyPath = m_metadata.keyPath;
269 const bool usesInLineKeys = !keyPath.isNull(); 270 const bool usesInLineKeys = !keyPath.isNull();
270 const bool hasKeyGenerator = autoIncrement(); 271 const bool hasKeyGenerator = autoIncrement();
271 272
272 if (putMode != WebIDBPutModeCursorUpdate && usesInLineKeys && key) { 273 if (putMode != PutMode::CursorUpdate && usesInLineKeys && key) {
273 exceptionState.throwDOMException(DataError, "The object store uses in-li ne keys and the key parameter was provided."); 274 exceptionState.throwDOMException(DataError, "The object store uses in-li ne keys and the key parameter was provided.");
274 return nullptr; 275 return nullptr;
275 } 276 }
276 277
277 // This test logically belongs in IDBCursor, but must operate on the cloned value. 278 // This test logically belongs in IDBCursor, but must operate on the cloned value.
278 if (putMode == WebIDBPutModeCursorUpdate && usesInLineKeys) { 279 if (putMode == PutMode::CursorUpdate && usesInLineKeys) {
279 ASSERT(key); 280 ASSERT(key);
280 if (clone.isEmpty()) 281 if (clone.isEmpty())
281 clone = deserializeScriptValue(scriptState, serializedValue.get(), & blobInfo); 282 clone = deserializeScriptValue(scriptState, serializedValue.get(), & blobInfo);
282 IDBKey* keyPathKey = ScriptValue::to<IDBKey*>(scriptState->isolate(), cl one, exceptionState, keyPath); 283 IDBKey* keyPathKey = ScriptValue::to<IDBKey*>(scriptState->isolate(), cl one, exceptionState, keyPath);
283 if (exceptionState.hadException()) 284 if (exceptionState.hadException())
284 return nullptr; 285 return nullptr;
285 if (!keyPathKey || !keyPathKey->isEqual(key)) { 286 if (!keyPathKey || !keyPathKey->isEqual(key)) {
286 exceptionState.throwDOMException(DataError, "The effective object st ore of this cursor uses in-line keys and evaluating the key path of the value pa rameter results in a different value than the cursor's effective key."); 287 exceptionState.throwDOMException(DataError, "The effective object st ore of this cursor uses in-line keys and evaluating the key path of the value pa rameter results in a different value than the cursor's effective key.");
287 return nullptr; 288 return nullptr;
288 } 289 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 for (const auto& it : m_metadata.indexes) { 331 for (const auto& it : m_metadata.indexes) {
331 if (clone.isEmpty()) 332 if (clone.isEmpty())
332 clone = deserializeScriptValue(scriptState, serializedValue.get(), & blobInfo); 333 clone = deserializeScriptValue(scriptState, serializedValue.get(), & blobInfo);
333 IndexKeys keys; 334 IndexKeys keys;
334 generateIndexKeysForValue(scriptState->isolate(), it.value, clone, &keys ); 335 generateIndexKeysForValue(scriptState->isolate(), it.value, clone, &keys );
335 indexIds.append(it.key); 336 indexIds.append(it.key);
336 indexKeys.append(keys); 337 indexKeys.append(keys);
337 } 338 }
338 339
339 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction. get()); 340 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction. get());
340 Vector<char> wireBytes; 341 #if 0
341 serializedValue->toWireBytes(wireBytes); 342 // Should we be using toWireButes, or instead using Mojo's built-in
342 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); 343 // serialization?
344 Vector<int8_t> valueWireBytes;
345 serializedValue->toWireBytes(valueWireBytes);
343 346
344 backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, key, static_cast<WebIDBPutMode>(putMode), WebIDBCallbacksImpl::create(request).r elease(), indexIds, indexKeys); 347 backendDB()->Put(m_transaction->id(), id(), std::move(valueWireBytes), creat eBlobInfo(blobInfo), createKey(key), putMode, std::move(indexIds), std::move(ind exKeys));
348 #endif
345 return request; 349 return request;
346 } 350 }
347 351
348 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip tValue& key, ExceptionState& exceptionState) 352 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip tValue& key, ExceptionState& exceptionState)
349 { 353 {
350 IDB_TRACE("IDBObjectStore::delete"); 354 IDB_TRACE("IDBObjectStore::delete");
351 if (isDeleted()) { 355 if (isDeleted()) {
352 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 356 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
353 return nullptr; 357 return nullptr;
354 } 358 }
(...skipping 16 matching lines...) Expand all
371 if (!keyRange) { 375 if (!keyRange) {
372 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage); 376 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage);
373 return nullptr; 377 return nullptr;
374 } 378 }
375 if (!backendDB()) { 379 if (!backendDB()) {
376 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 380 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
377 return nullptr; 381 return nullptr;
378 } 382 }
379 383
380 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 384 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
381 backendDB()->deleteRange(m_transaction->id(), id(), keyRange, WebIDBCallback sImpl::create(request).release()); 385 backendDB()->DeleteRange(m_transaction->id(), id(), keyRange);
382 return request; 386 return request;
383 } 387 }
384 388
385 IDBRequest* IDBObjectStore::clear(ScriptState* scriptState, ExceptionState& exce ptionState) 389 IDBRequest* IDBObjectStore::clear(ScriptState* scriptState, ExceptionState& exce ptionState)
386 { 390 {
387 IDB_TRACE("IDBObjectStore::clear"); 391 IDB_TRACE("IDBObjectStore::clear");
388 if (isDeleted()) { 392 if (isDeleted()) {
389 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 393 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
390 return nullptr; 394 return nullptr;
391 } 395 }
392 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 396 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
393 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 397 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
394 return nullptr; 398 return nullptr;
395 } 399 }
396 if (!m_transaction->isActive()) { 400 if (!m_transaction->isActive()) {
397 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 401 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
398 return nullptr; 402 return nullptr;
399 } 403 }
400 if (m_transaction->isReadOnly()) { 404 if (m_transaction->isReadOnly()) {
401 exceptionState.throwDOMException(ReadOnlyError, IDBDatabase::transaction ReadOnlyErrorMessage); 405 exceptionState.throwDOMException(ReadOnlyError, IDBDatabase::transaction ReadOnlyErrorMessage);
402 return nullptr; 406 return nullptr;
403 } 407 }
404 if (!backendDB()) { 408 if (!backendDB()) {
405 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 409 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
406 return nullptr; 410 return nullptr;
407 } 411 }
408 412
409 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 413 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
410 backendDB()->clear(m_transaction->id(), id(), WebIDBCallbacksImpl::create(re quest).release()); 414 backendDB()->Clear(m_transaction->id(), id());
411 return request; 415 return request;
412 } 416 }
413 417
414 namespace { 418 namespace {
415 // This class creates the index keys for a given index by extracting 419 // This class creates the index keys for a given index by extracting
416 // them from the SerializedScriptValue, for all the existing values in 420 // them from the SerializedScriptValue, for all the existing values in
417 // the objectStore. It only needs to be kept alive by virtue of being 421 // the objectStore. It only needs to be kept alive by virtue of being
418 // a listener on an IDBRequest object, in the same way that JavaScript 422 // a listener on an IDBRequest object, in the same way that JavaScript
419 // cursor success handlers are kept alive. 423 // cursor success handlers are kept alive.
420 class IndexPopulator final : public EventListener { 424 class IndexPopulator final : public EventListener {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 472
469 IDBKey* primaryKey = cursor->idbPrimaryKey(); 473 IDBKey* primaryKey = cursor->idbPrimaryKey();
470 ScriptValue value = cursor->value(m_scriptState.get()); 474 ScriptValue value = cursor->value(m_scriptState.get());
471 475
472 IDBObjectStore::IndexKeys indexKeys; 476 IDBObjectStore::IndexKeys indexKeys;
473 generateIndexKeysForValue(m_scriptState->isolate(), m_indexMetadata, value, &indexKeys); 477 generateIndexKeysForValue(m_scriptState->isolate(), m_indexMetadata, value, &indexKeys);
474 478
475 HeapVector<IDBObjectStore::IndexKeys> indexKeysList; 479 HeapVector<IDBObjectStore::IndexKeys> indexKeysList;
476 indexKeysList.append(indexKeys); 480 indexKeysList.append(indexKeys);
477 481
478 m_database->backend()->setIndexKeys(m_transactionId, m_objectStoreId , primaryKey, indexIds, indexKeysList); 482 m_database->backend()->SetIndexKeys(m_transactionId, m_objectStoreId , primaryKey, indexIds, indexKeysList);
479 } else { 483 } else {
480 // Now that we are done indexing, tell the backend to go 484 // Now that we are done indexing, tell the backend to go
481 // back to processing tasks of type NormalTask. 485 // back to processing tasks of type NormalTask.
482 m_database->backend()->setIndexesReady(m_transactionId, m_objectStor eId, indexIds); 486 m_database->backend()->SetIndexesReady(m_transactionId, m_objectStor eId, indexIds);
483 m_database.clear(); 487 m_database.clear();
484 } 488 }
485 489
486 } 490 }
487 491
488 RefPtr<ScriptState> m_scriptState; 492 RefPtr<ScriptState> m_scriptState;
489 Member<IDBDatabase> m_database; 493 Member<IDBDatabase> m_database;
490 const int64_t m_transactionId; 494 const int64_t m_transactionId;
491 const int64_t m_objectStoreId; 495 const int64_t m_objectStoreId;
492 const IDBIndexMetadata m_indexMetadata; 496 const IDBIndexMetadata m_indexMetadata;
493 }; 497 };
494 } // namespace 498 } // namespace
495 499
496 IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& na me, const IDBKeyPath& keyPath, const IDBIndexParameters& options, ExceptionState & exceptionState) 500 IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& na me, const StringOrStringSequence& keyPathSeq, const IDBIndexParameters& options, ExceptionState& exceptionState)
497 { 501 {
498 IDB_TRACE("IDBObjectStore::createIndex"); 502 IDB_TRACE("IDBObjectStore::createIndex");
499 if (!m_transaction->isVersionChange()) { 503 if (!m_transaction->isVersionChange()) {
500 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::notVers ionChangeTransactionErrorMessage); 504 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::notVers ionChangeTransactionErrorMessage);
501 return nullptr; 505 return nullptr;
502 } 506 }
503 if (isDeleted()) { 507 if (isDeleted()) {
504 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 508 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
505 return nullptr; 509 return nullptr;
506 } 510 }
507 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 511 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
508 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 512 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
509 return nullptr; 513 return nullptr;
510 } 514 }
511 if (!m_transaction->isActive()) { 515 if (!m_transaction->isActive()) {
512 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 516 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
513 return nullptr; 517 return nullptr;
514 } 518 }
519 IDBKeyPath keyPath(keyPathSeq);
515 if (!keyPath.isValid()) { 520 if (!keyPath.isValid()) {
516 exceptionState.throwDOMException(SyntaxError, "The keyPath argument cont ains an invalid key path."); 521 exceptionState.throwDOMException(SyntaxError, "The keyPath argument cont ains an invalid key path.");
517 return nullptr; 522 return nullptr;
518 } 523 }
519 if (containsIndex(name)) { 524 if (containsIndex(name)) {
520 exceptionState.throwDOMException(ConstraintError, "An index with the spe cified name already exists."); 525 exceptionState.throwDOMException(ConstraintError, "An index with the spe cified name already exists.");
521 return nullptr; 526 return nullptr;
522 } 527 }
523 528
524 if (keyPath.getType() == IDBKeyPath::ArrayType && options.multiEntry()) { 529 if (keyPath.getType() == IDBKeyPath::ArrayType && options.multiEntry()) {
525 exceptionState.throwDOMException(InvalidAccessError, "The keyPath argume nt was an array and the multiEntry option is true."); 530 exceptionState.throwDOMException(InvalidAccessError, "The keyPath argume nt was an array and the multiEntry option is true.");
526 return nullptr; 531 return nullptr;
527 } 532 }
528 if (!backendDB()) { 533 if (!backendDB()) {
529 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 534 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
530 return nullptr; 535 return nullptr;
531 } 536 }
532 537
533 int64_t indexId = m_metadata.maxIndexId + 1; 538 int64_t indexId = m_metadata.maxIndexId + 1;
534 backendDB()->createIndex(m_transaction->id(), id(), indexId, name, keyPath, options.unique(), options.multiEntry()); 539 backendDB()->CreateIndex(m_transaction->id(), id(), indexId, name, keyPath, options.unique(), options.multiEntry());
535 540
536 ++m_metadata.maxIndexId; 541 ++m_metadata.maxIndexId;
537 542
538 IDBIndexMetadata metadata(name, indexId, keyPath, options.unique(), options. multiEntry()); 543 IDBIndexMetadata metadata(name, indexId, keyPath, options.unique(), options. multiEntry());
539 IDBIndex* index = IDBIndex::create(metadata, this, m_transaction.get()); 544 IDBIndex* index = IDBIndex::create(metadata, this, m_transaction.get());
540 m_indexMap.set(name, index); 545 m_indexMap.set(name, index);
541 m_createdIndexes.add(index); 546 m_createdIndexes.add(index);
542 m_metadata.indexes.set(indexId, metadata); 547 m_metadata.indexes.set(indexId, metadata);
543 m_transaction->db()->indexCreated(id(), metadata); 548 m_transaction->db()->indexCreated(id(), metadata);
544 549
545 ASSERT(!exceptionState.hadException()); 550 ASSERT(!exceptionState.hadException());
546 if (exceptionState.hadException()) 551 if (exceptionState.hadException())
547 return nullptr; 552 return nullptr;
548 553
549 IDBRequest* indexRequest = openCursor(scriptState, nullptr, WebIDBCursorDire ctionNext, WebIDBTaskTypePreemptive); 554 IDBRequest* indexRequest = openCursor(scriptState, nullptr, CursorDirection: :Next, indexed_db::mojom::blink::TaskType::Preemptive);
550 indexRequest->preventPropagation(); 555 indexRequest->preventPropagation();
551 556
552 // This is kept alive by being the success handler of the request, which is in turn kept alive by the owning transaction. 557 // This is kept alive by being the success handler of the request, which is in turn kept alive by the owning transaction.
553 IndexPopulator* indexPopulator = IndexPopulator::create(scriptState, transac tion()->db(), m_transaction->id(), id(), metadata); 558 IndexPopulator* indexPopulator = IndexPopulator::create(scriptState, transac tion()->db(), m_transaction->id(), id(), metadata);
554 indexRequest->setOnsuccess(indexPopulator); 559 indexRequest->setOnsuccess(indexPopulator);
555 return index; 560 return index;
556 } 561 }
557 562
558 IDBIndex* IDBObjectStore::index(const String& name, ExceptionState& exceptionSta te) 563 IDBIndex* IDBObjectStore::index(const String& name, ExceptionState& exceptionSta te)
559 { 564 {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 int64_t indexId = findIndexId(name); 619 int64_t indexId = findIndexId(name);
615 if (indexId == IDBIndexMetadata::InvalidId) { 620 if (indexId == IDBIndexMetadata::InvalidId) {
616 exceptionState.throwDOMException(NotFoundError, IDBDatabase::noSuchIndex ErrorMessage); 621 exceptionState.throwDOMException(NotFoundError, IDBDatabase::noSuchIndex ErrorMessage);
617 return; 622 return;
618 } 623 }
619 if (!backendDB()) { 624 if (!backendDB()) {
620 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 625 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
621 return; 626 return;
622 } 627 }
623 628
624 backendDB()->deleteIndex(m_transaction->id(), id(), indexId); 629 backendDB()->DeleteIndex(m_transaction->id(), id(), indexId);
625 630
626 m_metadata.indexes.remove(indexId); 631 m_metadata.indexes.remove(indexId);
627 m_transaction->db()->indexDeleted(id(), indexId); 632 m_transaction->db()->indexDeleted(id(), indexId);
628 IDBIndexMap::iterator it = m_indexMap.find(name); 633 IDBIndexMap::iterator it = m_indexMap.find(name);
629 if (it != m_indexMap.end()) { 634 if (it != m_indexMap.end()) {
630 it->value->markDeleted(); 635 it->value->markDeleted();
631 m_indexMap.remove(name); 636 m_indexMap.remove(name);
632 } 637 }
633 } 638 }
634 639
635 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, const ScriptVal ue& range, const String& directionString, ExceptionState& exceptionState) 640 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, const ScriptVal ue& range, const String& directionString, ExceptionState& exceptionState)
636 { 641 {
637 IDB_TRACE("IDBObjectStore::openCursor"); 642 IDB_TRACE("IDBObjectStore::openCursor");
638 if (isDeleted()) { 643 if (isDeleted()) {
639 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 644 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
640 return nullptr; 645 return nullptr;
641 } 646 }
642 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 647 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
643 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 648 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
644 return nullptr; 649 return nullptr;
645 } 650 }
646 if (!m_transaction->isActive()) { 651 if (!m_transaction->isActive()) {
647 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 652 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
648 return nullptr; 653 return nullptr;
649 } 654 }
650 655
651 WebIDBCursorDirection direction = IDBCursor::stringToDirection(directionStri ng); 656 indexed_db::mojom::blink::CursorDirection direction = IDBCursor::stringToDir ection(directionString);
652 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState); 657 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState);
653 if (exceptionState.hadException()) 658 if (exceptionState.hadException())
654 return nullptr; 659 return nullptr;
655 660
656 if (!backendDB()) { 661 if (!backendDB()) {
657 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 662 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
658 return nullptr; 663 return nullptr;
659 } 664 }
660 665
661 return openCursor(scriptState, keyRange, direction, WebIDBTaskTypeNormal); 666 return openCursor(scriptState, keyRange, direction, indexed_db::mojom::blink ::TaskType::Normal);
662 } 667 }
663 668
664 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra nge, WebIDBCursorDirection direction, WebIDBTaskType taskType) 669 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra nge, CursorDirection direction, indexed_db::mojom::blink::TaskType taskType)
665 { 670 {
666 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 671 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
667 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); 672 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction);
668 673
669 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).rele ase()); 674 backendDB()->OpenCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, range, direction, false, taskType);
670 return request; 675 return request;
671 } 676 }
672 677
673 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script Value& range, const String& directionString, ExceptionState& exceptionState) 678 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script Value& range, const String& directionString, ExceptionState& exceptionState)
674 { 679 {
675 IDB_TRACE("IDBObjectStore::openKeyCursor"); 680 IDB_TRACE("IDBObjectStore::openKeyCursor");
676 if (isDeleted()) { 681 if (isDeleted()) {
677 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 682 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
678 return nullptr; 683 return nullptr;
679 } 684 }
680 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 685 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
681 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 686 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
682 return nullptr; 687 return nullptr;
683 } 688 }
684 if (!m_transaction->isActive()) { 689 if (!m_transaction->isActive()) {
685 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 690 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
686 return nullptr; 691 return nullptr;
687 } 692 }
688 693
689 WebIDBCursorDirection direction = IDBCursor::stringToDirection(directionStri ng); 694 CursorDirection direction = IDBCursor::stringToDirection(directionString);
690 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState); 695 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState);
691 if (exceptionState.hadException()) 696 if (exceptionState.hadException())
692 return nullptr; 697 return nullptr;
693 698
694 if (!backendDB()) { 699 if (!backendDB()) {
695 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 700 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
696 return nullptr; 701 return nullptr;
697 } 702 }
698 703
699 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 704 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
700 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); 705 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction);
701 706
702 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create (request).release()); 707 backendDB()->OpenCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, keyRange, direction, true, indexed_db::mojom::blink::TaskType::Normal);
703 return request; 708 return request;
704 } 709 }
705 710
706 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r ange, ExceptionState& exceptionState) 711 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r ange, ExceptionState& exceptionState)
707 { 712 {
708 IDB_TRACE("IDBObjectStore::count"); 713 IDB_TRACE("IDBObjectStore::count");
709 if (isDeleted()) { 714 if (isDeleted()) {
710 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 715 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
711 return nullptr; 716 return nullptr;
712 } 717 }
713 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 718 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
714 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 719 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
715 return nullptr; 720 return nullptr;
716 } 721 }
717 if (!m_transaction->isActive()) { 722 if (!m_transaction->isActive()) {
718 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 723 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
719 return nullptr; 724 return nullptr;
720 } 725 }
721 726
722 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState); 727 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState);
723 if (exceptionState.hadException()) 728 if (exceptionState.hadException())
724 return nullptr; 729 return nullptr;
725 730
726 if (!backendDB()) { 731 if (!backendDB()) {
727 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 732 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
728 return nullptr; 733 return nullptr;
729 } 734 }
730 735
731 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 736 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
732 backendDB()->count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, k eyRange, WebIDBCallbacksImpl::create(request).release()); 737 backendDB()->Count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, k eyRange);
733 return request; 738 return request;
734 } 739 }
735 740
736 void IDBObjectStore::abort() 741 void IDBObjectStore::abort()
737 { 742 {
738 for (auto& index : m_createdIndexes) 743 for (auto& index : m_createdIndexes)
739 index->markDeleted(); 744 index->markDeleted();
740 } 745 }
741 746
742 void IDBObjectStore::transactionFinished() 747 void IDBObjectStore::transactionFinished()
(...skipping 10 matching lines...) Expand all
753 { 758 {
754 for (const auto& it : m_metadata.indexes) { 759 for (const auto& it : m_metadata.indexes) {
755 if (it.value.name == name) { 760 if (it.value.name == name) {
756 ASSERT(it.key != IDBIndexMetadata::InvalidId); 761 ASSERT(it.key != IDBIndexMetadata::InvalidId);
757 return it.key; 762 return it.key;
758 } 763 }
759 } 764 }
760 return IDBIndexMetadata::InvalidId; 765 return IDBIndexMetadata::InvalidId;
761 } 766 }
762 767
763 WebIDBDatabase* IDBObjectStore::backendDB() const 768 IDBDatabaseProxy* IDBObjectStore::backendDB() const
764 { 769 {
765 return m_transaction->backendDB(); 770 return m_transaction->backendDB();
766 } 771 }
767 772
768 } // namespace blink 773 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698