Call CoTaskMemFree() on LPWSTR return by WebView2 API

This commit is contained in:
Tobias Taschner
2020-01-15 22:13:12 +01:00
parent 964992e7ff
commit f8e69e4166

View File

@@ -26,6 +26,7 @@
#include "wx/msw/private/webview_edge.h" #include "wx/msw/private/webview_edge.h"
#include <wrl/event.h> #include <wrl/event.h>
#include <Objbase.h>
using namespace Microsoft::WRL; using namespace Microsoft::WRL;
@@ -123,7 +124,10 @@ bool wxWebViewEdgeImpl::Initialize()
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
if (versionStr) if (versionStr)
{
CoTaskMemFree(versionStr);
return true; return true;
}
} }
else else
wxLogApiError("GetWebView2BrowserVersionInfo", hr); wxLogApiError("GetWebView2BrowserVersionInfo", hr);
@@ -152,9 +156,12 @@ HRESULT wxWebViewEdgeImpl::OnNavigationStarting(IWebView2WebView* WXUNUSED(sende
{ {
m_isBusy = true; m_isBusy = true;
wxString evtURL; wxString evtURL;
PWSTR uri; LPWSTR uri;
if (SUCCEEDED(args->get_Uri(&uri))) if (SUCCEEDED(args->get_Uri(&uri)))
{
evtURL = wxString(uri); evtURL = wxString(uri);
CoTaskMemFree(uri);
}
wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATING, m_ctrl->GetId(), evtURL, wxString()); wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATING, m_ctrl->GetId(), evtURL, wxString());
event.SetEventObject(m_ctrl); event.SetEventObject(m_ctrl);
m_ctrl->HandleWindowEvent(event); m_ctrl->HandleWindowEvent(event);
@@ -233,9 +240,13 @@ HRESULT wxWebViewEdgeImpl::OnNavigationCompleted(IWebView2WebView* WXUNUSED(send
HRESULT wxWebViewEdgeImpl::OnNewWindowRequested(IWebView2WebView* WXUNUSED(sender), IWebView2NewWindowRequestedEventArgs* args) HRESULT wxWebViewEdgeImpl::OnNewWindowRequested(IWebView2WebView* WXUNUSED(sender), IWebView2NewWindowRequestedEventArgs* args)
{ {
PWSTR uri; LPWSTR uri;
args->get_Uri(&uri); wxString evtURL;
wxString evtURL(uri); if (SUCCEEDED(args->get_Uri(&uri)))
{
evtURL = wxString(uri);
CoTaskMemFree(uri);
}
wxWebViewEvent evt(wxEVT_WEBVIEW_NEWWINDOW, m_ctrl->GetId(), evtURL, wxString()); wxWebViewEvent evt(wxEVT_WEBVIEW_NEWWINDOW, m_ctrl->GetId(), evtURL, wxString());
m_ctrl->HandleWindowEvent(evt); m_ctrl->HandleWindowEvent(evt);
args->put_Handled(true); args->put_Handled(true);
@@ -467,16 +478,24 @@ wxString wxWebViewEdge::GetCurrentURL() const
{ {
LPWSTR uri; LPWSTR uri;
if (m_impl->m_webView && SUCCEEDED(m_impl->m_webView->get_Source(&uri))) if (m_impl->m_webView && SUCCEEDED(m_impl->m_webView->get_Source(&uri)))
return wxString(uri); {
wxString uriStr(uri);
CoTaskMemFree(uri);
return uriStr;
}
else else
return wxString(); return wxString();
} }
wxString wxWebViewEdge::GetCurrentTitle() const wxString wxWebViewEdge::GetCurrentTitle() const
{ {
PWSTR title; LPWSTR title;
if (m_impl->m_webView && SUCCEEDED(m_impl->m_webView->get_DocumentTitle(&title))) if (m_impl->m_webView && SUCCEEDED(m_impl->m_webView->get_DocumentTitle(&title)))
return wxString(title); {
wxString titleStr(title);
CoTaskMemFree(title);
return titleStr;
}
else else
return wxString(); return wxString();
} }