| Index: storage/browser/fileapi/sandbox_file_system_backend_delegate.cc
|
| diff --git a/storage/browser/fileapi/sandbox_file_system_backend_delegate.cc b/storage/browser/fileapi/sandbox_file_system_backend_delegate.cc
|
| index 9fb6b0edb56d2f9e3e9ef50392059a80ea8ea07e..7650e0c5dec9469006ebcdc207c1647c5b93e6cb 100644
|
| --- a/storage/browser/fileapi/sandbox_file_system_backend_delegate.cc
|
| +++ b/storage/browser/fileapi/sandbox_file_system_backend_delegate.cc
|
| @@ -648,6 +648,34 @@ void SandboxFileSystemBackendDelegate::CollectOpenFileSystemMetrics(
|
| #undef REPORT
|
| }
|
|
|
| +void SandboxFileSystemBackendDelegate::CopyFileSystem(
|
| + const GURL& origin_url,
|
| + FileSystemType type,
|
| + SandboxFileSystemBackendDelegate* destination) {
|
| + DCHECK(file_task_runner()->RunsTasksOnCurrentThread());
|
| +
|
| + base::FilePath base_path =
|
| + GetBaseDirectoryForOriginAndType(origin_url, type, false /* create */);
|
| + if (base::PathExists(base_path)) {
|
| + // Delete any existing file system directories in the destination. A
|
| + // previously failed migration
|
| + // may have left behind partially copied directories.
|
| + base::FilePath dest_path = destination->GetBaseDirectoryForOriginAndType(
|
| + origin_url, type, false /* create */);
|
| +
|
| + // Make sure we're not about to delete our own file system.
|
| + CHECK_NE(base_path.value(), dest_path.value());
|
| + base::DeleteFile(dest_path, true);
|
| +
|
| + dest_path = destination->GetBaseDirectoryForOriginAndType(
|
| + origin_url, type, true /* create */);
|
| +
|
| + obfuscated_file_util()->CloseFileSystemForOriginAndType(
|
| + origin_url, GetTypeString(type));
|
| + base::CopyDirectory(base_path, dest_path.DirName(), true /* rescursive */);
|
| + }
|
| +}
|
| +
|
| ObfuscatedFileUtil* SandboxFileSystemBackendDelegate::obfuscated_file_util() {
|
| return static_cast<ObfuscatedFileUtil*>(sync_file_util());
|
| }
|
|
|