diff --git a/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h b/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h index 8366bc4ea3..00baa0ecc0 100644 --- a/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h +++ b/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h @@ -606,6 +606,9 @@ public: The errorInfo contains some platform dependent string describing the error. + + Calling goToURL() inside this callback can encounter further network + errors, potentially causing an infinite loop. */ virtual bool pageLoadHadNetworkError (const String& errorInfo); diff --git a/modules/juce_gui_extra/native/juce_WebBrowserComponent_windows.cpp b/modules/juce_gui_extra/native/juce_WebBrowserComponent_windows.cpp index 0f673b66db..5406ea40ba 100644 --- a/modules/juce_gui_extra/native/juce_WebBrowserComponent_windows.cpp +++ b/modules/juce_gui_extra/native/juce_WebBrowserComponent_windows.cpp @@ -806,7 +806,29 @@ private: auto errorString = "Error code: " + String (errorStatus); if (owner.pageLoadHadNetworkError (errorString)) - owner.goToURL ("data:text/plain;charset=UTF-8," + errorString); + { + const auto adhocErrorPageUrl = "data:text/plain;charset=UTF-8," + errorString; + + if (owner.lastURL == adhocErrorPageUrl) + { + // We encountered an error while trying to navigate to the adhoc + // error page. Trying to navigate to the error page again would + // likely end us up in an infinite error callback loop, so we + // early exit. + // + // Override WebBrowserComponent::pageLoadHadNetworkError and + // return false to avoid such a loop, while still being able to + // take action on the error if necessary. + // + // Receiving Error code: 9 can often be ignored safely with the + // current WebView2 implementation. + jassertfalse; + + return S_OK; + } + + owner.goToURL (adhocErrorPageUrl); + } } }