• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "storage/browser/fileapi/transient_file_util.h"
6 
7 #include <string>
8 
9 #include "base/bind.h"
10 #include "base/files/file_path.h"
11 #include "storage/browser/fileapi/file_system_operation_context.h"
12 #include "storage/browser/fileapi/file_system_url.h"
13 #include "storage/browser/fileapi/isolated_context.h"
14 
15 using storage::ScopedFile;
16 
17 namespace storage {
18 
19 namespace {
20 
RevokeFileSystem(const std::string & filesystem_id,const base::FilePath &)21 void RevokeFileSystem(const std::string& filesystem_id,
22                       const base::FilePath& /*path*/) {
23   IsolatedContext::GetInstance()->RevokeFileSystem(filesystem_id);
24 }
25 
26 }  // namespace
27 
CreateSnapshotFile(FileSystemOperationContext * context,const FileSystemURL & url,base::File::Error * error,base::File::Info * file_info,base::FilePath * platform_path)28 ScopedFile TransientFileUtil::CreateSnapshotFile(
29     FileSystemOperationContext* context,
30     const FileSystemURL& url,
31     base::File::Error* error,
32     base::File::Info* file_info,
33     base::FilePath* platform_path) {
34   DCHECK(file_info);
35   *error = GetFileInfo(context, url, file_info, platform_path);
36   if (*error == base::File::FILE_OK && file_info->is_directory)
37     *error = base::File::FILE_ERROR_NOT_A_FILE;
38   if (*error != base::File::FILE_OK)
39     return ScopedFile();
40 
41   // Sets-up a transient filesystem.
42   DCHECK(!platform_path->empty());
43   DCHECK(!url.filesystem_id().empty());
44 
45   ScopedFile scoped_file(
46       *platform_path,
47       ScopedFile::DELETE_ON_SCOPE_OUT,
48       context->task_runner());
49   scoped_file.AddScopeOutCallback(
50       base::Bind(&RevokeFileSystem, url.filesystem_id()), NULL);
51 
52   return scoped_file.Pass();
53 }
54 
55 }  // namespace storage
56