| Index: chrome/browser/file_system_proxy.cc
|
| ===================================================================
|
| --- chrome/browser/file_system_proxy.cc (revision 0)
|
| +++ chrome/browser/file_system_proxy.cc (revision 0)
|
| @@ -0,0 +1,180 @@
|
| +// Copyright (c) 2010 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 "chrome/browser/file_system_proxy.h"
|
| +
|
| +#include "base/file_util.h"
|
| +#include "chrome/browser/chrome_thread_relay.h"
|
| +
|
| +namespace {
|
| +
|
| +class RelayCreateOrOpen : public ChromeThreadRelay {
|
| + public:
|
| + RelayCreateOrOpen(
|
| + const FilePath& file_path,
|
| + int file_flags,
|
| + FileSystemProxy::CreateOrOpenCallback* callback)
|
| + : file_path_(file_path),
|
| + file_flags_(file_flags),
|
| + callback_(callback),
|
| + file_handle_(base::kInvalidPlatformFileValue),
|
| + created_(false) {
|
| + DCHECK(callback);
|
| + }
|
| +
|
| + protected:
|
| + virtual ~RelayCreateOrOpen() {
|
| + if (file_handle_ != base::kInvalidPlatformFileValue)
|
| + FileSystemProxy::Close(file_handle_, NULL);
|
| + }
|
| +
|
| + virtual void RunWork() {
|
| + file_handle_ = base::CreatePlatformFile(file_path_, file_flags_, &created_);
|
| + }
|
| +
|
| + virtual void RunCallback() {
|
| + callback_->Run(base::PassPlatformFile(&file_handle_), created_);
|
| + delete callback_;
|
| + }
|
| +
|
| + private:
|
| + FilePath file_path_;
|
| + int file_flags_;
|
| + FileSystemProxy::CreateOrOpenCallback* callback_;
|
| + base::PlatformFile file_handle_;
|
| + bool created_;
|
| +};
|
| +
|
| +class RelayCreateTemporary : public ChromeThreadRelay {
|
| + public:
|
| + explicit RelayCreateTemporary(
|
| + FileSystemProxy::CreateTemporaryCallback* callback)
|
| + : callback_(callback),
|
| + file_handle_(base::kInvalidPlatformFileValue) {
|
| + DCHECK(callback);
|
| + }
|
| +
|
| + protected:
|
| + virtual ~RelayCreateTemporary() {
|
| + if (file_handle_ != base::kInvalidPlatformFileValue)
|
| + FileSystemProxy::Close(file_handle_, NULL);
|
| + }
|
| +
|
| + virtual void RunWork() {
|
| + // TODO(darin): file_util should have a variant of CreateTemporaryFile
|
| + // that returns a FilePath and a PlatformFile.
|
| + file_util::CreateTemporaryFile(&file_path_);
|
| +
|
| + // Use a fixed set of flags that are appropriate for writing to a temporary
|
| + // file from the IO thread using a net::FileStream.
|
| + int file_flags =
|
| + base::PLATFORM_FILE_CREATE_ALWAYS |
|
| + base::PLATFORM_FILE_WRITE |
|
| + base::PLATFORM_FILE_ASYNC |
|
| + base::PLATFORM_FILE_TEMPORARY;
|
| + file_handle_ = base::CreatePlatformFile(file_path_, file_flags, NULL);
|
| + }
|
| +
|
| + virtual void RunCallback() {
|
| + callback_->Run(base::PassPlatformFile(&file_handle_), file_path_);
|
| + delete callback_;
|
| + }
|
| +
|
| + private:
|
| + FileSystemProxy::CreateTemporaryCallback* callback_;
|
| + base::PlatformFile file_handle_;
|
| + FilePath file_path_;
|
| +};
|
| +
|
| +class RelayWithStatusCallback : public ChromeThreadRelay {
|
| + public:
|
| + explicit RelayWithStatusCallback(FileSystemProxy::StatusCallback* callback)
|
| + : callback_(callback),
|
| + succeeded_(false) {
|
| + // It is OK for callback to be NULL.
|
| + }
|
| +
|
| + protected:
|
| + virtual void RunCallback() {
|
| + // The caller may not have been interested in the result.
|
| + if (callback_) {
|
| + callback_->Run(succeeded_);
|
| + delete callback_;
|
| + }
|
| + }
|
| +
|
| + void SetStatus(bool succeeded) { succeeded_ = succeeded; }
|
| +
|
| + private:
|
| + FileSystemProxy::StatusCallback* callback_;
|
| + bool succeeded_;
|
| +};
|
| +
|
| +class RelayClose : public RelayWithStatusCallback {
|
| + public:
|
| + RelayClose(base::PlatformFile file_handle,
|
| + FileSystemProxy::StatusCallback* callback)
|
| + : RelayWithStatusCallback(callback),
|
| + file_handle_(file_handle) {
|
| + }
|
| +
|
| + protected:
|
| + virtual void RunWork() {
|
| + SetStatus(base::ClosePlatformFile(file_handle_));
|
| + }
|
| +
|
| + private:
|
| + base::PlatformFile file_handle_;
|
| +};
|
| +
|
| +class RelayDelete : public RelayWithStatusCallback {
|
| + public:
|
| + RelayDelete(const FilePath& file_path,
|
| + bool recursive,
|
| + FileSystemProxy::StatusCallback* callback)
|
| + : RelayWithStatusCallback(callback),
|
| + file_path_(file_path),
|
| + recursive_(recursive) {
|
| + }
|
| +
|
| + protected:
|
| + virtual void RunWork() {
|
| + SetStatus(file_util::Delete(file_path_, recursive_));
|
| + }
|
| +
|
| + private:
|
| + FilePath file_path_;
|
| + bool recursive_;
|
| +};
|
| +
|
| +void Start(const tracked_objects::Location& from_here,
|
| + scoped_refptr<ChromeThreadRelay> relay) {
|
| + relay->Start(ChromeThread::FILE, from_here);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +void FileSystemProxy::CreateOrOpen(const FilePath& file_path, int file_flags,
|
| + CreateOrOpenCallback* callback) {
|
| + Start(FROM_HERE, new RelayCreateOrOpen(file_path, file_flags, callback));
|
| +}
|
| +
|
| +void FileSystemProxy::CreateTemporary(CreateTemporaryCallback* callback) {
|
| + Start(FROM_HERE, new RelayCreateTemporary(callback));
|
| +}
|
| +
|
| +void FileSystemProxy::Close(base::PlatformFile file_handle,
|
| + StatusCallback* callback) {
|
| + Start(FROM_HERE, new RelayClose(file_handle, callback));
|
| +}
|
| +
|
| +void FileSystemProxy::Delete(const FilePath& file_path,
|
| + StatusCallback* callback) {
|
| + Start(FROM_HERE, new RelayDelete(file_path, false, callback));
|
| +}
|
| +
|
| +void FileSystemProxy::RecursiveDelete(const FilePath& file_path,
|
| + StatusCallback* callback) {
|
| + Start(FROM_HERE, new RelayDelete(file_path, true, callback));
|
| +}
|
|
|
| Property changes on: chrome\browser\file_system_proxy.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|