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

Side by Side Diff: ppapi/proxy/ppb_file_io_proxy.cc

Issue 10081020: PPAPI: Make blocking completion callbacks work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated TestURLLoader to test blocking callbacks. Created 8 years, 8 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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"
(...skipping 23 matching lines...) Expand all
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 ApiCallbackType callback) OVERRIDE;
45 virtual int32_t WillSetLength(int64_t length, 45 virtual int32_t WillSetLength(int64_t length,
46 PP_CompletionCallback callback) OVERRIDE; 46 ApiCallbackType callback) OVERRIDE;
47 47
48 private: 48 private:
49 // FileIOImpl overrides. 49 // FileIOImpl overrides.
50 virtual int32_t OpenValidated(PP_Resource file_ref_resource, 50 virtual int32_t OpenValidated(PP_Resource file_ref_resource,
51 PPB_FileRef_API* file_ref_api, 51 PPB_FileRef_API* file_ref_api,
52 int32_t open_flags, 52 int32_t open_flags,
53 PP_CompletionCallback callback) OVERRIDE; 53 ApiCallbackType callback) OVERRIDE;
54 virtual int32_t QueryValidated(PP_FileInfo* info, 54 virtual int32_t QueryValidated(PP_FileInfo* info,
55 PP_CompletionCallback callback) OVERRIDE; 55 ApiCallbackType callback) OVERRIDE;
56 virtual int32_t TouchValidated(PP_Time last_access_time, 56 virtual int32_t TouchValidated(PP_Time last_access_time,
57 PP_Time last_modified_time, 57 PP_Time last_modified_time,
58 PP_CompletionCallback callback) OVERRIDE; 58 ApiCallbackType callback) OVERRIDE;
59 virtual int32_t ReadValidated(int64_t offset, 59 virtual int32_t ReadValidated(int64_t offset,
60 char* buffer, 60 char* buffer,
61 int32_t bytes_to_read, 61 int32_t bytes_to_read,
62 PP_CompletionCallback callback) OVERRIDE; 62 ApiCallbackType callback) OVERRIDE;
63 virtual int32_t WriteValidated(int64_t offset, 63 virtual int32_t WriteValidated(int64_t offset,
64 const char* buffer, 64 const char* buffer,
65 int32_t bytes_to_write, 65 int32_t bytes_to_write,
66 PP_CompletionCallback callback) OVERRIDE; 66 ApiCallbackType callback) OVERRIDE;
67 virtual int32_t SetLengthValidated(int64_t length, 67 virtual int32_t SetLengthValidated(int64_t length,
68 PP_CompletionCallback callback) OVERRIDE; 68 ApiCallbackType callback) OVERRIDE;
69 virtual int32_t FlushValidated(PP_CompletionCallback callback) OVERRIDE; 69 virtual int32_t FlushValidated(ApiCallbackType callback) OVERRIDE;
70 70
71 PluginDispatcher* GetDispatcher() const { 71 PluginDispatcher* GetDispatcher() const {
72 return PluginDispatcher::GetForResource(this); 72 return PluginDispatcher::GetForResource(this);
73 } 73 }
74 74
75 static const ApiID kApiID = API_ID_PPB_FILE_IO; 75 static const ApiID kApiID = API_ID_PPB_FILE_IO;
76 76
77 DISALLOW_IMPLICIT_CONSTRUCTORS(FileIO); 77 DISALLOW_IMPLICIT_CONSTRUCTORS(FileIO);
78 }; 78 };
79 79
(...skipping 11 matching lines...) Expand all
91 host_resource())); 91 host_resource()));
92 } 92 }
93 } 93 }
94 94
95 int32_t FileIO::GetOSFileDescriptor() { 95 int32_t FileIO::GetOSFileDescriptor() {
96 return -1; 96 return -1;
97 } 97 }
98 98
99 int32_t FileIO::WillWrite(int64_t offset, 99 int32_t FileIO::WillWrite(int64_t offset,
100 int32_t bytes_to_write, 100 int32_t bytes_to_write,
101 PP_CompletionCallback callback) { 101 ApiCallbackType callback) {
102 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillWrite( 102 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillWrite(
103 kApiID, host_resource(), offset, bytes_to_write)); 103 kApiID, host_resource(), offset, bytes_to_write));
104 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); 104 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL);
105 return PP_OK_COMPLETIONPENDING; 105 return PP_OK_COMPLETIONPENDING;
106 } 106 }
107 107
108 int32_t FileIO::WillSetLength(int64_t length, 108 int32_t FileIO::WillSetLength(int64_t length,
109 PP_CompletionCallback callback) { 109 ApiCallbackType callback) {
110 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillSetLength( 110 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_WillSetLength(
111 kApiID, host_resource(), length)); 111 kApiID, host_resource(), length));
112 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); 112 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL);
113 return PP_OK_COMPLETIONPENDING; 113 return PP_OK_COMPLETIONPENDING;
114 } 114 }
115 115
116 int32_t FileIO::OpenValidated(PP_Resource file_ref_resource, 116 int32_t FileIO::OpenValidated(PP_Resource file_ref_resource,
117 PPB_FileRef_API* file_ref_api, 117 PPB_FileRef_API* file_ref_api,
118 int32_t open_flags, 118 int32_t open_flags,
119 PP_CompletionCallback callback) { 119 ApiCallbackType callback) {
120 Resource* file_ref_object = 120 Resource* file_ref_object =
121 PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_ref_resource); 121 PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_ref_resource);
122 122
123 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Open( 123 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Open(
124 kApiID, host_resource(), file_ref_object->host_resource(), open_flags)); 124 kApiID, host_resource(), file_ref_object->host_resource(), open_flags));
125 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); 125 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL);
126 return PP_OK_COMPLETIONPENDING; 126 return PP_OK_COMPLETIONPENDING;
127 } 127 }
128 128
129 int32_t FileIO::QueryValidated(PP_FileInfo* info, 129 int32_t FileIO::QueryValidated(PP_FileInfo* info,
130 PP_CompletionCallback callback) { 130 ApiCallbackType callback) {
131 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Query( 131 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Query(
132 kApiID, host_resource())); 132 kApiID, host_resource()));
133 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, info); 133 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, info);
134 return PP_OK_COMPLETIONPENDING; 134 return PP_OK_COMPLETIONPENDING;
135 } 135 }
136 136
137 int32_t FileIO::TouchValidated(PP_Time last_access_time, 137 int32_t FileIO::TouchValidated(PP_Time last_access_time,
138 PP_Time last_modified_time, 138 PP_Time last_modified_time,
139 PP_CompletionCallback callback) { 139 ApiCallbackType callback) {
140 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Touch( 140 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Touch(
141 kApiID, host_resource(), last_access_time, last_modified_time)); 141 kApiID, host_resource(), last_access_time, last_modified_time));
142 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); 142 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL);
143 return PP_OK_COMPLETIONPENDING; 143 return PP_OK_COMPLETIONPENDING;
144 } 144 }
145 145
146 int32_t FileIO::ReadValidated(int64_t offset, 146 int32_t FileIO::ReadValidated(int64_t offset,
147 char* buffer, 147 char* buffer,
148 int32_t bytes_to_read, 148 int32_t bytes_to_read,
149 PP_CompletionCallback callback) { 149 ApiCallbackType callback) {
150 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Read( 150 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Read(
151 kApiID, host_resource(), offset, bytes_to_read)); 151 kApiID, host_resource(), offset, bytes_to_read));
152 RegisterCallback(OPERATION_READ, callback, buffer, NULL); 152 RegisterCallback(OPERATION_READ, callback, buffer, NULL);
153 return PP_OK_COMPLETIONPENDING; 153 return PP_OK_COMPLETIONPENDING;
154 } 154 }
155 155
156 int32_t FileIO::WriteValidated(int64_t offset, 156 int32_t FileIO::WriteValidated(int64_t offset,
157 const char* buffer, 157 const char* buffer,
158 int32_t bytes_to_write, 158 int32_t bytes_to_write,
159 PP_CompletionCallback callback) { 159 ApiCallbackType callback) {
160 // TODO(brettw) it would be nice to use a shared memory buffer for large 160 // 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 161 // writes rather than having to copy to a string (which will involve a number
162 // of extra copies to serialize over IPC). 162 // of extra copies to serialize over IPC).
163 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Write( 163 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Write(
164 kApiID, host_resource(), offset, std::string(buffer, bytes_to_write))); 164 kApiID, host_resource(), offset, std::string(buffer, bytes_to_write)));
165 RegisterCallback(OPERATION_WRITE, callback, NULL, NULL); 165 RegisterCallback(OPERATION_WRITE, callback, NULL, NULL);
166 return PP_OK_COMPLETIONPENDING; 166 return PP_OK_COMPLETIONPENDING;
167 } 167 }
168 168
169 int32_t FileIO::SetLengthValidated(int64_t length, 169 int32_t FileIO::SetLengthValidated(int64_t length,
170 PP_CompletionCallback callback) { 170 ApiCallbackType callback) {
171 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_SetLength( 171 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_SetLength(
172 kApiID, host_resource(), length)); 172 kApiID, host_resource(), length));
173 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); 173 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL);
174 return PP_OK_COMPLETIONPENDING; 174 return PP_OK_COMPLETIONPENDING;
175 } 175 }
176 176
177 int32_t FileIO::FlushValidated(PP_CompletionCallback callback) { 177 int32_t FileIO::FlushValidated(ApiCallbackType callback) {
178 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Flush( 178 GetDispatcher()->Send(new PpapiHostMsg_PPBFileIO_Flush(
179 kApiID, host_resource())); 179 kApiID, host_resource()));
180 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); 180 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL);
181 return PP_OK_COMPLETIONPENDING; 181 return PP_OK_COMPLETIONPENDING;
182 } 182 }
183 183
184 } // namespace 184 } // namespace
185 185
186 // ----------------------------------------------------------------------------- 186 // -----------------------------------------------------------------------------
187 187
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 DCHECK(pp_error <= static_cast<int32_t>(data->size())); 433 DCHECK(pp_error <= static_cast<int32_t>(data->size()));
434 data->resize(pp_error); 434 data->resize(pp_error);
435 } 435 }
436 Send(new PpapiMsg_PPBFileIO_ReadComplete(kApiID, host_resource, pp_error, 436 Send(new PpapiMsg_PPBFileIO_ReadComplete(kApiID, host_resource, pp_error,
437 *data)); 437 *data));
438 delete data; 438 delete data;
439 } 439 }
440 440
441 } // namespace proxy 441 } // namespace proxy
442 } // namespace ppapi 442 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698