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 |