| Index: components/filesystem/file_system_impl.cc | 
| diff --git a/components/filesystem/file_system_impl.cc b/components/filesystem/file_system_impl.cc | 
| index 1ce5d255e5b0e131bd957a429f968f5a88be2cf3..f33aea8947d3380314d5c9c09cdfb992d3da1329 100644 | 
| --- a/components/filesystem/file_system_impl.cc | 
| +++ b/components/filesystem/file_system_impl.cc | 
| @@ -15,45 +15,15 @@ | 
| #include "base/files/scoped_temp_dir.h" | 
| #include "base/logging.h" | 
| #include "base/memory/scoped_ptr.h" | 
| -#include "base/posix/eintr_wrapper.h" | 
| #include "components/filesystem/directory_impl.h" | 
| +#include "mojo/application/public/cpp/application_connection.h" | 
|  | 
| namespace filesystem { | 
|  | 
| -namespace { | 
| - | 
| -base::ScopedFD CreateAndOpenTemporaryDirectory( | 
| -    scoped_ptr<base::ScopedTempDir>* temp_dir) { | 
| -  (*temp_dir).reset(new base::ScopedTempDir()); | 
| -  CHECK((*temp_dir)->CreateUniqueTempDir()); | 
| - | 
| -  base::ScopedFD temp_dir_fd(HANDLE_EINTR( | 
| -      open((*temp_dir)->path().value().c_str(), O_RDONLY | O_DIRECTORY, 0))); | 
| -  PCHECK(temp_dir_fd.is_valid()); | 
| -  DVLOG(1) << "Made a temporary directory: " << (*temp_dir)->path().value(); | 
| -  return temp_dir_fd.Pass(); | 
| -} | 
| - | 
| -#ifndef NDEBUG | 
| -base::ScopedFD OpenMojoDebugDirectory() { | 
| -  const char* home_dir_name = getenv("HOME"); | 
| -  if (!home_dir_name || !home_dir_name[0]) { | 
| -    LOG(ERROR) << "HOME not set"; | 
| -    return base::ScopedFD(); | 
| -  } | 
| -  base::FilePath mojo_debug_dir_name = | 
| -      base::FilePath(home_dir_name).Append("MojoDebug"); | 
| -  return base::ScopedFD(HANDLE_EINTR( | 
| -      open(mojo_debug_dir_name.value().c_str(), O_RDONLY | O_DIRECTORY, 0))); | 
| -} | 
| -#endif | 
| - | 
| -}  // namespace | 
| - | 
| FileSystemImpl::FileSystemImpl(mojo::ApplicationConnection* connection, | 
| mojo::InterfaceRequest<FileSystem> request) | 
| -    : binding_(this, request.Pass()) { | 
| -  // TODO(vtl): record other app's URL | 
| +    : remote_application_url_(connection->GetRemoteApplicationURL()), | 
| +      binding_(this, request.Pass()) { | 
| } | 
|  | 
| FileSystemImpl::~FileSystemImpl() { | 
| @@ -62,33 +32,24 @@ FileSystemImpl::~FileSystemImpl() { | 
| void FileSystemImpl::OpenFileSystem(const mojo::String& file_system, | 
| mojo::InterfaceRequest<Directory> directory, | 
| const OpenFileSystemCallback& callback) { | 
| -  base::ScopedFD dir_fd; | 
| // Set only if the |DirectoryImpl| will own a temporary directory. | 
| scoped_ptr<base::ScopedTempDir> temp_dir; | 
| -  if (file_system.is_null()) { | 
| -    // TODO(vtl): ScopedGeneric (hence ScopedFD) doesn't have an operator=! | 
| -    dir_fd.reset(CreateAndOpenTemporaryDirectory(&temp_dir).release()); | 
| -    DCHECK(temp_dir); | 
| -  } else if (file_system.get() == std::string("debug")) { | 
| -#ifdef NDEBUG | 
| -    LOG(WARNING) << "~/MojoDebug only available in Debug builds"; | 
| -#else | 
| -    // TODO(vtl): ScopedGeneric (hence ScopedFD) doesn't have an operator=! | 
| -    dir_fd.reset(OpenMojoDebugDirectory().release()); | 
| -#endif | 
| -    if (!dir_fd.is_valid()) { | 
| -      LOG(ERROR) << "~/MojoDebug unavailable"; | 
| -      callback.Run(ERROR_UNAVAILABLE); | 
| -      return; | 
| -    } | 
| -  } else { | 
| -    LOG(ERROR) << "Unknown file system: " << file_system.get(); | 
| -    callback.Run(ERROR_UNIMPLEMENTED); | 
| -    return; | 
| +  base::FilePath path; | 
| +  if (file_system.get() == std::string("temp")) { | 
| +    temp_dir.reset(new base::ScopedTempDir); | 
| +    CHECK(temp_dir->CreateUniqueTempDir()); | 
| +    path = temp_dir->path(); | 
| +  } else if (file_system.get() == std::string("origin")) { | 
| +    // TODO(erg): We should serve a persistent directory based on the | 
| +    // subdirectory |remote_application_url_| of a profile directory. | 
| } | 
|  | 
| -  new DirectoryImpl(directory.Pass(), dir_fd.Pass(), temp_dir.Pass()); | 
| -  callback.Run(ERROR_OK); | 
| +  if (!path.empty()) { | 
| +    new DirectoryImpl(directory.Pass(), path, temp_dir.Pass()); | 
| +    callback.Run(ERROR_OK); | 
| +  } else { | 
| +    callback.Run(ERROR_FAILED); | 
| +  } | 
| } | 
|  | 
| }  // namespace filesystem | 
|  |