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

Side by Side Diff: ppapi/proxy/file_io_resource.cc

Issue 33053002: Pepper: Move FileIO host from renderer to browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 7 years, 1 month 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/file_io_resource.h" 5 #include "ppapi/proxy/file_io_resource.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/task_runner_util.h" 8 #include "base/task_runner_util.h"
9 #include "ipc/ipc_message.h" 9 #include "ipc/ipc_message.h"
10 #include "ppapi/c/pp_errors.h" 10 #include "ppapi/c/pp_errors.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 int32_t FileIOResource::ReadOp::DoWork() { 72 int32_t FileIOResource::ReadOp::DoWork() {
73 DCHECK(!buffer_.get()); 73 DCHECK(!buffer_.get());
74 buffer_.reset(new char[bytes_to_read_]); 74 buffer_.reset(new char[bytes_to_read_]);
75 return base::ReadPlatformFile( 75 return base::ReadPlatformFile(
76 file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_read_); 76 file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_read_);
77 } 77 }
78 78
79 FileIOResource::FileIOResource(Connection connection, PP_Instance instance) 79 FileIOResource::FileIOResource(Connection connection, PP_Instance instance)
80 : PluginResource(connection, instance), 80 : PluginResource(connection, instance),
81 file_system_type_(PP_FILESYSTEMTYPE_INVALID) { 81 file_system_type_(PP_FILESYSTEMTYPE_INVALID) {
82 SendCreate(RENDERER, PpapiHostMsg_FileIO_Create()); 82 SendCreate(BROWSER, PpapiHostMsg_FileIO_Create());
83 } 83 }
84 84
85 FileIOResource::~FileIOResource() { 85 FileIOResource::~FileIOResource() {
86 } 86 }
87 87
88 PPB_FileIO_API* FileIOResource::AsPPB_FileIO_API() { 88 PPB_FileIO_API* FileIOResource::AsPPB_FileIO_API() {
89 return this; 89 return this;
90 } 90 }
91 91
92 int32_t FileIOResource::Open(PP_Resource file_ref, 92 int32_t FileIOResource::Open(PP_Resource file_ref,
(...skipping 13 matching lines...) Expand all
106 106
107 int32_t rv = state_manager_.CheckOperationState( 107 int32_t rv = state_manager_.CheckOperationState(
108 FileIOStateManager::OPERATION_EXCLUSIVE, false); 108 FileIOStateManager::OPERATION_EXCLUSIVE, false);
109 if (rv != PP_OK) 109 if (rv != PP_OK)
110 return rv; 110 return rv;
111 111
112 // Take a reference on the FileRef resource while we're opening the file; we 112 // Take a reference on the FileRef resource while we're opening the file; we
113 // don't want the plugin destroying it during the Open operation. 113 // don't want the plugin destroying it during the Open operation.
114 file_ref_ = enter.resource(); 114 file_ref_ = enter.resource();
115 115
116 Call<PpapiPluginMsg_FileIO_OpenReply>(RENDERER, 116 Call<PpapiPluginMsg_FileIO_OpenReply>(BROWSER,
117 PpapiHostMsg_FileIO_Open( 117 PpapiHostMsg_FileIO_Open(
118 file_ref, 118 file_ref,
119 open_flags), 119 open_flags),
120 base::Bind(&FileIOResource::OnPluginMsgOpenFileComplete, this, 120 base::Bind(&FileIOResource::OnPluginMsgOpenFileComplete, this,
121 callback)); 121 callback));
122 122
123 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 123 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
124 return PP_OK_COMPLETIONPENDING; 124 return PP_OK_COMPLETIONPENDING;
125 } 125 }
126 126
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 } 175 }
176 176
177 int32_t FileIOResource::Touch(PP_Time last_access_time, 177 int32_t FileIOResource::Touch(PP_Time last_access_time,
178 PP_Time last_modified_time, 178 PP_Time last_modified_time,
179 scoped_refptr<TrackedCallback> callback) { 179 scoped_refptr<TrackedCallback> callback) {
180 int32_t rv = state_manager_.CheckOperationState( 180 int32_t rv = state_manager_.CheckOperationState(
181 FileIOStateManager::OPERATION_EXCLUSIVE, true); 181 FileIOStateManager::OPERATION_EXCLUSIVE, true);
182 if (rv != PP_OK) 182 if (rv != PP_OK)
183 return rv; 183 return rv;
184 184
185 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 185 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
186 PpapiHostMsg_FileIO_Touch(last_access_time, last_modified_time), 186 PpapiHostMsg_FileIO_Touch(last_access_time, last_modified_time),
187 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 187 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
188 callback)); 188 callback));
189 189
190 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 190 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
191 return PP_OK_COMPLETIONPENDING; 191 return PP_OK_COMPLETIONPENDING;
192 } 192 }
193 193
194 int32_t FileIOResource::Read(int64_t offset, 194 int32_t FileIOResource::Read(int64_t offset,
195 char* buffer, 195 char* buffer,
(...skipping 28 matching lines...) Expand all
224 int32_t bytes_to_write, 224 int32_t bytes_to_write,
225 scoped_refptr<TrackedCallback> callback) { 225 scoped_refptr<TrackedCallback> callback) {
226 int32_t rv = state_manager_.CheckOperationState( 226 int32_t rv = state_manager_.CheckOperationState(
227 FileIOStateManager::OPERATION_WRITE, true); 227 FileIOStateManager::OPERATION_WRITE, true);
228 if (rv != PP_OK) 228 if (rv != PP_OK)
229 return rv; 229 return rv;
230 230
231 // TODO(brettw) it would be nice to use a shared memory buffer for large 231 // TODO(brettw) it would be nice to use a shared memory buffer for large
232 // writes rather than having to copy to a string (which will involve a number 232 // writes rather than having to copy to a string (which will involve a number
233 // of extra copies to serialize over IPC). 233 // of extra copies to serialize over IPC).
234 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 234 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
235 PpapiHostMsg_FileIO_Write(offset, std::string(buffer, bytes_to_write)), 235 PpapiHostMsg_FileIO_Write(offset, std::string(buffer, bytes_to_write)),
236 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 236 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
237 callback)); 237 callback));
238 238
239 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE); 239 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE);
240 return PP_OK_COMPLETIONPENDING; 240 return PP_OK_COMPLETIONPENDING;
241 } 241 }
242 242
243 int32_t FileIOResource::SetLength(int64_t length, 243 int32_t FileIOResource::SetLength(int64_t length,
244 scoped_refptr<TrackedCallback> callback) { 244 scoped_refptr<TrackedCallback> callback) {
245 int32_t rv = state_manager_.CheckOperationState( 245 int32_t rv = state_manager_.CheckOperationState(
246 FileIOStateManager::OPERATION_EXCLUSIVE, true); 246 FileIOStateManager::OPERATION_EXCLUSIVE, true);
247 if (rv != PP_OK) 247 if (rv != PP_OK)
248 return rv; 248 return rv;
249 249
250 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 250 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
251 PpapiHostMsg_FileIO_SetLength(length), 251 PpapiHostMsg_FileIO_SetLength(length),
252 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 252 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
253 callback)); 253 callback));
254 254
255 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 255 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
256 return PP_OK_COMPLETIONPENDING; 256 return PP_OK_COMPLETIONPENDING;
257 } 257 }
258 258
259 int32_t FileIOResource::Flush(scoped_refptr<TrackedCallback> callback) { 259 int32_t FileIOResource::Flush(scoped_refptr<TrackedCallback> callback) {
260 int32_t rv = state_manager_.CheckOperationState( 260 int32_t rv = state_manager_.CheckOperationState(
261 FileIOStateManager::OPERATION_EXCLUSIVE, true); 261 FileIOStateManager::OPERATION_EXCLUSIVE, true);
262 if (rv != PP_OK) 262 if (rv != PP_OK)
263 return rv; 263 return rv;
264 264
265 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 265 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
266 PpapiHostMsg_FileIO_Flush(), 266 PpapiHostMsg_FileIO_Flush(),
267 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 267 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
268 callback)); 268 callback));
269 269
270 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 270 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
271 return PP_OK_COMPLETIONPENDING; 271 return PP_OK_COMPLETIONPENDING;
272 } 272 }
273 273
274 void FileIOResource::Close() { 274 void FileIOResource::Close() {
275 if (file_handle_) { 275 if (file_handle_) {
276 file_handle_ = NULL; 276 file_handle_ = NULL;
277 } 277 }
278 Post(RENDERER, PpapiHostMsg_FileIO_Close()); 278 Post(BROWSER, PpapiHostMsg_FileIO_Close());
279 } 279 }
280 280
281 int32_t FileIOResource::RequestOSFileHandle( 281 int32_t FileIOResource::RequestOSFileHandle(
282 PP_FileHandle* handle, 282 PP_FileHandle* handle,
283 scoped_refptr<TrackedCallback> callback) { 283 scoped_refptr<TrackedCallback> callback) {
284 int32_t rv = state_manager_.CheckOperationState( 284 int32_t rv = state_manager_.CheckOperationState(
285 FileIOStateManager::OPERATION_EXCLUSIVE, true); 285 FileIOStateManager::OPERATION_EXCLUSIVE, true);
286 if (rv != PP_OK) 286 if (rv != PP_OK)
287 return rv; 287 return rv;
288 288
289 Call<PpapiPluginMsg_FileIO_RequestOSFileHandleReply>(RENDERER, 289 Call<PpapiPluginMsg_FileIO_RequestOSFileHandleReply>(BROWSER,
290 PpapiHostMsg_FileIO_RequestOSFileHandle(), 290 PpapiHostMsg_FileIO_RequestOSFileHandle(),
291 base::Bind(&FileIOResource::OnPluginMsgRequestOSFileHandleComplete, this, 291 base::Bind(&FileIOResource::OnPluginMsgRequestOSFileHandleComplete, this,
292 callback, handle)); 292 callback, handle));
293 293
294 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 294 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
295 return PP_OK_COMPLETIONPENDING; 295 return PP_OK_COMPLETIONPENDING;
296 } 296 }
297 297
298 FileIOResource::FileHandleHolder::FileHandleHolder(PP_FileHandle file_handle) 298 FileIOResource::FileHandleHolder::FileHandleHolder(PP_FileHandle file_handle)
299 : raw_handle_(file_handle) { 299 : raw_handle_(file_handle) {
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 *output_handle = IPC::PlatformFileForTransitToPlatformFile(transit_file); 450 *output_handle = IPC::PlatformFileForTransitToPlatformFile(transit_file);
451 451
452 // End this operation now, so the user's callback can execute another FileIO 452 // End this operation now, so the user's callback can execute another FileIO
453 // operation, assuming there are no other pending operations. 453 // operation, assuming there are no other pending operations.
454 state_manager_.SetOperationFinished(); 454 state_manager_.SetOperationFinished();
455 callback->Run(result); 455 callback->Run(result);
456 } 456 }
457 457
458 } // namespace proxy 458 } // namespace proxy
459 } // namespace ppapi 459 } // namespace ppapi
OLDNEW
« no previous file with comments | « content/renderer/pepper/quota_file_io_unittest.cc ('k') | webkit/browser/fileapi/file_system_operation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698