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

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: Fixes for bbudge 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 int32_t FileIOResource::ReadOp::DoWork() { 71 int32_t FileIOResource::ReadOp::DoWork() {
72 DCHECK(!buffer_.get()); 72 DCHECK(!buffer_.get());
73 buffer_.reset(new char[bytes_to_read_]); 73 buffer_.reset(new char[bytes_to_read_]);
74 return base::ReadPlatformFile( 74 return base::ReadPlatformFile(
75 file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_read_); 75 file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_read_);
76 } 76 }
77 77
78 FileIOResource::FileIOResource(Connection connection, PP_Instance instance) 78 FileIOResource::FileIOResource(Connection connection, PP_Instance instance)
79 : PluginResource(connection, instance), 79 : PluginResource(connection, instance),
80 file_system_type_(PP_FILESYSTEMTYPE_INVALID) { 80 file_system_type_(PP_FILESYSTEMTYPE_INVALID) {
81 SendCreate(RENDERER, PpapiHostMsg_FileIO_Create()); 81 SendCreate(BROWSER, PpapiHostMsg_FileIO_Create());
82 } 82 }
83 83
84 FileIOResource::~FileIOResource() { 84 FileIOResource::~FileIOResource() {
85 } 85 }
86 86
87 PPB_FileIO_API* FileIOResource::AsPPB_FileIO_API() { 87 PPB_FileIO_API* FileIOResource::AsPPB_FileIO_API() {
88 return this; 88 return this;
89 } 89 }
90 90
91 int32_t FileIOResource::Open(PP_Resource file_ref, 91 int32_t FileIOResource::Open(PP_Resource file_ref,
(...skipping 16 matching lines...) Expand all
108 108
109 int32_t rv = state_manager_.CheckOperationState( 109 int32_t rv = state_manager_.CheckOperationState(
110 FileIOStateManager::OPERATION_EXCLUSIVE, false); 110 FileIOStateManager::OPERATION_EXCLUSIVE, false);
111 if (rv != PP_OK) 111 if (rv != PP_OK)
112 return rv; 112 return rv;
113 113
114 // Take a reference on the FileRef resource while we're opening the file; we 114 // Take a reference on the FileRef resource while we're opening the file; we
115 // don't want the plugin destroying it during the Open operation. 115 // don't want the plugin destroying it during the Open operation.
116 file_ref_ = enter.resource(); 116 file_ref_ = enter.resource();
117 117
118 Call<PpapiPluginMsg_FileIO_OpenReply>(RENDERER, 118 Call<PpapiPluginMsg_FileIO_OpenReply>(BROWSER,
119 PpapiHostMsg_FileIO_Open( 119 PpapiHostMsg_FileIO_Open(
120 file_ref, 120 file_ref,
121 open_flags), 121 open_flags),
122 base::Bind(&FileIOResource::OnPluginMsgOpenFileComplete, this, 122 base::Bind(&FileIOResource::OnPluginMsgOpenFileComplete, this,
123 callback)); 123 callback));
124 124
125 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 125 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
126 return PP_OK_COMPLETIONPENDING; 126 return PP_OK_COMPLETIONPENDING;
127 } 127 }
128 128
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 165 }
166 166
167 int32_t FileIOResource::Touch(PP_Time last_access_time, 167 int32_t FileIOResource::Touch(PP_Time last_access_time,
168 PP_Time last_modified_time, 168 PP_Time last_modified_time,
169 scoped_refptr<TrackedCallback> callback) { 169 scoped_refptr<TrackedCallback> callback) {
170 int32_t rv = state_manager_.CheckOperationState( 170 int32_t rv = state_manager_.CheckOperationState(
171 FileIOStateManager::OPERATION_EXCLUSIVE, true); 171 FileIOStateManager::OPERATION_EXCLUSIVE, true);
172 if (rv != PP_OK) 172 if (rv != PP_OK)
173 return rv; 173 return rv;
174 174
175 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 175 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
176 PpapiHostMsg_FileIO_Touch(last_access_time, last_modified_time), 176 PpapiHostMsg_FileIO_Touch(last_access_time, last_modified_time),
177 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 177 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
178 callback)); 178 callback));
179 179
180 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 180 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
181 return PP_OK_COMPLETIONPENDING; 181 return PP_OK_COMPLETIONPENDING;
182 } 182 }
183 183
184 int32_t FileIOResource::Read(int64_t offset, 184 int32_t FileIOResource::Read(int64_t offset,
185 char* buffer, 185 char* buffer,
(...skipping 28 matching lines...) Expand all
214 int32_t bytes_to_write, 214 int32_t bytes_to_write,
215 scoped_refptr<TrackedCallback> callback) { 215 scoped_refptr<TrackedCallback> callback) {
216 int32_t rv = state_manager_.CheckOperationState( 216 int32_t rv = state_manager_.CheckOperationState(
217 FileIOStateManager::OPERATION_WRITE, true); 217 FileIOStateManager::OPERATION_WRITE, true);
218 if (rv != PP_OK) 218 if (rv != PP_OK)
219 return rv; 219 return rv;
220 220
221 // TODO(brettw) it would be nice to use a shared memory buffer for large 221 // TODO(brettw) it would be nice to use a shared memory buffer for large
222 // writes rather than having to copy to a string (which will involve a number 222 // writes rather than having to copy to a string (which will involve a number
223 // of extra copies to serialize over IPC). 223 // of extra copies to serialize over IPC).
224 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 224 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
225 PpapiHostMsg_FileIO_Write(offset, std::string(buffer, bytes_to_write)), 225 PpapiHostMsg_FileIO_Write(offset, std::string(buffer, bytes_to_write)),
226 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 226 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
227 callback)); 227 callback));
228 228
229 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE); 229 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE);
230 return PP_OK_COMPLETIONPENDING; 230 return PP_OK_COMPLETIONPENDING;
231 } 231 }
232 232
233 int32_t FileIOResource::SetLength(int64_t length, 233 int32_t FileIOResource::SetLength(int64_t length,
234 scoped_refptr<TrackedCallback> callback) { 234 scoped_refptr<TrackedCallback> callback) {
235 int32_t rv = state_manager_.CheckOperationState( 235 int32_t rv = state_manager_.CheckOperationState(
236 FileIOStateManager::OPERATION_EXCLUSIVE, true); 236 FileIOStateManager::OPERATION_EXCLUSIVE, true);
237 if (rv != PP_OK) 237 if (rv != PP_OK)
238 return rv; 238 return rv;
239 239
240 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 240 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
241 PpapiHostMsg_FileIO_SetLength(length), 241 PpapiHostMsg_FileIO_SetLength(length),
242 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 242 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
243 callback)); 243 callback));
244 244
245 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 245 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
246 return PP_OK_COMPLETIONPENDING; 246 return PP_OK_COMPLETIONPENDING;
247 } 247 }
248 248
249 int32_t FileIOResource::Flush(scoped_refptr<TrackedCallback> callback) { 249 int32_t FileIOResource::Flush(scoped_refptr<TrackedCallback> callback) {
250 int32_t rv = state_manager_.CheckOperationState( 250 int32_t rv = state_manager_.CheckOperationState(
251 FileIOStateManager::OPERATION_EXCLUSIVE, true); 251 FileIOStateManager::OPERATION_EXCLUSIVE, true);
252 if (rv != PP_OK) 252 if (rv != PP_OK)
253 return rv; 253 return rv;
254 254
255 Call<PpapiPluginMsg_FileIO_GeneralReply>(RENDERER, 255 Call<PpapiPluginMsg_FileIO_GeneralReply>(BROWSER,
256 PpapiHostMsg_FileIO_Flush(), 256 PpapiHostMsg_FileIO_Flush(),
257 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this, 257 base::Bind(&FileIOResource::OnPluginMsgGeneralComplete, this,
258 callback)); 258 callback));
259 259
260 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 260 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
261 return PP_OK_COMPLETIONPENDING; 261 return PP_OK_COMPLETIONPENDING;
262 } 262 }
263 263
264 void FileIOResource::Close() { 264 void FileIOResource::Close() {
265 if (file_handle_) { 265 if (file_handle_) {
266 file_handle_ = NULL; 266 file_handle_ = NULL;
267 } 267 }
268 Post(RENDERER, PpapiHostMsg_FileIO_Close()); 268 Post(BROWSER, PpapiHostMsg_FileIO_Close());
269 } 269 }
270 270
271 int32_t FileIOResource::RequestOSFileHandle( 271 int32_t FileIOResource::RequestOSFileHandle(
272 PP_FileHandle* handle, 272 PP_FileHandle* handle,
273 scoped_refptr<TrackedCallback> callback) { 273 scoped_refptr<TrackedCallback> callback) {
274 int32_t rv = state_manager_.CheckOperationState( 274 int32_t rv = state_manager_.CheckOperationState(
275 FileIOStateManager::OPERATION_EXCLUSIVE, true); 275 FileIOStateManager::OPERATION_EXCLUSIVE, true);
276 if (rv != PP_OK) 276 if (rv != PP_OK)
277 return rv; 277 return rv;
278 278
279 Call<PpapiPluginMsg_FileIO_RequestOSFileHandleReply>(RENDERER, 279 Call<PpapiPluginMsg_FileIO_RequestOSFileHandleReply>(BROWSER,
280 PpapiHostMsg_FileIO_RequestOSFileHandle(), 280 PpapiHostMsg_FileIO_RequestOSFileHandle(),
281 base::Bind(&FileIOResource::OnPluginMsgRequestOSFileHandleComplete, this, 281 base::Bind(&FileIOResource::OnPluginMsgRequestOSFileHandleComplete, this,
282 callback, handle)); 282 callback, handle));
283 283
284 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 284 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
285 return PP_OK_COMPLETIONPENDING; 285 return PP_OK_COMPLETIONPENDING;
286 } 286 }
287 287
288 FileIOResource::FileHandleHolder::FileHandleHolder(PP_FileHandle file_handle) 288 FileIOResource::FileHandleHolder::FileHandleHolder(PP_FileHandle file_handle)
289 : raw_handle_(file_handle) { 289 : raw_handle_(file_handle) {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 *output_handle = IPC::PlatformFileForTransitToPlatformFile(transit_file); 431 *output_handle = IPC::PlatformFileForTransitToPlatformFile(transit_file);
432 432
433 // End this operation now, so the user's callback can execute another FileIO 433 // End this operation now, so the user's callback can execute another FileIO
434 // operation, assuming there are no other pending operations. 434 // operation, assuming there are no other pending operations.
435 state_manager_.SetOperationFinished(); 435 state_manager_.SetOperationFinished();
436 callback->Run(result); 436 callback->Run(result);
437 } 437 }
438 438
439 } // namespace proxy 439 } // namespace proxy
440 } // namespace ppapi 440 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698