| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 #include "public/platform/modules/indexeddb/WebIDBTypes.h" | 45 #include "public/platform/modules/indexeddb/WebIDBTypes.h" |
| 46 #include "wtf/Atomics.h" | 46 #include "wtf/Atomics.h" |
| 47 #include <limits> | 47 #include <limits> |
| 48 #include <memory> | 48 #include <memory> |
| 49 | 49 |
| 50 using blink::WebIDBDatabase; | 50 using blink::WebIDBDatabase; |
| 51 | 51 |
| 52 namespace blink { | 52 namespace blink { |
| 53 | 53 |
| 54 const char IDBDatabase::indexDeletedErrorMessage[] = "The index or its object st
ore has been deleted."; | 54 const char IDBDatabase::indexDeletedErrorMessage[] = "The index or its object st
ore has been deleted."; |
| 55 const char IDBDatabase::indexNameTakenErrorMessage[] = "An index with the specif
ied name already exists."; |
| 55 const char IDBDatabase::isKeyCursorErrorMessage[] = "The cursor is a key cursor.
"; | 56 const char IDBDatabase::isKeyCursorErrorMessage[] = "The cursor is a key cursor.
"; |
| 56 const char IDBDatabase::noKeyOrKeyRangeErrorMessage[] = "No key or key range spe
cified."; | 57 const char IDBDatabase::noKeyOrKeyRangeErrorMessage[] = "No key or key range spe
cified."; |
| 57 const char IDBDatabase::noSuchIndexErrorMessage[] = "The specified index was not
found."; | 58 const char IDBDatabase::noSuchIndexErrorMessage[] = "The specified index was not
found."; |
| 58 const char IDBDatabase::noSuchObjectStoreErrorMessage[] = "The specified object
store was not found."; | 59 const char IDBDatabase::noSuchObjectStoreErrorMessage[] = "The specified object
store was not found."; |
| 59 const char IDBDatabase::noValueErrorMessage[] = "The cursor is being iterated or
has iterated past its end."; | 60 const char IDBDatabase::noValueErrorMessage[] = "The cursor is being iterated or
has iterated past its end."; |
| 60 const char IDBDatabase::notValidKeyErrorMessage[] = "The parameter is not a vali
d key."; | 61 const char IDBDatabase::notValidKeyErrorMessage[] = "The parameter is not a vali
d key."; |
| 61 const char IDBDatabase::notVersionChangeTransactionErrorMessage[] = "The databas
e is not running a version change transaction."; | 62 const char IDBDatabase::notVersionChangeTransactionErrorMessage[] = "The databas
e is not running a version change transaction."; |
| 62 const char IDBDatabase::objectStoreDeletedErrorMessage[] = "The object store has
been deleted."; | 63 const char IDBDatabase::objectStoreDeletedErrorMessage[] = "The object store has
been deleted."; |
| 64 const char IDBDatabase::objectStoreNameTakenErrorMessage[] = "An object store wi
th the specified name already exists."; |
| 63 const char IDBDatabase::requestNotFinishedErrorMessage[] = "The request has not
finished."; | 65 const char IDBDatabase::requestNotFinishedErrorMessage[] = "The request has not
finished."; |
| 64 const char IDBDatabase::sourceDeletedErrorMessage[] = "The cursor's source or ef
fective object store has been deleted."; | 66 const char IDBDatabase::sourceDeletedErrorMessage[] = "The cursor's source or ef
fective object store has been deleted."; |
| 65 const char IDBDatabase::transactionInactiveErrorMessage[] = "The transaction is
not active."; | 67 const char IDBDatabase::transactionInactiveErrorMessage[] = "The transaction is
not active."; |
| 66 const char IDBDatabase::transactionFinishedErrorMessage[] = "The transaction has
finished."; | 68 const char IDBDatabase::transactionFinishedErrorMessage[] = "The transaction has
finished."; |
| 67 const char IDBDatabase::transactionReadOnlyErrorMessage[] = "The transaction is
read-only."; | 69 const char IDBDatabase::transactionReadOnlyErrorMessage[] = "The transaction is
read-only."; |
| 68 const char IDBDatabase::databaseClosedErrorMessage[] = "The database connection
is closed."; | 70 const char IDBDatabase::databaseClosedErrorMessage[] = "The database connection
is closed."; |
| 69 | 71 |
| 70 IDBDatabase* IDBDatabase::create(ExecutionContext* context, std::unique_ptr<WebI
DBDatabase> database, IDBDatabaseCallbacks* callbacks) | 72 IDBDatabase* IDBDatabase::create(ExecutionContext* context, std::unique_ptr<WebI
DBDatabase> database, IDBDatabaseCallbacks* callbacks) |
| 71 { | 73 { |
| 72 IDBDatabase* idbDatabase = new IDBDatabase(context, std::move(database), cal
lbacks); | 74 IDBDatabase* idbDatabase = new IDBDatabase(context, std::move(database), cal
lbacks); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 it->value.indexes.set(metadata.id, metadata); | 116 it->value.indexes.set(metadata.id, metadata); |
| 115 } | 117 } |
| 116 | 118 |
| 117 void IDBDatabase::indexDeleted(int64_t objectStoreId, int64_t indexId) | 119 void IDBDatabase::indexDeleted(int64_t objectStoreId, int64_t indexId) |
| 118 { | 120 { |
| 119 IDBDatabaseMetadata::ObjectStoreMap::iterator it = m_metadata.objectStores.f
ind(objectStoreId); | 121 IDBDatabaseMetadata::ObjectStoreMap::iterator it = m_metadata.objectStores.f
ind(objectStoreId); |
| 120 ASSERT_WITH_SECURITY_IMPLICATION(it != m_metadata.objectStores.end()); | 122 ASSERT_WITH_SECURITY_IMPLICATION(it != m_metadata.objectStores.end()); |
| 121 it->value.indexes.remove(indexId); | 123 it->value.indexes.remove(indexId); |
| 122 } | 124 } |
| 123 | 125 |
| 126 void IDBDatabase::indexRenamed(int64_t objectStoreId, int64_t indexId, const Str
ing& newName) |
| 127 { |
| 128 IDBDatabaseMetadata::ObjectStoreMap::iterator storeIterator = m_metadata.obj
ectStores.find(objectStoreId); |
| 129 SECURITY_DCHECK(storeIterator != m_metadata.objectStores.end()); |
| 130 |
| 131 IDBObjectStoreMetadata& storeMetadata = storeIterator->value; |
| 132 IDBObjectStoreMetadata::IndexMap::iterator indexIterator = storeMetadata.ind
exes.find(indexId); |
| 133 DCHECK(indexIterator != storeMetadata.indexes.end()); |
| 134 indexIterator->value.name = newName; |
| 135 } |
| 136 |
| 124 void IDBDatabase::transactionCreated(IDBTransaction* transaction) | 137 void IDBDatabase::transactionCreated(IDBTransaction* transaction) |
| 125 { | 138 { |
| 126 ASSERT(transaction); | 139 ASSERT(transaction); |
| 127 ASSERT(!m_transactions.contains(transaction->id())); | 140 ASSERT(!m_transactions.contains(transaction->id())); |
| 128 m_transactions.add(transaction->id(), transaction); | 141 m_transactions.add(transaction->id(), transaction); |
| 129 | 142 |
| 130 if (transaction->isVersionChange()) { | 143 if (transaction->isVersionChange()) { |
| 131 ASSERT(!m_versionChangeTransaction); | 144 ASSERT(!m_versionChangeTransaction); |
| 132 m_versionChangeTransaction = transaction; | 145 m_versionChangeTransaction = transaction; |
| 133 } | 146 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); | 207 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::
transactionInactiveErrorMessage); |
| 195 return nullptr; | 208 return nullptr; |
| 196 } | 209 } |
| 197 | 210 |
| 198 if (!keyPath.isNull() && !keyPath.isValid()) { | 211 if (!keyPath.isNull() && !keyPath.isValid()) { |
| 199 exceptionState.throwDOMException(SyntaxError, "The keyPath option is not
a valid key path."); | 212 exceptionState.throwDOMException(SyntaxError, "The keyPath option is not
a valid key path."); |
| 200 return nullptr; | 213 return nullptr; |
| 201 } | 214 } |
| 202 | 215 |
| 203 if (containsObjectStore(name)) { | 216 if (containsObjectStore(name)) { |
| 204 exceptionState.throwDOMException(ConstraintError, "An object store with
the specified name already exists."); | 217 exceptionState.throwDOMException(ConstraintError, IDBDatabase::objectSto
reNameTakenErrorMessage); |
| 205 return nullptr; | 218 return nullptr; |
| 206 } | 219 } |
| 207 | 220 |
| 208 if (autoIncrement && ((keyPath.getType() == IDBKeyPath::StringType && keyPat
h.string().isEmpty()) || keyPath.getType() == IDBKeyPath::ArrayType)) { | 221 if (autoIncrement && ((keyPath.getType() == IDBKeyPath::StringType && keyPat
h.string().isEmpty()) || keyPath.getType() == IDBKeyPath::ArrayType)) { |
| 209 exceptionState.throwDOMException(InvalidAccessError, "The autoIncrement
option was set but the keyPath option was empty or an array."); | 222 exceptionState.throwDOMException(InvalidAccessError, "The autoIncrement
option was set but the keyPath option was empty or an array."); |
| 210 return nullptr; | 223 return nullptr; |
| 211 } | 224 } |
| 212 | 225 |
| 213 if (!m_backend) { | 226 if (!m_backend) { |
| 214 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); | 227 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas
eClosedErrorMessage); |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 { | 428 { |
| 416 for (const auto& it : m_metadata.objectStores) { | 429 for (const auto& it : m_metadata.objectStores) { |
| 417 if (it.value.name == name) { | 430 if (it.value.name == name) { |
| 418 ASSERT(it.key != IDBObjectStoreMetadata::InvalidId); | 431 ASSERT(it.key != IDBObjectStoreMetadata::InvalidId); |
| 419 return it.key; | 432 return it.key; |
| 420 } | 433 } |
| 421 } | 434 } |
| 422 return IDBObjectStoreMetadata::InvalidId; | 435 return IDBObjectStoreMetadata::InvalidId; |
| 423 } | 436 } |
| 424 | 437 |
| 438 void IDBDatabase::objectStoreRenamed(int64_t storeId, const String& newName) |
| 439 { |
| 440 DCHECK(m_metadata.objectStores.contains(storeId)); |
| 441 IDBDatabaseMetadata::ObjectStoreMap::iterator it = m_metadata.objectStores.f
ind(storeId); |
| 442 it->value.name = newName; |
| 443 } |
| 444 |
| 425 bool IDBDatabase::hasPendingActivity() const | 445 bool IDBDatabase::hasPendingActivity() const |
| 426 { | 446 { |
| 427 // The script wrapper must not be collected before the object is closed or | 447 // The script wrapper must not be collected before the object is closed or |
| 428 // we can't fire a "versionchange" event to let script manually close the co
nnection. | 448 // we can't fire a "versionchange" event to let script manually close the co
nnection. |
| 429 return !m_closePending && hasEventListeners() && !m_contextStopped; | 449 return !m_closePending && hasEventListeners() && !m_contextStopped; |
| 430 } | 450 } |
| 431 | 451 |
| 432 void IDBDatabase::stop() | 452 void IDBDatabase::stop() |
| 433 { | 453 { |
| 434 m_contextStopped = true; | 454 m_contextStopped = true; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 452 return ActiveDOMObject::getExecutionContext(); | 472 return ActiveDOMObject::getExecutionContext(); |
| 453 } | 473 } |
| 454 | 474 |
| 455 void IDBDatabase::recordApiCallsHistogram(IndexedDatabaseMethods method) | 475 void IDBDatabase::recordApiCallsHistogram(IndexedDatabaseMethods method) |
| 456 { | 476 { |
| 457 DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, apiCallsHistogram, new
EnumerationHistogram("WebCore.IndexedDB.FrontEndAPICalls", IDBMethodsMax)); | 477 DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, apiCallsHistogram, new
EnumerationHistogram("WebCore.IndexedDB.FrontEndAPICalls", IDBMethodsMax)); |
| 458 apiCallsHistogram.count(method); | 478 apiCallsHistogram.count(method); |
| 459 } | 479 } |
| 460 | 480 |
| 461 } // namespace blink | 481 } // namespace blink |
| OLD | NEW |