void DatabaseTracker::removeOpenDatabase(AbstractDatabase* database) { if (!database->scriptExecutionContext()->isContextThread()) { database->scriptExecutionContext()->postTask(TrackerRemoveOpenDatabaseTask::create(database)); return; } MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); ASSERT(m_openDatabaseMap); DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin()); ASSERT(nameMap); String name(database->stringIdentifier()); DatabaseSet* databaseSet = nameMap->get(name); ASSERT(databaseSet); databaseSet->remove(database); if (databaseSet->isEmpty()) { nameMap->remove(name); delete databaseSet; if (nameMap->isEmpty()) { m_openDatabaseMap->remove(database->securityOrigin()); delete nameMap; } } DatabaseObserver::databaseClosed(database); }
void DatabaseTracker::removeOpenDatabase(Database* database) { { MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); String originString = database->getSecurityOrigin()->toRawString(); ASSERT(m_openDatabaseMap); DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString); if (!nameMap) return; String name(database->stringIdentifier()); DatabaseSet* databaseSet = nameMap->get(name); if (!databaseSet) return; DatabaseSet::iterator found = databaseSet->find(database); if (found == databaseSet->end()) return; databaseSet->remove(found); if (databaseSet->isEmpty()) { nameMap->remove(name); delete databaseSet; if (nameMap->isEmpty()) { m_openDatabaseMap->remove(originString); delete nameMap; } } } databaseClosed(database); }
void DatabaseTracker::removeOpenDatabase(DatabaseBackend* database) { String originIdentifier = database->securityOrigin()->databaseIdentifier(); MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); ASSERT(m_openDatabaseMap); DatabaseNameMap* nameMap = m_openDatabaseMap->get(originIdentifier); if (!nameMap) return; String name(database->stringIdentifier()); DatabaseSet* databaseSet = nameMap->get(name); if (!databaseSet) return; DatabaseSet::iterator found = databaseSet->find(database); if (found == databaseSet->end()) return; databaseSet->remove(found); if (databaseSet->isEmpty()) { nameMap->remove(name); delete databaseSet; if (nameMap->isEmpty()) { m_openDatabaseMap->remove(originIdentifier); delete nameMap; } } if (!database->scriptExecutionContext()->isContextThread()) database->scriptExecutionContext()->postTask(NotifyDatabaseObserverOnCloseTask::create(database)); else DatabaseObserver::databaseClosed(database); }
void DatabaseTracker::removeOpenDatabase(DatabaseBackendBase* database) { if (!database) return; { MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); if (!m_openDatabaseMap) { ASSERT_NOT_REACHED(); return; } String name(database->stringIdentifier()); DatabaseNameMap* nameMap = m_openDatabaseMap->get(database->securityOrigin()); if (!nameMap) { ASSERT_NOT_REACHED(); return; } DatabaseSet* databaseSet = nameMap->get(name); if (!databaseSet) { ASSERT_NOT_REACHED(); return; } databaseSet->remove(database); LOG(StorageAPI, "Removed open Database %s (%p)\n", database->stringIdentifier().ascii().data(), database); if (!databaseSet->isEmpty()) return; nameMap->remove(name); delete databaseSet; if (!nameMap->isEmpty()) return; m_openDatabaseMap->remove(database->securityOrigin()); delete nameMap; } }