|  | // Copyright 2015 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. | 
|  |  | 
|  | #include "components/filesystem/file_system_impl.h" | 
|  |  | 
|  | #include <stddef.h> | 
|  |  | 
|  | #include <memory> | 
|  | #include <utility> | 
|  |  | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/files/file_util.h" | 
|  | #include "base/files/scoped_file.h" | 
|  | #include "base/files/scoped_temp_dir.h" | 
|  | #include "base/logging.h" | 
|  | #include "base/memory/ptr_util.h" | 
|  | #include "build/build_config.h" | 
|  | #include "components/filesystem/directory_impl.h" | 
|  | #include "components/filesystem/lock_table.h" | 
|  | #include "mojo/public/cpp/bindings/strong_binding.h" | 
|  | #include "services/service_manager/public/cpp/identity.h" | 
|  | #include "url/gurl.h" | 
|  |  | 
|  | namespace filesystem { | 
|  |  | 
|  | FileSystemImpl::FileSystemImpl(const service_manager::Identity& remote_identity, | 
|  | base::FilePath persistent_dir, | 
|  | scoped_refptr<LockTable> lock_table) | 
|  | : remote_application_name_(remote_identity.name()), | 
|  | lock_table_(std::move(lock_table)), | 
|  | persistent_dir_(persistent_dir) {} | 
|  |  | 
|  | FileSystemImpl::~FileSystemImpl() { | 
|  | } | 
|  |  | 
|  | void FileSystemImpl::OpenTempDirectory( | 
|  | mojom::DirectoryRequest directory, | 
|  | const OpenTempDirectoryCallback& callback) { | 
|  | // Set only if the |DirectoryImpl| will own a temporary directory. | 
|  | std::unique_ptr<base::ScopedTempDir> temp_dir(new base::ScopedTempDir); | 
|  | CHECK(temp_dir->CreateUniqueTempDir()); | 
|  |  | 
|  | base::FilePath path = temp_dir->GetPath(); | 
|  | scoped_refptr<SharedTempDir> shared_temp_dir = | 
|  | new SharedTempDir(std::move(temp_dir)); | 
|  | mojo::MakeStrongBinding(base::MakeUnique<DirectoryImpl>( | 
|  | path, std::move(shared_temp_dir), lock_table_), | 
|  | std::move(directory)); | 
|  | callback.Run(mojom::FileError::OK); | 
|  | } | 
|  |  | 
|  | void FileSystemImpl::OpenPersistentFileSystem( | 
|  | mojo::InterfaceRequest<mojom::Directory> directory, | 
|  | const OpenPersistentFileSystemCallback& callback) { | 
|  | std::unique_ptr<base::ScopedTempDir> temp_dir; | 
|  | base::FilePath path = persistent_dir_; | 
|  | if (!base::PathExists(path)) | 
|  | base::CreateDirectory(path); | 
|  |  | 
|  | scoped_refptr<SharedTempDir> shared_temp_dir = | 
|  | new SharedTempDir(std::move(temp_dir)); | 
|  |  | 
|  | mojo::MakeStrongBinding(base::MakeUnique<DirectoryImpl>( | 
|  | path, std::move(shared_temp_dir), lock_table_), | 
|  | std::move(directory)); | 
|  | callback.Run(mojom::FileError::OK); | 
|  | } | 
|  |  | 
|  | }  // namespace filesystem |