mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-03 23:00:41 +08:00
SPE SPE-2566: Load loading screen on webview panels first to prevent using webview context before it is initilized
do remove_request_authorization only once
This commit is contained in:
parent
3bdaef4910
commit
ce5008cc8d
@ -223,6 +223,7 @@ void WebViewPanel::on_show(wxShowEvent& evt)
|
||||
if (m_do_late_webview_create) {
|
||||
m_do_late_webview_create = false;
|
||||
late_create();
|
||||
return;
|
||||
}
|
||||
if (m_load_default_url) {
|
||||
m_load_default_url = false;
|
||||
@ -254,7 +255,7 @@ void WebViewPanel::on_idle(wxIdleEvent& WXUNUSED(evt))
|
||||
// So we just reset the handler here.
|
||||
if (!m_script_message_hadler_names.empty()) {
|
||||
m_browser->RemoveScriptMessageHandler(Slic3r::GUI::from_u8(m_script_message_hadler_names.front()));
|
||||
bool b = m_browser->AddScriptMessageHandler(Slic3r::GUI::from_u8(m_script_message_hadler_names.front()));
|
||||
m_browser->AddScriptMessageHandler(Slic3r::GUI::from_u8(m_script_message_hadler_names.front()));
|
||||
}
|
||||
|
||||
}
|
||||
@ -270,6 +271,10 @@ void WebViewPanel::on_loaded(wxWebViewEvent& evt)
|
||||
if (evt.GetURL().IsEmpty())
|
||||
return;
|
||||
m_load_default_url_on_next_error = false;
|
||||
if (evt.GetURL().Find(GUI::format_wxstr("/web/%1%.html", m_loading_html)) != wxNOT_FOUND && m_load_default_url) {
|
||||
m_load_default_url = false;
|
||||
load_default_url();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -850,16 +855,28 @@ PrinterWebViewPanel::PrinterWebViewPanel(wxWindow* parent, const wxString& defau
|
||||
{
|
||||
}
|
||||
|
||||
void PrinterWebViewPanel::on_navigation_request(wxWebViewEvent &evt)
|
||||
{
|
||||
const wxString url = evt.GetURL();
|
||||
if (url.StartsWith(m_default_url) && !m_api_key_sent) {
|
||||
if (!m_usr.empty() && !m_psk.empty()) {
|
||||
send_credentials();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PrinterWebViewPanel::on_loaded(wxWebViewEvent& evt)
|
||||
{
|
||||
if (evt.GetURL().IsEmpty())
|
||||
return;
|
||||
m_load_default_url_on_next_error = false;
|
||||
|
||||
if (evt.GetURL().Find(GUI::format_wxstr("/web/%1%.html", m_loading_html)) != wxNOT_FOUND && m_load_default_url) {
|
||||
m_load_default_url = false;
|
||||
load_default_url();
|
||||
return;
|
||||
}
|
||||
if (!m_api_key.empty()) {
|
||||
send_api_key();
|
||||
} else if (!m_usr.empty() && !m_psk.empty()) {
|
||||
send_credentials();
|
||||
}
|
||||
}
|
||||
void PrinterWebViewPanel::on_script_message(wxWebViewEvent& evt)
|
||||
@ -903,15 +920,12 @@ void PrinterWebViewPanel::send_credentials()
|
||||
return;
|
||||
m_browser->RemoveAllUserScripts();
|
||||
m_browser->AddUserScript("sessionStorage.removeItem('authType'); sessionStorage.removeItem('apiKey'); console.log('Session Storage cleared');");
|
||||
m_browser->Reload();
|
||||
// reload would be done only if called from on_loaded
|
||||
//m_browser->Reload();
|
||||
m_api_key_sent = true;
|
||||
setup_webview_with_credentials(m_browser, m_usr, m_psk);
|
||||
}
|
||||
|
||||
void PrinterWebViewPanel::sys_color_changed()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PrintablesWebViewPanel::PrintablesWebViewPanel(wxWindow* parent)
|
||||
: WebViewPanel(parent, GUI::from_u8(Utils::ServiceConfig::instance().printables_url()), { "ExternalApp" }, "other_loading", "other_error", false)
|
||||
@ -973,9 +987,17 @@ wxString PrintablesWebViewPanel::get_default_url() const
|
||||
|
||||
void PrintablesWebViewPanel::on_loaded(wxWebViewEvent& evt)
|
||||
{
|
||||
if (evt.GetURL().Find(GUI::format_wxstr("/web/%1%.html", m_loading_html)) != wxNOT_FOUND && m_load_default_url) {
|
||||
m_load_default_url = false;
|
||||
load_default_url();
|
||||
return;
|
||||
}
|
||||
#ifdef _WIN32
|
||||
// This is needed only once after add_request_authorization
|
||||
remove_request_authorization(m_browser);
|
||||
if (m_remove_request_auth) {
|
||||
m_remove_request_auth = false;
|
||||
remove_request_authorization(m_browser);
|
||||
}
|
||||
#endif
|
||||
m_load_default_url_on_next_error = false;
|
||||
}
|
||||
@ -1054,7 +1076,7 @@ void PrintablesWebViewPanel::logout(const std::string& override_url/* = std::str
|
||||
}
|
||||
delete_cookies(m_browser, Utils::ServiceConfig::instance().printables_url());
|
||||
m_browser->RunScript("localStorage.clear();");
|
||||
|
||||
|
||||
std::string next_url = override_url.empty()
|
||||
? get_url_lang_theme(m_browser->GetCurrentURL())
|
||||
: get_url_lang_theme(from_u8(override_url));
|
||||
@ -1110,6 +1132,7 @@ void PrintablesWebViewPanel::load_default_url()
|
||||
// add token to first request
|
||||
#ifdef _WIN32
|
||||
add_request_authorization(m_browser, m_default_url, access_token);
|
||||
m_remove_request_auth = true;
|
||||
load_url(GUI::from_u8(actual_default_url));
|
||||
#else
|
||||
load_request(m_browser, actual_default_url, access_token);
|
||||
|
@ -155,6 +155,7 @@ public:
|
||||
|
||||
void on_loaded(wxWebViewEvent& evt) override;
|
||||
void on_script_message(wxWebViewEvent& evt) override;
|
||||
void on_navigation_request(wxWebViewEvent &evt) override;
|
||||
void send_api_key();
|
||||
void send_credentials();
|
||||
void set_api_key(const std::string &key)
|
||||
@ -169,7 +170,6 @@ public:
|
||||
m_psk = psk;
|
||||
}
|
||||
void clear() { m_api_key.clear(); m_usr.clear(); m_psk.clear(); m_api_key_sent = false; }
|
||||
void sys_color_changed() override;
|
||||
private:
|
||||
std::string m_api_key;
|
||||
std::string m_usr;
|
||||
@ -207,6 +207,9 @@ private:
|
||||
|
||||
std::map<std::string, std::function<void(const std::string&)>> m_events;
|
||||
std::string m_next_show_url;
|
||||
#ifdef _WIN32
|
||||
bool m_remove_request_auth { false };
|
||||
#endif
|
||||
/*
|
||||
Eventy Slicer -> Printables
|
||||
accessTokenWillChange
|
||||
|
@ -26,11 +26,13 @@ void setup_webview_with_credentials(wxWebView* webview, const std::string& usern
|
||||
{
|
||||
ICoreWebView2 *webView2 = static_cast<ICoreWebView2 *>(webview->GetNativeBackend());
|
||||
if (!webView2) {
|
||||
BOOST_LOG_TRIVIAL(error) << "setup_webview_with_credentials Failed: Webview 2 is null.";
|
||||
return;
|
||||
}
|
||||
wxCOMPtr<ICoreWebView2_10> wv2_10;
|
||||
HRESULT hr = webView2->QueryInterface(IID_PPV_ARGS(&wv2_10));
|
||||
if (FAILED(hr)) {
|
||||
BOOST_LOG_TRIVIAL(error) << "setup_webview_with_credentials Failed: ICoreWebView2_10 is null.";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -68,11 +70,13 @@ void remove_webview_credentials(wxWebView* webview)
|
||||
{
|
||||
ICoreWebView2 *webView2 = static_cast<ICoreWebView2 *>(webview->GetNativeBackend());
|
||||
if (!webView2) {
|
||||
BOOST_LOG_TRIVIAL(error) << "remove_webview_credentials Failed: webView2 is null.";
|
||||
return;
|
||||
}
|
||||
wxCOMPtr<ICoreWebView2_10> wv2_10;
|
||||
HRESULT hr = webView2->QueryInterface(IID_PPV_ARGS(&wv2_10));
|
||||
if (FAILED(hr)) {
|
||||
BOOST_LOG_TRIVIAL(error) << "remove_webview_credentials Failed: ICoreWebView2_10 is null.";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -93,6 +97,7 @@ void delete_cookies(wxWebView* webview, const std::string& url)
|
||||
{
|
||||
ICoreWebView2 *webView2 = static_cast<ICoreWebView2 *>(webview->GetNativeBackend());
|
||||
if (!webView2) {
|
||||
BOOST_LOG_TRIVIAL(error) << "delete_cookies Failed: webView2 is null.";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -183,11 +188,13 @@ void add_request_authorization(wxWebView* webview, const wxString& address, cons
|
||||
// The filter needs to be removed to stop adding the auth header
|
||||
ICoreWebView2 *webView2 = static_cast<ICoreWebView2 *>(webview->GetNativeBackend());
|
||||
if (!webView2) {
|
||||
BOOST_LOG_TRIVIAL(error) << "Adding request Authorization Failed: Webview 2 is null.";
|
||||
return;
|
||||
}
|
||||
wxCOMPtr<ICoreWebView2_2> wv2_2;
|
||||
HRESULT hr = webView2->QueryInterface(IID_PPV_ARGS(&wv2_2));
|
||||
if (FAILED(hr)) {
|
||||
BOOST_LOG_TRIVIAL(error) << "Adding request Authorization Failed: QueryInterface ICoreWebView2_2 has failed.";
|
||||
return;
|
||||
}
|
||||
filter_patern = address + "/*";
|
||||
@ -238,8 +245,10 @@ void remove_request_authorization(wxWebView* webview)
|
||||
{
|
||||
ICoreWebView2 *webView2 = static_cast<ICoreWebView2 *>(webview->GetNativeBackend());
|
||||
if (!webView2) {
|
||||
BOOST_LOG_TRIVIAL(error) << "remove_request_authorization Failed: webView2 is null.";
|
||||
return;
|
||||
}
|
||||
BOOST_LOG_TRIVIAL(info) << "remove_request_authorization";
|
||||
webView2->RemoveWebResourceRequestedFilter(filter_patern.c_str(), COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT);
|
||||
if(FAILED(webView2->remove_WebResourceRequested( m_webResourceRequestedTokenForImageBlocking))) {
|
||||
BOOST_LOG_TRIVIAL(error) << "WebView: Failed to remove resources";
|
||||
@ -256,6 +265,7 @@ void load_request(wxWebView* web_view, const std::string& address, const std::st
|
||||
|
||||
ICoreWebView2 *webView2 = static_cast<ICoreWebView2 *>(web_view->GetNativeBackend());
|
||||
if (!webView2) {
|
||||
BOOST_LOG_TRIVIAL(error) << "load_request Failed: webView2 is null.";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -263,12 +273,14 @@ void load_request(wxWebView* web_view, const std::string& address, const std::st
|
||||
wxCOMPtr<ICoreWebView2Environment> webViewEnvironment;
|
||||
//webViewEnvironment = static_cast<ICoreWebView2Environment *>(web_view->GetEnviroment());
|
||||
if (!webViewEnvironment.Get()) {
|
||||
BOOST_LOG_TRIVIAL(error) << "load_request Failed: ICoreWebView2Environment is null.";
|
||||
return;
|
||||
}
|
||||
|
||||
wxCOMPtr<ICoreWebView2Environment2> webViewEnvironment2;
|
||||
if (FAILED(webViewEnvironment->QueryInterface(IID_PPV_ARGS(&webViewEnvironment2))))
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(error) << "load_request Failed: ICoreWebView2Environment2 is null.";
|
||||
return;
|
||||
}
|
||||
wxCOMPtr<ICoreWebView2WebResourceRequest> webResourceRequest;
|
||||
@ -277,14 +289,17 @@ void load_request(wxWebView* web_view, const std::string& address, const std::st
|
||||
L"https://www.printables.com/", L"GET", NULL,
|
||||
L"Content-Type: application/x-www-form-urlencoded", &webResourceRequest)))
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(error) << "load_request Failed: CreateWebResourceRequest failed.";
|
||||
return;
|
||||
}
|
||||
wxCOMPtr<ICoreWebView2_2> wv2_2;
|
||||
if (FAILED(webView2->QueryInterface(IID_PPV_ARGS(&wv2_2)))) {
|
||||
BOOST_LOG_TRIVIAL(error) << "load_request Failed: ICoreWebView2_2 is null.";
|
||||
return;
|
||||
}
|
||||
if (FAILED(wv2_2->NavigateWithWebResourceRequest(webResourceRequest.get())))
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(error) << "load_request Failed: NavigateWithWebResourceRequest failed.";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user