void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, PassOwnPtr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata, WebIDBDataLoss dataLoss, String dataLossMessage) { IDB_TRACE("IDBOpenDBRequest::onUpgradeNeeded()"); if (m_contextStopped || !executionContext()) { OwnPtr<WebIDBDatabase> db = backend; db->abort(m_transactionId); db->close(); return; } if (!shouldEnqueueEvent()) return; ASSERT(m_databaseCallbacks); IDBDatabase* idbDatabase = IDBDatabase::create(executionContext(), backend, m_databaseCallbacks.release()); idbDatabase->setMetadata(metadata); if (oldVersion == IDBDatabaseMetadata::NoIntVersion) { // This database hasn't had an integer version before. oldVersion = IDBDatabaseMetadata::DefaultIntVersion; } IDBDatabaseMetadata oldMetadata(metadata); oldMetadata.intVersion = oldVersion; m_transaction = IDBTransaction::create(scriptState(), m_transactionId, idbDatabase, this, oldMetadata); setResult(IDBAny::create(idbDatabase)); if (m_version == IDBDatabaseMetadata::NoIntVersion) m_version = 1; enqueueEvent(IDBVersionChangeEvent::create(EventTypeNames::upgradeneeded, oldVersion, m_version, dataLoss, dataLossMessage)); }
void IDBOpenDBRequest::onSuccess(PassOwnPtr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata) { IDB_TRACE("IDBOpenDBRequest::onSuccess()"); if (m_contextStopped || !executionContext()) { OwnPtr<WebIDBDatabase> db = backend; if (db) db->close(); return; } if (!shouldEnqueueEvent()) return; IDBDatabase* idbDatabase = nullptr; if (resultAsAny()) { // Previous onUpgradeNeeded call delivered the backend. ASSERT(!backend.get()); idbDatabase = resultAsAny()->idbDatabase(); ASSERT(idbDatabase); ASSERT(!m_databaseCallbacks); } else { ASSERT(backend.get()); ASSERT(m_databaseCallbacks); idbDatabase = IDBDatabase::create(executionContext(), backend, m_databaseCallbacks.release()); setResult(IDBAny::create(idbDatabase)); } idbDatabase->setMetadata(metadata); enqueueEvent(Event::create(EventTypeNames::success)); }