1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:07:34 +00:00

LibWeb: Add Page::has_ongoing_navigation()

Introduce has_ongoing_navigation() that allows to check if resource
state in FrameLoading is pending. This API is going to be used in
upcoming fix for wait_for_navigation_to_complete() in WebDriver.
This commit is contained in:
Aliaksandr Kalenik 2023-05-30 20:24:52 +03:00 committed by Andreas Kling
parent d1d9d7a4f3
commit 31b9729333
5 changed files with 23 additions and 9 deletions

View file

@ -35,6 +35,8 @@ public:
void load_html(StringView, const AK::URL&);
bool is_pending() const { return resource()->is_pending(); }
HTML::BrowsingContext& browsing_context() { return m_browsing_context; }
HTML::BrowsingContext const& browsing_context() const { return m_browsing_context; }

View file

@ -33,8 +33,7 @@ Resource::Resource(Type type, Resource& resource)
: m_request(resource.m_request)
, m_encoded_data(move(resource.m_encoded_data))
, m_type(type)
, m_loaded(resource.m_loaded)
, m_failed(resource.m_failed)
, m_state(resource.m_state)
, m_error(move(resource.m_error))
, m_encoding(move(resource.m_encoding))
, m_mime_type(move(resource.m_mime_type))
@ -89,12 +88,12 @@ static bool is_valid_encoding(StringView encoding)
void Resource::did_load(Badge<ResourceLoader>, ReadonlyBytes data, HashMap<DeprecatedString, DeprecatedString, CaseInsensitiveStringTraits> const& headers, Optional<u32> status_code)
{
VERIFY(!m_loaded);
VERIFY(m_state == State::Pending);
// FIXME: Handle OOM failure.
m_encoded_data = ByteBuffer::copy(data).release_value_but_fixme_should_propagate_errors();
m_response_headers = headers.clone().release_value_but_fixme_should_propagate_errors();
m_status_code = move(status_code);
m_loaded = true;
m_state = State::Loaded;
auto content_type = headers.get("Content-Type");
@ -136,7 +135,7 @@ void Resource::did_fail(Badge<ResourceLoader>, DeprecatedString const& error, Op
{
m_error = error;
m_status_code = move(status_code);
m_failed = true;
m_state = State::Failed;
for_each_client([](auto& client) {
client.resource_did_fail();

View file

@ -37,9 +37,16 @@ public:
Type type() const { return m_type; }
bool is_loaded() const { return m_loaded; }
enum class State {
Pending,
Loaded,
Failed,
};
bool is_pending() const { return m_state == State::Pending; }
bool is_loaded() const { return m_state == State::Loaded; }
bool is_failed() const { return m_state == State::Failed; }
bool is_failed() const { return m_failed; }
DeprecatedString const& error() const { return m_error; }
bool has_encoded_data() const { return !m_encoded_data.is_empty(); }
@ -71,8 +78,7 @@ private:
LoadRequest m_request;
ByteBuffer m_encoded_data;
Type m_type { Type::Generic };
bool m_loaded { false };
bool m_failed { false };
State m_state { State::Pending };
DeprecatedString m_error;
Optional<DeprecatedString> m_encoding;

View file

@ -52,6 +52,11 @@ void Page::load_html(StringView html, const AK::URL& url)
top_level_browsing_context().loader().load_html(html, url);
}
bool Page::has_ongoing_navigation() const
{
return top_level_browsing_context().loader().is_pending();
}
Gfx::Palette Page::palette() const
{
return m_client.palette();

View file

@ -60,6 +60,8 @@ public:
void load_html(StringView, const AK::URL&);
bool has_ongoing_navigation() const;
CSSPixelPoint device_to_css_point(DevicePixelPoint) const;
DevicePixelPoint css_to_device_point(CSSPixelPoint) const;
CSSPixelRect device_to_css_rect(DevicePixelRect) const;