From 1f36582d874b810b2167d21f38c3ef0a56964d5d Mon Sep 17 00:00:00 2001 From: Maarten Bent Date: Tue, 23 Mar 2021 00:41:11 +0100 Subject: [PATCH] Initialize wxWinHTTP when wxWebSessionFactoryWinHTTP is created --- include/wx/msw/private/webrequest_winhttp.h | 11 +++++++++- include/wx/private/webrequest.h | 2 ++ src/common/webrequest.cpp | 7 +++++++ src/msw/webrequest_winhttp.cpp | 23 +++++---------------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/include/wx/msw/private/webrequest_winhttp.h b/include/wx/msw/private/webrequest_winhttp.h index dd1f9d5e70..1e961fb811 100644 --- a/include/wx/msw/private/webrequest_winhttp.h +++ b/include/wx/msw/private/webrequest_winhttp.h @@ -136,6 +136,8 @@ public: ~wxWebSessionWinHTTP(); + static bool Initialize(); + wxWebRequestImplPtr CreateRequest(wxWebSession& session, wxEvtHandler* handler, @@ -163,7 +165,14 @@ class wxWebSessionFactoryWinHTTP : public wxWebSessionFactory { public: wxWebSessionImpl* Create() wxOVERRIDE - { return new wxWebSessionWinHTTP(); } + { + return new wxWebSessionWinHTTP(); + } + + bool Initialize() wxOVERRIDE + { + return wxWebSessionWinHTTP::Initialize(); + } }; #endif // _WX_MSW_WEBREQUEST_WINHTTP_H diff --git a/include/wx/private/webrequest.h b/include/wx/private/webrequest.h index 497bbfc170..1b18d583c6 100644 --- a/include/wx/private/webrequest.h +++ b/include/wx/private/webrequest.h @@ -212,6 +212,8 @@ class wxWebSessionFactory public: virtual wxWebSessionImpl* Create() = 0; + virtual bool Initialize() { return true; } + virtual ~wxWebSessionFactory() { } }; diff --git a/src/common/webrequest.cpp b/src/common/webrequest.cpp index 20bf309dc2..5baca038be 100644 --- a/src/common/webrequest.cpp +++ b/src/common/webrequest.cpp @@ -942,6 +942,13 @@ void wxWebSession::RegisterFactory(const wxString& backend, wxWebSessionFactory* factory) { + if ( !factory->Initialize() ) + { + delete factory; + factory = NULL; + return; + } + // Note that we don't have to check here that there is no registered // backend with the same name yet because we're only called from // InitFactoryMap() below. If this function becomes public, we'd need to diff --git a/src/msw/webrequest_winhttp.cpp b/src/msw/webrequest_winhttp.cpp index 5f0098bdd6..d31c12ef05 100644 --- a/src/msw/webrequest_winhttp.cpp +++ b/src/msw/webrequest_winhttp.cpp @@ -23,7 +23,6 @@ #include "wx/log.h" #include "wx/utils.h" #include "wx/translation.h" - #include "wx/module.h" #endif // Helper class used to dynamically load the required symbols from winhttp.dll @@ -114,23 +113,6 @@ wxWinHTTP::WinHttpQueryAuthSchemes_t wxWinHTTP::WinHttpQueryAuthSchemes; wxWinHTTP::WinHttpSetCredentials_t wxWinHTTP::WinHttpSetCredentials; wxWinHTTP::WinHttpOpen_t wxWinHTTP::WinHttpOpen; -class wxWinHTTPModule : public wxModule -{ -public: - virtual bool OnInit() wxOVERRIDE - { - return wxWinHTTP::LoadLibrary(); - } - - virtual void OnExit() wxOVERRIDE - { - } - - wxDECLARE_DYNAMIC_CLASS(wxWinHTTPModule); -}; - -wxIMPLEMENT_DYNAMIC_CLASS(wxWinHTTPModule, wxModule); - // Define constants potentially missing in old SDKs #ifndef WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY @@ -676,6 +658,11 @@ wxWebSessionWinHTTP::~wxWebSessionWinHTTP() wxWinHTTPCloseHandle(m_handle); } +bool wxWebSessionWinHTTP::Initialize() +{ + return wxWinHTTP::LoadLibrary(); +} + bool wxWebSessionWinHTTP::Open() { DWORD accessType;