Replace AddCustomScheme bool arguments with int using bit flags

This commit is contained in:
Alexander Guettler 2019-02-26 16:45:12 +00:00 committed by Marshall Greenblatt
parent ba8b4e8b9d
commit c72d57aa60
12 changed files with 124 additions and 184 deletions

View File

@ -33,7 +33,7 @@
// by hand. See the translator.README.txt file in the tools directory for // by hand. See the translator.README.txt file in the tools directory for
// more information. // more information.
// //
// $hash=ba3b03834e2db16056cd2be805ec9f116a92e14e$ // $hash=1d4a363735a7274fb957905f47841c63301507f0$
// //
#ifndef CEF_INCLUDE_CAPI_CEF_SCHEME_CAPI_H_ #ifndef CEF_INCLUDE_CAPI_CEF_SCHEME_CAPI_H_
@ -66,59 +66,7 @@ typedef struct _cef_scheme_registrar_t {
// Register a custom scheme. This function should not be called for the built- // Register a custom scheme. This function should not be called for the built-
// in HTTP, HTTPS, FILE, FTP, ABOUT and DATA schemes. // in HTTP, HTTPS, FILE, FTP, ABOUT and DATA schemes.
// //
// If |is_standard| is true (1) the scheme will be treated as a standard // See cef_scheme_options_t for possible values for |options|.
// scheme. Standard schemes are subject to URL canonicalization and parsing
// rules as defined in the Common Internet Scheme Syntax RFC 1738 Section 3.1
// available at http://www.ietf.org/rfc/rfc1738.txt
//
// In particular, the syntax for standard scheme URLs must be of the form:
// <pre>
// [scheme]://[username]:[password]@[host]:[port]/[url-path]
// </pre> Standard scheme URLs must have a host component that is a fully
// qualified domain name as defined in Section 3.5 of RFC 1034 [13] and
// Section 2.1 of RFC 1123. These URLs will be canonicalized to
// "scheme://host/path" in the simplest case and
// "scheme://username:password@host:port/path" in the most explicit case. For
// example, "scheme:host/path" and "scheme:///host/path" will both be
// canonicalized to "scheme://host/path". The origin of a standard scheme URL
// is the combination of scheme, host and port (i.e., "scheme://host:port" in
// the most explicit case).
//
// For non-standard scheme URLs only the "scheme:" component is parsed and
// canonicalized. The remainder of the URL will be passed to the handler as-
// is. For example, "scheme:///some%20text" will remain the same. Non-standard
// scheme URLs cannot be used as a target for form submission.
//
// If |is_local| is true (1) the scheme will be treated with the same security
// rules as those applied to "file" URLs. Normal pages cannot link to or
// access local URLs. Also, by default, local URLs can only perform
// XMLHttpRequest calls to the same URL (origin + path) that originated the
// request. To allow XMLHttpRequest calls from a local URL to other URLs with
// the same origin set the CefSettings.file_access_from_file_urls_allowed
// value to true (1). To allow XMLHttpRequest calls from a local URL to all
// origins set the CefSettings.universal_access_from_file_urls_allowed value
// to true (1).
//
// If |is_display_isolated| is true (1) the scheme can only be displayed from
// other content hosted with the same scheme. For example, pages in other
// origins cannot create iframes or hyperlinks to URLs with the scheme. For
// schemes that must be accessible from other schemes set this value to false
// (0), set |is_cors_enabled| to true (1), and use CORS "Access-Control-Allow-
// Origin" headers to further restrict access.
//
// If |is_secure| is true (1) the scheme will be treated with the same
// security rules as those applied to "https" URLs. For example, loading this
// scheme from other secure schemes will not trigger mixed content warnings.
//
// If |is_cors_enabled| is true (1) the scheme can be sent CORS requests. This
// value should be true (1) in most cases where |is_standard| is true (1).
//
// If |is_csp_bypassing| is true (1) the scheme can bypass Content-Security-
// Policy (CSP) checks. This value should be false (0) in most cases where
// |is_standard| is true (1).
//
// If |is_fetch_enabled| is true (1) the scheme can perform Fetch API
// requests.
// //
// This function may be called on any thread. It should only be called once // This function may be called on any thread. It should only be called once
// per unique |scheme_name| value. If |scheme_name| is already registered or // per unique |scheme_name| value. If |scheme_name| is already registered or
@ -126,13 +74,7 @@ typedef struct _cef_scheme_registrar_t {
/// ///
int(CEF_CALLBACK* add_custom_scheme)(struct _cef_scheme_registrar_t* self, int(CEF_CALLBACK* add_custom_scheme)(struct _cef_scheme_registrar_t* self,
const cef_string_t* scheme_name, const cef_string_t* scheme_name,
int is_standard, int options);
int is_local,
int is_display_isolated,
int is_secure,
int is_cors_enabled,
int is_csp_bypassing,
int is_fetch_enabled);
} cef_scheme_registrar_t; } cef_scheme_registrar_t;
/// ///

View File

@ -86,72 +86,14 @@ class CefSchemeRegistrar : public CefBaseScoped {
// Register a custom scheme. This method should not be called for the built-in // Register a custom scheme. This method should not be called for the built-in
// HTTP, HTTPS, FILE, FTP, ABOUT and DATA schemes. // HTTP, HTTPS, FILE, FTP, ABOUT and DATA schemes.
// //
// If |is_standard| is true the scheme will be treated as a standard scheme. // See cef_scheme_options_t for possible values for |options|.
// Standard schemes are subject to URL canonicalization and parsing rules as
// defined in the Common Internet Scheme Syntax RFC 1738 Section 3.1 available
// at http://www.ietf.org/rfc/rfc1738.txt
//
// In particular, the syntax for standard scheme URLs must be of the form:
// <pre>
// [scheme]://[username]:[password]@[host]:[port]/[url-path]
// </pre>
// Standard scheme URLs must have a host component that is a fully qualified
// domain name as defined in Section 3.5 of RFC 1034 [13] and Section 2.1 of
// RFC 1123. These URLs will be canonicalized to "scheme://host/path" in the
// simplest case and "scheme://username:password@host:port/path" in the most
// explicit case. For example, "scheme:host/path" and "scheme:///host/path"
// will both be canonicalized to "scheme://host/path". The origin of a
// standard scheme URL is the combination of scheme, host and port (i.e.,
// "scheme://host:port" in the most explicit case).
//
// For non-standard scheme URLs only the "scheme:" component is parsed and
// canonicalized. The remainder of the URL will be passed to the handler
// as-is. For example, "scheme:///some%20text" will remain the same.
// Non-standard scheme URLs cannot be used as a target for form submission.
//
// If |is_local| is true the scheme will be treated with the same security
// rules as those applied to "file" URLs. Normal pages cannot link to or
// access local URLs. Also, by default, local URLs can only perform
// XMLHttpRequest calls to the same URL (origin + path) that originated the
// request. To allow XMLHttpRequest calls from a local URL to other URLs with
// the same origin set the CefSettings.file_access_from_file_urls_allowed
// value to true. To allow XMLHttpRequest calls from a local URL to all
// origins set the CefSettings.universal_access_from_file_urls_allowed value
// to true.
//
// If |is_display_isolated| is true the scheme can only be displayed from
// other content hosted with the same scheme. For example, pages in other
// origins cannot create iframes or hyperlinks to URLs with the scheme. For
// schemes that must be accessible from other schemes set this value to false,
// set |is_cors_enabled| to true, and use CORS "Access-Control-Allow-Origin"
// headers to further restrict access.
//
// If |is_secure| is true the scheme will be treated with the same security
// rules as those applied to "https" URLs. For example, loading this scheme
// from other secure schemes will not trigger mixed content warnings.
//
// If |is_cors_enabled| is true the scheme can be sent CORS requests. This
// value should be true in most cases where |is_standard| is true.
//
// If |is_csp_bypassing| is true the scheme can bypass Content-Security-Policy
// (CSP) checks. This value should be false in most cases where |is_standard|
// is true.
//
// If |is_fetch_enabled| is true the scheme can perform Fetch API requests.
// //
// This function may be called on any thread. It should only be called once // This function may be called on any thread. It should only be called once
// per unique |scheme_name| value. If |scheme_name| is already registered or // per unique |scheme_name| value. If |scheme_name| is already registered or
// if an error occurs this method will return false. // if an error occurs this method will return false.
/// ///
/*--cef()--*/ /*--cef()--*/
virtual bool AddCustomScheme(const CefString& scheme_name, virtual bool AddCustomScheme(const CefString& scheme_name, int options) = 0;
bool is_standard,
bool is_local,
bool is_display_isolated,
bool is_secure,
bool is_cors_enabled,
bool is_csp_bypassing,
bool is_fetch_enabled) = 0;
}; };
/// ///

View File

@ -2745,6 +2745,90 @@ typedef enum {
SSL_CONTENT_RAN_INSECURE_CONTENT = 1 << 1, SSL_CONTENT_RAN_INSECURE_CONTENT = 1 << 1,
} cef_ssl_content_status_t; } cef_ssl_content_status_t;
//
// Configuration options for registering a custom scheme.
// These values are used when calling AddCustomScheme.
//
typedef enum {
CEF_SCHEME_OPTION_NONE = 0,
///
// If CEF_SCHEME_OPTION_STANDARD is set the scheme will be treated as a
// standard scheme. Standard schemes are subject to URL canonicalization and
// parsing rules as defined in the Common Internet Scheme Syntax RFC 1738
// Section 3.1 available at http://www.ietf.org/rfc/rfc1738.txt
//
// In particular, the syntax for standard scheme URLs must be of the form:
// <pre>
// [scheme]://[username]:[password]@[host]:[port]/[url-path]
// </pre> Standard scheme URLs must have a host component that is a fully
// qualified domain name as defined in Section 3.5 of RFC 1034 [13] and
// Section 2.1 of RFC 1123. These URLs will be canonicalized to
// "scheme://host/path" in the simplest case and
// "scheme://username:password@host:port/path" in the most explicit case. For
// example, "scheme:host/path" and "scheme:///host/path" will both be
// canonicalized to "scheme://host/path". The origin of a standard scheme URL
// is the combination of scheme, host and port (i.e., "scheme://host:port" in
// the most explicit case).
//
// For non-standard scheme URLs only the "scheme:" component is parsed and
// canonicalized. The remainder of the URL will be passed to the handler as-
// is. For example, "scheme:///some%20text" will remain the same. Non-standard
// scheme URLs cannot be used as a target for form submission.
///
CEF_SCHEME_OPTION_STANDARD = 1 << 0,
///
// If CEF_SCHEME_OPTION_LOCAL is set the scheme will be treated with the same
// security rules as those applied to "file" URLs. Normal pages cannot link to
// or access local URLs. Also, by default, local URLs can only perform
// XMLHttpRequest calls to the same URL (origin + path) that originated the
// request. To allow XMLHttpRequest calls from a local URL to other URLs with
// the same origin set the CefSettings.file_access_from_file_urls_allowed
// value to true (1). To allow XMLHttpRequest calls from a local URL to all
// origins set the CefSettings.universal_access_from_file_urls_allowed value
// to true (1).
///
CEF_SCHEME_OPTION_LOCAL = 1 << 1,
///
// If CEF_SCHEME_OPTION_DISPLAY_ISOLATED is set the scheme can only be
// displayed from other content hosted with the same scheme. For example,
// pages in other origins cannot create iframes or hyperlinks to URLs with the
// scheme. For schemes that must be accessible from other schemes don't set
// this, set CEF_SCHEME_OPTION_CORS_ENABLED, and use CORS
// "Access-Control-Allow-Origin" headers to further restrict access.
///
CEF_SCHEME_OPTION_DISPLAY_ISOLATED = 1 << 2,
///
// If CEF_SCHEME_OPTION_SECURE is set the scheme will be treated with the same
// security rules as those applied to "https" URLs. For example, loading this
// scheme from other secure schemes will not trigger mixed content warnings.
///
CEF_SCHEME_OPTION_SECURE = 1 << 3,
///
// If CEF_SCHEME_OPTION_CORS_ENABLED is set the scheme can be sent CORS
// requests. This value should be set in most cases where
// CEF_SCHEME_OPTION_STANDARD is set.
///
CEF_SCHEME_OPTION_CORS_ENABLED = 1 << 4,
///
// If CEF_SCHEME_OPTION_CSP_BYPASSING is set the scheme can bypass Content-
// Security-Policy (CSP) checks. This value should not be set in most cases
// where CEF_SCHEME_OPTION_STANDARD is set.
///
CEF_SCHEME_OPTION_CSP_BYPASSING = 1 << 5,
///
// If CEF_SCHEME_OPTION_FETCH_ENABLED is set the scheme can perform Fetch API
// requests.
///
CEF_SCHEME_OPTION_FETCH_ENABLED = 1 << 6,
} cef_scheme_options_t;
/// ///
// Error codes for CDM registration. See cef_web_plugin.h for details. // Error codes for CDM registration. See cef_web_plugin.h for details.
/// ///

View File

@ -21,18 +21,12 @@ void AppendArray(const std::vector<std::string>& source,
return; return;
target->insert(target->end(), source.begin(), source.end()); target->insert(target->end(), source.begin(), source.end());
} }
} } // namespace
CefSchemeRegistrarImpl::CefSchemeRegistrarImpl() {} CefSchemeRegistrarImpl::CefSchemeRegistrarImpl() {}
bool CefSchemeRegistrarImpl::AddCustomScheme(const CefString& scheme_name, bool CefSchemeRegistrarImpl::AddCustomScheme(const CefString& scheme_name,
bool is_standard, int options) {
bool is_local,
bool is_display_isolated,
bool is_secure,
bool is_cors_enabled,
bool is_csp_bypassing,
bool is_fetch_enabled) {
const std::string& scheme = base::ToLowerASCII(scheme_name.ToString()); const std::string& scheme = base::ToLowerASCII(scheme_name.ToString());
if (scheme::IsInternalHandledScheme(scheme) || if (scheme::IsInternalHandledScheme(scheme) ||
registered_schemes_.find(scheme) != registered_schemes_.end()) { registered_schemes_.find(scheme) != registered_schemes_.end()) {
@ -41,6 +35,14 @@ bool CefSchemeRegistrarImpl::AddCustomScheme(const CefString& scheme_name,
registered_schemes_.insert(scheme); registered_schemes_.insert(scheme);
const bool is_standard = options & CEF_SCHEME_OPTION_STANDARD;
const bool is_local = options & CEF_SCHEME_OPTION_LOCAL;
const bool is_display_isolated = options & CEF_SCHEME_OPTION_DISPLAY_ISOLATED;
const bool is_secure = options & CEF_SCHEME_OPTION_SECURE;
const bool is_cors_enabled = options & CEF_SCHEME_OPTION_CORS_ENABLED;
const bool is_csp_bypassing = options & CEF_SCHEME_OPTION_CSP_BYPASSING;
const bool is_fetch_enabled = options & CEF_SCHEME_OPTION_FETCH_ENABLED;
// The |is_display_isolated| value is excluded here because it's registered // The |is_display_isolated| value is excluded here because it's registered
// with Blink only. // with Blink only.
if (is_standard) if (is_standard)

View File

@ -18,14 +18,7 @@ class CefSchemeRegistrarImpl : public CefSchemeRegistrar {
CefSchemeRegistrarImpl(); CefSchemeRegistrarImpl();
// CefSchemeRegistrar methods. // CefSchemeRegistrar methods.
bool AddCustomScheme(const CefString& scheme_name, bool AddCustomScheme(const CefString& scheme_name, int options) override;
bool is_standard,
bool is_local,
bool is_display_isolated,
bool is_secure,
bool is_cors_enabled,
bool is_csp_bypassing,
bool is_fetch_enabled) override;
void GetSchemes(content::ContentClient::Schemes* schemes); void GetSchemes(content::ContentClient::Schemes* schemes);

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=5ceb0e97ddd8a7f8005eb9ee78f9b8a938896586$ // $hash=614c8379cf69b72edaf8b590da66aaa3264e511e$
// //
#include "libcef_dll/cpptoc/scheme_registrar_cpptoc.h" #include "libcef_dll/cpptoc/scheme_registrar_cpptoc.h"
@ -21,13 +21,7 @@ namespace {
int CEF_CALLBACK int CEF_CALLBACK
scheme_registrar_add_custom_scheme(struct _cef_scheme_registrar_t* self, scheme_registrar_add_custom_scheme(struct _cef_scheme_registrar_t* self,
const cef_string_t* scheme_name, const cef_string_t* scheme_name,
int is_standard, int options) {
int is_local,
int is_display_isolated,
int is_secure,
int is_cors_enabled,
int is_csp_bypassing,
int is_fetch_enabled) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self); DCHECK(self);
@ -40,10 +34,7 @@ scheme_registrar_add_custom_scheme(struct _cef_scheme_registrar_t* self,
// Execute // Execute
bool _retval = CefSchemeRegistrarCppToC::Get(self)->AddCustomScheme( bool _retval = CefSchemeRegistrarCppToC::Get(self)->AddCustomScheme(
CefString(scheme_name), is_standard ? true : false, CefString(scheme_name), options);
is_local ? true : false, is_display_isolated ? true : false,
is_secure ? true : false, is_cors_enabled ? true : false,
is_csp_bypassing ? true : false, is_fetch_enabled ? true : false);
// Return type: bool // Return type: bool
return _retval; return _retval;

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=cd85708cf16cdb2b3359094b1a9645ab6338c059$ // $hash=b114df75241a43b240b00eb12509473eaa492dd0$
// //
#include "libcef_dll/ctocpp/scheme_registrar_ctocpp.h" #include "libcef_dll/ctocpp/scheme_registrar_ctocpp.h"
@ -18,13 +18,7 @@
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
bool CefSchemeRegistrarCToCpp::AddCustomScheme(const CefString& scheme_name, bool CefSchemeRegistrarCToCpp::AddCustomScheme(const CefString& scheme_name,
bool is_standard, int options) {
bool is_local,
bool is_display_isolated,
bool is_secure,
bool is_cors_enabled,
bool is_csp_bypassing,
bool is_fetch_enabled) {
cef_scheme_registrar_t* _struct = GetStruct(); cef_scheme_registrar_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, add_custom_scheme)) if (CEF_MEMBER_MISSING(_struct, add_custom_scheme))
return false; return false;
@ -37,10 +31,8 @@ bool CefSchemeRegistrarCToCpp::AddCustomScheme(const CefString& scheme_name,
return false; return false;
// Execute // Execute
int _retval = _struct->add_custom_scheme( int _retval =
_struct, scheme_name.GetStruct(), is_standard, is_local, _struct->add_custom_scheme(_struct, scheme_name.GetStruct(), options);
is_display_isolated, is_secure, is_cors_enabled, is_csp_bypassing,
is_fetch_enabled);
// Return type: bool // Return type: bool
return _retval ? true : false; return _retval ? true : false;

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=b3cac10a32964e7c29eb39cfb7e2fda4c3f869f9$ // $hash=3664a7285a3f5eac9bc7522a2b812bdaf5d42467$
// //
#ifndef CEF_LIBCEF_DLL_CTOCPP_SCHEME_REGISTRAR_CTOCPP_H_ #ifndef CEF_LIBCEF_DLL_CTOCPP_SCHEME_REGISTRAR_CTOCPP_H_
@ -35,14 +35,7 @@ class CefSchemeRegistrarCToCpp
virtual ~CefSchemeRegistrarCToCpp(); virtual ~CefSchemeRegistrarCToCpp();
// CefSchemeRegistrar methods. // CefSchemeRegistrar methods.
bool AddCustomScheme(const CefString& scheme_name, bool AddCustomScheme(const CefString& scheme_name, int options) OVERRIDE;
bool is_standard,
bool is_local,
bool is_display_isolated,
bool is_secure,
bool is_cors_enabled,
bool is_csp_bypassing,
bool is_fetch_enabled) OVERRIDE;
}; };
#endif // CEF_LIBCEF_DLL_CTOCPP_SCHEME_REGISTRAR_CTOCPP_H_ #endif // CEF_LIBCEF_DLL_CTOCPP_SCHEME_REGISTRAR_CTOCPP_H_

View File

@ -11,8 +11,8 @@ namespace scheme_test {
void RegisterCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar, void RegisterCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar,
std::vector<CefString>& cookiable_schemes) { std::vector<CefString>& cookiable_schemes) {
registrar->AddCustomScheme("client", true, false, false, false, true, false, registrar->AddCustomScheme(
false); "client", CEF_SCHEME_OPTION_STANDARD | CEF_SCHEME_OPTION_CORS_ENABLED);
} }
} // namespace scheme_test } // namespace scheme_test

View File

@ -1333,6 +1333,6 @@ TEST(CookieTest, GetCookieManagerCustom) {
void RegisterCookieCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar, void RegisterCookieCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar,
std::vector<CefString>& cookiable_schemes) { std::vector<CefString>& cookiable_schemes) {
// Used by GetCookieManagerCustom test. // Used by GetCookieManagerCustom test.
registrar->AddCustomScheme("ccustom", true, false, false, false, true, false, registrar->AddCustomScheme(
false); "ccustom", CEF_SCHEME_OPTION_STANDARD | CEF_SCHEME_OPTION_CORS_ENABLED);
} }

View File

@ -2114,13 +2114,14 @@ void RegisterSchemeHandlerCustomSchemes(
CefRawPtr<CefSchemeRegistrar> registrar, CefRawPtr<CefSchemeRegistrar> registrar,
std::vector<CefString>& cookiable_schemes) { std::vector<CefString>& cookiable_schemes) {
// Add a custom standard scheme. // Add a custom standard scheme.
registrar->AddCustomScheme("customstd", true, false, false, false, true, registrar->AddCustomScheme(
false, false); "customstd", CEF_SCHEME_OPTION_STANDARD | CEF_SCHEME_OPTION_CORS_ENABLED);
registrar->AddCustomScheme("customstdfetch", true, false, false, false, true, registrar->AddCustomScheme("customstdfetch",
false, true); CEF_SCHEME_OPTION_STANDARD |
CEF_SCHEME_OPTION_CORS_ENABLED |
CEF_SCHEME_OPTION_FETCH_ENABLED);
// Add a custom non-standard scheme. // Add a custom non-standard scheme.
registrar->AddCustomScheme("customnonstd", false, false, false, false, false, registrar->AddCustomScheme("customnonstd", CEF_SCHEME_OPTION_NONE);
false, false); registrar->AddCustomScheme("customnonstdfetch",
registrar->AddCustomScheme("customnonstdfetch", false, false, false, false, CEF_SCHEME_OPTION_FETCH_ENABLED);
false, false, true);
} }

View File

@ -2246,8 +2246,8 @@ void RegisterURLRequestCustomSchemes(
CefRawPtr<CefSchemeRegistrar> registrar, CefRawPtr<CefSchemeRegistrar> registrar,
std::vector<CefString>& cookiable_schemes) { std::vector<CefString>& cookiable_schemes) {
const std::string& scheme = GetRequestScheme(false); const std::string& scheme = GetRequestScheme(false);
registrar->AddCustomScheme(scheme, true, false, false, false, true, false, registrar->AddCustomScheme(
false); scheme, CEF_SCHEME_OPTION_STANDARD | CEF_SCHEME_OPTION_CORS_ENABLED);
cookiable_schemes.push_back(scheme); cookiable_schemes.push_back(scheme);
} }