Index: components/leveldb/leveldb_file_thread.h |
diff --git a/components/leveldb/leveldb_file_thread.h b/components/leveldb/leveldb_file_thread.h |
deleted file mode 100644 |
index 769c324220784aa083ed3e67d65be2d211f532b1..0000000000000000000000000000000000000000 |
--- a/components/leveldb/leveldb_file_thread.h |
+++ /dev/null |
@@ -1,252 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef COMPONENTS_LEVELDB_LEVELDB_FILE_THREAD_H_ |
-#define COMPONENTS_LEVELDB_LEVELDB_FILE_THREAD_H_ |
- |
-#include <map> |
-#include <string> |
-#include <utility> |
-#include <vector> |
- |
-#include "base/files/file.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "base/threading/thread.h" |
-#include "components/filesystem/public/interfaces/directory.mojom.h" |
- |
-namespace leveldb { |
- |
-// The thread which services file requests from leveldb. |
-// |
-// MojoEnv is an object passed to the leveldb implementation which can be |
-// called from multiple threads. mojo pipes are bound to a single |
-// thread. Because of this mismatch, we create a thread which owns the mojo |
-// pipe, sends and receives messages. |
-// |
-// All public methods can be accessed from any thread. |
-class LevelDBFileThread : public base::Thread, |
- public base::RefCountedThreadSafe<LevelDBFileThread> { |
- public: |
- LevelDBFileThread(); |
- |
- // A private struct to hide the underlying file that holds the lock from our |
- // callers, forcing them to go through our LockFile()/UnlockFile() interface |
- // so that they don't try to use the underlying pointer from an unsafe thread. |
- struct OpaqueLock; |
- |
- // A private struct to hide the underlying root directory that we're |
- // operating in. LevelDBFileThread will want to own all the directory |
- // pointers, so while opening a database, we pass the directory to the thread |
- // it will be operated on. |
- struct OpaqueDir; |
- |
- // Passes ownership of a |directory| to the other thread, giving a reference |
- // handle back to the caller. |
- OpaqueDir* RegisterDirectory(filesystem::DirectoryPtr directory); |
- void UnregisterDirectory(OpaqueDir* dir); |
- |
- // Synchronously calls Directory.OpenFileHandle(). |
- base::File OpenFileHandle(OpaqueDir* dir, |
- const std::string& name, |
- uint32_t open_flags); |
- |
- // Synchronously flushes |directory_|. |
- filesystem::FileError SyncDirectory(OpaqueDir* dir, |
- const std::string& name); |
- |
- // Synchronously checks whether |name| exists. |
- bool FileExists(OpaqueDir* dir, |
- const std::string& name); |
- |
- // Synchronously returns the filenames of all files in |path|. |
- filesystem::FileError GetChildren(OpaqueDir* dir, |
- const std::string& path, |
- std::vector<std::string>* result); |
- |
- // Synchronously deletes |path|. |
- filesystem::FileError Delete(OpaqueDir* dir, |
- const std::string& path, |
- uint32_t delete_flags); |
- |
- // Synchronously creates |path|. |
- filesystem::FileError CreateDir(OpaqueDir* dir, |
- const std::string& path); |
- |
- // Synchronously gets the size of a file. |
- filesystem::FileError GetFileSize(OpaqueDir* dir, |
- const std::string& path, |
- uint64_t* file_size); |
- |
- // Synchronously renames a file. |
- filesystem::FileError RenameFile(OpaqueDir* dir, |
- const std::string& old_path, |
- const std::string& new_path); |
- |
- // Synchronously locks a file. Returns both the file return code, and if OK, |
- // an opaque object to the lock to enforce going through this interface to |
- // unlock the file so that unlocking happens on the correct thread. |
- std::pair<filesystem::FileError, OpaqueLock*> LockFile( |
- OpaqueDir* dir, const std::string& path); |
- |
- // Unlocks a file. LevelDBFileThread takes ownership of lock. (We don't make |
- // this a scoped_ptr because exporting the ctor/dtor for this struct publicly |
- // defeats the purpose of the struct.) |
- filesystem::FileError UnlockFile(OpaqueLock* lock); |
- |
- private: |
- friend class base::RefCountedThreadSafe<LevelDBFileThread>; |
- ~LevelDBFileThread() override; |
- |
- // Called from the beginning of most impls which take an OpaqueDir. Returns |
- // true if the directory was unbound between the time the task was posted and |
- // the task was run on this thread. If it was, no further processing should |
- // be done (and the waitable event will be Signal()ed). |
- bool RegisterDirAndWaitableEvent(OpaqueDir* dir, |
- base::WaitableEvent* done_event); |
- |
- // Cleans up internal state related to the waitable event before Signal()ing |
- // it. |
- void CompleteWaitableEvent(base::WaitableEvent* done_event); |
- |
- // Called when one of our directory or files has a connection error. This |
- // will find all the outstanding waitable events that depend on it and signal |
- // them. |
- void OnConnectionError(); |
- |
- void RegisterDirectoryImpl( |
- base::WaitableEvent* done_event, |
- mojo::InterfacePtrInfo<filesystem::Directory> directory_info, |
- OpaqueDir** out_dir); |
- void UnregisterDirectoryImpl(base::WaitableEvent* done_event, |
- OpaqueDir* dir); |
- |
- // Shared callback function which signals for the methods that only return an |
- // error code. |
- void OnSimpleComplete(base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error); |
- |
- void OpenFileHandleImpl(OpaqueDir* dir, |
- std::string name, |
- base::WaitableEvent* done_event, |
- uint32_t open_flags, |
- base::File* out_file); |
- void OnOpenFileHandleComplete(base::WaitableEvent* done_event, |
- base::File* output_file, |
- filesystem::FileError err, |
- mojo::ScopedHandle handle); |
- |
- void SyncDirectoryImpl(OpaqueDir* dir, |
- std::string name, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- void OnSyncDirctoryOpened(scoped_ptr<filesystem::DirectoryPtr> dir, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error); |
- void OnSyncDirectoryComplete(scoped_ptr<filesystem::DirectoryPtr> dir, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error); |
- |
- void FileExistsImpl(OpaqueDir* dir, |
- std::string name, |
- base::WaitableEvent* done_event, |
- bool* exists); |
- void OnFileExistsComplete(base::WaitableEvent* done_event, |
- bool* exists, |
- filesystem::FileError err, |
- bool in_exists); |
- |
- void GetChildrenImpl(OpaqueDir* dir, |
- std::string name, |
- std::vector<std::string>* contents, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- void OnGetChildrenOpened(scoped_ptr<filesystem::DirectoryPtr> dir, |
- std::vector<std::string>* contents, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error); |
- void OnGetChildrenComplete( |
- scoped_ptr<filesystem::DirectoryPtr> dir, |
- std::vector<std::string>* out_contents, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error, |
- mojo::Array<filesystem::DirectoryEntryPtr> directory_contents); |
- |
- void DeleteImpl(OpaqueDir* dir, |
- std::string name, |
- uint32_t delete_flags, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- |
- void CreateDirImpl(OpaqueDir* dir, |
- std::string name, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- |
- void GetFileSizeImpl(OpaqueDir* dir, |
- const std::string& path, |
- uint64_t* file_size, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- void OnGetFileSizeImpl(uint64_t* file_size, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error, |
- filesystem::FileInformationPtr file_info); |
- |
- void RenameFileImpl(OpaqueDir* dir, |
- const std::string& old_path, |
- const std::string& new_path, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- |
- void LockFileImpl(OpaqueDir* dir, |
- const std::string& path, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- OpaqueLock** out_lock); |
- void OnOpenLockFileComplete(scoped_ptr<filesystem::FilePtr> file, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- OpaqueLock** out_lock, |
- filesystem::FileError in_error); |
- void OnLockFileComplete(scoped_ptr<filesystem::FilePtr> file, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- OpaqueLock** out_lock, |
- filesystem::FileError in_error); |
- |
- void UnlockFileImpl(scoped_ptr<OpaqueLock> lock, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error); |
- void OnUnlockFileCompleted(scoped_ptr<OpaqueLock> lock, |
- base::WaitableEvent* done_event, |
- filesystem::FileError* out_error, |
- filesystem::FileError in_error); |
- |
- // Overridden from base::Thread: |
- void Init() override; |
- void CleanUp() override; |
- |
- int outstanding_opaque_dirs_; |
- |
- // When our public methods are called, we create a WaitableEvent on their |
- // thread so that we can block their thread on the LevelDBFileThread. We then |
- // need to track what DirectoryPtrs and FilePtrs, which if they get closed, |
- // should immediately trigger the waitable event. |
- struct WaitableEventDependencies; |
- std::map<base::WaitableEvent*, WaitableEventDependencies> |
- waitable_event_dependencies_; |
- |
- DISALLOW_COPY_AND_ASSIGN(LevelDBFileThread); |
-}; |
- |
-} // namespace leveldb |
- |
-#endif // COMPONENTS_LEVELDB_LEVELDB_FILE_THREAD_H_ |