From c675d979a746390a3243eadf97781fb34525aa27 Mon Sep 17 00:00:00 2001 From: Branden Cash <203336+ammmze@users.noreply.github.com> Date: Wed, 31 May 2023 09:14:47 -0700 Subject: [PATCH] fix(macos): disable App Transport Security (#1157) * feat(webview): enable context menu This enables the ability (at least on MacOS) to reload the webview. * fix(webview): add handler for webview error Adding this un-covered the following error when trying to load a the printer page using http and hostname: ``` OnError: error loading page about:blank wxWEBVIEW_NAV_ERR_OTHER The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. ``` * fix(macos): disable App Transport Security policy Disables the [App Transport Security](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity) policy that blocks loading http urls (via hostname...ip addresses were fine because ip addresses can't have certs, so they would be excluded from the ATS restriction). Resolves #791 --- cmake/modules/MacOSXBundleInfo.plist.in | 8 ++++++ src/slic3r/GUI/PrinterWebView.cpp | 34 +++++++++++++++++++++++++ src/slic3r/GUI/PrinterWebView.hpp | 1 + src/slic3r/GUI/Widgets/WebView.cpp | 2 +- 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index 5e61a9e94..40c8e7c3a 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -118,5 +118,13 @@ NSHumanReadableCopyright ${MACOSX_BUNDLE_COPYRIGHT} + NSAppTransportSecurity + + + NSAllowsArbitraryLoads + + NSAllowsArbitraryLoadsInWebContent + + diff --git a/src/slic3r/GUI/PrinterWebView.cpp b/src/slic3r/GUI/PrinterWebView.cpp index 13102fd98..5830d1379 100644 --- a/src/slic3r/GUI/PrinterWebView.cpp +++ b/src/slic3r/GUI/PrinterWebView.cpp @@ -30,6 +30,8 @@ PrinterWebView::PrinterWebView(wxWindow *parent) return; } + Bind(wxEVT_WEBVIEW_ERROR, &PrinterWebView::OnError, this); + SetSizer(topsizer); topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); @@ -83,6 +85,38 @@ void PrinterWebView::OnClose(wxCloseEvent& evt) this->Hide(); } +void PrinterWebView::OnError(wxWebViewEvent &evt) +{ + auto e = "unknown error"; + switch (evt.GetInt()) { + case wxWEBVIEW_NAV_ERR_CONNECTION: + e = "wxWEBVIEW_NAV_ERR_CONNECTION"; + break; + case wxWEBVIEW_NAV_ERR_CERTIFICATE: + e = "wxWEBVIEW_NAV_ERR_CERTIFICATE"; + break; + case wxWEBVIEW_NAV_ERR_AUTH: + e = "wxWEBVIEW_NAV_ERR_AUTH"; + break; + case wxWEBVIEW_NAV_ERR_SECURITY: + e = "wxWEBVIEW_NAV_ERR_SECURITY"; + break; + case wxWEBVIEW_NAV_ERR_NOT_FOUND: + e = "wxWEBVIEW_NAV_ERR_NOT_FOUND"; + break; + case wxWEBVIEW_NAV_ERR_REQUEST: + e = "wxWEBVIEW_NAV_ERR_REQUEST"; + break; + case wxWEBVIEW_NAV_ERR_USER_CANCELLED: + e = "wxWEBVIEW_NAV_ERR_USER_CANCELLED"; + break; + case wxWEBVIEW_NAV_ERR_OTHER: + e = "wxWEBVIEW_NAV_ERR_OTHER"; + break; + } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": error loading page %1% %2% %3% %4%") %evt.GetURL() %evt.GetTarget() %e %evt.GetString(); +} + } // GUI diff --git a/src/slic3r/GUI/PrinterWebView.hpp b/src/slic3r/GUI/PrinterWebView.hpp index 4356268d6..bdf5f4c68 100644 --- a/src/slic3r/GUI/PrinterWebView.hpp +++ b/src/slic3r/GUI/PrinterWebView.hpp @@ -38,6 +38,7 @@ public: void load_url(wxString& url); void UpdateState(); void OnClose(wxCloseEvent& evt); + void OnError(wxWebViewEvent& evt); private: diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 74efaa67b..36cf241ee 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -218,7 +218,7 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) #ifndef __WIN32__ }); #endif - webView->EnableContextMenu(false); + webView->EnableContextMenu(true); } else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": failed. Use fake web view."; webView = new FakeWebView;