summaryrefslogtreecommitdiffstats
path: root/webkit/plugins/ppapi/ppb_file_chooser_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/plugins/ppapi/ppb_file_chooser_impl.cc')
-rw-r--r--webkit/plugins/ppapi/ppb_file_chooser_impl.cc75
1 files changed, 22 insertions, 53 deletions
diff --git a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc
index 817dcd5..3ce1489 100644
--- a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc
+++ b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc
@@ -25,6 +25,7 @@
#include "webkit/plugins/ppapi/resource_tracker.h"
#include "webkit/glue/webkit_glue.h"
+using ppapi::thunk::PPB_FileChooser_API;
using WebKit::WebCString;
using WebKit::WebFileChooserCompletion;
using WebKit::WebFileChooserParams;
@@ -36,53 +37,6 @@ namespace ppapi {
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;
-
- PPB_FileChooser_Impl* chooser = new PPB_FileChooser_Impl(instance, options);
- return chooser->GetReference();
-}
-
-PP_Bool IsFileChooser(PP_Resource resource) {
- return BoolToPPBool(!!Resource::GetAs<PPB_FileChooser_Impl>(resource));
-}
-
-int32_t Show(PP_Resource chooser_id, PP_CompletionCallback callback) {
- scoped_refptr<PPB_FileChooser_Impl> chooser(
- Resource::GetAs<PPB_FileChooser_Impl>(chooser_id));
- if (!chooser)
- return PP_ERROR_BADRESOURCE;
-
- return chooser->Show(callback);
-}
-
-PP_Resource GetNextChosenFile(PP_Resource chooser_id) {
- scoped_refptr<PPB_FileChooser_Impl> chooser(
- Resource::GetAs<PPB_FileChooser_Impl>(chooser_id));
- if (!chooser)
- return 0;
-
- scoped_refptr<PPB_FileRef_Impl> 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(PPB_FileChooser_Impl* file_chooser)
@@ -120,14 +74,29 @@ PPB_FileChooser_Impl::~PPB_FileChooser_Impl() {
}
// static
-const PPB_FileChooser_Dev* PPB_FileChooser_Impl::GetInterface() {
- return &ppb_filechooser;
+PP_Resource PPB_FileChooser_Impl::Create(
+ PP_Instance pp_instance,
+ const PP_FileChooserOptions_Dev* options) {
+ PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ if (!instance)
+ return 0;
+
+ if ((options->mode != PP_FILECHOOSERMODE_OPEN) &&
+ (options->mode != PP_FILECHOOSERMODE_OPENMULTIPLE))
+ return 0;
+
+ PPB_FileChooser_Impl* chooser = new PPB_FileChooser_Impl(instance, options);
+ return chooser->GetReference();
}
PPB_FileChooser_Impl* PPB_FileChooser_Impl::AsPPB_FileChooser_Impl() {
return this;
}
+PPB_FileChooser_API* PPB_FileChooser_Impl::AsPPB_FileChooser_API() {
+ return this;
+}
+
void PPB_FileChooser_Impl::StoreChosenFiles(
const std::vector<std::string>& files) {
chosen_files_.clear();
@@ -176,7 +145,7 @@ void PPB_FileChooser_Impl::RunCallback(int32_t result) {
callback->Run(result); // Will complete abortively if necessary.
}
-int32_t PPB_FileChooser_Impl::Show(const PP_CompletionCallback& callback) {
+int32_t PPB_FileChooser_Impl::Show(PP_CompletionCallback callback) {
int32_t rv = ValidateCallback(callback);
if (rv != PP_OK)
return rv;
@@ -197,11 +166,11 @@ int32_t PPB_FileChooser_Impl::Show(const PP_CompletionCallback& callback) {
return PP_OK_COMPLETIONPENDING;
}
-scoped_refptr<PPB_FileRef_Impl> PPB_FileChooser_Impl::GetNextChosenFile() {
+PP_Resource PPB_FileChooser_Impl::GetNextChosenFile() {
if (next_chosen_file_index_ >= chosen_files_.size())
- return NULL;
+ return 0;
- return chosen_files_[next_chosen_file_index_++];
+ return chosen_files_[next_chosen_file_index_++]->GetReference();
}
} // namespace ppapi