| 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::AddOnly, IDBAny::create(this), value, key, ex
ceptionState); |
| 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::AddOrUpdate, 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::PutMode putMode
, IDBAny* source, ScriptValue& value, const ScriptValue& keyValue, ExceptionStat
e& 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::PutMode putMode
, IDBAny* source, ScriptValue& value, IDBKey* key, ExceptionState& exceptionStat
e) |
| 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()) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 187 // FIXME: Add Blob/File/FileList support | 187 // FIXME: Add Blob/File/FileList support |
| 188 exceptionState.throwDOMException(DataCloneError, "The object store curre
ntly does not support blob values."); | 188 exceptionState.throwDOMException(DataCloneError, "The object store curre
ntly does not support blob values."); |
| 189 return 0; | 189 return 0; |
| 190 } | 190 } |
| 191 ASSERT(blobInfo.isEmpty()); | 191 ASSERT(blobInfo.isEmpty()); |
| 192 | 192 |
| 193 const IDBKeyPath& keyPath = m_metadata.keyPath; | 193 const IDBKeyPath& keyPath = m_metadata.keyPath; |
| 194 const bool usesInLineKeys = !keyPath.isNull(); | 194 const bool usesInLineKeys = !keyPath.isNull(); |
| 195 const bool hasKeyGenerator = autoIncrement(); | 195 const bool hasKeyGenerator = autoIncrement(); |
| 196 | 196 |
| 197 if (putMode != WebIDBDatabase::CursorUpdate && usesInLineKeys && key) { | 197 if (putMode != blink::CursorUpdate && usesInLineKeys && key) { |
| 198 exceptionState.throwDOMException(DataError, "The object store uses in-li
ne keys and the key parameter was provided."); | 198 exceptionState.throwDOMException(DataError, "The object store uses in-li
ne keys and the key parameter was provided."); |
| 199 return 0; | 199 return 0; |
| 200 } | 200 } |
| 201 if (!usesInLineKeys && !hasKeyGenerator && !key) { | 201 if (!usesInLineKeys && !hasKeyGenerator && !key) { |
| 202 exceptionState.throwDOMException(DataError, "The object store uses out-o
f-line keys and has no key generator and the key parameter was not provided."); | 202 exceptionState.throwDOMException(DataError, "The object store uses out-o
f-line keys and has no key generator and the key parameter was not provided."); |
| 203 return 0; | 203 return 0; |
| 204 } | 204 } |
| 205 if (usesInLineKeys) { | 205 if (usesInLineKeys) { |
| 206 IDBKey* keyPathKey = createIDBKeyFromScriptValueAndKeyPath(scriptState->
isolate(), value, keyPath); | 206 IDBKey* keyPathKey = createIDBKeyFromScriptValueAndKeyPath(scriptState->
isolate(), value, keyPath); |
| 207 if (keyPathKey && !keyPathKey->isValid()) { | 207 if (keyPathKey && !keyPathKey->isValid()) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 238 generateIndexKeysForValue(scriptState->isolate(), it->value, value, &key
s); | 238 generateIndexKeysForValue(scriptState->isolate(), it->value, value, &key
s); |
| 239 indexIds.append(it->key); | 239 indexIds.append(it->key); |
| 240 indexKeys.append(keys); | 240 indexKeys.append(keys); |
| 241 } | 241 } |
| 242 | 242 |
| 243 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction.
get()); | 243 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction.
get()); |
| 244 Vector<char> wireBytes; | 244 Vector<char> wireBytes; |
| 245 serializedValue->toWireBytes(wireBytes); | 245 serializedValue->toWireBytes(wireBytes); |
| 246 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); | 246 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); |
| 247 | 247 |
| 248 backendDB()->put(m_transaction->id(), id(), blink::WebData(valueBuffer), blo
bInfo, key, static_cast<WebIDBDatabase::PutMode>(putMode), WebIDBCallbacksImpl::
create(request).leakPtr(), indexIds, indexKeys); | 248 backendDB()->put(m_transaction->id(), id(), blink::WebData(valueBuffer), blo
bInfo, key, static_cast<blink::PutMode>(putMode), WebIDBCallbacksImpl::create(re
quest).leakPtr(), indexIds, indexKeys); |
| 249 return request; | 249 return request; |
| 250 } | 250 } |
| 251 | 251 |
| 252 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip
tValue& key, ExceptionState& exceptionState) | 252 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip
tValue& key, ExceptionState& exceptionState) |
| 253 { | 253 { |
| 254 IDB_TRACE("IDBObjectStore::delete"); | 254 IDB_TRACE("IDBObjectStore::delete"); |
| 255 if (isDeleted()) { | 255 if (isDeleted()) { |
| 256 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 256 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
| 257 return 0; | 257 return 0; |
| 258 } | 258 } |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 IDBIndexMetadata metadata(name, indexId, keyPath, unique, multiEntry); | 451 IDBIndexMetadata metadata(name, indexId, keyPath, unique, multiEntry); |
| 452 IDBIndex* index = IDBIndex::create(metadata, this, m_transaction.get()); | 452 IDBIndex* index = IDBIndex::create(metadata, this, m_transaction.get()); |
| 453 m_indexMap.set(name, index); | 453 m_indexMap.set(name, index); |
| 454 m_metadata.indexes.set(indexId, metadata); | 454 m_metadata.indexes.set(indexId, metadata); |
| 455 m_transaction->db()->indexCreated(id(), metadata); | 455 m_transaction->db()->indexCreated(id(), metadata); |
| 456 | 456 |
| 457 ASSERT(!exceptionState.hadException()); | 457 ASSERT(!exceptionState.hadException()); |
| 458 if (exceptionState.hadException()) | 458 if (exceptionState.hadException()) |
| 459 return 0; | 459 return 0; |
| 460 | 460 |
| 461 IDBRequest* indexRequest = openCursor(scriptState, static_cast<IDBKeyRange*>
(0), blink::WebIDBCursor::Next, WebIDBDatabase::PreemptiveTask); | 461 IDBRequest* indexRequest = openCursor(scriptState, static_cast<IDBKeyRange*>
(0), blink::Next, blink::PreemptiveTask); |
| 462 indexRequest->preventPropagation(); | 462 indexRequest->preventPropagation(); |
| 463 | 463 |
| 464 // This is kept alive by being the success handler of the request, which is
in turn kept alive by the owning transaction. | 464 // This is kept alive by being the success handler of the request, which is
in turn kept alive by the owning transaction. |
| 465 RefPtr<IndexPopulator> indexPopulator = IndexPopulator::create(scriptState,
transaction()->db(), m_transaction->id(), id(), metadata); | 465 RefPtr<IndexPopulator> indexPopulator = IndexPopulator::create(scriptState,
transaction()->db(), m_transaction->id(), id(), metadata); |
| 466 indexRequest->setOnsuccess(indexPopulator); | 466 indexRequest->setOnsuccess(indexPopulator); |
| 467 return index; | 467 return index; |
| 468 } | 468 } |
| 469 | 469 |
| 470 IDBIndex* IDBObjectStore::index(const String& name, ExceptionState& exceptionSta
te) | 470 IDBIndex* IDBObjectStore::index(const String& name, ExceptionState& exceptionSta
te) |
| 471 { | 471 { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 } | 553 } |
| 554 if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 554 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
| 555 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 555 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
| 556 return 0; | 556 return 0; |
| 557 } | 557 } |
| 558 if (!m_transaction->isActive()) { | 558 if (!m_transaction->isActive()) { |
| 559 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 559 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
| 560 return 0; | 560 return 0; |
| 561 } | 561 } |
| 562 | 562 |
| 563 WebIDBCursor::Direction direction = IDBCursor::stringToDirection(directionSt
ring, exceptionState); | 563 blink::Direction direction = IDBCursor::stringToDirection(directionString, e
xceptionState); |
| 564 if (exceptionState.hadException()) | 564 if (exceptionState.hadException()) |
| 565 return 0; | 565 return 0; |
| 566 | 566 |
| 567 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); | 567 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); |
| 568 if (exceptionState.hadException()) | 568 if (exceptionState.hadException()) |
| 569 return 0; | 569 return 0; |
| 570 | 570 |
| 571 if (!backendDB()) { | 571 if (!backendDB()) { |
| 572 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); | 572 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); |
| 573 return 0; | 573 return 0; |
| 574 } | 574 } |
| 575 | 575 |
| 576 return openCursor(scriptState, keyRange, direction, WebIDBDatabase::NormalTa
sk); | 576 return openCursor(scriptState, keyRange, direction, blink::NormalTask); |
| 577 } | 577 } |
| 578 | 578 |
| 579 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra
nge, WebIDBCursor::Direction direction, WebIDBDatabase::TaskType taskType) | 579 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra
nge, blink::Direction direction, blink::TaskType taskType) |
| 580 { | 580 { |
| 581 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); | 581 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); |
| 582 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); | 582 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); |
| 583 | 583 |
| 584 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).leak
Ptr()); | 584 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).leak
Ptr()); |
| 585 return request; | 585 return request; |
| 586 } | 586 } |
| 587 | 587 |
| 588 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script
Value& range, const String& directionString, ExceptionState& exceptionState) | 588 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script
Value& range, const String& directionString, ExceptionState& exceptionState) |
| 589 { | 589 { |
| 590 IDB_TRACE("IDBObjectStore::openKeyCursor"); | 590 IDB_TRACE("IDBObjectStore::openKeyCursor"); |
| 591 if (isDeleted()) { | 591 if (isDeleted()) { |
| 592 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 592 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
| 593 return 0; | 593 return 0; |
| 594 } | 594 } |
| 595 if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 595 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
| 596 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 596 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
| 597 return 0; | 597 return 0; |
| 598 } | 598 } |
| 599 if (!m_transaction->isActive()) { | 599 if (!m_transaction->isActive()) { |
| 600 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 600 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
| 601 return 0; | 601 return 0; |
| 602 } | 602 } |
| 603 | 603 |
| 604 WebIDBCursor::Direction direction = IDBCursor::stringToDirection(directionSt
ring, exceptionState); | 604 blink::Direction direction = IDBCursor::stringToDirection(directionString, e
xceptionState); |
| 605 if (exceptionState.hadException()) | 605 if (exceptionState.hadException()) |
| 606 return 0; | 606 return 0; |
| 607 | 607 |
| 608 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); | 608 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->executionC
ontext(), range, exceptionState); |
| 609 if (exceptionState.hadException()) | 609 if (exceptionState.hadException()) |
| 610 return 0; | 610 return 0; |
| 611 | 611 |
| 612 if (!backendDB()) { | 612 if (!backendDB()) { |
| 613 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); | 613 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); |
| 614 return 0; | 614 return 0; |
| 615 } | 615 } |
| 616 | 616 |
| 617 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); | 617 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this),
m_transaction.get()); |
| 618 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); | 618 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); |
| 619 | 619 |
| 620 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, keyRange, direction, true, WebIDBDatabase::NormalTask, WebIDBCallbacksImpl::
create(request).leakPtr()); | 620 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid
Id, keyRange, direction, true, blink::NormalTask, WebIDBCallbacksImpl::create(re
quest).leakPtr()); |
| 621 return request; | 621 return request; |
| 622 } | 622 } |
| 623 | 623 |
| 624 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r
ange, ExceptionState& exceptionState) | 624 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r
ange, ExceptionState& exceptionState) |
| 625 { | 625 { |
| 626 IDB_TRACE("IDBObjectStore::count"); | 626 IDB_TRACE("IDBObjectStore::count"); |
| 627 if (isDeleted()) { | 627 if (isDeleted()) { |
| 628 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); | 628 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
| 629 return 0; | 629 return 0; |
| 630 } | 630 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 } | 669 } |
| 670 return IDBIndexMetadata::InvalidId; | 670 return IDBIndexMetadata::InvalidId; |
| 671 } | 671 } |
| 672 | 672 |
| 673 WebIDBDatabase* IDBObjectStore::backendDB() const | 673 WebIDBDatabase* IDBObjectStore::backendDB() const |
| 674 { | 674 { |
| 675 return m_transaction->backendDB(); | 675 return m_transaction->backendDB(); |
| 676 } | 676 } |
| 677 | 677 |
| 678 } // namespace WebCore | 678 } // namespace WebCore |
| OLD | NEW |