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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 | 142 |
143 int32_t result_code = (chosen_files.size() > 0) ? PP_OK : PP_ERROR_USERCANCEL; | 143 int32_t result_code = (chosen_files.size() > 0) ? PP_OK : PP_ERROR_USERCANCEL; |
144 if (output_.is_valid()) | 144 if (output_.is_valid()) |
145 output_.StoreResourceVector(chosen_files); | 145 output_.StoreResourceVector(chosen_files); |
146 else // v0.5 API. | 146 else // v0.5 API. |
147 chosen_files_.swap(chosen_files); | 147 chosen_files_.swap(chosen_files); |
148 RunCallback(result_code); | 148 RunCallback(result_code); |
149 } | 149 } |
150 | 150 |
151 int32_t PPB_FileChooser_Impl::ValidateCallback( | 151 int32_t PPB_FileChooser_Impl::ValidateCallback( |
152 const PP_CompletionCallback& callback) { | 152 scoped_refptr<TrackedCallback> callback) { |
153 // We only support non-blocking calls. | |
154 if (!callback.func) | |
155 return PP_ERROR_BLOCKS_MAIN_THREAD; | |
156 | |
157 if (TrackedCallback::IsPending(callback_)) | 153 if (TrackedCallback::IsPending(callback_)) |
158 return PP_ERROR_INPROGRESS; | 154 return PP_ERROR_INPROGRESS; |
159 | 155 |
160 return PP_OK; | 156 return PP_OK; |
161 } | 157 } |
162 | 158 |
163 void PPB_FileChooser_Impl::RegisterCallback( | 159 void PPB_FileChooser_Impl::RegisterCallback( |
164 const PP_CompletionCallback& callback) { | 160 scoped_refptr<TrackedCallback> callback) { |
165 DCHECK(callback.func); | |
166 DCHECK(!TrackedCallback::IsPending(callback_)); | 161 DCHECK(!TrackedCallback::IsPending(callback_)); |
167 | 162 |
168 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this); | 163 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this); |
169 if (!plugin_module) | 164 if (!plugin_module) |
170 return; | 165 return; |
171 | 166 |
172 callback_ = new TrackedCallback(this, callback); | 167 callback_ = callback; |
173 } | 168 } |
174 | 169 |
175 void PPB_FileChooser_Impl::RunCallback(int32_t result) { | 170 void PPB_FileChooser_Impl::RunCallback(int32_t result) { |
176 TrackedCallback::ClearAndRun(&callback_, result); | 171 TrackedCallback::ClearAndRun(&callback_, result); |
177 } | 172 } |
178 | 173 |
179 int32_t PPB_FileChooser_Impl::Show(const PP_ArrayOutput& output, | 174 int32_t PPB_FileChooser_Impl::Show(const PP_ArrayOutput& output, |
180 const PP_CompletionCallback& callback) { | 175 scoped_refptr<TrackedCallback> callback) { |
181 int32_t result = Show0_5(callback); | 176 int32_t result = Show0_5(callback); |
182 if (result == PP_OK_COMPLETIONPENDING) | 177 if (result == PP_OK_COMPLETIONPENDING) |
183 output_.set_pp_array_output(output); | 178 output_.set_pp_array_output(output); |
184 return result; | 179 return result; |
185 } | 180 } |
186 | 181 |
187 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture( | 182 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture( |
188 PP_Bool save_as, | 183 PP_Bool save_as, |
189 PP_Var suggested_file_name, | 184 PP_Var suggested_file_name, |
190 const PP_ArrayOutput& output, | 185 const PP_ArrayOutput& output, |
191 const PP_CompletionCallback& callback) { | 186 scoped_refptr<TrackedCallback> callback) { |
192 int32_t result = ShowWithoutUserGesture0_5(save_as, suggested_file_name, | 187 int32_t result = ShowWithoutUserGesture0_5(save_as, suggested_file_name, |
193 callback); | 188 callback); |
194 if (result == PP_OK_COMPLETIONPENDING) | 189 if (result == PP_OK_COMPLETIONPENDING) |
195 output_.set_pp_array_output(output); | 190 output_.set_pp_array_output(output); |
196 return result; | 191 return result; |
197 } | 192 } |
198 | 193 |
199 int32_t PPB_FileChooser_Impl::Show0_5(const PP_CompletionCallback& callback) { | 194 int32_t PPB_FileChooser_Impl::Show0_5(scoped_refptr<TrackedCallback> callback) { |
200 PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this); | 195 PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this); |
201 if (!plugin_instance) | 196 if (!plugin_instance) |
202 return PP_ERROR_FAILED; | 197 return PP_ERROR_FAILED; |
203 if (!plugin_instance->IsProcessingUserGesture()) | 198 if (!plugin_instance->IsProcessingUserGesture()) |
204 return PP_ERROR_NO_USER_GESTURE; | 199 return PP_ERROR_NO_USER_GESTURE; |
205 return ShowWithoutUserGesture0_5(PP_FALSE, PP_MakeUndefined(), callback); | 200 return ShowWithoutUserGesture0_5(PP_FALSE, PP_MakeUndefined(), callback); |
206 } | 201 } |
207 | 202 |
208 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture0_5( | 203 int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture0_5( |
209 PP_Bool save_as, | 204 PP_Bool save_as, |
210 PP_Var suggested_file_name, | 205 PP_Var suggested_file_name, |
211 const PP_CompletionCallback& callback) { | 206 scoped_refptr<TrackedCallback> callback) { |
212 int32_t rv = ValidateCallback(callback); | 207 int32_t rv = ValidateCallback(callback); |
213 if (rv != PP_OK) | 208 if (rv != PP_OK) |
214 return rv; | 209 return rv; |
215 | 210 |
216 DCHECK((mode_ == PP_FILECHOOSERMODE_OPEN) || | 211 DCHECK((mode_ == PP_FILECHOOSERMODE_OPEN) || |
217 (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE)); | 212 (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE)); |
218 | 213 |
219 WebFileChooserParams params; | 214 WebFileChooserParams params; |
220 if (save_as) { | 215 if (save_as) { |
221 params.saveAs = true; | 216 params.saveAs = true; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 continue; | 259 continue; |
265 StringToLowerASCII(&mime_type); | 260 StringToLowerASCII(&mime_type); |
266 normalized_mime_type_list.push_back(WebString::fromUTF8(mime_type.data(), | 261 normalized_mime_type_list.push_back(WebString::fromUTF8(mime_type.data(), |
267 mime_type.size())); | 262 mime_type.size())); |
268 } | 263 } |
269 return normalized_mime_type_list; | 264 return normalized_mime_type_list; |
270 } | 265 } |
271 | 266 |
272 } // namespace ppapi | 267 } // namespace ppapi |
273 } // namespace webkit | 268 } // namespace webkit |
OLD | NEW |