OLD | NEW |
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 |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 indexKey = IDBKey::createMultiEntryArray(indexKey->array()); | 136 indexKey = IDBKey::createMultiEntryArray(indexKey->array()); |
137 | 137 |
138 for (size_t i = 0; i < indexKey->array().size(); ++i) | 138 for (size_t i = 0; i < indexKey->array().size(); ++i) |
139 indexKeys->append(indexKey->array()[i]); | 139 indexKeys->append(indexKey->array()[i]); |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 IDBRequest* IDBObjectStore::add(ScriptState* scriptState, ScriptValue& value, co
nst ScriptValue& key, ExceptionState& exceptionState) | 143 IDBRequest* IDBObjectStore::add(ScriptState* scriptState, ScriptValue& value, co
nst ScriptValue& key, ExceptionState& exceptionState) |
144 { | 144 { |
145 IDB_TRACE("IDBObjectStore::add"); | 145 IDB_TRACE("IDBObjectStore::add"); |
146 return put(scriptState, WebIDBDatabase::AddOnly, IDBAny::create(this), value
, key, exceptionState); | 146 return put(scriptState, blink::WebIDBPutModeAddOnly, IDBAny::create(this), v
alue, key, exceptionState); |
147 } | 147 } |
148 | 148 |
149 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, ScriptValue& value, co
nst ScriptValue& key, ExceptionState& exceptionState) | 149 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, ScriptValue& value, co
nst ScriptValue& key, ExceptionState& exceptionState) |
150 { | 150 { |
151 IDB_TRACE("IDBObjectStore::put"); | 151 IDB_TRACE("IDBObjectStore::put"); |
152 return put(scriptState, WebIDBDatabase::AddOrUpdate, IDBAny::create(this), v
alue, key, exceptionState); | 152 return put(scriptState, blink::WebIDBPutModeAddOrUpdate, IDBAny::create(this
), value, key, exceptionState); |
153 } | 153 } |
154 | 154 |
155 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBDatabase::PutMod
e putMode, IDBAny* source, ScriptValue& value, const ScriptValue& keyValue, Exce
ptionState& exceptionState) | 155 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, blink::WebIDBPutMode p
utMode, IDBAny* source, ScriptValue& value, const ScriptValue& keyValue, Excepti
onState& exceptionState) |
156 { | 156 { |
157 IDBKey* key = keyValue.isUndefined() ? nullptr : scriptValueToIDBKey(scriptS
tate->isolate(), keyValue); | 157 IDBKey* key = keyValue.isUndefined() ? nullptr : scriptValueToIDBKey(scriptS
tate->isolate(), keyValue); |
158 return put(scriptState, putMode, source, value, key, exceptionState); | 158 return put(scriptState, putMode, source, value, key, exceptionState); |
159 } | 159 } |
160 | 160 |
161 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBDatabase::PutMod
e putMode, IDBAny* source, ScriptValue& value, IDBKey* key, ExceptionState& exce
ptionState) | 161 IDBRequest* IDBObjectStore::put(ScriptState* scriptState, blink::WebIDBPutMode p
utMode, IDBAny* source, ScriptValue& value, IDBKey* key, ExceptionState& excepti
onState) |
162 { | 162 { |
163 if (isDeleted()) { | 163 if (isDeleted()) { |
164 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 164 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
165 return 0; | 165 return 0; |
166 } | 166 } |
167 if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 167 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
168 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 168 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
169 return 0; | 169 return 0; |
170 } | 170 } |
171 if (!m_transaction->isActive()) { | 171 if (!m_transaction->isActive()) { |
172 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 172 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
173 return 0; | 173 return 0; |
174 } | 174 } |
175 if (m_transaction->isReadOnly()) { | 175 if (m_transaction->isReadOnly()) { |
176 exceptionState.throwDOMException(ReadOnlyError, IDBDatabase::transaction
ReadOnlyErrorMessage); | 176 exceptionState.throwDOMException(ReadOnlyError, IDBDatabase::transaction
ReadOnlyErrorMessage); |
177 return 0; | 177 return 0; |
178 } | 178 } |
179 | 179 |
180 Vector<WebBlobInfo> blobInfo; | 180 Vector<WebBlobInfo> blobInfo; |
181 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat
e(value, &blobInfo, exceptionState, scriptState->isolate()); | 181 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat
e(value, &blobInfo, exceptionState, scriptState->isolate()); |
182 if (exceptionState.hadException()) | 182 if (exceptionState.hadException()) |
183 return 0; | 183 return 0; |
184 | 184 |
185 const IDBKeyPath& keyPath = m_metadata.keyPath; | 185 const IDBKeyPath& keyPath = m_metadata.keyPath; |
186 const bool usesInLineKeys = !keyPath.isNull(); | 186 const bool usesInLineKeys = !keyPath.isNull(); |
187 const bool hasKeyGenerator = autoIncrement(); | 187 const bool hasKeyGenerator = autoIncrement(); |
188 | 188 |
189 if (putMode != WebIDBDatabase::CursorUpdate && usesInLineKeys && key) { | 189 if (putMode != blink::WebIDBPutModeCursorUpdate && usesInLineKeys && key) { |
190 exceptionState.throwDOMException(DataError, "The object store uses in-li
ne keys and the key parameter was provided."); | 190 exceptionState.throwDOMException(DataError, "The object store uses in-li
ne keys and the key parameter was provided."); |
191 return 0; | 191 return 0; |
192 } | 192 } |
193 if (!usesInLineKeys && !hasKeyGenerator && !key) { | 193 if (!usesInLineKeys && !hasKeyGenerator && !key) { |
194 exceptionState.throwDOMException(DataError, "The object store uses out-o
f-line keys and has no key generator and the key parameter was not provided."); | 194 exceptionState.throwDOMException(DataError, "The object store uses out-o
f-line keys and has no key generator and the key parameter was not provided."); |
195 return 0; | 195 return 0; |
196 } | 196 } |
197 if (usesInLineKeys) { | 197 if (usesInLineKeys) { |
198 IDBKey* keyPathKey = createIDBKeyFromScriptValueAndKeyPath(scriptState->
isolate(), value, keyPath); | 198 IDBKey* keyPathKey = createIDBKeyFromScriptValueAndKeyPath(scriptState->
isolate(), value, keyPath); |
199 if (keyPathKey && !keyPathKey->isValid()) { | 199 if (keyPathKey && !keyPathKey->isValid()) { |
(...skipping 30 matching lines...) Expand all Loading... |
230 generateIndexKeysForValue(scriptState->isolate(), it->value, value, &key
s); | 230 generateIndexKeysForValue(scriptState->isolate(), it->value, value, &key
s); |
231 indexIds.append(it->key); | 231 indexIds.append(it->key); |
232 indexKeys.append(keys); | 232 indexKeys.append(keys); |
233 } | 233 } |
234 | 234 |
235 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction.
get()); | 235 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction.
get()); |
236 Vector<char> wireBytes; | 236 Vector<char> wireBytes; |
237 serializedValue->toWireBytes(wireBytes); | 237 serializedValue->toWireBytes(wireBytes); |
238 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); | 238 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); |
239 | 239 |
240 backendDB()->put(m_transaction->id(), id(), blink::WebData(valueBuffer), blo
bInfo, key, static_cast<WebIDBDatabase::PutMode>(putMode), WebIDBCallbacksImpl::
create(request).leakPtr(), indexIds, indexKeys); | 240 backendDB()->put(m_transaction->id(), id(), blink::WebData(valueBuffer), blo
bInfo, key, static_cast<blink::WebIDBPutMode>(putMode), WebIDBCallbacksImpl::cre
ate(request).leakPtr(), indexIds, indexKeys); |
241 return request; | 241 return request; |
242 } | 242 } |
243 | 243 |
244 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip
tValue& key, ExceptionState& exceptionState) | 244 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip
tValue& key, ExceptionState& exceptionState) |
245 { | 245 { |
246 IDB_TRACE("IDBObjectStore::delete"); | 246 IDB_TRACE("IDBObjectStore::delete"); |
247 if (isDeleted()) { | 247 if (isDeleted()) { |
248 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 248 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
249 return 0; | 249 return 0; |
250 } | 250 } |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 IDBIndexMetadata metadata(name, indexId, keyPath, unique, multiEntry); | 443 IDBIndexMetadata metadata(name, indexId, keyPath, unique, multiEntry); |
444 IDBIndex* index = IDBIndex::create(metadata, this, m_transaction.get()); | 444 IDBIndex* index = IDBIndex::create(metadata, this, m_transaction.get()); |
445 m_indexMap.set(name, index); | 445 m_indexMap.set(name, index); |
446 m_metadata.indexes.set(indexId, metadata); | 446 m_metadata.indexes.set(indexId, metadata); |
447 m_transaction->db()->indexCreated(id(), metadata); | 447 m_transaction->db()->indexCreated(id(), metadata); |
448 | 448 |
449 ASSERT(!exceptionState.hadException()); | 449 ASSERT(!exceptionState.hadException()); |
450 if (exceptionState.hadException()) | 450 if (exceptionState.hadException()) |
451 return 0; | 451 return 0; |
452 | 452 |
453 IDBRequest* indexRequest = openCursor(scriptState, static_cast<IDBKeyRange*>
(0), blink::WebIDBCursor::Next, WebIDBDatabase::PreemptiveTask); | 453 IDBRequest* indexRequest = openCursor(scriptState, static_cast<IDBKeyRange*>
(0), blink::WebIDBCursorDirectionNext, blink::WebIDBTaskTypePreemptive); |
454 indexRequest->preventPropagation(); | 454 indexRequest->preventPropagation(); |
455 | 455 |
456 // This is kept alive by being the success handler of the request, which is
in turn kept alive by the owning transaction. | 456 // This is kept alive by being the success handler of the request, which is
in turn kept alive by the owning transaction. |
457 RefPtr<IndexPopulator> indexPopulator = IndexPopulator::create(scriptState,
transaction()->db(), m_transaction->id(), id(), metadata); | 457 RefPtr<IndexPopulator> indexPopulator = IndexPopulator::create(scriptState,
transaction()->db(), m_transaction->id(), id(), metadata); |
458 indexRequest->setOnsuccess(indexPopulator); | 458 indexRequest->setOnsuccess(indexPopulator); |
459 return index; | 459 return index; |
460 } | 460 } |
461 | 461 |
462 IDBIndex* IDBObjectStore::index(const String& name, ExceptionState& exceptionSta
te) | 462 IDBIndex* IDBObjectStore::index(const String& name, ExceptionState& exceptionSta
te) |
463 { | 463 { |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
545 } | 545 } |
546 if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 546 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
547 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 547 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
548 return 0; | 548 return 0; |
549 } | 549 } |
550 if (!m_transaction->isActive()) { | 550 if (!m_transaction->isActive()) { |
551 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 551 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
552 return 0; | 552 return 0; |
553 } | 553 } |
554 | 554 |
555 WebIDBCursor::Direction direction = IDBCursor::stringToDirection(directionSt
ring, exceptionState); | 555 blink::WebIDBCursorDirection direction = IDBCursor::stringToDirection(direct
ionString, exceptionState); |
556 if (exceptionState.hadException()) | 556 if (exceptionState.hadException()) |
557 return 0; | 557 return 0; |
558 | 558 |
559 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); | 559 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); |
560 if (exceptionState.hadException()) | 560 if (exceptionState.hadException()) |
561 return 0; | 561 return 0; |
562 | 562 |
563 if (!backendDB()) { | 563 if (!backendDB()) { |
564 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); | 564 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); |
565 return 0; | 565 return 0; |
566 } | 566 } |
567 | 567 |
568 return openCursor(scriptState, keyRange, direction, WebIDBDatabase::NormalTa
sk); | 568 return openCursor(scriptState, keyRange, direction, blink::WebIDBTaskTypeNor
mal); |
569 } | 569 } |
570 | 570 |
571 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra
nge, WebIDBCursor::Direction direction, WebIDBDatabase::TaskType taskType) | 571 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra
nge, blink::WebIDBCursorDirection direction, blink::WebIDBTaskType taskType) |
572 { | 572 { |
573 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); | 573 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); |
574 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); | 574 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); |
575 | 575 |
576 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).leak
Ptr()); | 576 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).leak
Ptr()); |
577 return request; | 577 return request; |
578 } | 578 } |
579 | 579 |
580 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script
Value& range, const String& directionString, ExceptionState& exceptionState) | 580 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script
Value& range, const String& directionString, ExceptionState& exceptionState) |
581 { | 581 { |
582 IDB_TRACE("IDBObjectStore::openKeyCursor"); | 582 IDB_TRACE("IDBObjectStore::openKeyCursor"); |
583 if (isDeleted()) { | 583 if (isDeleted()) { |
584 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 584 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
585 return 0; | 585 return 0; |
586 } | 586 } |
587 if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 587 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
588 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 588 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
589 return 0; | 589 return 0; |
590 } | 590 } |
591 if (!m_transaction->isActive()) { | 591 if (!m_transaction->isActive()) { |
592 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 592 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
593 return 0; | 593 return 0; |
594 } | 594 } |
595 | 595 |
596 WebIDBCursor::Direction direction = IDBCursor::stringToDirection(directionSt
ring, exceptionState); | 596 blink::WebIDBCursorDirection direction = IDBCursor::stringToDirection(direct
ionString, exceptionState); |
597 if (exceptionState.hadException()) | 597 if (exceptionState.hadException()) |
598 return 0; | 598 return 0; |
599 | 599 |
600 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); | 600 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); |
601 if (exceptionState.hadException()) | 601 if (exceptionState.hadException()) |
602 return 0; | 602 return 0; |
603 | 603 |
604 if (!backendDB()) { | 604 if (!backendDB()) { |
605 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); | 605 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); |
606 return 0; | 606 return 0; |
607 } | 607 } |
608 | 608 |
609 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); | 609 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); |
610 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); | 610 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); |
611 | 611 |
612 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, keyRange, direction, true, WebIDBDatabase::NormalTask, WebIDBCallbacksImpl::
create(request).leakPtr()); | 612 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, keyRange, direction, true, blink::WebIDBTaskTypeNormal, WebIDBCallbacksImpl:
:create(request).leakPtr()); |
613 return request; | 613 return request; |
614 } | 614 } |
615 | 615 |
616 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r
ange, ExceptionState& exceptionState) | 616 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r
ange, ExceptionState& exceptionState) |
617 { | 617 { |
618 IDB_TRACE("IDBObjectStore::count"); | 618 IDB_TRACE("IDBObjectStore::count"); |
619 if (isDeleted()) { | 619 if (isDeleted()) { |
620 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 620 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
621 return 0; | 621 return 0; |
622 } | 622 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 } | 661 } |
662 return IDBIndexMetadata::InvalidId; | 662 return IDBIndexMetadata::InvalidId; |
663 } | 663 } |
664 | 664 |
665 WebIDBDatabase* IDBObjectStore::backendDB() const | 665 WebIDBDatabase* IDBObjectStore::backendDB() const |
666 { | 666 { |
667 return m_transaction->backendDB(); | 667 return m_transaction->backendDB(); |
668 } | 668 } |
669 | 669 |
670 } // namespace WebCore | 670 } // namespace WebCore |
OLD | NEW |