diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-13 22:29:30 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-13 22:29:30 +0000 |
commit | 6a48559060bdafd22cf2a94bf39b8514bafa400a (patch) | |
tree | e78ac37323a1886511f8d8a57da1ec39d42765ea /ppapi/cpp | |
parent | 2650164251ab77ea9a348952e16323d493eee039 (diff) | |
download | chromium_src-6a48559060bdafd22cf2a94bf39b8514bafa400a.zip chromium_src-6a48559060bdafd22cf2a94bf39b8514bafa400a.tar.gz chromium_src-6a48559060bdafd22cf2a94bf39b8514bafa400a.tar.bz2 |
Pepper: Add a C++ wrapper for the trusted file chooser.
This makes it easy (for trusted Pepper plugins) to opt for showing a file
chooser while avoiding the user-gesture check.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/8275013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105392 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/cpp')
-rw-r--r-- | ppapi/cpp/dev/file_chooser_dev.h | 6 | ||||
-rw-r--r-- | ppapi/cpp/trusted/file_chooser_trusted.cc | 53 | ||||
-rw-r--r-- | ppapi/cpp/trusted/file_chooser_trusted.h | 38 |
3 files changed, 94 insertions, 3 deletions
diff --git a/ppapi/cpp/dev/file_chooser_dev.h b/ppapi/cpp/dev/file_chooser_dev.h index 6bbe0c5..ec0a6d5 100644 --- a/ppapi/cpp/dev/file_chooser_dev.h +++ b/ppapi/cpp/dev/file_chooser_dev.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -55,7 +55,7 @@ class FileChooser_Dev : public Resource { /// /// @return PP_OK_COMPLETIONPENDING if request to show the dialog was /// successful, another error code from pp_errors.h on failure. - int32_t Show(const CompletionCallback& cc); + virtual int32_t Show(const CompletionCallback& cc); /// After a successful completion callback call from Show, this method may be /// used to query the chosen files. It should be called in a loop until it @@ -65,7 +65,7 @@ class FileChooser_Dev : public Resource { /// PP_FileSystemType_External. If the user chose no files or cancelled the /// dialog, then this method will simply return an is_null() FileRef the /// first time it is called. - FileRef GetNextChosenFile() const; + virtual FileRef GetNextChosenFile() const; }; } // namespace pp diff --git a/ppapi/cpp/trusted/file_chooser_trusted.cc b/ppapi/cpp/trusted/file_chooser_trusted.cc new file mode 100644 index 0000000..d0c6c50 --- /dev/null +++ b/ppapi/cpp/trusted/file_chooser_trusted.cc @@ -0,0 +1,53 @@ +// Copyright (c) 2011 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 "ppapi/cpp/trusted/file_chooser_trusted.h" + +#include "ppapi/c/pp_bool.h" +#include "ppapi/cpp/completion_callback.h" +#include "ppapi/c/pp_errors.h" +#include "ppapi/cpp/module_impl.h" +#include "ppapi/cpp/var.h" +#include "ppapi/c/trusted/ppb_file_chooser_trusted.h" + +namespace pp { + +namespace { + +template <> const char* interface_name<PPB_FileChooserTrusted>() { + return PPB_FILECHOOSER_TRUSTED_INTERFACE; +} + +} // namespace + +FileChooser_Trusted::FileChooser_Trusted() : save_as_(false) { +} + +FileChooser_Trusted::FileChooser_Trusted(const Instance* instance, + PP_FileChooserMode_Dev mode, + const Var& accept_mime_types, + bool save_as, + const std::string& suggested_file_name) + : FileChooser_Dev(instance, mode, accept_mime_types), + save_as_(save_as), + suggested_file_name_(suggested_file_name) { +} + +FileChooser_Trusted::FileChooser_Trusted(const FileChooser_Trusted& other) + : FileChooser_Dev(other), + save_as_(other.save_as_), + suggested_file_name_(other.suggested_file_name_) { +} + +int32_t FileChooser_Trusted::Show(const CompletionCallback& cc) { + if (!has_interface<PPB_FileChooserTrusted>()) + return cc.MayForce(PP_ERROR_NOINTERFACE); + return get_interface<PPB_FileChooserTrusted>()->ShowWithoutUserGesture( + pp_resource(), + PP_FromBool(save_as_), + Var(suggested_file_name_).pp_var(), + cc.pp_completion_callback()); +} + +} // namespace pp diff --git a/ppapi/cpp/trusted/file_chooser_trusted.h b/ppapi/cpp/trusted/file_chooser_trusted.h new file mode 100644 index 0000000..a0227ef --- /dev/null +++ b/ppapi/cpp/trusted/file_chooser_trusted.h @@ -0,0 +1,38 @@ +// Copyright (c) 2011 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. + +#ifndef PPAPI_CPP_TRUSTED_FILE_CHOOSER_TRUSTED_H_ +#define PPAPI_CPP_TRUSTED_FILE_CHOOSER_TRUSTED_H_ + +#include <string> + +#include "ppapi/cpp/dev/file_chooser_dev.h" + +namespace pp { + +class FileChooser_Trusted : public FileChooser_Dev { + public: + /// Creates an is_null() FileChooser_Trusted object. + FileChooser_Trusted(); + + FileChooser_Trusted(const Instance* instance, + PP_FileChooserMode_Dev mode, + const Var& accept_mime_types, + bool save_as, + const std::string& suggested_file_name); + + FileChooser_Trusted(const FileChooser_Trusted& other); + + // Overrides of method in superclass. This shows without requiring a user + // gesture (and can also show save dialogs). + virtual int32_t Show(const CompletionCallback& cc); + + private: + const bool save_as_; + const std::string suggested_file_name_; +}; + +} // namespace pp + +#endif // PPAPI_CPP_TRUSTED_FILE_CHOOSER_TRUSTED_H_ |