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;