| 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 } | 167 } |
| 168 | 168 |
| 169 return createObjectStore(name, keyPath, autoIncrement, ec); | 169 return createObjectStore(name, keyPath, autoIncrement, ec); |
| 170 } | 170 } |
| 171 | 171 |
| 172 PassRefPtr<IDBObjectStore> IDBDatabase::createObjectStore(const String& name, co
nst IDBKeyPath& keyPath, bool autoIncrement, ExceptionCode& ec) | 172 PassRefPtr<IDBObjectStore> IDBDatabase::createObjectStore(const String& name, co
nst IDBKeyPath& keyPath, bool autoIncrement, ExceptionCode& ec) |
| 173 { | 173 { |
| 174 IDB_TRACE("IDBDatabase::createObjectStore"); | 174 IDB_TRACE("IDBDatabase::createObjectStore"); |
| 175 HistogramSupport::histogramEnumeration("WebCore.IndexedDB.FrontEndAPICalls",
IDBCreateObjectStoreCall, IDBMethodsMax); | 175 HistogramSupport::histogramEnumeration("WebCore.IndexedDB.FrontEndAPICalls",
IDBCreateObjectStoreCall, IDBMethodsMax); |
| 176 if (!m_versionChangeTransaction) { | 176 if (!m_versionChangeTransaction) { |
| 177 ec = INVALID_STATE_ERR; | 177 ec = InvalidStateError; |
| 178 return 0; | 178 return 0; |
| 179 } | 179 } |
| 180 if (!m_versionChangeTransaction->isActive()) { | 180 if (!m_versionChangeTransaction->isActive()) { |
| 181 ec = TransactionInactiveError; | 181 ec = TransactionInactiveError; |
| 182 return 0; | 182 return 0; |
| 183 } | 183 } |
| 184 | 184 |
| 185 if (containsObjectStore(name)) { | 185 if (containsObjectStore(name)) { |
| 186 ec = ConstraintError; | 186 ec = ConstraintError; |
| 187 return 0; | 187 return 0; |
| 188 } | 188 } |
| 189 | 189 |
| 190 if (!keyPath.isNull() && !keyPath.isValid()) { | 190 if (!keyPath.isNull() && !keyPath.isValid()) { |
| 191 ec = SYNTAX_ERR; | 191 ec = SyntaxError; |
| 192 return 0; | 192 return 0; |
| 193 } | 193 } |
| 194 | 194 |
| 195 if (autoIncrement && ((keyPath.type() == IDBKeyPath::StringType && keyPath.s
tring().isEmpty()) || keyPath.type() == IDBKeyPath::ArrayType)) { | 195 if (autoIncrement && ((keyPath.type() == IDBKeyPath::StringType && keyPath.s
tring().isEmpty()) || keyPath.type() == IDBKeyPath::ArrayType)) { |
| 196 ec = INVALID_ACCESS_ERR; | 196 ec = InvalidAccessError; |
| 197 return 0; | 197 return 0; |
| 198 } | 198 } |
| 199 | 199 |
| 200 int64_t objectStoreId = m_metadata.maxObjectStoreId + 1; | 200 int64_t objectStoreId = m_metadata.maxObjectStoreId + 1; |
| 201 m_backend->createObjectStore(m_versionChangeTransaction->id(), objectStoreId
, name, keyPath, autoIncrement); | 201 m_backend->createObjectStore(m_versionChangeTransaction->id(), objectStoreId
, name, keyPath, autoIncrement); |
| 202 | 202 |
| 203 IDBObjectStoreMetadata metadata(name, objectStoreId, keyPath, autoIncrement,
IDBDatabaseBackendInterface::MinimumIndexId); | 203 IDBObjectStoreMetadata metadata(name, objectStoreId, keyPath, autoIncrement,
IDBDatabaseBackendInterface::MinimumIndexId); |
| 204 RefPtr<IDBObjectStore> objectStore = IDBObjectStore::create(metadata, m_vers
ionChangeTransaction.get()); | 204 RefPtr<IDBObjectStore> objectStore = IDBObjectStore::create(metadata, m_vers
ionChangeTransaction.get()); |
| 205 m_metadata.objectStores.set(metadata.id, metadata); | 205 m_metadata.objectStores.set(metadata.id, metadata); |
| 206 ++m_metadata.maxObjectStoreId; | 206 ++m_metadata.maxObjectStoreId; |
| 207 | 207 |
| 208 m_versionChangeTransaction->objectStoreCreated(name, objectStore); | 208 m_versionChangeTransaction->objectStoreCreated(name, objectStore); |
| 209 return objectStore.release(); | 209 return objectStore.release(); |
| 210 } | 210 } |
| 211 | 211 |
| 212 void IDBDatabase::deleteObjectStore(const String& name, ExceptionCode& ec) | 212 void IDBDatabase::deleteObjectStore(const String& name, ExceptionCode& ec) |
| 213 { | 213 { |
| 214 IDB_TRACE("IDBDatabase::deleteObjectStore"); | 214 IDB_TRACE("IDBDatabase::deleteObjectStore"); |
| 215 HistogramSupport::histogramEnumeration("WebCore.IndexedDB.FrontEndAPICalls",
IDBDeleteObjectStoreCall, IDBMethodsMax); | 215 HistogramSupport::histogramEnumeration("WebCore.IndexedDB.FrontEndAPICalls",
IDBDeleteObjectStoreCall, IDBMethodsMax); |
| 216 if (!m_versionChangeTransaction) { | 216 if (!m_versionChangeTransaction) { |
| 217 ec = INVALID_STATE_ERR; | 217 ec = InvalidStateError; |
| 218 return; | 218 return; |
| 219 } | 219 } |
| 220 if (!m_versionChangeTransaction->isActive()) { | 220 if (!m_versionChangeTransaction->isActive()) { |
| 221 ec = TransactionInactiveError; | 221 ec = TransactionInactiveError; |
| 222 return; | 222 return; |
| 223 } | 223 } |
| 224 | 224 |
| 225 int64_t objectStoreId = findObjectStoreId(name); | 225 int64_t objectStoreId = findObjectStoreId(name); |
| 226 if (objectStoreId == IDBObjectStoreMetadata::InvalidId) { | 226 if (objectStoreId == IDBObjectStoreMetadata::InvalidId) { |
| 227 // FIXME: Should use (NotFoundError, "..."). | 227 // FIXME: Should use (NotFoundError, "..."). |
| 228 ec = IDBNotFoundError; | 228 ec = IDBNotFoundError; |
| 229 return; | 229 return; |
| 230 } | 230 } |
| 231 | 231 |
| 232 m_backend->deleteObjectStore(m_versionChangeTransaction->id(), objectStoreId
); | 232 m_backend->deleteObjectStore(m_versionChangeTransaction->id(), objectStoreId
); |
| 233 m_versionChangeTransaction->objectStoreDeleted(name); | 233 m_versionChangeTransaction->objectStoreDeleted(name); |
| 234 m_metadata.objectStores.remove(objectStoreId); | 234 m_metadata.objectStores.remove(objectStoreId); |
| 235 } | 235 } |
| 236 | 236 |
| 237 PassRefPtr<IDBTransaction> IDBDatabase::transaction(ScriptExecutionContext* cont
ext, const Vector<String>& scope, const String& modeString, ExceptionCode& ec) | 237 PassRefPtr<IDBTransaction> IDBDatabase::transaction(ScriptExecutionContext* cont
ext, const Vector<String>& scope, const String& modeString, ExceptionCode& ec) |
| 238 { | 238 { |
| 239 IDB_TRACE("IDBDatabase::transaction"); | 239 IDB_TRACE("IDBDatabase::transaction"); |
| 240 HistogramSupport::histogramEnumeration("WebCore.IndexedDB.FrontEndAPICalls",
IDBTransactionCall, IDBMethodsMax); | 240 HistogramSupport::histogramEnumeration("WebCore.IndexedDB.FrontEndAPICalls",
IDBTransactionCall, IDBMethodsMax); |
| 241 if (!scope.size()) { | 241 if (!scope.size()) { |
| 242 ec = INVALID_ACCESS_ERR; | 242 ec = InvalidAccessError; |
| 243 return 0; | 243 return 0; |
| 244 } | 244 } |
| 245 | 245 |
| 246 IndexedDB::TransactionMode mode = IDBTransaction::stringToMode(modeString, e
c); | 246 IndexedDB::TransactionMode mode = IDBTransaction::stringToMode(modeString, e
c); |
| 247 if (ec) | 247 if (ec) |
| 248 return 0; | 248 return 0; |
| 249 | 249 |
| 250 if (m_versionChangeTransaction || m_closePending) { | 250 if (m_versionChangeTransaction || m_closePending) { |
| 251 ec = INVALID_STATE_ERR; | 251 ec = InvalidStateError; |
| 252 return 0; | 252 return 0; |
| 253 } | 253 } |
| 254 | 254 |
| 255 Vector<int64_t> objectStoreIds; | 255 Vector<int64_t> objectStoreIds; |
| 256 for (size_t i = 0; i < scope.size(); ++i) { | 256 for (size_t i = 0; i < scope.size(); ++i) { |
| 257 int64_t objectStoreId = findObjectStoreId(scope[i]); | 257 int64_t objectStoreId = findObjectStoreId(scope[i]); |
| 258 if (objectStoreId == IDBObjectStoreMetadata::InvalidId) { | 258 if (objectStoreId == IDBObjectStoreMetadata::InvalidId) { |
| 259 // FIXME: Should use (NotFoundError, "..."). | 259 // FIXME: Should use (NotFoundError, "..."). |
| 260 ec = IDBNotFoundError; | 260 ec = IDBNotFoundError; |
| 261 return 0; | 261 return 0; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 { | 391 { |
| 392 return &m_eventTargetData; | 392 return &m_eventTargetData; |
| 393 } | 393 } |
| 394 | 394 |
| 395 EventTargetData* IDBDatabase::ensureEventTargetData() | 395 EventTargetData* IDBDatabase::ensureEventTargetData() |
| 396 { | 396 { |
| 397 return &m_eventTargetData; | 397 return &m_eventTargetData; |
| 398 } | 398 } |
| 399 | 399 |
| 400 } // namespace WebCore | 400 } // namespace WebCore |
| OLD | NEW |