LibWeb: Just ignore <script> elements that failed to load the script

We're never gonna be able to run them if we can't load them so just
let it go.
This commit is contained in:
Andreas Kling 2020-06-15 18:37:48 +02:00
parent 84f8c91a6f
commit 17d26b92f8
3 changed files with 18 additions and 8 deletions

View file

@ -190,14 +190,19 @@ void HTMLScriptElement::prepare_script(Badge<HTMLDocumentParser>)
// FIXME: Check classic vs. module script type
// FIXME: This load should be made asynchronous and the parser should spin an event loop etc.
ResourceLoader::the().load_sync(url, [this, url](auto& data, auto&) {
if (data.is_null()) {
dbg() << "HTMLScriptElement: Failed to load " << url;
return;
}
m_script_source = String::copy(data);
script_became_ready();
});
ResourceLoader::the().load_sync(
url,
[this, url](auto& data, auto&) {
if (data.is_null()) {
dbg() << "HTMLScriptElement: Failed to load " << url;
return;
}
m_script_source = String::copy(data);
script_became_ready();
},
[this](auto&) {
m_failed_to_load = true;
});
} else {
// FIXME: Check classic vs. module script type
m_script_source = source_text;

View file

@ -41,6 +41,7 @@ public:
bool is_non_blocking() const { return m_non_blocking; }
bool is_ready_to_be_parser_executed() const { return m_ready_to_be_parser_executed; }
bool failed_to_load() const { return m_failed_to_load; }
void set_parser_document(Badge<HTMLDocumentParser>, Document&);
void set_non_blocking(Badge<HTMLDocumentParser>, bool);
@ -60,6 +61,7 @@ private:
bool m_from_an_external_file { false };
bool m_script_ready { false };
bool m_ready_to_be_parser_executed { false };
bool m_failed_to_load { false };
Function<void()> m_script_ready_callback;

View file

@ -1476,6 +1476,9 @@ void HTMLDocumentParser::handle_text(HTMLToken& token)
// that is blocking scripts and the script's "ready to be parser-executed"
// flag is set.
if (the_script->failed_to_load())
return;
ASSERT(the_script->is_ready_to_be_parser_executed());
if (m_aborted)