| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 : m_version(version) | 86 : m_version(version) |
| 87 , m_callbacks(callbacks) | 87 , m_callbacks(callbacks) |
| 88 , m_databaseCallbacks(databaseCallbacks) | 88 , m_databaseCallbacks(databaseCallbacks) |
| 89 { | 89 { |
| 90 } | 90 } |
| 91 String m_version; | 91 String m_version; |
| 92 RefPtr<IDBCallbacks> m_callbacks; | 92 RefPtr<IDBCallbacks> m_callbacks; |
| 93 RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks; | 93 RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks; |
| 94 }; | 94 }; |
| 95 | 95 |
| 96 PassRefPtr<IDBDatabaseBackendImpl> IDBDatabaseBackendImpl::create(const String&
name, IDBBackingStore* database, IDBTransactionCoordinator* coordinator, IDBFact
oryBackendImpl* factory, const String& uniqueIdentifier) |
| 97 { |
| 98 RefPtr<IDBDatabaseBackendImpl> backend = adoptRef(new IDBDatabaseBackendImpl
(name, database, coordinator, factory, uniqueIdentifier)); |
| 99 if (!backend->openInternal()) |
| 100 return 0; |
| 101 return backend.release(); |
| 102 } |
| 103 |
| 96 IDBDatabaseBackendImpl::IDBDatabaseBackendImpl(const String& name, IDBBackingSto
re* backingStore, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl*
factory, const String& uniqueIdentifier) | 104 IDBDatabaseBackendImpl::IDBDatabaseBackendImpl(const String& name, IDBBackingSto
re* backingStore, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl*
factory, const String& uniqueIdentifier) |
| 97 : m_backingStore(backingStore) | 105 : m_backingStore(backingStore) |
| 98 , m_id(InvalidId) | 106 , m_id(InvalidId) |
| 99 , m_name(name) | 107 , m_name(name) |
| 100 , m_version("") | 108 , m_version("") |
| 101 , m_identifier(uniqueIdentifier) | 109 , m_identifier(uniqueIdentifier) |
| 102 , m_factory(factory) | 110 , m_factory(factory) |
| 103 , m_transactionCoordinator(coordinator) | 111 , m_transactionCoordinator(coordinator) |
| 104 { | 112 { |
| 105 ASSERT(!m_name.isNull()); | 113 ASSERT(!m_name.isNull()); |
| 106 openInternal(); | |
| 107 } | 114 } |
| 108 | 115 |
| 109 void IDBDatabaseBackendImpl::openInternal() | 116 bool IDBDatabaseBackendImpl::openInternal() |
| 110 { | 117 { |
| 111 bool success = m_backingStore->getIDBDatabaseMetaData(m_name, m_version, m_i
d); | 118 bool success = m_backingStore->getIDBDatabaseMetaData(m_name, m_version, m_i
d); |
| 112 ASSERT(success == (m_id != InvalidId)); | 119 ASSERT(success == (m_id != InvalidId)); |
| 113 if (success) { | 120 if (success) { |
| 114 loadObjectStores(); | 121 loadObjectStores(); |
| 115 return; | 122 return true; |
| 116 } | 123 } |
| 117 if (!m_backingStore->createIDBDatabaseMetaData(m_name, m_version, m_id)) | 124 return m_backingStore->createIDBDatabaseMetaData(m_name, m_version, m_id); |
| 118 ASSERT_NOT_REACHED(); // FIXME: Need better error handling. | |
| 119 } | 125 } |
| 120 | 126 |
| 121 IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl() | 127 IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl() |
| 122 { | 128 { |
| 123 m_factory->removeIDBDatabaseBackend(m_identifier); | 129 m_factory->removeIDBDatabaseBackend(m_identifier); |
| 124 } | 130 } |
| 125 | 131 |
| 126 PassRefPtr<IDBBackingStore> IDBDatabaseBackendImpl::backingStore() const | 132 PassRefPtr<IDBBackingStore> IDBDatabaseBackendImpl::backingStore() const |
| 127 { | 133 { |
| 128 return m_backingStore; | 134 return m_backingStore; |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 void IDBDatabaseBackendImpl::open(PassRefPtr<IDBDatabaseCallbacks> callbacks) | 324 void IDBDatabaseBackendImpl::open(PassRefPtr<IDBDatabaseCallbacks> callbacks) |
| 319 { | 325 { |
| 320 m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(callbacks)); | 326 m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(callbacks)); |
| 321 } | 327 } |
| 322 | 328 |
| 323 void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> callbacks) | 329 void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> callbacks) |
| 324 { | 330 { |
| 325 if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction ||
!m_pendingSetVersionCalls.isEmpty()) | 331 if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction ||
!m_pendingSetVersionCalls.isEmpty()) |
| 326 m_pendingOpenCalls.append(PendingOpenCall::create(callbacks)); | 332 m_pendingOpenCalls.append(PendingOpenCall::create(callbacks)); |
| 327 else { | 333 else { |
| 328 if (m_id == InvalidId) | 334 if (m_id == InvalidId && !openInternal()) |
| 329 openInternal(); | 335 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UN
KNOWN_ERR, "Internal error.")); |
| 330 callbacks->onSuccess(this); | 336 else |
| 337 callbacks->onSuccess(this); |
| 331 } | 338 } |
| 332 } | 339 } |
| 333 | 340 |
| 334 void IDBDatabaseBackendImpl::deleteDatabase(PassRefPtr<IDBCallbacks> prpCallback
s) | 341 void IDBDatabaseBackendImpl::deleteDatabase(PassRefPtr<IDBCallbacks> prpCallback
s) |
| 335 { | 342 { |
| 336 if (m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty()
) { | 343 if (m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty()
) { |
| 337 m_pendingDeleteCalls.append(PendingDeleteCall::create(prpCallbacks)); | 344 m_pendingDeleteCalls.append(PendingDeleteCall::create(prpCallbacks)); |
| 338 return; | 345 return; |
| 339 } | 346 } |
| 340 RefPtr<IDBCallbacks> callbacks = prpCallbacks; | 347 RefPtr<IDBCallbacks> callbacks = prpCallbacks; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 410 |
| 404 void IDBDatabaseBackendImpl::resetVersion(ScriptExecutionContext*, PassRefPtr<ID
BDatabaseBackendImpl> database, const String& version) | 411 void IDBDatabaseBackendImpl::resetVersion(ScriptExecutionContext*, PassRefPtr<ID
BDatabaseBackendImpl> database, const String& version) |
| 405 { | 412 { |
| 406 database->m_version = version; | 413 database->m_version = version; |
| 407 } | 414 } |
| 408 | 415 |
| 409 | 416 |
| 410 } // namespace WebCore | 417 } // namespace WebCore |
| 411 | 418 |
| 412 #endif // ENABLE(INDEXED_DATABASE) | 419 #endif // ENABLE(INDEXED_DATABASE) |
| OLD | NEW |