| // Copyright (c) 2012 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_DEV_FILE_CHOOSER_DEV_H_ |
| #define PPAPI_CPP_DEV_FILE_CHOOSER_DEV_H_ |
| |
| #include <stdint.h> |
| |
| #include <vector> |
| |
| #include "ppapi/c/dev/ppb_file_chooser_dev.h" |
| #include "ppapi/cpp/completion_callback.h" |
| #include "ppapi/cpp/file_ref.h" |
| #include "ppapi/cpp/resource.h" |
| |
| namespace pp { |
| |
| class CompletionCallback; |
| class FileRef; |
| class InstanceHandle; |
| class Var; |
| |
| class FileChooser_Dev : public Resource { |
| public: |
| /// Creates an is_null() FileChooser object. |
| FileChooser_Dev() {} |
| |
| /// This function creates a file chooser dialog resource. The chooser is |
| /// associated with a particular instance, so that it may be positioned on the |
| /// screen relative to the tab containing the instance. Returns 0 if passed |
| /// an invalid instance. |
| /// |
| /// @param mode A PPB_FileChooser_Dev instance can be used to select a single |
| /// file (PP_FILECHOOSERMODE_OPEN) or multiple files |
| /// (PP_FILECHOOSERMODE_OPENMULTIPLE). Unlike the HTML5 <input type="file"> |
| /// tag, a PPB_FileChooser_Dev instance cannot be used to select a directory. |
| /// In order to get the list of files in a directory, the |
| /// PPB_FileRef::ReadDirectoryEntries interface must be used. |
| /// |
| /// @param accept_types A comma-separated list of MIME types and file |
| /// extensions such as "audio/ *,text/plain,.html" (note there should be |
| /// no space between the '/' and the '*', but one is added to avoid confusing |
| /// C++ comments). The dialog may restrict selectable files to the specified |
| /// MIME types and file extensions. If a string in the comma-separated list |
| /// begins with a period (.) then the string is interpreted as a file |
| /// extension, otherwise it is interpreted as a MIME-type. An empty string or |
| /// an undefined var may be given to indicate that all types should be |
| /// accepted. |
| FileChooser_Dev(const InstanceHandle& instance, |
| PP_FileChooserMode_Dev mode, |
| const Var& accept_types); |
| |
| FileChooser_Dev(const FileChooser_Dev& other); |
| |
| /// This function displays a previously created file chooser resource as a |
| /// dialog box, prompting the user to choose a file or files. This function |
| /// must be called in response to a user gesture, such as a mouse click or |
| /// touch event. The callback is called with PP_OK on successful completion |
| /// with a file (or files) selected, PP_ERROR_USERCANCEL if the user selected |
| /// no file, or another error code from pp_errors.h on failure. |
| /// |
| /// @param callback The completion callback that will be executed. On success, |
| /// the selected files will be passed to the given function. |
| /// |
| /// Normally you would use a CompletionCallbackFactory to allow callbacks to |
| /// be bound to your class. See completion_callback_factory.h for more |
| /// discussion on how to use this. Your callback will generally look like: |
| /// |
| /// @code |
| /// void OnFilesSelected(int32_t result, |
| /// const std::vector<pp::FileRef>& files) { |
| /// if (result == PP_OK) |
| /// // use files... |
| /// } |
| /// @endcode |
| /// |
| /// @return PP_OK_COMPLETIONPENDING if request to show the dialog was |
| /// successful, another error code from pp_errors.h on failure. |
| virtual int32_t Show( |
| const CompletionCallbackWithOutput< std::vector<FileRef> >& callback); |
| |
| protected: |
| // Heap-allocated data passed to the CallbackConverter for backwards compat. |
| struct ChooseCallbackData0_5 { |
| PP_Resource file_chooser; |
| PP_ArrayOutput output; |
| PP_CompletionCallback original_callback; |
| }; |
| |
| // Provide backwards-compatibility for older versions. Converts the old-style |
| // 0.5 "iterator" interface to the new-style 0.6 "array output" interface that |
| // the caller is expecting. |
| // |
| // This takes a heap-allocated ChooseCallbackData0_5 struct passed as the |
| // user data and deletes it when the call completes. |
| static void CallbackConverter(void* user_data, int32_t result); |
| }; |
| |
| } // namespace pp |
| |
| #endif // PPAPI_CPP_DEV_FILE_CHOOSER_DEV_H_ |