mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
- Provide default implementations of the file chooser dialogs (open, open multiple, save) on all platforms (issue #761).
- Add a new CefBrowserHost::RunFileDialog method that displays the specified file chooser dialog and returns the results asynchronously (issue #761). - Add a new CefDialogHandler::OnFileDialog callback that allows the application to provide custom UI for file chooser dialogs (issue #761). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@862 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@@ -170,6 +170,27 @@ typedef struct _cef_browser_t {
|
||||
} cef_browser_t;
|
||||
|
||||
|
||||
///
|
||||
// Callback structure for cef_browser_host_t::RunFileDialog. The functions of
|
||||
// this structure will be called on the browser process UI thread.
|
||||
///
|
||||
typedef struct _cef_run_file_dialog_callback_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_t base;
|
||||
|
||||
///
|
||||
// Called asynchronously after the file dialog is dismissed. If the selection
|
||||
// was successful |file_paths| will be a single value or a list of values
|
||||
// depending on the dialog mode. If the selection was cancelled |file_paths|
|
||||
// will be NULL.
|
||||
///
|
||||
void (CEF_CALLBACK *cont)(struct _cef_run_file_dialog_callback_t* self,
|
||||
struct _cef_browser_host_t* browser_host, cef_string_list_t file_paths);
|
||||
} cef_run_file_dialog_callback_t;
|
||||
|
||||
|
||||
///
|
||||
// Structure used to represent the browser process aspects of a browser window.
|
||||
// The functions of this structure can only be called in the browser process.
|
||||
@@ -252,6 +273,23 @@ typedef struct _cef_browser_host_t {
|
||||
///
|
||||
void (CEF_CALLBACK *set_zoom_level)(struct _cef_browser_host_t* self,
|
||||
double zoomLevel);
|
||||
|
||||
///
|
||||
// Call to run a file chooser dialog. Only a single file chooser dialog may be
|
||||
// pending at any given time. |mode| represents the type of dialog to display.
|
||||
// |title| to the title to be used for the dialog and may be NULL to show the
|
||||
// default title ("Open" or "Save" depending on the mode). |default_file_name|
|
||||
// is the default file name to select in the dialog. |accept_types| is a list
|
||||
// of valid lower-cased MIME types or file extensions specified in an input
|
||||
// element and is used to restrict selectable files to such types. |callback|
|
||||
// will be executed after the dialog is dismissed or immediately if another
|
||||
// dialog is already pending. The dialog will be initiated asynchronously on
|
||||
// the UI thread.
|
||||
///
|
||||
void (CEF_CALLBACK *run_file_dialog)(struct _cef_browser_host_t* self,
|
||||
enum cef_file_dialog_mode_t mode, const cef_string_t* title,
|
||||
const cef_string_t* default_file_name, cef_string_list_t accept_types,
|
||||
struct _cef_run_file_dialog_callback_t* callback);
|
||||
} cef_browser_host_t;
|
||||
|
||||
|
||||
|
@@ -61,6 +61,13 @@ typedef struct _cef_client_t {
|
||||
struct _cef_context_menu_handler_t* (CEF_CALLBACK *get_context_menu_handler)(
|
||||
struct _cef_client_t* self);
|
||||
|
||||
///
|
||||
// Return the handler for dialogs. If no handler is provided the default
|
||||
// implementation will be used.
|
||||
///
|
||||
struct _cef_dialog_handler_t* (CEF_CALLBACK *get_dialog_handler)(
|
||||
struct _cef_client_t* self);
|
||||
|
||||
///
|
||||
// Return the handler for browser display state events.
|
||||
///
|
||||
|
105
include/capi/cef_dialog_handler_capi.h
Normal file
105
include/capi/cef_dialog_handler_capi.h
Normal file
@@ -0,0 +1,105 @@
|
||||
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// This file was generated by the CEF translator tool and should not edited
|
||||
// by hand. See the translator.README.txt file in the tools directory for
|
||||
// more information.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
|
||||
#define CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "include/capi/cef_base_capi.h"
|
||||
|
||||
|
||||
///
|
||||
// Callback structure for asynchronous continuation of file dialog requests.
|
||||
///
|
||||
typedef struct _cef_file_dialog_callback_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_t base;
|
||||
|
||||
///
|
||||
// Continue the file selection with the specified |file_paths|. This may be a
|
||||
// single value or a list of values depending on the dialog mode. An NULL
|
||||
// value is treated the same as calling cancel().
|
||||
///
|
||||
void (CEF_CALLBACK *cont)(struct _cef_file_dialog_callback_t* self,
|
||||
cef_string_list_t file_paths);
|
||||
|
||||
///
|
||||
// Cancel the file selection.
|
||||
///
|
||||
void (CEF_CALLBACK *cancel)(struct _cef_file_dialog_callback_t* self);
|
||||
} cef_file_dialog_callback_t;
|
||||
|
||||
|
||||
///
|
||||
// Implement this structure to handle dialog events. The functions of this
|
||||
// structure will be called on the browser process UI thread.
|
||||
///
|
||||
typedef struct _cef_dialog_handler_t {
|
||||
///
|
||||
// Base structure.
|
||||
///
|
||||
cef_base_t base;
|
||||
|
||||
///
|
||||
// Called to run a file chooser dialog. |mode| represents the type of dialog
|
||||
// to display. |title| to the title to be used for the dialog and may be NULL
|
||||
// to show the default title ("Open" or "Save" depending on the mode).
|
||||
// |default_file_name| is the default file name to select in the dialog.
|
||||
// |accept_types| is a list of valid lower-cased MIME types or file extensions
|
||||
// specified in an input element and is used to restrict selectable files to
|
||||
// such types. To display a custom dialog return true (1) and execute
|
||||
// |callback| either inline or at a later time. To display the default dialog
|
||||
// return false (0).
|
||||
///
|
||||
int (CEF_CALLBACK *on_file_dialog)(struct _cef_dialog_handler_t* self,
|
||||
struct _cef_browser_t* browser, enum cef_file_dialog_mode_t mode,
|
||||
const cef_string_t* title, const cef_string_t* default_file_name,
|
||||
cef_string_list_t accept_types,
|
||||
struct _cef_file_dialog_callback_t* callback);
|
||||
} cef_dialog_handler_t;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
|
@@ -181,6 +181,26 @@ class CefBrowser : public virtual CefBase {
|
||||
};
|
||||
|
||||
|
||||
///
|
||||
// Callback interface for CefBrowserHost::RunFileDialog. The methods of this
|
||||
// class will be called on the browser process UI thread.
|
||||
///
|
||||
/*--cef(source=client)--*/
|
||||
class CefRunFileDialogCallback : public virtual CefBase {
|
||||
public:
|
||||
///
|
||||
// Called asynchronously after the file dialog is dismissed. If the selection
|
||||
// was successful |file_paths| will be a single value or a list of values
|
||||
// depending on the dialog mode. If the selection was cancelled |file_paths|
|
||||
// will be empty.
|
||||
///
|
||||
/*--cef(capi_name=cont)--*/
|
||||
virtual void OnFileDialogDismissed(
|
||||
CefRefPtr<CefBrowserHost> browser_host,
|
||||
const std::vector<CefString>& file_paths) =0;
|
||||
};
|
||||
|
||||
|
||||
///
|
||||
// Class used to represent the browser process aspects of a browser window. The
|
||||
// methods of this class can only be called in the browser process. They may be
|
||||
@@ -190,6 +210,8 @@ class CefBrowser : public virtual CefBase {
|
||||
/*--cef(source=library)--*/
|
||||
class CefBrowserHost : public virtual CefBase {
|
||||
public:
|
||||
typedef cef_file_dialog_mode_t FileDialogMode;
|
||||
|
||||
///
|
||||
// Create a new browser window using the window parameters specified by
|
||||
// |windowInfo|. All values will be copied internally and the actual window
|
||||
@@ -287,6 +309,26 @@ class CefBrowserHost : public virtual CefBase {
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void SetZoomLevel(double zoomLevel) =0;
|
||||
|
||||
///
|
||||
// Call to run a file chooser dialog. Only a single file chooser dialog may be
|
||||
// pending at any given time. |mode| represents the type of dialog to display.
|
||||
// |title| to the title to be used for the dialog and may be empty to show the
|
||||
// default title ("Open" or "Save" depending on the mode). |default_file_name|
|
||||
// is the default file name to select in the dialog. |accept_types| is a list
|
||||
// of valid lower-cased MIME types or file extensions specified in an input
|
||||
// element and is used to restrict selectable files to such types. |callback|
|
||||
// will be executed after the dialog is dismissed or immediately if another
|
||||
// dialog is already pending. The dialog will be initiated asynchronously on
|
||||
// the UI thread.
|
||||
///
|
||||
/*--cef(optional_param=title,optional_param=default_file_name,
|
||||
optional_param=accept_types)--*/
|
||||
virtual void RunFileDialog(FileDialogMode mode,
|
||||
const CefString& title,
|
||||
const CefString& default_file_name,
|
||||
const std::vector<CefString>& accept_types,
|
||||
CefRefPtr<CefRunFileDialogCallback> callback) =0;
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_CEF_BROWSER_H_
|
||||
|
@@ -40,6 +40,7 @@
|
||||
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_context_menu_handler.h"
|
||||
#include "include/cef_dialog_handler.h"
|
||||
#include "include/cef_display_handler.h"
|
||||
#include "include/cef_download_handler.h"
|
||||
#include "include/cef_focus_handler.h"
|
||||
@@ -66,6 +67,15 @@ class CefClient : public virtual CefBase {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
// Return the handler for dialogs. If no handler is provided the default
|
||||
// implementation will be used.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual CefRefPtr<CefDialogHandler> GetDialogHandler() {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///
|
||||
// Return the handler for browser display state events.
|
||||
///
|
||||
|
98
include/cef_dialog_handler.h
Normal file
98
include/cef_dialog_handler.h
Normal file
@@ -0,0 +1,98 @@
|
||||
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file must follow a specific format in order to
|
||||
// support the CEF translator tool. See the translator.README.txt file in the
|
||||
// tools directory for more information.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_CEF_DIALOG_HANDLER_H_
|
||||
#define CEF_INCLUDE_CEF_DIALOG_HANDLER_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_browser.h"
|
||||
|
||||
///
|
||||
// Callback interface for asynchronous continuation of file dialog requests.
|
||||
///
|
||||
/*--cef(source=library)--*/
|
||||
class CefFileDialogCallback : public virtual CefBase {
|
||||
public:
|
||||
///
|
||||
// Continue the file selection with the specified |file_paths|. This may be
|
||||
// a single value or a list of values depending on the dialog mode. An empty
|
||||
// value is treated the same as calling Cancel().
|
||||
///
|
||||
/*--cef(capi_name=cont)--*/
|
||||
virtual void Continue(const std::vector<CefString>& file_paths) =0;
|
||||
|
||||
///
|
||||
// Cancel the file selection.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void Cancel() =0;
|
||||
};
|
||||
|
||||
|
||||
///
|
||||
// Implement this interface to handle dialog events. The methods of this class
|
||||
// will be called on the browser process UI thread.
|
||||
///
|
||||
/*--cef(source=client)--*/
|
||||
class CefDialogHandler : public virtual CefBase {
|
||||
public:
|
||||
typedef cef_file_dialog_mode_t FileDialogMode;
|
||||
|
||||
///
|
||||
// Called to run a file chooser dialog. |mode| represents the type of dialog
|
||||
// to display. |title| to the title to be used for the dialog and may be empty
|
||||
// to show the default title ("Open" or "Save" depending on the mode).
|
||||
// |default_file_name| is the default file name to select in the dialog.
|
||||
// |accept_types| is a list of valid lower-cased MIME types or file extensions
|
||||
// specified in an input element and is used to restrict selectable files to
|
||||
// such types. To display a custom dialog return true and execute |callback|
|
||||
// either inline or at a later time. To display the default dialog return
|
||||
// false.
|
||||
///
|
||||
/*--cef(optional_param=title,optional_param=default_file_name,
|
||||
optional_param=accept_types)--*/
|
||||
virtual bool OnFileDialog(CefRefPtr<CefBrowser> browser,
|
||||
FileDialogMode mode,
|
||||
const CefString& title,
|
||||
const CefString& default_file_name,
|
||||
const std::vector<CefString>& accept_types,
|
||||
CefRefPtr<CefFileDialogCallback> callback) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_CEF_DIALOG_HANDLER_H_
|
@@ -1300,6 +1300,26 @@ enum cef_dom_node_type_t {
|
||||
DOM_NODE_TYPE_XPATH_NAMESPACE,
|
||||
};
|
||||
|
||||
///
|
||||
// Supported file dialog modes.
|
||||
///
|
||||
enum cef_file_dialog_mode_t {
|
||||
///
|
||||
// Requires that the file exists before allowing the user to pick it.
|
||||
///
|
||||
FILE_DIALOG_OPEN = 0,
|
||||
|
||||
///
|
||||
// Like Open, but allows picking multiple files to open.
|
||||
///
|
||||
FILE_DIALOG_OPEN_MULTIPLE,
|
||||
|
||||
///
|
||||
// Allows picking a nonexistent file, and prompts to overwrite if the file
|
||||
// already exists.
|
||||
///
|
||||
FILE_DIALOG_SAVE,
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Reference in New Issue
Block a user