| OLD | NEW |
| 1 // Copyright (c) 2011 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/ppb_file_io_proxy.h" | 5 #include "ppapi/proxy/ppb_file_io_proxy.h" |
| 6 | 6 |
| 7 #include "ppapi/c/pp_errors.h" | 7 #include "ppapi/c/pp_errors.h" |
| 8 #include "ppapi/proxy/enter_proxy.h" | 8 #include "ppapi/proxy/enter_proxy.h" |
| 9 #include "ppapi/proxy/ppapi_messages.h" | 9 #include "ppapi/proxy/ppapi_messages.h" |
| 10 #include "ppapi/proxy/ppb_file_ref_proxy.h" | 10 #include "ppapi/proxy/ppb_file_ref_proxy.h" |
| 11 #include "ppapi/shared_impl/ppapi_globals.h" | 11 #include "ppapi/shared_impl/ppapi_globals.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 34 class FileIO : public PPB_FileIO_Shared { | 34 class FileIO : public PPB_FileIO_Shared { |
| 35 public: | 35 public: |
| 36 explicit FileIO(const HostResource& host_resource); | 36 explicit FileIO(const HostResource& host_resource); |
| 37 virtual ~FileIO(); | 37 virtual ~FileIO(); |
| 38 | 38 |
| 39 // PPB_FileIO_API implementation (not provided by FileIOImpl). | 39 // PPB_FileIO_API implementation (not provided by FileIOImpl). |
| 40 virtual void Close() OVERRIDE; | 40 virtual void Close() OVERRIDE; |
| 41 virtual int32_t GetOSFileDescriptor() OVERRIDE; | 41 virtual int32_t GetOSFileDescriptor() OVERRIDE; |
| 42 virtual int32_t WillWrite(int64_t offset, | 42 virtual int32_t WillWrite(int64_t offset, |
| 43 int32_t bytes_to_write, | 43 int32_t bytes_to_write, |
| 44 PP_CompletionCallback callback) OVERRIDE; | 44 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 45 virtual int32_t WillSetLength(int64_t length, | 45 virtual int32_t WillSetLength( |
| 46 PP_CompletionCallback callback) OVERRIDE; | 46 int64_t length, |
| 47 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 47 | 48 |
| 48 private: | 49 private: |
| 49 // FileIOImpl overrides. | 50 // FileIOImpl overrides. |
| 50 virtual int32_t OpenValidated(PP_Resource file_ref_resource, | 51 virtual int32_t OpenValidated( |
| 51 PPB_FileRef_API* file_ref_api, | 52 PP_Resource file_ref_resource, |
| 52 int32_t open_flags, | 53 PPB_FileRef_API* file_ref_api, |
| 53 PP_CompletionCallback callback) OVERRIDE; | 54 int32_t open_flags, |
| 54 virtual int32_t QueryValidated(PP_FileInfo* info, | 55 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 55 PP_CompletionCallback callback) OVERRIDE; | 56 virtual int32_t QueryValidated( |
| 56 virtual int32_t TouchValidated(PP_Time last_access_time, | 57 PP_FileInfo* info, |
| 57 PP_Time last_modified_time, | 58 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 58 PP_CompletionCallback callback) OVERRIDE; | 59 virtual int32_t TouchValidated( |
| 59 virtual int32_t ReadValidated(int64_t offset, | 60 PP_Time last_access_time, |
| 60 char* buffer, | 61 PP_Time last_modified_time, |
| 61 int32_t bytes_to_read, | 62 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 62 PP_CompletionCallback callback) OVERRIDE; | 63 virtual int32_t ReadValidated( |
| 63 virtual int32_t WriteValidated(int64_t offset, | 64 int64_t offset, |
| 64 const char* buffer, | 65 char* buffer, |
| 65 int32_t bytes_to_write, | 66 int32_t bytes_to_read, |
| 66 PP_CompletionCallback callback) OVERRIDE; | 67 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 67 virtual int32_t SetLengthValidated(int64_t length, | 68 virtual int32_t WriteValidated( |
| 68 PP_CompletionCallback callback) OVERRIDE; | 69 int64_t offset, |
| 69 virtual int32_t FlushValidated(PP_CompletionCallback callback) OVERRIDE; | 70 const char* buffer, |
| 71 int32_t bytes_to_write, |
| 72 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 73 virtual int32_t SetLengthValidated( |
| 74 int64_t length, |
| 75 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 76 virtual int32_t FlushValidated( |
| 77 scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| 70 | 78 |
| 71 PluginDispatcher* GetDispatcher() const { | 79 PluginDispatcher* GetDispatcher() const { |
| 72 return PluginDispatcher::GetForResource(this); | 80 return PluginDispatcher::GetForResource(this); |
| 73 } | 81 } |
| 74 | 82 |
| 75 static const ApiID kApiID = API_ID_PPB_FILE_IO; | 83 static const ApiID kApiID = API_ID_PPB_FILE_IO; |
| 76 | 84 |
| 77 DISALLOW_IMPLICIT_CONSTRUCTORS(FileIO); | 85 DISALLOW_IMPLICIT_CONSTRUCTORS(FileIO); |
| 78 }; | 86 }; |
| 79 | 87 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 91 host_resource())); | 99 host_resource())); |
| 92 } | 100 } |
| 93 } | 101 } |
| 94 | 102 |
| 95 int32_t FileIO::GetOSFileDescriptor() { | 103 int32_t FileIO::GetOSFileDescriptor() { |
| 96 return -1; | 104 return -1; |
| 97 } | 105 } |
| 98 | 106 |
| 99 int32_t FileIO::WillWrite(int64_t offset, | 107 int32_t FileIO::WillWrite(int64_t offset, |
| 100 int32_t bytes_to_write, | 108 int32_t bytes_to_write, |
| 101 PP_CompletionCallback callback) { | 109 scoped_refptr<TrackedCallback> callback) { |
| 102 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillWrite( | 110 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillWrite( |
| 103 kApiID, host_resource(), offset, bytes_to_write)); | 111 kApiID, host_resource(), offset, bytes_to_write)); |
| 104 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 112 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 105 return PP_OK_COMPLETIONPENDING; | 113 return PP_OK_COMPLETIONPENDING; |
| 106 } | 114 } |
| 107 | 115 |
| 108 int32_t FileIO::WillSetLength(int64_t length, | 116 int32_t FileIO::WillSetLength(int64_t length, |
| 109 PP_CompletionCallback callback) { | 117 scoped_refptr<TrackedCallback> callback) { |
| 110 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillSetLength( | 118 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillSetLength( |
| 111 kApiID, host_resource(), length)); | 119 kApiID, host_resource(), length)); |
| 112 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 120 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 113 return PP_OK_COMPLETIONPENDING; | 121 return PP_OK_COMPLETIONPENDING; |
| 114 } | 122 } |
| 115 | 123 |
| 116 int32_t FileIO::OpenValidated(PP_Resource file_ref_resource, | 124 int32_t FileIO::OpenValidated(PP_Resource file_ref_resource, |
| 117 PPB_FileRef_API* file_ref_api, | 125 PPB_FileRef_API* file_ref_api, |
| 118 int32_t open_flags, | 126 int32_t open_flags, |
| 119 PP_CompletionCallback callback) { | 127 scoped_refptr<TrackedCallback> callback) { |
| 120 Resource* file_ref_object = | 128 Resource* file_ref_object = |
| 121 PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_ref_resource); | 129 PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_ref_resource); |
| 122 | 130 |
| 123 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Open( | 131 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Open( |
| 124 kApiID, host_resource(), file_ref_object->host_resource(), open_flags)); | 132 kApiID, host_resource(), file_ref_object->host_resource(), open_flags)); |
| 125 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 133 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 126 return PP_OK_COMPLETIONPENDING; | 134 return PP_OK_COMPLETIONPENDING; |
| 127 } | 135 } |
| 128 | 136 |
| 129 int32_t FileIO::QueryValidated(PP_FileInfo* info, | 137 int32_t FileIO::QueryValidated(PP_FileInfo* info, |
| 130 PP_CompletionCallback callback) { | 138 scoped_refptr<TrackedCallback> callback) { |
| 131 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Query( | 139 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Query( |
| 132 kApiID, host_resource())); | 140 kApiID, host_resource())); |
| 133 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, info); | 141 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, info); |
| 134 return PP_OK_COMPLETIONPENDING; | 142 return PP_OK_COMPLETIONPENDING; |
| 135 } | 143 } |
| 136 | 144 |
| 137 int32_t FileIO::TouchValidated(PP_Time last_access_time, | 145 int32_t FileIO::TouchValidated(PP_Time last_access_time, |
| 138 PP_Time last_modified_time, | 146 PP_Time last_modified_time, |
| 139 PP_CompletionCallback callback) { | 147 scoped_refptr<TrackedCallback> callback) { |
| 140 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Touch( | 148 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Touch( |
| 141 kApiID, host_resource(), last_access_time, last_modified_time)); | 149 kApiID, host_resource(), last_access_time, last_modified_time)); |
| 142 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 150 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 143 return PP_OK_COMPLETIONPENDING; | 151 return PP_OK_COMPLETIONPENDING; |
| 144 } | 152 } |
| 145 | 153 |
| 146 int32_t FileIO::ReadValidated(int64_t offset, | 154 int32_t FileIO::ReadValidated(int64_t offset, |
| 147 char* buffer, | 155 char* buffer, |
| 148 int32_t bytes_to_read, | 156 int32_t bytes_to_read, |
| 149 PP_CompletionCallback callback) { | 157 scoped_refptr<TrackedCallback> callback) { |
| 150 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Read( | 158 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Read( |
| 151 kApiID, host_resource(), offset, bytes_to_read)); | 159 kApiID, host_resource(), offset, bytes_to_read)); |
| 152 RegisterCallback(OPERATION_READ, callback, buffer, NULL); | 160 RegisterCallback(OPERATION_READ, callback, buffer, NULL); |
| 153 return PP_OK_COMPLETIONPENDING; | 161 return PP_OK_COMPLETIONPENDING; |
| 154 } | 162 } |
| 155 | 163 |
| 156 int32_t FileIO::WriteValidated(int64_t offset, | 164 int32_t FileIO::WriteValidated(int64_t offset, |
| 157 const char* buffer, | 165 const char* buffer, |
| 158 int32_t bytes_to_write, | 166 int32_t bytes_to_write, |
| 159 PP_CompletionCallback callback) { | 167 scoped_refptr<TrackedCallback> callback) { |
| 160 // TODO(brettw) it would be nice to use a shared memory buffer for large | 168 // TODO(brettw) it would be nice to use a shared memory buffer for large |
| 161 // writes rather than having to copy to a string (which will involve a number | 169 // writes rather than having to copy to a string (which will involve a number |
| 162 // of extra copies to serialize over IPC). | 170 // of extra copies to serialize over IPC). |
| 163 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Write( | 171 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Write( |
| 164 kApiID, host_resource(), offset, std::string(buffer, bytes_to_write))); | 172 kApiID, host_resource(), offset, std::string(buffer, bytes_to_write))); |
| 165 RegisterCallback(OPERATION_WRITE, callback, NULL, NULL); | 173 RegisterCallback(OPERATION_WRITE, callback, NULL, NULL); |
| 166 return PP_OK_COMPLETIONPENDING; | 174 return PP_OK_COMPLETIONPENDING; |
| 167 } | 175 } |
| 168 | 176 |
| 169 int32_t FileIO::SetLengthValidated(int64_t length, | 177 int32_t FileIO::SetLengthValidated(int64_t length, |
| 170 PP_CompletionCallback callback) { | 178 scoped_refptr<TrackedCallback> callback) { |
| 171 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_SetLength( | 179 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_SetLength( |
| 172 kApiID, host_resource(), length)); | 180 kApiID, host_resource(), length)); |
| 173 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 181 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 174 return PP_OK_COMPLETIONPENDING; | 182 return PP_OK_COMPLETIONPENDING; |
| 175 } | 183 } |
| 176 | 184 |
| 177 int32_t FileIO::FlushValidated(PP_CompletionCallback callback) { | 185 int32_t FileIO::FlushValidated(scoped_refptr<TrackedCallback> callback) { |
| 178 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Flush( | 186 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Flush( |
| 179 kApiID, host_resource())); | 187 kApiID, host_resource())); |
| 180 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 188 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 181 return PP_OK_COMPLETIONPENDING; | 189 return PP_OK_COMPLETIONPENDING; |
| 182 } | 190 } |
| 183 | 191 |
| 184 } // namespace | 192 } // namespace |
| 185 | 193 |
| 186 // ----------------------------------------------------------------------------- | 194 // ----------------------------------------------------------------------------- |
| 187 | 195 |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 DCHECK(pp_error <= static_cast<int32_t>(data->size())); | 441 DCHECK(pp_error <= static_cast<int32_t>(data->size())); |
| 434 data->resize(pp_error); | 442 data->resize(pp_error); |
| 435 } | 443 } |
| 436 Send(new PpapiMsg_PPBFileIO_ReadComplete(kApiID, host_resource, pp_error, | 444 Send(new PpapiMsg_PPBFileIO_ReadComplete(kApiID, host_resource, pp_error, |
| 437 *data)); | 445 *data)); |
| 438 delete data; | 446 delete data; |
| 439 } | 447 } |
| 440 | 448 |
| 441 } // namespace proxy | 449 } // namespace proxy |
| 442 } // namespace ppapi | 450 } // namespace ppapi |
| OLD | NEW |