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

Side by Side Diff: content/renderer/pepper/pepper_file_io_host.cc

Issue 21219002: Remove PluginDelegate completely. In a followup I'll rename PepperPluginDelegateImpl to something c… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 4 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
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 "content/renderer/pepper/pepper_file_io_host.h" 5 #include "content/renderer/pepper/pepper_file_io_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/files/file_util_proxy.h" 11 #include "base/files/file_util_proxy.h"
12 #include "content/child/child_thread.h" 12 #include "content/child/child_thread.h"
13 #include "content/child/fileapi/file_system_dispatcher.h" 13 #include "content/child/fileapi/file_system_dispatcher.h"
14 #include "content/child/quota_dispatcher.h" 14 #include "content/child/quota_dispatcher.h"
15 #include "content/common/fileapi/file_system_messages.h" 15 #include "content/common/fileapi/file_system_messages.h"
16 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_client.h"
17 #include "content/public/renderer/content_renderer_client.h" 17 #include "content/public/renderer/content_renderer_client.h"
18 #include "content/renderer/pepper/host_globals.h" 18 #include "content/renderer/pepper/host_globals.h"
19 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h"
19 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 20 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
20 #include "content/renderer/pepper/ppb_file_ref_impl.h" 21 #include "content/renderer/pepper/ppb_file_ref_impl.h"
21 #include "content/renderer/pepper/quota_file_io.h" 22 #include "content/renderer/pepper/quota_file_io.h"
23 #include "content/renderer/pepper/resource_helper.h"
22 #include "content/renderer/render_thread_impl.h" 24 #include "content/renderer/render_thread_impl.h"
23 #include "ppapi/c/pp_errors.h" 25 #include "ppapi/c/pp_errors.h"
24 #include "ppapi/host/dispatch_host_message.h" 26 #include "ppapi/host/dispatch_host_message.h"
25 #include "ppapi/host/ppapi_host.h" 27 #include "ppapi/host/ppapi_host.h"
26 #include "ppapi/proxy/ppapi_messages.h" 28 #include "ppapi/proxy/ppapi_messages.h"
27 #include "ppapi/shared_impl/file_type_conversion.h" 29 #include "ppapi/shared_impl/file_type_conversion.h"
28 #include "ppapi/shared_impl/time_conversion.h" 30 #include "ppapi/shared_impl/time_conversion.h"
29 #include "ppapi/thunk/enter.h" 31 #include "ppapi/thunk/enter.h"
30 #include "third_party/WebKit/public/web/WebPluginContainer.h" 32 #include "third_party/WebKit/public/web/WebPluginContainer.h"
31 33
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 quota::kQuotaLimitTypeUnknown, 136 quota::kQuotaLimitTypeUnknown,
135 PepperFileIOHost::NotifyCloseFileCallback()); 137 PepperFileIOHost::NotifyCloseFileCallback());
136 } 138 }
137 139
138 } // namespace 140 } // namespace
139 141
140 PepperFileIOHost::PepperFileIOHost(RendererPpapiHost* host, 142 PepperFileIOHost::PepperFileIOHost(RendererPpapiHost* host,
141 PP_Instance instance, 143 PP_Instance instance,
142 PP_Resource resource) 144 PP_Resource resource)
143 : ResourceHost(host->GetPpapiHost(), instance, resource), 145 : ResourceHost(host->GetPpapiHost(), instance, resource),
144 plugin_delegate_(NULL),
145 file_(base::kInvalidPlatformFileValue), 146 file_(base::kInvalidPlatformFileValue),
146 file_system_type_(PP_FILESYSTEMTYPE_INVALID), 147 file_system_type_(PP_FILESYSTEMTYPE_INVALID),
147 quota_policy_(quota::kQuotaLimitTypeUnknown), 148 quota_policy_(quota::kQuotaLimitTypeUnknown),
148 is_running_in_process_(host->IsRunningInProcess()), 149 is_running_in_process_(host->IsRunningInProcess()),
149 open_flags_(0), 150 open_flags_(0),
150 weak_factory_(this) { 151 weak_factory_(this) {
151 // TODO(victorhsieh): eliminate plugin_delegate_ as it's no longer needed.
152 PepperPluginInstanceImpl* plugin_instance =
153 HostGlobals::Get()->GetInstance(instance);
154 plugin_delegate_ = plugin_instance ? plugin_instance->delegate() : NULL;
155 } 152 }
156 153
157 PepperFileIOHost::~PepperFileIOHost() { 154 PepperFileIOHost::~PepperFileIOHost() {
158 OnHostMsgClose(NULL); 155 OnHostMsgClose(NULL);
159 } 156 }
160 157
161 int32_t PepperFileIOHost::OnResourceMessageReceived( 158 int32_t PepperFileIOHost::OnResourceMessageReceived(
162 const IPC::Message& msg, 159 const IPC::Message& msg,
163 ppapi::host::HostMessageContext* context) { 160 ppapi::host::HostMessageContext* context) {
164 IPC_BEGIN_MESSAGE_MAP(PepperFileIOHost, msg) 161 IPC_BEGIN_MESSAGE_MAP(PepperFileIOHost, msg)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 207
211 PPB_FileRef_API* file_ref_api = enter.object(); 208 PPB_FileRef_API* file_ref_api = enter.object();
212 PP_FileSystemType type = file_ref_api->GetFileSystemType(); 209 PP_FileSystemType type = file_ref_api->GetFileSystemType();
213 if (type != PP_FILESYSTEMTYPE_LOCALPERSISTENT && 210 if (type != PP_FILESYSTEMTYPE_LOCALPERSISTENT &&
214 type != PP_FILESYSTEMTYPE_LOCALTEMPORARY && 211 type != PP_FILESYSTEMTYPE_LOCALTEMPORARY &&
215 type != PP_FILESYSTEMTYPE_EXTERNAL && 212 type != PP_FILESYSTEMTYPE_EXTERNAL &&
216 type != PP_FILESYSTEMTYPE_ISOLATED) 213 type != PP_FILESYSTEMTYPE_ISOLATED)
217 return PP_ERROR_FAILED; 214 return PP_ERROR_FAILED;
218 file_system_type_ = type; 215 file_system_type_ = type;
219 216
220 if (!plugin_delegate_)
221 return PP_ERROR_FAILED;
222
223 PPB_FileRef_Impl* file_ref = static_cast<PPB_FileRef_Impl*>(file_ref_api); 217 PPB_FileRef_Impl* file_ref = static_cast<PPB_FileRef_Impl*>(file_ref_api);
224 if (file_ref->HasValidFileSystem()) { 218 if (file_ref->HasValidFileSystem()) {
225 file_system_url_ = file_ref->GetFileSystemURL(); 219 file_system_url_ = file_ref->GetFileSystemURL();
226 220
227 FileSystemDispatcher* file_system_dispatcher = 221 FileSystemDispatcher* file_system_dispatcher =
228 ChildThread::current()->file_system_dispatcher(); 222 ChildThread::current()->file_system_dispatcher();
229 AsyncOpenFileSystemURLCallback callback = base::Bind( 223 AsyncOpenFileSystemURLCallback callback = base::Bind(
230 &PepperFileIOHost::ExecutePlatformOpenFileSystemURLCallback, 224 &PepperFileIOHost::ExecutePlatformOpenFileSystemURLCallback,
231 weak_factory_.GetWeakPtr(), 225 weak_factory_.GetWeakPtr(),
232 context->MakeReplyMessageContext()); 226 context->MakeReplyMessageContext());
233 file_system_dispatcher->OpenFile( 227 file_system_dispatcher->OpenFile(
234 file_system_url_, flags, 228 file_system_url_, flags,
235 base::Bind(&DidOpenFileSystemURL, callback), 229 base::Bind(&DidOpenFileSystemURL, callback),
236 base::Bind(&DidFailOpenFileSystemURL, callback)); 230 base::Bind(&DidFailOpenFileSystemURL, callback));
237 } else { 231 } else {
238 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) 232 PepperPluginDelegateImpl* plugin_delegate =
233 static_cast<PepperPluginInstanceImpl*>(
234 PepperPluginInstance::Get(pp_instance()))->delegate();
235 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL || !plugin_delegate)
239 return PP_ERROR_FAILED; 236 return PP_ERROR_FAILED;
240 if (!plugin_delegate_->AsyncOpenFile( 237 if (!plugin_delegate->AsyncOpenFile(
241 file_ref->GetSystemPath(), flags, 238 file_ref->GetSystemPath(), flags,
242 base::Bind(&PepperFileIOHost::ExecutePlatformOpenFileCallback, 239 base::Bind(&PepperFileIOHost::ExecutePlatformOpenFileCallback,
243 weak_factory_.GetWeakPtr(), 240 weak_factory_.GetWeakPtr(),
244 context->MakeReplyMessageContext()))) 241 context->MakeReplyMessageContext())))
245 return PP_ERROR_FAILED; 242 return PP_ERROR_FAILED;
246 } 243 }
247 244
248 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 245 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
249 return PP_OK_COMPLETIONPENDING; 246 return PP_OK_COMPLETIONPENDING;
250 } 247 }
251 248
252 int32_t PepperFileIOHost::OnHostMsgQuery( 249 int32_t PepperFileIOHost::OnHostMsgQuery(
253 ppapi::host::HostMessageContext* context) { 250 ppapi::host::HostMessageContext* context) {
254 int32_t rv = state_manager_.CheckOperationState( 251 int32_t rv = state_manager_.CheckOperationState(
255 FileIOStateManager::OPERATION_EXCLUSIVE, true); 252 FileIOStateManager::OPERATION_EXCLUSIVE, true);
256 if (rv != PP_OK) 253 if (rv != PP_OK)
257 return rv; 254 return rv;
258 255
259 if (!plugin_delegate_)
260 return PP_ERROR_FAILED;
261
262 if (!base::FileUtilProxy::GetFileInfoFromPlatformFile( 256 if (!base::FileUtilProxy::GetFileInfoFromPlatformFile(
263 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 257 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
264 file_, 258 file_,
265 base::Bind(&PepperFileIOHost::ExecutePlatformQueryCallback, 259 base::Bind(&PepperFileIOHost::ExecutePlatformQueryCallback,
266 weak_factory_.GetWeakPtr(), 260 weak_factory_.GetWeakPtr(),
267 context->MakeReplyMessageContext()))) 261 context->MakeReplyMessageContext())))
268 return PP_ERROR_FAILED; 262 return PP_ERROR_FAILED;
269 263
270 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 264 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
271 return PP_OK_COMPLETIONPENDING; 265 return PP_OK_COMPLETIONPENDING;
272 } 266 }
273 267
274 int32_t PepperFileIOHost::OnHostMsgTouch( 268 int32_t PepperFileIOHost::OnHostMsgTouch(
275 ppapi::host::HostMessageContext* context, 269 ppapi::host::HostMessageContext* context,
276 PP_Time last_access_time, 270 PP_Time last_access_time,
277 PP_Time last_modified_time) { 271 PP_Time last_modified_time) {
278 int32_t rv = state_manager_.CheckOperationState( 272 int32_t rv = state_manager_.CheckOperationState(
279 FileIOStateManager::OPERATION_EXCLUSIVE, true); 273 FileIOStateManager::OPERATION_EXCLUSIVE, true);
280 if (rv != PP_OK) 274 if (rv != PP_OK)
281 return rv; 275 return rv;
282 276
283 if (!plugin_delegate_)
284 return PP_ERROR_FAILED;
285
286 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) { 277 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) {
287 FileSystemDispatcher* file_system_dispatcher = 278 FileSystemDispatcher* file_system_dispatcher =
288 ChildThread::current()->file_system_dispatcher(); 279 ChildThread::current()->file_system_dispatcher();
289 file_system_dispatcher->TouchFile( 280 file_system_dispatcher->TouchFile(
290 file_system_url_, 281 file_system_url_,
291 PPTimeToTime(last_access_time), 282 PPTimeToTime(last_access_time),
292 PPTimeToTime(last_modified_time), 283 PPTimeToTime(last_modified_time),
293 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, 284 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
294 weak_factory_.GetWeakPtr(), 285 weak_factory_.GetWeakPtr(),
295 context->MakeReplyMessageContext())); 286 context->MakeReplyMessageContext()));
296 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 287 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
297 return PP_OK_COMPLETIONPENDING; 288 return PP_OK_COMPLETIONPENDING;
298 } 289 }
299 290
300 // TODO(nhiroki): fix a failure of FileIO.Touch for an external filesystem on 291 // TODO(nhiroki): fix a failure of FileIO.Touch for an external filesystem on
301 // Mac and Linux due to sandbox restrictions (http://crbug.com/101128). 292 // Mac and Linux due to sandbox restrictions (http://crbug.com/101128).
302 if (!base::FileUtilProxy::Touch( 293 if (!base::FileUtilProxy::Touch(
303 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 294 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
304 file_, 295 file_,
305 PPTimeToTime(last_access_time), 296 PPTimeToTime(last_access_time),
306 PPTimeToTime(last_modified_time), 297 PPTimeToTime(last_modified_time),
307 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, 298 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
308 weak_factory_.GetWeakPtr(), 299 weak_factory_.GetWeakPtr(),
309 context->MakeReplyMessageContext()))) 300 context->MakeReplyMessageContext())))
310 return PP_ERROR_FAILED; 301 return PP_ERROR_FAILED;
311 302
312 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 303 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
313 return PP_OK_COMPLETIONPENDING; 304 return PP_OK_COMPLETIONPENDING;
(...skipping 11 matching lines...) Expand all
325 // Validate max_read_length before allocating below. This value is coming from 316 // Validate max_read_length before allocating below. This value is coming from
326 // the untrusted plugin. 317 // the untrusted plugin.
327 if (max_read_length < 0) { 318 if (max_read_length < 0) {
328 ReplyMessageContext reply_context = context->MakeReplyMessageContext(); 319 ReplyMessageContext reply_context = context->MakeReplyMessageContext();
329 reply_context.params.set_result(PP_ERROR_FAILED); 320 reply_context.params.set_result(PP_ERROR_FAILED);
330 host()->SendReply(reply_context, 321 host()->SendReply(reply_context,
331 PpapiPluginMsg_FileIO_ReadReply(std::string())); 322 PpapiPluginMsg_FileIO_ReadReply(std::string()));
332 return PP_OK_COMPLETIONPENDING; 323 return PP_OK_COMPLETIONPENDING;
333 } 324 }
334 325
335 if (!plugin_delegate_)
336 return PP_ERROR_FAILED;
337
338 if (!base::FileUtilProxy::Read( 326 if (!base::FileUtilProxy::Read(
339 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 327 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
340 file_, 328 file_,
341 offset, 329 offset,
342 max_read_length, 330 max_read_length,
343 base::Bind(&PepperFileIOHost::ExecutePlatformReadCallback, 331 base::Bind(&PepperFileIOHost::ExecutePlatformReadCallback,
344 weak_factory_.GetWeakPtr(), 332 weak_factory_.GetWeakPtr(),
345 context->MakeReplyMessageContext()))) 333 context->MakeReplyMessageContext())))
346 return PP_ERROR_FAILED; 334 return PP_ERROR_FAILED;
347 335
348 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_READ); 336 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_READ);
349 return PP_OK_COMPLETIONPENDING; 337 return PP_OK_COMPLETIONPENDING;
350 } 338 }
351 339
352 int32_t PepperFileIOHost::OnHostMsgWrite( 340 int32_t PepperFileIOHost::OnHostMsgWrite(
353 ppapi::host::HostMessageContext* context, 341 ppapi::host::HostMessageContext* context,
354 int64_t offset, 342 int64_t offset,
355 const std::string& buffer) { 343 const std::string& buffer) {
356 int32_t rv = state_manager_.CheckOperationState( 344 int32_t rv = state_manager_.CheckOperationState(
357 FileIOStateManager::OPERATION_WRITE, true); 345 FileIOStateManager::OPERATION_WRITE, true);
358 if (rv != PP_OK) 346 if (rv != PP_OK)
359 return rv; 347 return rv;
360 348
361 if (quota_file_io_) { 349 if (quota_file_io_) {
362 if (!quota_file_io_->Write( 350 if (!quota_file_io_->Write(
363 offset, buffer.c_str(), buffer.size(), 351 offset, buffer.c_str(), buffer.size(),
364 base::Bind(&PepperFileIOHost::ExecutePlatformWriteCallback, 352 base::Bind(&PepperFileIOHost::ExecutePlatformWriteCallback,
365 weak_factory_.GetWeakPtr(), 353 weak_factory_.GetWeakPtr(),
366 context->MakeReplyMessageContext()))) 354 context->MakeReplyMessageContext())))
367 return PP_ERROR_FAILED; 355 return PP_ERROR_FAILED;
368 } else { 356 } else {
369 if (!plugin_delegate_)
370 return PP_ERROR_FAILED;
371
372 if (!base::FileUtilProxy::Write( 357 if (!base::FileUtilProxy::Write(
373 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 358 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
374 file_, 359 file_,
375 offset, 360 offset,
376 buffer.c_str(), 361 buffer.c_str(),
377 buffer.size(), 362 buffer.size(),
378 base::Bind(&PepperFileIOHost::ExecutePlatformWriteCallback, 363 base::Bind(&PepperFileIOHost::ExecutePlatformWriteCallback,
379 weak_factory_.GetWeakPtr(), 364 weak_factory_.GetWeakPtr(),
380 context->MakeReplyMessageContext()))) 365 context->MakeReplyMessageContext())))
381 return PP_ERROR_FAILED; 366 return PP_ERROR_FAILED;
382 } 367 }
383 368
384 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE); 369 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE);
385 return PP_OK_COMPLETIONPENDING; 370 return PP_OK_COMPLETIONPENDING;
386 } 371 }
387 372
388 int32_t PepperFileIOHost::OnHostMsgSetLength( 373 int32_t PepperFileIOHost::OnHostMsgSetLength(
389 ppapi::host::HostMessageContext* context, 374 ppapi::host::HostMessageContext* context,
390 int64_t length) { 375 int64_t length) {
391 int32_t rv = state_manager_.CheckOperationState( 376 int32_t rv = state_manager_.CheckOperationState(
392 FileIOStateManager::OPERATION_EXCLUSIVE, true); 377 FileIOStateManager::OPERATION_EXCLUSIVE, true);
393 if (rv != PP_OK) 378 if (rv != PP_OK)
394 return rv; 379 return rv;
395 380
396 if (!plugin_delegate_)
397 return PP_ERROR_FAILED;
398
399 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) { 381 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) {
400 FileSystemDispatcher* file_system_dispatcher = 382 FileSystemDispatcher* file_system_dispatcher =
401 ChildThread::current()->file_system_dispatcher(); 383 ChildThread::current()->file_system_dispatcher();
402 file_system_dispatcher->Truncate( 384 file_system_dispatcher->Truncate(
403 file_system_url_, length, NULL, 385 file_system_url_, length, NULL,
404 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, 386 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
405 weak_factory_.GetWeakPtr(), 387 weak_factory_.GetWeakPtr(),
406 context->MakeReplyMessageContext())); 388 context->MakeReplyMessageContext()));
407 } else { 389 } else {
408 // TODO(nhiroki): fix a failure of FileIO.SetLength for an external 390 // TODO(nhiroki): fix a failure of FileIO.SetLength for an external
409 // filesystem on Mac due to sandbox restrictions (http://crbug.com/156077). 391 // filesystem on Mac due to sandbox restrictions (http://crbug.com/156077).
410 if (!base::FileUtilProxy::Truncate( 392 if (!base::FileUtilProxy::Truncate(
411 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 393 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
412 file_, 394 file_,
413 length, 395 length,
414 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, 396 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
415 weak_factory_.GetWeakPtr(), 397 weak_factory_.GetWeakPtr(),
416 context->MakeReplyMessageContext()))) 398 context->MakeReplyMessageContext())))
417 return PP_ERROR_FAILED; 399 return PP_ERROR_FAILED;
418 } 400 }
419 401
420 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 402 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
421 return PP_OK_COMPLETIONPENDING; 403 return PP_OK_COMPLETIONPENDING;
422 } 404 }
423 405
424 int32_t PepperFileIOHost::OnHostMsgFlush( 406 int32_t PepperFileIOHost::OnHostMsgFlush(
425 ppapi::host::HostMessageContext* context) { 407 ppapi::host::HostMessageContext* context) {
426 int32_t rv = state_manager_.CheckOperationState( 408 int32_t rv = state_manager_.CheckOperationState(
427 FileIOStateManager::OPERATION_EXCLUSIVE, true); 409 FileIOStateManager::OPERATION_EXCLUSIVE, true);
428 if (rv != PP_OK) 410 if (rv != PP_OK)
429 return rv; 411 return rv;
430 412
431 if (!plugin_delegate_)
432 return PP_ERROR_FAILED;
433
434 if (!base::FileUtilProxy::Flush( 413 if (!base::FileUtilProxy::Flush(
435 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 414 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
436 file_, 415 file_,
437 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback, 416 base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
438 weak_factory_.GetWeakPtr(), 417 weak_factory_.GetWeakPtr(),
439 context->MakeReplyMessageContext()))) 418 context->MakeReplyMessageContext())))
440 return PP_ERROR_FAILED; 419 return PP_ERROR_FAILED;
441 420
442 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 421 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
443 return PP_OK_COMPLETIONPENDING; 422 return PP_OK_COMPLETIONPENDING;
444 } 423 }
445 424
446 int32_t PepperFileIOHost::OnHostMsgClose( 425 int32_t PepperFileIOHost::OnHostMsgClose(
447 ppapi::host::HostMessageContext* context) { 426 ppapi::host::HostMessageContext* context) {
448 if (file_ != base::kInvalidPlatformFileValue && plugin_delegate_) { 427 if (file_ != base::kInvalidPlatformFileValue) {
449 base::FileUtilProxy::Close( 428 base::FileUtilProxy::Close(
450 plugin_delegate_->GetFileThreadMessageLoopProxy().get(), 429 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy().get(),
451 file_, 430 file_,
452 base::ResetAndReturn(&notify_close_file_callback_)); 431 base::ResetAndReturn(&notify_close_file_callback_));
453 file_ = base::kInvalidPlatformFileValue; 432 file_ = base::kInvalidPlatformFileValue;
454 quota_file_io_.reset(); 433 quota_file_io_.reset();
455 } 434 }
456 return PP_OK; 435 return PP_OK;
457 } 436 }
458 437
459 int32_t PepperFileIOHost::OnHostMsgWillWrite( 438 int32_t PepperFileIOHost::OnHostMsgWillWrite(
460 ppapi::host::HostMessageContext* context, 439 ppapi::host::HostMessageContext* context,
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 // On the plugin side, the callback expects a parameter with different meaning 609 // On the plugin side, the callback expects a parameter with different meaning
631 // depends on whether is negative or not. It is the result here. We translate 610 // depends on whether is negative or not. It is the result here. We translate
632 // for the callback. 611 // for the callback.
633 int32_t pp_error = ::ppapi::PlatformFileErrorToPepperError(error_code); 612 int32_t pp_error = ::ppapi::PlatformFileErrorToPepperError(error_code);
634 reply_context.params.set_result(ErrorOrByteNumber(pp_error, bytes_written)); 613 reply_context.params.set_result(ErrorOrByteNumber(pp_error, bytes_written));
635 host()->SendReply(reply_context, PpapiPluginMsg_FileIO_GeneralReply()); 614 host()->SendReply(reply_context, PpapiPluginMsg_FileIO_GeneralReply());
636 state_manager_.SetOperationFinished(); 615 state_manager_.SetOperationFinished();
637 } 616 }
638 617
639 } // namespace content 618 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/pepper_file_io_host.h ('k') | content/renderer/pepper/pepper_graphics_2d_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698