OLD | NEW |
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 "webkit/plugins/ppapi/ppb_file_chooser_impl.h" | 5 #include "webkit/plugins/ppapi/ppb_file_chooser_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 | 158 |
159 int32_t result_code = (chosen_files.size() > 0) ? PP_OK : PP_ERROR_USERCANCEL; | 159 int32_t result_code = (chosen_files.size() > 0) ? PP_OK : PP_ERROR_USERCANCEL; |
160 if (output_.is_valid()) | 160 if (output_.is_valid()) |
161 output_.StoreResourceVector(chosen_files); | 161 output_.StoreResourceVector(chosen_files); |
162 else // v0.5 API. | 162 else // v0.5 API. |
163 chosen_files_.swap(chosen_files); | 163 chosen_files_.swap(chosen_files); |
164 RunCallback(result_code); | 164 RunCallback(result_code); |
165 } | 165 } |
166 | 166 |
167 int32_t PPB_FileChooser_Impl::ValidateCallback( | 167 int32_t PPB_FileChooser_Impl::ValidateCallback( |
168 const PP_CompletionCallback& callback) { | 168 scoped_refptr<TrackedCallback> callback) { |
169 // We only support non-blocking calls. | |
170 if (!callback.func) | |
171 return PP_ERROR_BLOCKS_MAIN_THREAD; | |
172 | |
173 if (TrackedCallback::IsPending(callback_)) | 169 if (TrackedCallback::IsPending(callback_)) |
174 return PP_ERROR_INPROGRESS; | 170 return PP_ERROR_INPROGRESS; |
175 | 171 |
176 return PP_OK; | 172 return PP_OK; |
177 } | 173 } |
178 | 174 |
179 void PPB_FileChooser_Impl::RegisterCallback( | 175 void PPB_FileChooser_Impl::RegisterCallback( |
180 const PP_CompletionCallback& callback) { | 176 scoped_refptr<TrackedCallback> callback) { |
181 DCHECK(callback.func); | |
182 DCHECK(!TrackedCallback::IsPending(callback_)); | 177 DCHECK(!TrackedCallback::IsPending(callback_)); |
183 | 178 |
184 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this); | 179 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this); |
185 if (!plugin_module) | 180 if (!plugin_module) |
186 return; | 181 return; |
187 | 182 |
188 callback_ = new TrackedCallback(this, callback); | 183 callback_ = callback; |
189 } | 184 } |
190 | 185 |
191 void PPB_FileChooser_Impl::RunCallback(int32_t result) { | 186 void PPB_FileChooser_Impl::RunCallback(int32_t result) { |
192 TrackedCallback::ClearAndRun(&callback_, result); | 187 TrackedCallback::ClearAndRun(&callback_, result); |
193 } | 188 } |
194 | 189 |
195 int32_t PPB_FileChooser_Impl::Show(const PP_ArrayOutput& output, | 190 int32_t PPB_FileChooser_Impl::Show(const PP_ArrayOutput& output, |
196 const PP_CompletionCallback& callback) { | 191 scoped_refptr<TrackedCallback> callback) { |
197 int32_t result = Show0_5(callback); | 192 int32_t result = Show0_5(callback); |
198 if (result == PP_OK_COMPLETIONPENDING) | 193 if (result == PP_OK_COMPLETIONPENDING) |
199 output_.set_pp_array_output(output); | 194 output_.set_pp_array_output(output); |
200 return result; | 195 return result; |
201 } | 196 } |
202 | 197 |
203 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture( | 198 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture( |
204 PP_Bool save_as, | 199 PP_Bool save_as, |
205 PP_Var suggested_file_name, | 200 PP_Var suggested_file_name, |
206 const PP_ArrayOutput& output, | 201 const PP_ArrayOutput& output, |
207 const PP_CompletionCallback& callback) { | 202 scoped_refptr<TrackedCallback> callback) { |
208 int32_t result = ShowWithoutUserGesture0_5(save_as, suggested_file_name, | 203 int32_t result = ShowWithoutUserGesture0_5(save_as, suggested_file_name, |
209 callback); | 204 callback); |
210 if (result == PP_OK_COMPLETIONPENDING) | 205 if (result == PP_OK_COMPLETIONPENDING) |
211 output_.set_pp_array_output(output); | 206 output_.set_pp_array_output(output); |
212 return result; | 207 return result; |
213 } | 208 } |
214 | 209 |
215 int32_t PPB_FileChooser_Impl::Show0_5(const PP_CompletionCallback& callback) { | 210 int32_t PPB_FileChooser_Impl::Show0_5(scoped_refptr<TrackedCallback> callback) { |
216 PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this); | 211 PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this); |
217 if (!plugin_instance) | 212 if (!plugin_instance) |
218 return PP_ERROR_FAILED; | 213 return PP_ERROR_FAILED; |
219 if (!plugin_instance->IsProcessingUserGesture()) | 214 if (!plugin_instance->IsProcessingUserGesture()) |
220 return PP_ERROR_NO_USER_GESTURE; | 215 return PP_ERROR_NO_USER_GESTURE; |
221 return ShowWithoutUserGesture0_5(PP_FALSE, PP_MakeUndefined(), callback); | 216 return ShowWithoutUserGesture0_5(PP_FALSE, PP_MakeUndefined(), callback); |
222 } | 217 } |
223 | 218 |
224 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture0_5( | 219 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture0_5( |
225 PP_Bool save_as, | 220 PP_Bool save_as, |
226 PP_Var suggested_file_name, | 221 PP_Var suggested_file_name, |
227 const PP_CompletionCallback& callback) { | 222 scoped_refptr<TrackedCallback> callback) { |
228 int32_t rv = ValidateCallback(callback); | 223 int32_t rv = ValidateCallback(callback); |
229 if (rv != PP_OK) | 224 if (rv != PP_OK) |
230 return rv; | 225 return rv; |
231 | 226 |
232 DCHECK((mode_ == PP_FILECHOOSERMODE_OPEN) || | 227 DCHECK((mode_ == PP_FILECHOOSERMODE_OPEN) || |
233 (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE)); | 228 (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE)); |
234 | 229 |
235 WebFileChooserParams params; | 230 WebFileChooserParams params; |
236 if (save_as) { | 231 if (save_as) { |
237 params.saveAs = true; | 232 params.saveAs = true; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 continue; | 279 continue; |
285 StringToLowerASCII(&type); | 280 StringToLowerASCII(&type); |
286 normalized_type_list.push_back(WebString::fromUTF8(type.data(), | 281 normalized_type_list.push_back(WebString::fromUTF8(type.data(), |
287 type.size())); | 282 type.size())); |
288 } | 283 } |
289 return normalized_type_list; | 284 return normalized_type_list; |
290 } | 285 } |
291 | 286 |
292 } // namespace ppapi | 287 } // namespace ppapi |
293 } // namespace webkit | 288 } // namespace webkit |
OLD | NEW |