nsresult DeleteFilesRunnable::DoDatabaseWork() { AssertIsOnIOThread(); MOZ_ASSERT(mState == State_DatabaseWorkOpen); if (!mFileManager->Invalidated()) { mDirectory = mFileManager->GetDirectory(); if (NS_WARN_IF(!mDirectory)) { return NS_ERROR_FAILURE; } mJournalDirectory = mFileManager->GetJournalDirectory(); if (NS_WARN_IF(!mJournalDirectory)) { return NS_ERROR_FAILURE; } for (int64_t fileId : mFileIds) { if (NS_FAILED(DeleteFile(fileId))) { NS_WARNING("Failed to delete file!"); } } } Finish(); return NS_OK; }
NS_IMETHODIMP GetFileReferencesHelper::Run() { AssertIsOnIOThread(); IndexedDatabaseManager* mgr = IndexedDatabaseManager::Get(); NS_ASSERTION(mgr, "This should never fail!"); nsRefPtr<FileManager> fileManager = mgr->GetFileManager(mPersistenceType, mOrigin, mDatabaseName); if (fileManager) { nsRefPtr<FileInfo> fileInfo = fileManager->GetFileInfo(mFileId); if (fileInfo) { fileInfo->GetReferences(&mMemRefCnt, &mDBRefCnt, &mSliceRefCnt); if (mMemRefCnt != -1) { // We added an extra temp ref, so account for that accordingly. mMemRefCnt--; } mResult = true; } } mozilla::MutexAutoLock lock(mMutex); NS_ASSERTION(mWaiting, "Huh?!"); mWaiting = false; mCondVar.Notify(); return NS_OK; }
void FileManagerInfo::AddFileManager(FileManager* aFileManager) { AssertIsOnIOThread(); nsTArray<RefPtr<FileManager> >& managers = GetArray(aFileManager->Type()); NS_ASSERTION(!managers.Contains(aFileManager), "Adding more than once?!"); managers.AppendElement(aFileManager); }
void IndexedDatabaseManager::InvalidateAllFileManagers() { AssertIsOnIOThread(); class MOZ_STACK_CLASS Helper final { public: static PLDHashOperator Enumerate(const nsACString& aKey, FileManagerInfo* aValue, void* aUserArg) { AssertIsOnIOThread(); MOZ_ASSERT(!aKey.IsEmpty()); MOZ_ASSERT(aValue); aValue->InvalidateAllFileManagers(); return PL_DHASH_NEXT; }
void IndexedDatabaseManager::InvalidateAllFileManagers() { AssertIsOnIOThread(); for (auto iter = mFileManagerInfos.ConstIter(); !iter.Done(); iter.Next()) { auto value = iter.Data(); MOZ_ASSERT(value); value->InvalidateAllFileManagers(); } mFileManagerInfos.Clear(); }
void IndexedDatabaseManager::AddFileManager(FileManager* aFileManager) { AssertIsOnIOThread(); NS_ASSERTION(aFileManager, "Null file manager!"); FileManagerInfo* info; if (!mFileManagerInfos.Get(aFileManager->Origin(), &info)) { info = new FileManagerInfo(); mFileManagerInfos.Put(aFileManager->Origin(), info); } info->AddFileManager(aFileManager); }
void FileManagerInfo::InvalidateAndRemoveFileManagers( PersistenceType aPersistenceType) { AssertIsOnIOThread(); nsTArray<RefPtr<FileManager > >& managers = GetArray(aPersistenceType); for (uint32_t i = 0; i < managers.Length(); i++) { managers[i]->Invalidate(); } managers.Clear(); }
already_AddRefed<FileManager> IndexedDatabaseManager::GetFileManager(PersistenceType aPersistenceType, const nsACString& aOrigin, const nsAString& aDatabaseName) { AssertIsOnIOThread(); FileManagerInfo* info; if (!mFileManagerInfos.Get(aOrigin, &info)) { return nullptr; } RefPtr<FileManager> fileManager = info->GetFileManager(aPersistenceType, aDatabaseName); return fileManager.forget(); }
void IndexedDatabaseManager::InvalidateFileManager(PersistenceType aPersistenceType, const nsACString& aOrigin, const nsAString& aDatabaseName) { AssertIsOnIOThread(); FileManagerInfo* info; if (!mFileManagerInfos.Get(aOrigin, &info)) { return; } info->InvalidateAndRemoveFileManager(aPersistenceType, aDatabaseName); if (!info->HasFileManagers()) { mFileManagerInfos.Remove(aOrigin); } }
void FileManagerInfo::InvalidateAndRemoveFileManager( PersistenceType aPersistenceType, const nsAString& aName) { AssertIsOnIOThread(); nsTArray<RefPtr<FileManager > >& managers = GetArray(aPersistenceType); for (uint32_t i = 0; i < managers.Length(); i++) { RefPtr<FileManager>& fileManager = managers[i]; if (fileManager->DatabaseName() == aName) { fileManager->Invalidate(); managers.RemoveElementAt(i); return; } } }
void FileManagerInfo::InvalidateAllFileManagers() const { AssertIsOnIOThread(); uint32_t i; for (i = 0; i < mPersistentStorageFileManagers.Length(); i++) { mPersistentStorageFileManagers[i]->Invalidate(); } for (i = 0; i < mTemporaryStorageFileManagers.Length(); i++) { mTemporaryStorageFileManagers[i]->Invalidate(); } for (i = 0; i < mDefaultStorageFileManagers.Length(); i++) { mDefaultStorageFileManagers[i]->Invalidate(); } }
already_AddRefed<FileManager> FileManagerInfo::GetFileManager(PersistenceType aPersistenceType, const nsAString& aName) const { AssertIsOnIOThread(); const nsTArray<RefPtr<FileManager> >& managers = GetImmutableArray(aPersistenceType); for (uint32_t i = 0; i < managers.Length(); i++) { const RefPtr<FileManager>& fileManager = managers[i]; if (fileManager->DatabaseName() == aName) { RefPtr<FileManager> result = fileManager; return result.forget(); } } return nullptr; }