| 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 ASSERT(m_transaction); | 64 ASSERT(m_transaction); |
| 65 } | 65 } |
| 66 | 66 |
| 67 DEFINE_TRACE(IDBObjectStore) | 67 DEFINE_TRACE(IDBObjectStore) |
| 68 { | 68 { |
| 69 visitor->trace(m_transaction); | 69 visitor->trace(m_transaction); |
| 70 visitor->trace(m_indexMap); | 70 visitor->trace(m_indexMap); |
| 71 visitor->trace(m_createdIndexes); | 71 visitor->trace(m_createdIndexes); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void IDBObjectStore::setName(const String& name, ExceptionState& exceptionState) |
| 75 { |
| 76 if (!RuntimeEnabledFeatures::indexedDBExperimentalEnabled()) |
| 77 return; |
| 78 |
| 79 IDB_TRACE("IDBObjectStore::setName"); |
| 80 if (!m_transaction->isVersionChange()) { |
| 81 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::notVers
ionChangeTransactionErrorMessage); |
| 82 return; |
| 83 } |
| 84 if (isDeleted()) { |
| 85 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS
toreDeletedErrorMessage); |
| 86 return; |
| 87 } |
| 88 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
| 89 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
| 90 return; |
| 91 } |
| 92 if (!m_transaction->isActive()) { |
| 93 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
| 94 return; |
| 95 } |
| 96 |
| 97 if (m_metadata.name == name) |
| 98 return; |
| 99 if (m_transaction->db()->containsObjectStore(name)) { |
| 100 exceptionState.throwDOMException(ConstraintError, IDBDatabase::objectSto
reNameTakenErrorMessage); |
| 101 return; |
| 102 } |
| 103 if (!backendDB()) { |
| 104 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); |
| 105 return; |
| 106 } |
| 107 |
| 108 backendDB()->renameObjectStore(m_transaction->id(), id(), name); |
| 109 m_transaction->objectStoreWillBeRenamed(m_metadata.name, name); |
| 110 m_metadata.name = name; |
| 111 |
| 112 // The name inside the database's version of the object store metadata is us
ed by IDBDatabase.objectStoreNames(). |
| 113 // If the transaction is aborted, this name will be reverted when the metada
ta is overwritten with the previousMetadata in IDBTransaction. |
| 114 m_transaction->db()->objectStoreRenamed(id(), name); |
| 115 } |
| 116 |
| 74 ScriptValue IDBObjectStore::keyPath(ScriptState* scriptState) const | 117 ScriptValue IDBObjectStore::keyPath(ScriptState* scriptState) const |
| 75 { | 118 { |
| 76 return ScriptValue::from(scriptState, m_metadata.keyPath); | 119 return ScriptValue::from(scriptState, m_metadata.keyPath); |
| 77 } | 120 } |
| 78 | 121 |
| 79 DOMStringList* IDBObjectStore::indexNames() const | 122 DOMStringList* IDBObjectStore::indexNames() const |
| 80 { | 123 { |
| 81 IDB_TRACE("IDBObjectStore::indexNames"); | 124 IDB_TRACE("IDBObjectStore::indexNames"); |
| 82 DOMStringList* indexNames = DOMStringList::create(DOMStringList::IndexedDB); | 125 DOMStringList* indexNames = DOMStringList::create(DOMStringList::IndexedDB); |
| 83 for (const auto& it : m_metadata.indexes) | 126 for (const auto& it : m_metadata.indexes) |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 } | 581 } |
| 539 if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 582 if (m_transaction->isFinished() || m_transaction->isFinishing()) { |
| 540 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); | 583 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionFinishedErrorMessage); |
| 541 return nullptr; | 584 return nullptr; |
| 542 } | 585 } |
| 543 if (!m_transaction->isActive()) { | 586 if (!m_transaction->isActive()) { |
| 544 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 587 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
| 545 return nullptr; | 588 return nullptr; |
| 546 } | 589 } |
| 547 if (containsIndex(name)) { | 590 if (containsIndex(name)) { |
| 548 exceptionState.throwDOMException(ConstraintError, "An index with the spe
cified name already exists."); | 591 exceptionState.throwDOMException(ConstraintError, IDBDatabase::indexName
TakenErrorMessage); |
| 549 return nullptr; | 592 return nullptr; |
| 550 } | 593 } |
| 551 if (!keyPath.isValid()) { | 594 if (!keyPath.isValid()) { |
| 552 exceptionState.throwDOMException(SyntaxError, "The keyPath argument cont
ains an invalid key path."); | 595 exceptionState.throwDOMException(SyntaxError, "The keyPath argument cont
ains an invalid key path."); |
| 553 return nullptr; | 596 return nullptr; |
| 554 } | 597 } |
| 555 if (keyPath.getType() == IDBKeyPath::ArrayType && options.multiEntry()) { | 598 if (keyPath.getType() == IDBKeyPath::ArrayType && options.multiEntry()) { |
| 556 exceptionState.throwDOMException(InvalidAccessError, "The keyPath argume
nt was an array and the multiEntry option is true."); | 599 exceptionState.throwDOMException(InvalidAccessError, "The keyPath argume
nt was an array and the multiEntry option is true."); |
| 557 return nullptr; | 600 return nullptr; |
| 558 } | 601 } |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 void IDBObjectStore::transactionFinished() | 816 void IDBObjectStore::transactionFinished() |
| 774 { | 817 { |
| 775 ASSERT(m_transaction->isFinished()); | 818 ASSERT(m_transaction->isFinished()); |
| 776 | 819 |
| 777 // Break reference cycles. | 820 // Break reference cycles. |
| 778 // TODO(jsbell): This can be removed c/o Oilpan. | 821 // TODO(jsbell): This can be removed c/o Oilpan. |
| 779 m_indexMap.clear(); | 822 m_indexMap.clear(); |
| 780 m_createdIndexes.clear(); | 823 m_createdIndexes.clear(); |
| 781 } | 824 } |
| 782 | 825 |
| 826 void IDBObjectStore::indexWillBeRenamed(const String& oldName, const String& new
Name) |
| 827 { |
| 828 DCHECK(m_transaction->isVersionChange()); |
| 829 DCHECK(m_transaction->isActive()); |
| 830 |
| 831 DCHECK(m_indexMap.contains(oldName)); |
| 832 DCHECK(!m_indexMap.contains(newName)); |
| 833 IDBIndexMap::iterator it = m_indexMap.find(oldName); |
| 834 int64_t indexId = it->value->id(); |
| 835 m_indexMap.set(newName, it->value); |
| 836 m_indexMap.remove(oldName); |
| 837 |
| 838 IDBObjectStoreMetadata::IndexMap::iterator metadataIterator = m_metadata.ind
exes.find(indexId); |
| 839 DCHECK(metadataIterator != m_metadata.indexes.end()); |
| 840 DCHECK(metadataIterator->value.name == oldName); |
| 841 metadataIterator->value.name = newName; |
| 842 } |
| 843 |
| 783 int64_t IDBObjectStore::findIndexId(const String& name) const | 844 int64_t IDBObjectStore::findIndexId(const String& name) const |
| 784 { | 845 { |
| 785 for (const auto& it : m_metadata.indexes) { | 846 for (const auto& it : m_metadata.indexes) { |
| 786 if (it.value.name == name) { | 847 if (it.value.name == name) { |
| 787 ASSERT(it.key != IDBIndexMetadata::InvalidId); | 848 ASSERT(it.key != IDBIndexMetadata::InvalidId); |
| 788 return it.key; | 849 return it.key; |
| 789 } | 850 } |
| 790 } | 851 } |
| 791 return IDBIndexMetadata::InvalidId; | 852 return IDBIndexMetadata::InvalidId; |
| 792 } | 853 } |
| 793 | 854 |
| 794 WebIDBDatabase* IDBObjectStore::backendDB() const | 855 WebIDBDatabase* IDBObjectStore::backendDB() const |
| 795 { | 856 { |
| 796 return m_transaction->backendDB(); | 857 return m_transaction->backendDB(); |
| 797 } | 858 } |
| 798 | 859 |
| 799 } // namespace blink | 860 } // namespace blink |
| OLD | NEW |