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..988d4eca3fc230667de28f19a85f5eeb4668b012 100644 |
--- a/components/filesystem/file_system_app.cc |
+++ b/components/filesystem/file_system_app.cc |
@@ -4,11 +4,35 @@ |
#include "components/filesystem/file_system_app.h" |
+#include "base/command_line.h" |
+#include "base/files/file_path.h" |
+#include "base/files/file_util.h" |
#include "mojo/shell/public/cpp/connection.h" |
#include "mojo/shell/public/cpp/shell.h" |
+#if defined(OS_WIN) |
+#include "base/base_paths_win.h" |
+#include "base/path_service.h" |
+#include "base/strings/utf_string_conversions.h" |
+#elif defined(OS_ANDROID) |
+#include "base/base_paths_android.h" |
+#include "base/path_service.h" |
+#elif defined(OS_LINUX) |
+#include "base/environment.h" |
+#include "base/nix/xdg_util.h" |
+#elif defined(OS_MACOSX) |
+#include "base/base_paths_mac.h" |
+#include "base/path_service.h" |
+#endif |
+ |
namespace filesystem { |
+namespace { |
+ |
+const char kUserDataDir[] = "user-data-dir"; |
+ |
+} // namespace filesystem |
+ |
FileSystemApp::FileSystemApp() |
: shell_(nullptr), lock_table_(new LockTable) {} |
@@ -28,7 +52,43 @@ bool FileSystemApp::AcceptConnection(mojo::Connection* connection) { |
// |InterfaceFactory<Files>| implementation: |
void FileSystemApp::Create(mojo::Connection* connection, |
mojo::InterfaceRequest<FileSystem> request) { |
- new FileSystemImpl(connection, std::move(request), lock_table_.get()); |
+ new FileSystemImpl(connection, std::move(request), GetUserDataDir(), |
+ lock_table_.get()); |
+} |
+ |
+//static |
+base::FilePath FileSystemApp::GetUserDataDir() { |
+ base::FilePath path; |
+ |
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
+ if (command_line->HasSwitch(kUserDataDir)) { |
+ path = command_line->GetSwitchValuePath(kUserDataDir); |
+ } else { |
+#if defined(OS_WIN) |
+ CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &path)); |
+ path = path.Append(FILE_PATH_LITERAL("mandoline")); |
+#elif defined(OS_LINUX) |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ base::FilePath config_dir( |
+ base::nix::GetXDGDirectory(env.get(), |
+ base::nix::kXdgConfigHomeEnvVar, |
+ base::nix::kDotConfigDir)); |
+ path = config_dir.Append("mandoline"); |
+#elif defined(OS_MACOSX) |
+ CHECK(PathService::Get(base::DIR_APP_DATA, &path)); |
+ path = path.Append("Mandoline Shell"); |
+#elif defined(OS_ANDROID) |
+ CHECK(PathService::Get(base::DIR_ANDROID_APP_DATA, &path)); |
+ path = path.Append(FILE_PATH_LITERAL("mandoline")); |
+#else |
+ NOTIMPLEMENTED(); |
+#endif |
+ } |
+ |
+ if (!base::PathExists(path)) |
+ base::CreateDirectory(path); |
+ |
+ return path; |
} |
} // namespace filesystem |