| Index: chrome/browser/file_system/file_system_dispatcher_host.cc
|
| ===================================================================
|
| --- chrome/browser/file_system/file_system_dispatcher_host.cc (revision 75978)
|
| +++ chrome/browser/file_system/file_system_dispatcher_host.cc (working copy)
|
| @@ -1,250 +0,0 @@
|
| -// 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/file_system_dispatcher_host.h"
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/file_path.h"
|
| -#include "base/threading/thread.h"
|
| -#include "base/time.h"
|
| -#include "chrome/browser/content_settings/host_content_settings_map.h"
|
| -#include "chrome/browser/net/chrome_url_request_context.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/renderer_host/browser_render_process_host.h"
|
| -#include "chrome/common/net/url_request_context_getter.h"
|
| -#include "chrome/common/render_messages.h"
|
| -#include "chrome/common/render_messages_params.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -#include "webkit/fileapi/file_system_callback_dispatcher.h"
|
| -#include "webkit/fileapi/file_system_context.h"
|
| -#include "webkit/fileapi/file_system_operation.h"
|
| -#include "webkit/fileapi/file_system_operation.h"
|
| -#include "webkit/fileapi/file_system_path_manager.h"
|
| -#include "webkit/fileapi/file_system_quota_manager.h"
|
| -
|
| -using fileapi::FileSystemCallbackDispatcher;
|
| -using fileapi::FileSystemOperation;
|
| -using fileapi::FileSystemQuotaManager;
|
| -
|
| -class BrowserFileSystemCallbackDispatcher
|
| - : public FileSystemCallbackDispatcher {
|
| - public:
|
| - BrowserFileSystemCallbackDispatcher(
|
| - FileSystemDispatcherHost* dispatcher_host, int request_id)
|
| - : dispatcher_host_(dispatcher_host),
|
| - request_id_(request_id) {
|
| - DCHECK(dispatcher_host_);
|
| - }
|
| -
|
| - virtual ~BrowserFileSystemCallbackDispatcher() {
|
| - dispatcher_host_->UnregisterOperation(request_id_);
|
| - }
|
| -
|
| - virtual void DidSucceed() {
|
| - dispatcher_host_->Send(new ViewMsg_FileSystem_DidSucceed(request_id_));
|
| - }
|
| -
|
| - virtual void DidReadMetadata(const base::PlatformFileInfo& info) {
|
| - dispatcher_host_->Send(new ViewMsg_FileSystem_DidReadMetadata(
|
| - request_id_, info));
|
| - }
|
| -
|
| - virtual void DidReadDirectory(
|
| - const std::vector<base::FileUtilProxy::Entry>& entries, bool has_more) {
|
| - dispatcher_host_->Send(new ViewMsg_FileSystem_DidReadDirectory(
|
| - request_id_, entries, has_more));
|
| - }
|
| -
|
| - virtual void DidOpenFileSystem(const std::string& name,
|
| - const FilePath& path) {
|
| - dispatcher_host_->Send(
|
| - new ViewMsg_OpenFileSystemRequest_Complete(
|
| - request_id_, !path.empty(), name, path));
|
| - }
|
| -
|
| - virtual void DidFail(base::PlatformFileError error_code) {
|
| - dispatcher_host_->Send(new ViewMsg_FileSystem_DidFail(
|
| - request_id_, error_code));
|
| - }
|
| -
|
| - virtual void DidWrite(int64 bytes, bool complete) {
|
| - dispatcher_host_->Send(new ViewMsg_FileSystem_DidWrite(
|
| - request_id_, bytes, complete));
|
| - }
|
| -
|
| - private:
|
| - scoped_refptr<FileSystemDispatcherHost> dispatcher_host_;
|
| - int request_id_;
|
| -};
|
| -
|
| -FileSystemDispatcherHost::FileSystemDispatcherHost(Profile* profile)
|
| - : context_(profile->GetFileSystemContext()),
|
| - host_content_settings_map_(profile->GetHostContentSettingsMap()),
|
| - request_context_getter_(profile->GetRequestContext()) {
|
| -}
|
| -
|
| -FileSystemDispatcherHost::FileSystemDispatcherHost(
|
| - ChromeURLRequestContext* context)
|
| - : context_(context->file_system_context()),
|
| - host_content_settings_map_(context->host_content_settings_map()),
|
| - request_context_(context) {
|
| -}
|
| -
|
| -FileSystemDispatcherHost::~FileSystemDispatcherHost() {
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnChannelConnected(int32 peer_pid) {
|
| - BrowserMessageFilter::OnChannelConnected(peer_pid);
|
| -
|
| - if (request_context_getter_.get()) {
|
| - DCHECK(!request_context_.get());
|
| - request_context_ = request_context_getter_->GetURLRequestContext();
|
| - }
|
| - DCHECK(request_context_.get());
|
| -}
|
| -
|
| -bool FileSystemDispatcherHost::OnMessageReceived(
|
| - const IPC::Message& message, bool* message_was_ok) {
|
| - *message_was_ok = true;
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP_EX(FileSystemDispatcherHost, message, *message_was_ok)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_OpenFileSystemRequest, OnOpenFileSystem)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Move, OnMove)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Copy, OnCopy)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Remove, OnRemove)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_ReadMetadata, OnReadMetadata)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Create, OnCreate)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Exists, OnExists)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_ReadDirectory, OnReadDirectory)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Write, OnWrite)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Truncate, OnTruncate)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_TouchFile, OnTouchFile)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_CancelWrite, OnCancel)
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP_EX()
|
| - return handled;
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnOpenFileSystem(
|
| - int request_id, const GURL& origin_url, fileapi::FileSystemType type,
|
| - int64 requested_size, bool create) {
|
| - ContentSetting content_setting =
|
| - host_content_settings_map_->GetContentSetting(
|
| - origin_url, CONTENT_SETTINGS_TYPE_COOKIES, "");
|
| - DCHECK((content_setting == CONTENT_SETTING_ALLOW) ||
|
| - (content_setting == CONTENT_SETTING_BLOCK) ||
|
| - (content_setting == CONTENT_SETTING_SESSION_ONLY));
|
| - if (content_setting == CONTENT_SETTING_BLOCK) {
|
| - // TODO(kinuko): Need to notify the UI thread to indicate that
|
| - // there's a blocked content.
|
| - Send(new ViewMsg_OpenFileSystemRequest_Complete(
|
| - request_id, false, std::string(), FilePath()));
|
| - return;
|
| - }
|
| -
|
| - GetNewOperation(request_id)->OpenFileSystem(origin_url, type, create);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnMove(
|
| - int request_id, const FilePath& src_path, const FilePath& dest_path) {
|
| - GetNewOperation(request_id)->Move(src_path, dest_path);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnCopy(
|
| - int request_id, const FilePath& src_path, const FilePath& dest_path) {
|
| - GetNewOperation(request_id)->Copy(src_path, dest_path);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnRemove(
|
| - int request_id, const FilePath& path, bool recursive) {
|
| - GetNewOperation(request_id)->Remove(path, recursive);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnReadMetadata(
|
| - int request_id, const FilePath& path) {
|
| - GetNewOperation(request_id)->GetMetadata(path);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnCreate(
|
| - int request_id, const FilePath& path, bool exclusive,
|
| - bool is_directory, bool recursive) {
|
| - if (is_directory)
|
| - GetNewOperation(request_id)->CreateDirectory(path, exclusive, recursive);
|
| - else
|
| - GetNewOperation(request_id)->CreateFile(path, exclusive);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnExists(
|
| - int request_id, const FilePath& path, bool is_directory) {
|
| - if (is_directory)
|
| - GetNewOperation(request_id)->DirectoryExists(path);
|
| - else
|
| - GetNewOperation(request_id)->FileExists(path);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnReadDirectory(
|
| - int request_id, const FilePath& path) {
|
| - GetNewOperation(request_id)->ReadDirectory(path);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnWrite(
|
| - int request_id,
|
| - const FilePath& path,
|
| - const GURL& blob_url,
|
| - int64 offset) {
|
| - GetNewOperation(request_id)->Write(
|
| - request_context_, path, blob_url, offset);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnTruncate(
|
| - int request_id,
|
| - const FilePath& path,
|
| - int64 length) {
|
| - GetNewOperation(request_id)->Truncate(path, length);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnTouchFile(
|
| - int request_id,
|
| - const FilePath& path,
|
| - const base::Time& last_access_time,
|
| - const base::Time& last_modified_time) {
|
| - GetNewOperation(request_id)->TouchFile(
|
| - path, last_access_time, last_modified_time);
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::OnCancel(
|
| - int request_id,
|
| - int request_id_to_cancel) {
|
| - FileSystemOperation* write = operations_.Lookup(
|
| - request_id_to_cancel);
|
| - if (write) {
|
| - // The cancel will eventually send both the write failure and the cancel
|
| - // success.
|
| - write->Cancel(GetNewOperation(request_id));
|
| - } else {
|
| - // The write already finished; report that we failed to stop it.
|
| - Send(new ViewMsg_FileSystem_DidFail(
|
| - request_id, base::PLATFORM_FILE_ERROR_INVALID_OPERATION));
|
| - }
|
| -}
|
| -
|
| -FileSystemOperation* FileSystemDispatcherHost::GetNewOperation(
|
| - int request_id) {
|
| - BrowserFileSystemCallbackDispatcher* dispatcher =
|
| - new BrowserFileSystemCallbackDispatcher(this, request_id);
|
| - FileSystemOperation* operation = new FileSystemOperation(
|
| - dispatcher,
|
| - BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
|
| - context_);
|
| - operations_.AddWithID(operation, request_id);
|
| - return operation;
|
| -}
|
| -
|
| -void FileSystemDispatcherHost::UnregisterOperation(int request_id) {
|
| - DCHECK(operations_.Lookup(request_id));
|
| - operations_.Remove(request_id);
|
| -}
|
|
|