mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-01-28 18:19:56 +01:00
8e79307a62
File dialogs that specify mime type (e.g. "image/*") accept filters will pass those values unchanged to the OnFileDialog |accept_filters| parameter. The default dialog implementation will show those filters in addition to a combined "Custom Files" filter. This is a change from preexisting Google Chrome behavior where only the combined "Custom Files" filter is displayed, and restores CEF behavior that existed prior to 2ea7459a89. Document the fact that OnFileDialog may be called twice, once before MIME type expansion and once afterwards. Add new OnFileDialog |accept_extensions| and |accept_descriptions| parameters for MIME type extensions and descriptions. Details: This change adds a SelectFileDialog::FileTypeInfo::extension_mimetypes member and improves the logic in FileSelectHelper::GetFileTypesFromAcceptType and file_dialog_manager.cc SelectFileToFileChooserParams to support recall of the source mime type when populating the FileChooserParams structure. To test: - Run `ceftests --gtest_filter=DialogTest.*` - Run `cefclient --url=https://tests/dialogs`
121 lines
4.9 KiB
C
121 lines
4.9 KiB
C
// Copyright (c) 2024 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.
|
|
//
|
|
// $hash=bf7208a86ee17f63fd7163cef8c3a13373a1f1c8$
|
|
//
|
|
|
|
#ifndef CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
|
|
#define CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
|
|
#pragma once
|
|
|
|
#include "include/capi/cef_base_capi.h"
|
|
#include "include/capi/cef_browser_capi.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
///
|
|
/// Callback structure for asynchronous continuation of file dialog requests.
|
|
///
|
|
typedef struct _cef_file_dialog_callback_t {
|
|
///
|
|
/// Base structure.
|
|
///
|
|
cef_base_ref_counted_t base;
|
|
|
|
///
|
|
/// Continue the file selection. |file_paths| should be a single value or a
|
|
/// list of values depending on the dialog mode. An NULL |file_paths| 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_ref_counted_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_path| is the path with optional directory and/or file name
|
|
/// component that should be initially selected in the dialog.
|
|
/// |accept_filters| are used to restrict the selectable file types and may be
|
|
/// any combination of valid lower-cased MIME types (e.g. "text/*" or
|
|
/// "image/*") and individual file extensions (e.g. ".txt" or ".png").
|
|
/// |accept_extensions| provides the semicolon-delimited expansion of MIME
|
|
/// types to file extensions (if known, or NULL string otherwise).
|
|
/// |accept_descriptions| provides the descriptions for MIME types (if known,
|
|
/// or NULL string otherwise). For example, the "image/*" mime type might have
|
|
/// extensions ".png;.jpg;.bmp;..." and description "Image Files".
|
|
/// |accept_filters|, |accept_extensions| and |accept_descriptions| will all
|
|
/// be the same size. 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). If this function returns false (0) it may be called an
|
|
/// additional time for the same dialog (both before and after MIME type
|
|
/// expansion).
|
|
///
|
|
int(CEF_CALLBACK* on_file_dialog)(
|
|
struct _cef_dialog_handler_t* self,
|
|
struct _cef_browser_t* browser,
|
|
cef_file_dialog_mode_t mode,
|
|
const cef_string_t* title,
|
|
const cef_string_t* default_file_path,
|
|
cef_string_list_t accept_filters,
|
|
cef_string_list_t accept_extensions,
|
|
cef_string_list_t accept_descriptions,
|
|
struct _cef_file_dialog_callback_t* callback);
|
|
} cef_dialog_handler_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
|