- add sources.
[platform/framework/web/crosswalk.git] / src / webkit / browser / fileapi / transient_file_util.cc
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 "webkit/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 "webkit/browser/fileapi/file_system_operation_context.h"
12 #include "webkit/browser/fileapi/file_system_url.h"
13 #include "webkit/browser/fileapi/isolated_context.h"
14
15 using webkit_blob::ScopedFile;
16
17 namespace fileapi {
18
19 namespace {
20
21 void RevokeFileSystem(const std::string& filesystem_id,
22                       const base::FilePath& /*path*/) {
23   IsolatedContext::GetInstance()->RevokeFileSystem(filesystem_id);
24 }
25
26 }  // namespace
27
28 ScopedFile TransientFileUtil::CreateSnapshotFile(
29     FileSystemOperationContext* context,
30     const FileSystemURL& url,
31     base::PlatformFileError* error,
32     base::PlatformFileInfo* file_info,
33     base::FilePath* platform_path) {
34   DCHECK(file_info);
35   *error = GetFileInfo(context, url, file_info, platform_path);
36   if (*error == base::PLATFORM_FILE_OK && file_info->is_directory)
37     *error = base::PLATFORM_FILE_ERROR_NOT_A_FILE;
38   if (*error != base::PLATFORM_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 fileapi