Index: ppapi/cpp/file_io.h |
diff --git a/ppapi/cpp/file_io.h b/ppapi/cpp/file_io.h |
index 0d8dcc910bbd8794be04016e81a40878ebbd3af3..1e2dda21ca167e79fd72886c1edab62c95cf9739 100644 |
--- a/ppapi/cpp/file_io.h |
+++ b/ppapi/cpp/file_io.h |
@@ -45,8 +45,17 @@ class FileIO : public Resource { |
/// |
/// @param[in] file_ref A <code>PP_Resource</code> corresponding to a file |
/// reference. |
+ /// |
/// @param[in] open_flags A bit-mask of the <code>PP_FileOpenFlags</code> |
- /// values. |
+ /// values. Valid values are: |
+ /// - PP_FILEOPENFLAG_READ |
+ /// - PP_FILEOPENFLAG_WRITE |
+ /// - PP_FILEOPENFLAG_CREATE |
+ /// - PP_FILEOPENFLAG_TRUNCATE |
+ /// - PP_FILEOPENFLAG_EXCLUSIVE |
+ /// See <code>PP_FileOpenFlags</code> in <code>ppb_file_io.h</code> for more |
+ /// details on these flags. |
+ /// |
/// @param[in] cc A <code>CompletionCallback</code> to be called upon |
/// completion of Open(). |
/// |
@@ -83,9 +92,33 @@ class FileIO : public Resource { |
PP_Time last_modified_time, |
const CompletionCallback& cc); |
- /// Read() reads from an offset in the file. The size of the buffer must be |
- /// large enough to hold the specified number of bytes to read. This |
- /// function might perform a partial read. |
+ /// Reads from an offset in the file. |
+ /// |
+ /// The size of the buffer must be large enough to hold the specified number |
+ /// of bytes to read. This function might perform a partial read, meaning |
+ /// that all the requested bytes might not be returned, even if the end of the |
+ /// file has not been reached. |
+ /// |
+ /// This function reads into a buffer that the caller supplies. This buffer |
+ /// must remain valid as long as the FileIO resource is alive. If you use |
+ /// a completion callback factory and it goes out of scope, it will not issue |
+ /// the callback on your class, BUT the callback factory can NOT cancel |
+ /// the request from the browser's perspective. This means that the browser |
+ /// will still try to write to your buffer even if the callback factory is |
+ /// destroyed! |
+ /// |
+ /// So you must ensure that your buffer outlives the FileIO resource. If you |
+ /// have one class and use the FileIO resource exclusively from that class |
+ /// and never make any copies, this will be fine: the resource will be |
+ /// destroyed when your class is. But keep in mind that copying a pp::FileIO |
+ /// object just creates a second reference to the original resource. For |
+ /// example, if you have a function like this: |
+ /// pp::FileIO MyClass::GetFileIO(); |
+ /// where a copy of your FileIO resource could outlive your class, the |
+ /// callback will still be pending when your class goes out of scope, creating |
+ /// the possibility of writing into invalid memory. So it's recommended to |
+ /// keep your FileIO resource and any oubput buffers tightly controlled in |
+ /// the same scope. |
/// |
/// @param[in] offset The offset into the file. |
/// @param[in] buffer The buffer to hold the specified number of bytes read. |