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 15using webkit_blob::ScopedFile; 16 17namespace fileapi { 18 19namespace { 20 21void RevokeFileSystem(const std::string& filesystem_id, 22 const base::FilePath& /*path*/) { 23 IsolatedContext::GetInstance()->RevokeFileSystem(filesystem_id); 24} 25 26} // namespace 27 28ScopedFile 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 56