Changeset 133776 in webkit
- Timestamp:
- Nov 7, 2012 10:26:18 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r133772 r133776 1 2012-11-07 Joshua Bell <jsbell@chromium.org> 2 3 IndexedDB: Assertion failure with open() within upgradeneeded 4 https://bugs.webkit.org/show_bug.cgi?id=96947 5 6 Reviewed by Dimitri Glazkov. 7 8 Exercise the code path leading to the assert by having a second version change transaction 9 unblocked by the first's connection closing. Includes a known failure due to metadata 10 snapshot timing. 11 12 * storage/indexeddb/resources/unblocked-version-changes.js: Added. 13 (test): 14 (openConnection): 15 (onUpgradeNeeded): 16 (onError): 17 (onUpgradeNeeded2): 18 (onSuccess): 19 * storage/indexeddb/unblocked-version-changes-expected.txt: Added. 20 * storage/indexeddb/unblocked-version-changes.html: Added. 21 1 22 2012-11-06 Simon Fraser <simon.fraser@apple.com> 2 23 -
trunk/Source/WebCore/ChangeLog
r133771 r133776 1 2012-11-07 Joshua Bell <jsbell@chromium.org> 2 3 IndexedDB: Assertion failure with open() within upgradeneeded 4 https://bugs.webkit.org/show_bug.cgi?id=96947 5 6 Reviewed by Dimitri Glazkov. 7 8 Postpone creation of the "pending second half open" until the version change 9 transaction has started. 10 11 Test: storage/indexeddb/unblocked-version-changes.html 12 13 * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: 14 (WebCore::IDBDatabaseBackendImpl::setIntVersionInternal): 15 (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction): 16 * Modules/indexeddb/IDBDatabaseBackendImpl.h: 17 (IDBDatabaseBackendImpl): 18 * Modules/indexeddb/IDBDatabaseCallbacks.h: 19 1 20 2012-11-07 Alexandru Chiculita <achicu@adobe.com> 2 21 -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp
r133195 r133776 305 305 } 306 306 307 void IDBDatabaseBackendImpl::setIntVersionInternal(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl> database, int64_t version, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendImpl> transaction) 308 { 307 void IDBDatabaseBackendImpl::setIntVersionInternal(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl> database, int64_t version, PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks, PassRefPtr<IDBTransactionBackendImpl> transaction) 308 { 309 RefPtr<IDBCallbacks> callbacks(prpCallbacks); 309 310 int64_t databaseId = database->id(); 310 311 int64_t oldVersion = database->m_metadata.intVersion; … … 317 318 return; 318 319 } 320 ASSERT(!database->m_pendingSecondHalfOpenWithVersion); 321 database->m_pendingSecondHalfOpenWithVersion = PendingOpenWithVersionCall::create(callbacks, databaseCallbacks, version); 319 322 callbacks->onUpgradeNeeded(oldVersion, transaction, database); 320 323 } … … 499 502 500 503 RefPtr<IDBDatabaseBackendImpl> database = this; 501 OwnPtr<ScriptExecutionContext::Task> intVersionTask = createCallbackTask(&IDBDatabaseBackendImpl::setIntVersionInternal, database, requestedVersion, callbacks, transaction);504 OwnPtr<ScriptExecutionContext::Task> intVersionTask = createCallbackTask(&IDBDatabaseBackendImpl::setIntVersionInternal, database, requestedVersion, callbacks, databaseCallbacks, transaction); 502 505 OwnPtr<ScriptExecutionContext::Task> resetVersionOnAbortTask = createCallbackTask(&IDBDatabaseBackendImpl::resetVersion, database, m_metadata.version, m_metadata.intVersion); 503 506 if (!transaction->scheduleTask(intVersionTask.release(), resetVersionOnAbortTask.release())) { … … 507 510 } 508 511 ASSERT(!m_pendingSecondHalfOpenWithVersion); 509 m_pendingSecondHalfOpenWithVersion = PendingOpenWithVersionCall::create(callbacks, databaseCallbacks, requestedVersion);510 512 m_databaseCallbacksSet.add(databaseCallbacks); 511 513 } -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h
r133195 r133776 90 90 static void deleteObjectStoreInternal(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBTransactionBackendImpl>); 91 91 static void setVersionInternal(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, const String& version, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendImpl>); 92 static void setIntVersionInternal(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, int64_t version, PassRefPtr<IDBCallbacks>, PassRefPtr<IDB TransactionBackendImpl>);92 static void setIntVersionInternal(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, int64_t version, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBDatabaseCallbacks>, PassRefPtr<IDBTransactionBackendImpl>); 93 93 94 94 // These are used as setVersion transaction abort tasks. -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacks.h
r131371 r133776 35 35 namespace WebCore { 36 36 37 class IDBDatabaseCallbacks : public RefCounted<IDBDatabaseCallbacks> { 37 // FIXME: Uses ThreadSafeRefCounted for storage in ScriptExecutionContext::Task but 38 // it is never actually used on multiple threads. http://webkit.org/b/101483 39 class IDBDatabaseCallbacks : public ThreadSafeRefCounted<IDBDatabaseCallbacks> { 38 40 public: 39 41 virtual ~IDBDatabaseCallbacks() { }
Note: See TracChangeset
for help on using the changeset viewer.