Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: chrome/browser/file_system/file_system_dispatcher_host.cc

Issue 6586001: Move appcache/file_sytem/device_orientation subdirectories of chrome\browser ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 "chrome/browser/file_system/file_system_dispatcher_host.h"
6
7 #include <string>
8 #include <vector>
9
10 #include "base/file_path.h"
11 #include "base/threading/thread.h"
12 #include "base/time.h"
13 #include "chrome/browser/content_settings/host_content_settings_map.h"
14 #include "chrome/browser/net/chrome_url_request_context.h"
15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/renderer_host/browser_render_process_host.h"
17 #include "chrome/common/net/url_request_context_getter.h"
18 #include "chrome/common/render_messages.h"
19 #include "chrome/common/render_messages_params.h"
20 #include "googleurl/src/gurl.h"
21 #include "net/url_request/url_request_context.h"
22 #include "webkit/fileapi/file_system_callback_dispatcher.h"
23 #include "webkit/fileapi/file_system_context.h"
24 #include "webkit/fileapi/file_system_operation.h"
25 #include "webkit/fileapi/file_system_operation.h"
26 #include "webkit/fileapi/file_system_path_manager.h"
27 #include "webkit/fileapi/file_system_quota_manager.h"
28
29 using fileapi::FileSystemCallbackDispatcher;
30 using fileapi::FileSystemOperation;
31 using fileapi::FileSystemQuotaManager;
32
33 class BrowserFileSystemCallbackDispatcher
34 : public FileSystemCallbackDispatcher {
35 public:
36 BrowserFileSystemCallbackDispatcher(
37 FileSystemDispatcherHost* dispatcher_host, int request_id)
38 : dispatcher_host_(dispatcher_host),
39 request_id_(request_id) {
40 DCHECK(dispatcher_host_);
41 }
42
43 virtual ~BrowserFileSystemCallbackDispatcher() {
44 dispatcher_host_->UnregisterOperation(request_id_);
45 }
46
47 virtual void DidSucceed() {
48 dispatcher_host_->Send(new ViewMsg_FileSystem_DidSucceed(request_id_));
49 }
50
51 virtual void DidReadMetadata(const base::PlatformFileInfo& info) {
52 dispatcher_host_->Send(new ViewMsg_FileSystem_DidReadMetadata(
53 request_id_, info));
54 }
55
56 virtual void DidReadDirectory(
57 const std::vector<base::FileUtilProxy::Entry>& entries, bool has_more) {
58 dispatcher_host_->Send(new ViewMsg_FileSystem_DidReadDirectory(
59 request_id_, entries, has_more));
60 }
61
62 virtual void DidOpenFileSystem(const std::string& name,
63 const FilePath& path) {
64 dispatcher_host_->Send(
65 new ViewMsg_OpenFileSystemRequest_Complete(
66 request_id_, !path.empty(), name, path));
67 }
68
69 virtual void DidFail(base::PlatformFileError error_code) {
70 dispatcher_host_->Send(new ViewMsg_FileSystem_DidFail(
71 request_id_, error_code));
72 }
73
74 virtual void DidWrite(int64 bytes, bool complete) {
75 dispatcher_host_->Send(new ViewMsg_FileSystem_DidWrite(
76 request_id_, bytes, complete));
77 }
78
79 private:
80 scoped_refptr<FileSystemDispatcherHost> dispatcher_host_;
81 int request_id_;
82 };
83
84 FileSystemDispatcherHost::FileSystemDispatcherHost(Profile* profile)
85 : context_(profile->GetFileSystemContext()),
86 host_content_settings_map_(profile->GetHostContentSettingsMap()),
87 request_context_getter_(profile->GetRequestContext()) {
88 }
89
90 FileSystemDispatcherHost::FileSystemDispatcherHost(
91 ChromeURLRequestContext* context)
92 : context_(context->file_system_context()),
93 host_content_settings_map_(context->host_content_settings_map()),
94 request_context_(context) {
95 }
96
97 FileSystemDispatcherHost::~FileSystemDispatcherHost() {
98 }
99
100 void FileSystemDispatcherHost::OnChannelConnected(int32 peer_pid) {
101 BrowserMessageFilter::OnChannelConnected(peer_pid);
102
103 if (request_context_getter_.get()) {
104 DCHECK(!request_context_.get());
105 request_context_ = request_context_getter_->GetURLRequestContext();
106 }
107 DCHECK(request_context_.get());
108 }
109
110 bool FileSystemDispatcherHost::OnMessageReceived(
111 const IPC::Message& message, bool* message_was_ok) {
112 *message_was_ok = true;
113 bool handled = true;
114 IPC_BEGIN_MESSAGE_MAP_EX(FileSystemDispatcherHost, message, *message_was_ok)
115 IPC_MESSAGE_HANDLER(ViewHostMsg_OpenFileSystemRequest, OnOpenFileSystem)
116 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Move, OnMove)
117 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Copy, OnCopy)
118 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Remove, OnRemove)
119 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_ReadMetadata, OnReadMetadata)
120 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Create, OnCreate)
121 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Exists, OnExists)
122 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_ReadDirectory, OnReadDirectory)
123 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Write, OnWrite)
124 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_Truncate, OnTruncate)
125 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_TouchFile, OnTouchFile)
126 IPC_MESSAGE_HANDLER(ViewHostMsg_FileSystem_CancelWrite, OnCancel)
127 IPC_MESSAGE_UNHANDLED(handled = false)
128 IPC_END_MESSAGE_MAP_EX()
129 return handled;
130 }
131
132 void FileSystemDispatcherHost::OnOpenFileSystem(
133 int request_id, const GURL& origin_url, fileapi::FileSystemType type,
134 int64 requested_size, bool create) {
135 ContentSetting content_setting =
136 host_content_settings_map_->GetContentSetting(
137 origin_url, CONTENT_SETTINGS_TYPE_COOKIES, "");
138 DCHECK((content_setting == CONTENT_SETTING_ALLOW) ||
139 (content_setting == CONTENT_SETTING_BLOCK) ||
140 (content_setting == CONTENT_SETTING_SESSION_ONLY));
141 if (content_setting == CONTENT_SETTING_BLOCK) {
142 // TODO(kinuko): Need to notify the UI thread to indicate that
143 // there's a blocked content.
144 Send(new ViewMsg_OpenFileSystemRequest_Complete(
145 request_id, false, std::string(), FilePath()));
146 return;
147 }
148
149 GetNewOperation(request_id)->OpenFileSystem(origin_url, type, create);
150 }
151
152 void FileSystemDispatcherHost::OnMove(
153 int request_id, const FilePath& src_path, const FilePath& dest_path) {
154 GetNewOperation(request_id)->Move(src_path, dest_path);
155 }
156
157 void FileSystemDispatcherHost::OnCopy(
158 int request_id, const FilePath& src_path, const FilePath& dest_path) {
159 GetNewOperation(request_id)->Copy(src_path, dest_path);
160 }
161
162 void FileSystemDispatcherHost::OnRemove(
163 int request_id, const FilePath& path, bool recursive) {
164 GetNewOperation(request_id)->Remove(path, recursive);
165 }
166
167 void FileSystemDispatcherHost::OnReadMetadata(
168 int request_id, const FilePath& path) {
169 GetNewOperation(request_id)->GetMetadata(path);
170 }
171
172 void FileSystemDispatcherHost::OnCreate(
173 int request_id, const FilePath& path, bool exclusive,
174 bool is_directory, bool recursive) {
175 if (is_directory)
176 GetNewOperation(request_id)->CreateDirectory(path, exclusive, recursive);
177 else
178 GetNewOperation(request_id)->CreateFile(path, exclusive);
179 }
180
181 void FileSystemDispatcherHost::OnExists(
182 int request_id, const FilePath& path, bool is_directory) {
183 if (is_directory)
184 GetNewOperation(request_id)->DirectoryExists(path);
185 else
186 GetNewOperation(request_id)->FileExists(path);
187 }
188
189 void FileSystemDispatcherHost::OnReadDirectory(
190 int request_id, const FilePath& path) {
191 GetNewOperation(request_id)->ReadDirectory(path);
192 }
193
194 void FileSystemDispatcherHost::OnWrite(
195 int request_id,
196 const FilePath& path,
197 const GURL& blob_url,
198 int64 offset) {
199 GetNewOperation(request_id)->Write(
200 request_context_, path, blob_url, offset);
201 }
202
203 void FileSystemDispatcherHost::OnTruncate(
204 int request_id,
205 const FilePath& path,
206 int64 length) {
207 GetNewOperation(request_id)->Truncate(path, length);
208 }
209
210 void FileSystemDispatcherHost::OnTouchFile(
211 int request_id,
212 const FilePath& path,
213 const base::Time& last_access_time,
214 const base::Time& last_modified_time) {
215 GetNewOperation(request_id)->TouchFile(
216 path, last_access_time, last_modified_time);
217 }
218
219 void FileSystemDispatcherHost::OnCancel(
220 int request_id,
221 int request_id_to_cancel) {
222 FileSystemOperation* write = operations_.Lookup(
223 request_id_to_cancel);
224 if (write) {
225 // The cancel will eventually send both the write failure and the cancel
226 // success.
227 write->Cancel(GetNewOperation(request_id));
228 } else {
229 // The write already finished; report that we failed to stop it.
230 Send(new ViewMsg_FileSystem_DidFail(
231 request_id, base::PLATFORM_FILE_ERROR_INVALID_OPERATION));
232 }
233 }
234
235 FileSystemOperation* FileSystemDispatcherHost::GetNewOperation(
236 int request_id) {
237 BrowserFileSystemCallbackDispatcher* dispatcher =
238 new BrowserFileSystemCallbackDispatcher(this, request_id);
239 FileSystemOperation* operation = new FileSystemOperation(
240 dispatcher,
241 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
242 context_);
243 operations_.AddWithID(operation, request_id);
244 return operation;
245 }
246
247 void FileSystemDispatcherHost::UnregisterOperation(int request_id) {
248 DCHECK(operations_.Lookup(request_id));
249 operations_.Remove(request_id);
250 }
OLDNEW
« no previous file with comments | « chrome/browser/file_system/file_system_dispatcher_host.h ('k') | chrome/browser/net/chrome_url_request_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698