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

Unified Diff: ppapi/proxy/file_io_resource.h

Issue 18063005: Do PPB_FileIO Query and Read in the plugin process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to David's latest. Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: ppapi/proxy/file_io_resource.h
diff --git a/ppapi/proxy/file_io_resource.h b/ppapi/proxy/file_io_resource.h
index a2b928dcd840b81958ffab3bbb32ac3435c97b92..d81bcf326a8d7113f85de3481c3b2ef112cee490 100644
--- a/ppapi/proxy/file_io_resource.h
+++ b/ppapi/proxy/file_io_resource.h
@@ -71,26 +71,54 @@ class PPAPI_PROXY_EXPORT FileIOResource
int32_t bytes_to_read,
const PP_ArrayOutput& array_output,
scoped_refptr<TrackedCallback> callback);
+ void CloseFileHandle();
- // Handlers of reply messages. Note that all of them have a callback
- // parameters bound when call to the host.
+ // Reply message handlers for operations that are done in the host.
void OnPluginMsgGeneralComplete(scoped_refptr<TrackedCallback> callback,
const ResourceMessageReplyParams& params);
void OnPluginMsgOpenFileComplete(scoped_refptr<TrackedCallback> callback,
const ResourceMessageReplyParams& params);
- void OnPluginMsgQueryComplete(scoped_refptr<TrackedCallback> callback,
- PP_FileInfo* output_info_,
- const ResourceMessageReplyParams& params,
- const PP_FileInfo& info);
- void OnPluginMsgReadComplete(scoped_refptr<TrackedCallback> callback,
- PP_ArrayOutput array_output,
- const ResourceMessageReplyParams& params,
- const std::string& data);
void OnPluginMsgRequestOSFileHandleComplete(
scoped_refptr<TrackedCallback> callback,
PP_FileHandle* output_handle,
const ResourceMessageReplyParams& params);
+ // When we pass a callback to FileUtilProxy code, we must keep the resource
+ // alive until it's called. However, we can't directly pass a reference to the
+ // resource, since that can cause our destructor to run when when the callback
+ // is destroyed, when we don't hold the proxy lock. Instead, pass a scoped_ptr
+ // to a scoped_refptr. This keeps the resource alive and allows us to take the
+ // reference so the destructor only runs while we hold the lock.
+ typedef scoped_ptr<scoped_refptr<FileIOResource> > PassedRef;
+
+ // These callbacks can be safely passed to FileUtilProxy. They take the lock,
+ // then take the resource reference and run the reply message handler. If
+ // this is the last reference, the destructor will run while we hold the lock.
+ static void QueryCallback(PassedRef file_io_ref,
+ scoped_refptr<TrackedCallback> callback,
+ PP_FileInfo* output_info,
+ base::PlatformFileError error_code,
+ const base::PlatformFileInfo& file_info);
+
+ static void ReadCallback(PassedRef file_io_ref,
+ scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ base::PlatformFileError error_code,
+ const char* data, int bytes_read);
+
+ // Reply message handlers for operations that are done in the plugin process.
+ // These should not be called directly.
+ void OnQueryComplete(scoped_refptr<TrackedCallback> callback,
+ PP_FileInfo* output_info,
+ base::PlatformFileError error_code,
+ const base::PlatformFileInfo& file_info);
+ void OnReadComplete(scoped_refptr<TrackedCallback> callback,
+ PP_ArrayOutput array_output,
+ base::PlatformFileError error_code,
+ const char* data, int bytes_read);
+
+ PP_FileHandle file_handle_;
+ PP_FileSystemType file_system_type_;
FileIOStateManager state_manager_;
DISALLOW_COPY_AND_ASSIGN(FileIOResource);

Powered by Google App Engine
This is Rietveld 408576698