// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "webkit/glue/webfileutilities_impl.h" #include "base/file_path.h" #include "base/file_util.h" #include "base/logging.h" #include "net/base/file_stream.h" #include "net/base/net_util.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebURL.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileInfo.h" #include "webkit/base/file_path_string_conversions.h" #include "webkit/glue/webkit_glue.h" using WebKit::WebString; namespace webkit_glue { WebFileUtilitiesImpl::WebFileUtilitiesImpl() : sandbox_enabled_(true) { } WebFileUtilitiesImpl::~WebFileUtilitiesImpl() { } bool WebFileUtilitiesImpl::fileExists(const WebString& path) { base::FilePath file_path = webkit_base::WebStringToFilePath(path); return file_util::PathExists(file_path); } bool WebFileUtilitiesImpl::deleteFile(const WebString& path) { NOTREACHED(); return false; } bool WebFileUtilitiesImpl::deleteEmptyDirectory(const WebString& path) { NOTREACHED(); return false; } bool WebFileUtilitiesImpl::getFileInfo(const WebString& path, WebKit::WebFileInfo& web_file_info) { if (sandbox_enabled_) { NOTREACHED(); return false; } base::PlatformFileInfo file_info; if (!file_util::GetFileInfo(webkit_base::WebStringToFilePath(path), &file_info)) return false; webkit_glue::PlatformFileInfoToWebFileInfo(file_info, &web_file_info); web_file_info.platformPath = path; return true; } WebString WebFileUtilitiesImpl::directoryName(const WebString& path) { base::FilePath file_path(webkit_base::WebStringToFilePath(path)); return webkit_base::FilePathToWebString(file_path.DirName()); } WebString WebFileUtilitiesImpl::pathByAppendingComponent( const WebString& webkit_path, const WebString& webkit_component) { base::FilePath path(webkit_base::WebStringToFilePath(webkit_path)); base::FilePath component(webkit_base::WebStringToFilePath(webkit_component)); base::FilePath combined_path = path.Append(component); return webkit_base::FilePathStringToWebString(combined_path.value()); } bool WebFileUtilitiesImpl::makeAllDirectories(const WebString& path) { DCHECK(!sandbox_enabled_); base::FilePath file_path = webkit_base::WebStringToFilePath(path); return file_util::CreateDirectory(file_path); } WebString WebFileUtilitiesImpl::getAbsolutePath(const WebString& path) { base::FilePath file_path(webkit_base::WebStringToFilePath(path)); file_util::AbsolutePath(&file_path); return webkit_base::FilePathStringToWebString(file_path.value()); } bool WebFileUtilitiesImpl::isDirectory(const WebString& path) { base::FilePath file_path(webkit_base::WebStringToFilePath(path)); return file_util::DirectoryExists(file_path); } WebKit::WebURL WebFileUtilitiesImpl::filePathToURL(const WebString& path) { return net::FilePathToFileURL(webkit_base::WebStringToFilePath(path)); } base::PlatformFile WebFileUtilitiesImpl::openFile(const WebString& path, int mode) { if (sandbox_enabled_) { NOTREACHED(); return base::kInvalidPlatformFileValue; } return base::CreatePlatformFile( webkit_base::WebStringToFilePath(path), (mode == 0) ? (base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ) : (base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE), NULL, NULL); } void WebFileUtilitiesImpl::closeFile(base::PlatformFile& handle) { if (handle == base::kInvalidPlatformFileValue) return; if (base::ClosePlatformFile(handle)) handle = base::kInvalidPlatformFileValue; } long long WebFileUtilitiesImpl::seekFile(base::PlatformFile handle, long long offset, int origin) { if (handle == base::kInvalidPlatformFileValue) return -1; return base::SeekPlatformFile(handle, static_cast(origin), offset); } bool WebFileUtilitiesImpl::truncateFile(base::PlatformFile handle, long long offset) { if (handle == base::kInvalidPlatformFileValue || offset < 0) return false; return base::TruncatePlatformFile(handle, offset); } int WebFileUtilitiesImpl::readFromFile(base::PlatformFile handle, char* data, int length) { if (handle == base::kInvalidPlatformFileValue || !data || length <= 0) return -1; return base::ReadPlatformFileCurPosNoBestEffort(handle, data, length); } int WebFileUtilitiesImpl::writeToFile(base::PlatformFile handle, const char* data, int length) { if (handle == base::kInvalidPlatformFileValue || !data || length <= 0) return -1; return base::WritePlatformFileCurPosNoBestEffort(handle, data, length); } } // namespace webkit_glue