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..08a0fabf0a987a4ca886f8393e0a062ef5050df6 100644 |
--- a/storage/browser/fileapi/sandbox_file_system_backend_delegate.cc |
+++ b/storage/browser/fileapi/sandbox_file_system_backend_delegate.cc |
@@ -648,6 +648,28 @@ 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)) { |
+ // There shouldn't be an existing file system directory in the destination. |
+ DCHECK(!base::PathExists(destination->GetBaseDirectoryForOriginAndType( |
+ origin_url, type, false /* create */))); |
+ |
+ base::FilePath 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()); |
} |