Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: components/filesystem/file_system_app.cc

Issue 1720603002: Revert of mojo: Get mojo:leveldb and mojo:filesystem compiled into content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/filesystem/file_system_app.h ('k') | components/filesystem/file_system_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/filesystem/file_system_app.cc
diff --git a/components/filesystem/file_system_app.cc b/components/filesystem/file_system_app.cc
index d5d577aa18555cabe8274ab8c12a23303132a4c9..344a7cadc3a4c4d46eb7e441e73e218397545f69 100644
--- a/components/filesystem/file_system_app.cc
+++ b/components/filesystem/file_system_app.cc
@@ -4,13 +4,17 @@
#include "components/filesystem/file_system_app.h"
+#include <utility>
+
+#include "base/bind.h"
+#include "base/logging.h"
#include "mojo/shell/public/cpp/connection.h"
#include "mojo/shell/public/cpp/shell.h"
namespace filesystem {
FileSystemApp::FileSystemApp()
- : shell_(nullptr), lock_table_(new LockTable) {}
+ : shell_(nullptr), lock_table_(new LockTable), in_shutdown_(false) {}
FileSystemApp::~FileSystemApp() {}
@@ -25,10 +29,70 @@
return true;
}
+void FileSystemApp::RegisterDirectoryToClient(DirectoryImpl* directory,
+ FileSystemClientPtr client) {
+ directory->set_connection_error_handler(
+ base::Bind(&FileSystemApp::OnDirectoryConnectionError,
+ base::Unretained(this),
+ directory));
+ client_mapping_.emplace_back(directory, std::move(client));
+}
+
+bool FileSystemApp::ShellConnectionLost() {
+ if (client_mapping_.empty()) {
+ // If we have no current connections, we can shutdown immediately.
+ return true;
+ }
+
+ in_shutdown_ = true;
+
+ // We have live connections. Send a notification to each one indicating that
+ // they should shutdown.
+ for (std::vector<Client>::iterator it = client_mapping_.begin();
+ it != client_mapping_.end(); ++it) {
+ it->fs_client_->OnFileSystemShutdown();
+ }
+
+ return false;
+}
+
// |InterfaceFactory<Files>| implementation:
void FileSystemApp::Create(mojo::Connection* connection,
mojo::InterfaceRequest<FileSystem> request) {
- new FileSystemImpl(connection, std::move(request), lock_table_.get());
+ new FileSystemImpl(this, connection, std::move(request), lock_table_.get());
+}
+
+void FileSystemApp::OnDirectoryConnectionError(DirectoryImpl* directory) {
+ for (std::vector<Client>::iterator it = client_mapping_.begin();
+ it != client_mapping_.end(); ++it) {
+ if (it->directory_ == directory) {
+ client_mapping_.erase(it);
+
+ if (in_shutdown_ && client_mapping_.empty()) {
+ // We just cleared the last directory after our shell connection went
+ // away. Time to shut ourselves down.
+ shell_->Quit();
+ }
+
+ return;
+ }
+ }
+}
+
+FileSystemApp::Client::Client(DirectoryImpl* directory,
+ FileSystemClientPtr fs_client)
+ : directory_(directory), fs_client_(std::move(fs_client)) {}
+
+FileSystemApp::Client::Client(Client&& rhs)
+ : directory_(rhs.directory_), fs_client_(std::move(rhs.fs_client_)) {}
+
+FileSystemApp::Client::~Client() {}
+
+FileSystemApp::Client& FileSystemApp::Client::operator=(
+ FileSystemApp::Client&& rhs) {
+ directory_ = rhs.directory_;
+ fs_client_ = std::move(rhs.fs_client_);
+ return *this;
}
} // namespace filesystem
« no previous file with comments | « components/filesystem/file_system_app.h ('k') | components/filesystem/file_system_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698