Index: webkit/glue/plugins/pepper_file_chooser.cc |
=================================================================== |
--- webkit/glue/plugins/pepper_file_chooser.cc (revision 69381) |
+++ webkit/glue/plugins/pepper_file_chooser.cc (working copy) |
@@ -1,165 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/glue/plugins/pepper_file_chooser.h" |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/logging.h" |
-#include "ppapi/c/pp_completion_callback.h" |
-#include "ppapi/c/pp_errors.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebCString.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebFileChooserCompletion.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebFileChooserParams.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebVector.h" |
-#include "webkit/glue/plugins/pepper_common.h" |
-#include "webkit/glue/plugins/pepper_file_ref.h" |
-#include "webkit/glue/plugins/pepper_plugin_delegate.h" |
-#include "webkit/glue/plugins/pepper_plugin_instance.h" |
-#include "webkit/glue/plugins/pepper_resource_tracker.h" |
-#include "webkit/glue/webkit_glue.h" |
- |
-using WebKit::WebCString; |
-using WebKit::WebFileChooserCompletion; |
-using WebKit::WebFileChooserParams; |
-using WebKit::WebString; |
-using WebKit::WebVector; |
- |
-namespace pepper { |
- |
-namespace { |
- |
-PP_Resource Create(PP_Instance instance_id, |
- const PP_FileChooserOptions_Dev* options) { |
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
- if (!instance) |
- return 0; |
- |
- if ((options->mode != PP_FILECHOOSERMODE_OPEN) && |
- (options->mode != PP_FILECHOOSERMODE_OPENMULTIPLE)) |
- return 0; |
- |
- FileChooser* chooser = new FileChooser(instance, options); |
- return chooser->GetReference(); |
-} |
- |
-PP_Bool IsFileChooser(PP_Resource resource) { |
- return BoolToPPBool(!!Resource::GetAs<FileChooser>(resource)); |
-} |
- |
-int32_t Show(PP_Resource chooser_id, PP_CompletionCallback callback) { |
- scoped_refptr<FileChooser> chooser( |
- Resource::GetAs<FileChooser>(chooser_id)); |
- if (!chooser) |
- return PP_ERROR_BADRESOURCE; |
- |
- return chooser->Show(callback); |
-} |
- |
-PP_Resource GetNextChosenFile(PP_Resource chooser_id) { |
- scoped_refptr<FileChooser> chooser( |
- Resource::GetAs<FileChooser>(chooser_id)); |
- if (!chooser) |
- return 0; |
- |
- scoped_refptr<FileRef> file_ref(chooser->GetNextChosenFile()); |
- if (!file_ref) |
- return 0; |
- |
- return file_ref->GetReference(); |
-} |
- |
-const PPB_FileChooser_Dev ppb_filechooser = { |
- &Create, |
- &IsFileChooser, |
- &Show, |
- &GetNextChosenFile |
-}; |
- |
-class FileChooserCompletionImpl : public WebFileChooserCompletion { |
- public: |
- FileChooserCompletionImpl(pepper::FileChooser* file_chooser) |
- : file_chooser_(file_chooser) { |
- DCHECK(file_chooser_); |
- } |
- |
- virtual ~FileChooserCompletionImpl() {} |
- |
- virtual void didChooseFile(const WebVector<WebString>& file_names) { |
- std::vector<std::string> files; |
- for (size_t i = 0; i < file_names.size(); i++) |
- files.push_back(file_names[i].utf8().data()); |
- |
- file_chooser_->StoreChosenFiles(files); |
- } |
- |
- private: |
- FileChooser* file_chooser_; |
-}; |
- |
-} // namespace |
- |
-FileChooser::FileChooser(PluginInstance* instance, |
- const PP_FileChooserOptions_Dev* options) |
- : Resource(instance->module()), |
- delegate_(instance->delegate()), |
- mode_(options->mode), |
- accept_mime_types_(options->accept_mime_types), |
- completion_callback_() { |
-} |
- |
-FileChooser::~FileChooser() { |
-} |
- |
-// static |
-const PPB_FileChooser_Dev* FileChooser::GetInterface() { |
- return &ppb_filechooser; |
-} |
- |
-FileChooser* FileChooser::AsFileChooser() { |
- return this; |
-} |
- |
-void FileChooser::StoreChosenFiles(const std::vector<std::string>& files) { |
- next_chosen_file_index_ = 0; |
- std::vector<std::string>::const_iterator end_it = files.end(); |
- for (std::vector<std::string>::const_iterator it = files.begin(); |
- it != end_it; it++) { |
- chosen_files_.push_back(make_scoped_refptr( |
- new FileRef(module(), FilePath().AppendASCII(*it)))); |
- } |
- |
- if (!completion_callback_.func) |
- return; |
- |
- PP_CompletionCallback callback = {0}; |
- std::swap(callback, completion_callback_); |
- PP_RunCompletionCallback(&callback, 0); |
-} |
- |
-int32_t FileChooser::Show(PP_CompletionCallback callback) { |
- DCHECK((mode_ == PP_FILECHOOSERMODE_OPEN) || |
- (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE)); |
- DCHECK(!completion_callback_.func); |
- completion_callback_ = callback; |
- |
- WebFileChooserParams params; |
- params.multiSelect = (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE); |
- params.acceptTypes = WebString::fromUTF8(accept_mime_types_); |
- params.directory = false; |
- |
- return delegate_->RunFileChooser( |
- params, new FileChooserCompletionImpl(this)); |
-} |
- |
-scoped_refptr<FileRef> FileChooser::GetNextChosenFile() { |
- if (next_chosen_file_index_ >= chosen_files_.size()) |
- return NULL; |
- |
- return chosen_files_[next_chosen_file_index_++]; |
-} |
- |
-} // namespace pepper |