Browse Source

Weather: Detect and break infinite loops on navigating to the error page

pull/1138/head
Valentin Radu 3 years ago
parent
commit
aeb8e54b58
  1. 3
      ep_weather_host/ep_weather_error_html.h
  2. 19
      ep_weather_host/ep_weather_host.c

3
ep_weather_host/ep_weather_error_html.h

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
#ifndef _H_EP_WEATHER_ERROR_HTML_H_
#define _H_EP_WEATHER_ERROR_HTML_H_
#include <Windows.h>
#include <tchar.h>
#define EP_WEATHER_ERROR_LEN 2000
LPCWSTR ep_weather_error_html = L"\
<!DOCTYPE html>\n\
@ -8,7 +9,7 @@ LPCWSTR ep_weather_error_html = L"\ @@ -8,7 +9,7 @@ LPCWSTR ep_weather_error_html = L"\
<head>\n\
<meta charset=\"utf-8\" />\n\
<meta name=\"color-scheme\" content=\"light dark\">\n\
<title>Weather</title>\n\
<title>" _T(CLSID_EPWeather_TEXT) L"_ErrorPage</title>\n\
<style>\n\
html {\n\
background-color: transparent !important;\n\

19
ep_weather_host/ep_weather_host.c

@ -250,12 +250,20 @@ HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToError(EPWeather* _this) @@ -250,12 +250,20 @@ HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToError(EPWeather* _this)
}
if (_this->pCoreWebView2)
{
return _this->pCoreWebView2->lpVtbl->NavigateToString(_this->pCoreWebView2, ep_weather_error_html);
}
else
{
return E_FAIL;
LPWSTR wszPageTitle = NULL;
if (SUCCEEDED(_this->pCoreWebView2->lpVtbl->get_DocumentTitle(_this->pCoreWebView2, &wszPageTitle)))
{
BOOL bIsOnErrorPage = !_wcsicmp(wszPageTitle, _T(CLSID_EPWeather_TEXT) L"_ErrorPage");
CoTaskMemFree(wszPageTitle);
if (!bIsOnErrorPage) return _this->pCoreWebView2->lpVtbl->NavigateToString(_this->pCoreWebView2, ep_weather_error_html);
else
{
printf("[Browser] Already on the error page.\n");
return S_OK;
}
}
}
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE _epw_Weather_NavigateToProvider(EPWeather* _this)
@ -500,6 +508,7 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_NavigationCompleted(ICoreWebView2Navigat @@ -500,6 +508,7 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_NavigationCompleted(ICoreWebView2Navigat
}
else
{
printf("[Browser] Navigation completed with error, showing error page.\n");
_epw_Weather_NavigateToError(_this);
}
_this->pCoreWebView2Controller->lpVtbl->put_IsVisible(_this->pCoreWebView2Controller, FALSE);

Loading…
Cancel
Save