mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:37:36 +00:00
LibWeb: Allow HTML parser to delay delivery of the document "load" event
We will now spin in "the end" until there are no more "things delaying the load event". Of course, nothing actually uses this yet, and there are a lot of things that need to.
This commit is contained in:
parent
b1529e3202
commit
dbba0a520f
6 changed files with 67 additions and 1 deletions
|
@ -285,6 +285,14 @@ public:
|
|||
|
||||
Bindings::LocationObject* location();
|
||||
|
||||
size_t number_of_things_delaying_the_load_event() { return m_number_of_things_delaying_the_load_event; }
|
||||
void increment_number_of_things_delaying_the_load_event(Badge<DocumentLoadEventDelayer>) { ++m_number_of_things_delaying_the_load_event; }
|
||||
void decrement_number_of_things_delaying_the_load_event(Badge<DocumentLoadEventDelayer>)
|
||||
{
|
||||
VERIFY(m_number_of_things_delaying_the_load_event);
|
||||
--m_number_of_things_delaying_the_load_event;
|
||||
}
|
||||
|
||||
private:
|
||||
explicit Document(const AK::URL&);
|
||||
|
||||
|
@ -367,6 +375,8 @@ private:
|
|||
u32 m_script_blocking_style_sheet_counter { 0 };
|
||||
|
||||
NonnullRefPtr<HTML::History> m_history;
|
||||
|
||||
size_t m_number_of_things_delaying_the_load_event { 0 };
|
||||
};
|
||||
|
||||
}
|
||||
|
|
23
Userland/Libraries/LibWeb/DOM/DocumentLoadEventDelayer.cpp
Normal file
23
Userland/Libraries/LibWeb/DOM/DocumentLoadEventDelayer.cpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/DOM/Document.h>
|
||||
#include <LibWeb/DOM/DocumentLoadEventDelayer.h>
|
||||
|
||||
namespace Web::DOM {
|
||||
|
||||
DocumentLoadEventDelayer::DocumentLoadEventDelayer(Document& document)
|
||||
: m_document(document)
|
||||
{
|
||||
m_document->increment_number_of_things_delaying_the_load_event({});
|
||||
}
|
||||
|
||||
DocumentLoadEventDelayer::~DocumentLoadEventDelayer()
|
||||
{
|
||||
m_document->decrement_number_of_things_delaying_the_load_event({});
|
||||
}
|
||||
|
||||
}
|
27
Userland/Libraries/LibWeb/DOM/DocumentLoadEventDelayer.h
Normal file
27
Userland/Libraries/LibWeb/DOM/DocumentLoadEventDelayer.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Noncopyable.h>
|
||||
#include <AK/NonnullRefPtr.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
||||
namespace Web::DOM {
|
||||
|
||||
class DocumentLoadEventDelayer {
|
||||
AK_MAKE_NONMOVABLE(DocumentLoadEventDelayer);
|
||||
AK_MAKE_NONCOPYABLE(DocumentLoadEventDelayer);
|
||||
|
||||
public:
|
||||
explicit DocumentLoadEventDelayer(Document&);
|
||||
~DocumentLoadEventDelayer();
|
||||
|
||||
private:
|
||||
NonnullRefPtr<Document> m_document;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue