Add support for WXWEBREQUEST_BACKEND environment variable

Defining this variable overrides the default backend choice.

Document the variable itself and also extend wxWebSession::New()
documentation.
This commit is contained in:
Vadim Zeitlin 2021-01-12 02:17:39 +01:00
parent d3b93a48b3
commit dceb24ad7c
3 changed files with 30 additions and 8 deletions

View File

@ -26,5 +26,11 @@ wxWidgets programs.
@c /usr/local or @c /usr). You can set WXPREFIX if you are for example
distributing a binary version of an application and you don't know in advance
where it will be installed.}
@itemdef{WXWEBREQUEST_BACKEND,
This variable can be set to override the choice of the default backend
used by wxWebRequest, see wxWebSession::New(). Most common use is to
set it to @c "CURL" to force using libcurl-based implementation under
MSW or macOS platforms where the native implementation would be chosed
by default.}
*/

View File

@ -610,15 +610,28 @@ public:
/**
Creates a new wxWebSession object.
@a backend may be specified explicitly by using of the predefined @c
wxWebSessionBackendWinHTTP, @c wxWebSessionBackendURLSession or @c
wxWebSessionBackendCURL constants to select the corresponding backend
or left empty to select the default backend. The default depends on the
the current platform: WinHTTP-based implementation is used under MSW,
NSURLSession-based one under macOS and libcurl-based otherwise.
Further, if @c WXWEBREQUEST_BACKEND environment variable is defined, it
overrides the default backend selection, allowing to force the use of
libcurl-based implementation by default under MSW or macOS platforms,
for example.
Use IsOpened() to check if the session creation succeeded.
@param backend
The backend web session implementation to use.
The backend web session implementation to use or empty to use the
default implementation as described above.
@return
The created wxWebSession
*/
static wxWebSession New(const wxString& backend = wxWebSessionBackendDefault);
static wxWebSession New(const wxString& backend = wxString());
/**
Allows to check if the specified backend is available at runtime.

View File

@ -39,9 +39,9 @@
#include "wx/private/webrequest_curl.h"
#endif
extern WXDLLIMPEXP_DATA_NET(const char) wxWebSessionBackendWinHTTP[] = "wxWebSessionBackendWinHTTP";
extern WXDLLIMPEXP_DATA_NET(const char) wxWebSessionBackendURLSession[] = "wxWebSessionBackendURLSession";
extern WXDLLIMPEXP_DATA_NET(const char) wxWebSessionBackendCURL[] = "wxWebSessionBackendCURL";
extern WXDLLIMPEXP_DATA_NET(const char) wxWebSessionBackendWinHTTP[] = "WinHTTP";
extern WXDLLIMPEXP_DATA_NET(const char) wxWebSessionBackendURLSession[] = "URLSession";
extern WXDLLIMPEXP_DATA_NET(const char) wxWebSessionBackendCURL[] = "CURL";
wxDEFINE_EVENT(wxEVT_WEBREQUEST_STATE, wxWebRequestEvent);
wxDEFINE_EVENT(wxEVT_WEBREQUEST_DATA, wxWebRequestEvent);
@ -824,13 +824,16 @@ wxWebSession wxWebSession::New(const wxString& backendOrig)
wxString backend = backendOrig;
if ( backend.empty() )
{
if ( !wxGetEnv("WXWEBREQUEST_BACKEND", &backend) )
{
#if wxUSE_WEBREQUEST_WINHTTP
backend = wxWebSessionBackendWinHTTP;
backend = wxWebSessionBackendWinHTTP;
#elif wxUSE_WEBREQUEST_URLSESSION
backend = wxWebSessionBackendURLSession;
backend = wxWebSessionBackendURLSession;
#elif wxUSE_WEBREQUEST_CURL
backend = wxWebSessionBackendCURL;
backend = wxWebSessionBackendCURL;
#endif
}
}
wxStringWebSessionFactoryMap::iterator factory = gs_factoryMap.find(backend);