| Index: third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp | 
| diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp | 
| index 233de166d439ca55a86716d5adae8a0b1e49c79b..7c80f4cc645bc75ffc457d6978f6289ef672e18f 100644 | 
| --- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp | 
| +++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp | 
| @@ -71,6 +71,49 @@ DEFINE_TRACE(IDBObjectStore) | 
| visitor->trace(m_createdIndexes); | 
| } | 
|  | 
| +void IDBObjectStore::setName(const String& name, ExceptionState& exceptionState) | 
| +{ | 
| +    if (!RuntimeEnabledFeatures::indexedDBExperimentalEnabled()) | 
| +        return; | 
| + | 
| +    IDB_TRACE("IDBObjectStore::setName"); | 
| +    if (!m_transaction->isVersionChange()) { | 
| +        exceptionState.throwDOMException(InvalidStateError, IDBDatabase::notVersionChangeTransactionErrorMessage); | 
| +        return; | 
| +    } | 
| +    if (isDeleted()) { | 
| +        exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectStoreDeletedErrorMessage); | 
| +        return; | 
| +    } | 
| +    if (m_transaction->isFinished() || m_transaction->isFinishing()) { | 
| +        exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::transactionFinishedErrorMessage); | 
| +        return; | 
| +    } | 
| +    if (!m_transaction->isActive()) { | 
| +        exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::transactionInactiveErrorMessage); | 
| +        return; | 
| +    } | 
| + | 
| +    if (m_metadata.name == name) | 
| +        return; | 
| +    if (m_transaction->db()->containsObjectStore(name)) { | 
| +        exceptionState.throwDOMException(ConstraintError, IDBDatabase::objectStoreNameTakenErrorMessage); | 
| +        return; | 
| +    } | 
| +    if (!backendDB()) { | 
| +        exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databaseClosedErrorMessage); | 
| +        return; | 
| +    } | 
| + | 
| +    backendDB()->renameObjectStore(m_transaction->id(), id(), name); | 
| +    m_transaction->objectStoreRenamed(m_metadata.name, name); | 
| +    m_metadata.name = name; | 
| + | 
| +    // The name inside the database's version of the object store metadata is used by IDBDatabase.objectStoreNames(). | 
| +    // If the transaction is aborted, this name will be reverted when the metadata is overwritten with the previousMetadata in IDBTransaction. | 
| +    m_transaction->db()->objectStoreRenamed(id(), name); | 
| +} | 
| + | 
| ScriptValue IDBObjectStore::keyPath(ScriptState* scriptState) const | 
| { | 
| return ScriptValue::from(scriptState, m_metadata.keyPath); | 
| @@ -545,7 +588,7 @@ IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& na | 
| return nullptr; | 
| } | 
| if (containsIndex(name)) { | 
| -        exceptionState.throwDOMException(ConstraintError, "An index with the specified name already exists."); | 
| +        exceptionState.throwDOMException(ConstraintError, IDBDatabase::indexNameTakenErrorMessage); | 
| return nullptr; | 
| } | 
| if (!keyPath.isValid()) { | 
| @@ -780,6 +823,24 @@ void IDBObjectStore::transactionFinished() | 
| m_createdIndexes.clear(); | 
| } | 
|  | 
| +void IDBObjectStore::indexRenamed(int64_t indexId, const String& newName) | 
| +{ | 
| +    DCHECK(m_transaction->isVersionChange()); | 
| +    DCHECK(m_transaction->isActive()); | 
| + | 
| +    IDBObjectStoreMetadata::IndexMap::iterator metadataIterator = m_metadata.indexes.find(indexId); | 
| +    DCHECK(metadataIterator != m_metadata.indexes.end()) << "Invalid indexId"; | 
| +    const String& oldName = metadataIterator->value.name; | 
| + | 
| +    DCHECK(m_indexMap.contains(oldName)) << "The index had to be accessed in order to be renamed."; | 
| +    DCHECK(!m_indexMap.contains(newName)); | 
| +    IDBIndexMap::iterator it = m_indexMap.find(oldName); | 
| +    m_indexMap.set(newName, it->value); | 
| +    m_indexMap.remove(oldName); | 
| + | 
| +    metadataIterator->value.name = newName; | 
| +} | 
| + | 
| int64_t IDBObjectStore::findIndexId(const String& name) const | 
| { | 
| for (const auto& it : m_metadata.indexes) { | 
|  |