AbstractDatabase::AbstractDatabase(ScriptExecutionContext* context, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize) : m_scriptExecutionContext(context) , m_name(name.crossThreadString()) , m_expectedVersion(expectedVersion.crossThreadString()) , m_displayName(displayName.crossThreadString()) , m_estimatedSize(estimatedSize) , m_guid(0) , m_opened(false) , m_new(false) { ASSERT(context->isContextThread()); m_contextThreadSecurityOrigin = m_scriptExecutionContext->securityOrigin(); m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName); if (m_name.isNull()) m_name = ""; { MutexLocker locker(guidMutex()); m_guid = guidForOriginAndName(securityOrigin()->toString(), name); HashSet<AbstractDatabase*>* hashSet = guidToDatabaseMap().get(m_guid); if (!hashSet) { hashSet = new HashSet<AbstractDatabase*>; guidToDatabaseMap().set(m_guid, hashSet); } hashSet->add(this); } m_filename = DatabaseTracker::tracker().fullPathForDatabase(securityOrigin(), m_name); DatabaseTracker::tracker().addOpenDatabase(this); }
DatabaseBackendBase::DatabaseBackendBase(PassRefPtr<DatabaseBackendContext> databaseContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, DatabaseType databaseType) : m_databaseContext(databaseContext) , m_name(name.isolatedCopy()) , m_expectedVersion(expectedVersion.isolatedCopy()) , m_displayName(displayName.isolatedCopy()) , m_estimatedSize(estimatedSize) , m_guid(0) , m_opened(false) , m_new(false) , m_isSyncDatabase(databaseType == DatabaseType::Sync) { m_contextThreadSecurityOrigin = m_databaseContext->securityOrigin()->isolatedCopy(); m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName); if (m_name.isNull()) m_name = ""; { MutexLocker locker(guidMutex()); m_guid = guidForOriginAndName(securityOrigin()->toString(), name); HashSet<DatabaseBackendBase*>* hashSet = guidToDatabaseMap().get(m_guid); if (!hashSet) { hashSet = new HashSet<DatabaseBackendBase*>; guidToDatabaseMap().set(m_guid, hashSet); } hashSet->add(this); } m_filename = DatabaseManager::manager().fullPathForDatabase(securityOrigin(), m_name); }
DatabaseBackendBase::DatabaseBackendBase(PassRefPtr<DatabaseBackendContext> databaseContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, DatabaseType databaseType) : m_databaseContext(databaseContext) , m_name(name.isolatedCopy()) , m_expectedVersion(expectedVersion.isolatedCopy()) , m_displayName(displayName.isolatedCopy()) , m_estimatedSize(estimatedSize) , m_opened(false) , m_new(false) , m_isSyncDatabase(databaseType == DatabaseType::Sync) { m_contextThreadSecurityOrigin = m_databaseContext->securityOrigin()->isolatedCopy(); m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName); if (m_name.isNull()) m_name = emptyString(); { std::lock_guard<std::mutex> locker(guidMutex()); m_guid = guidForOriginAndName(securityOrigin()->toString(), name); std::unique_ptr<HashSet<DatabaseBackendBase*>>& hashSet = guidToDatabaseMap().add(m_guid, nullptr).iterator->value; if (!hashSet) hashSet = std::make_unique<HashSet<DatabaseBackendBase*>>(); hashSet->add(this); } m_filename = DatabaseManager::manager().fullPathForDatabase(securityOrigin(), m_name); }
Database::Database(DatabaseContext* databaseContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize) : m_databaseContext(databaseContext) , m_name(name.isolatedCopy()) , m_expectedVersion(expectedVersion.isolatedCopy()) , m_displayName(displayName.isolatedCopy()) , m_estimatedSize(estimatedSize) , m_guid(0) , m_opened(false) , m_new(false) , m_transactionInProgress(false) , m_isTransactionQueueEnabled(true) { m_contextThreadSecurityOrigin = m_databaseContext->securityOrigin()->isolatedCopy(); m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName); if (m_name.isNull()) m_name = ""; { SafePointAwareMutexLocker locker(guidMutex()); m_guid = guidForOriginAndName(securityOrigin()->toString(), name); HashSet<Database*>* hashSet = guidToDatabaseMap().get(m_guid); if (!hashSet) { hashSet = new HashSet<Database*>; guidToDatabaseMap().set(m_guid, hashSet); } hashSet->add(this); } m_filename = DatabaseManager::manager().fullPathForDatabase(securityOrigin(), m_name); m_databaseThreadSecurityOrigin = m_contextThreadSecurityOrigin->isolatedCopy(); ASSERT(m_databaseContext->databaseThread()); ASSERT(m_databaseContext->isContextThread()); }