LibHTML+Browser: Show the number of pending resource loads

For now this is simply a counter+hook exposed by ResourceLoader and
shown in the Browser status bar.

This is not very nuanced, and it would be nice to expose more info so
we could eventually do something like a progress bar.
This commit is contained in:
Andreas Kling 2019-10-10 22:07:08 +02:00
parent bf5a65d934
commit 06113b4ffe
Notes: sideshowbarker 2024-07-19 11:44:12 +09:00
3 changed files with 22 additions and 1 deletions

View file

@ -18,6 +18,7 @@
#include <LibHTML/Layout/LayoutNode.h>
#include <LibHTML/Parser/CSSParser.h>
#include <LibHTML/Parser/HTMLParser.h>
#include <LibHTML/ResourceLoader.h>
#include <stdio.h>
static const char* home_url = "file:///home/anon/www/welcome.html";
@ -78,6 +79,14 @@ int main(int argc, char** argv)
auto statusbar = GStatusBar::construct(widget);
ResourceLoader::the().on_load_counter_change = [&] {
if (ResourceLoader::the().pending_loads() == 0) {
statusbar->set_text("");
return;
}
statusbar->set_text(String::format("Loading (%d pending resources...)", ResourceLoader::the().pending_loads()));
};
auto menubar = make<GMenuBar>();
auto app_menu = make<GMenu>("Browser");

View file

@ -35,7 +35,13 @@ void ResourceLoader::load(const URL& url, Function<void(const ByteBuffer&)> call
request.set_url(url);
request.set_method(CHttpRequest::Method::GET);
auto job = request.schedule();
job->on_finish = [job, callback = move(callback)](bool success) {
++m_pending_loads;
if (on_load_counter_change)
on_load_counter_change();
job->on_finish = [this, job, callback = move(callback)](bool success) {
--m_pending_loads;
if (on_load_counter_change)
on_load_counter_change();
if (!success) {
dbg() << "HTTP job failed!";
ASSERT_NOT_REACHED();

View file

@ -11,6 +11,12 @@ public:
void load(const URL&, Function<void(const ByteBuffer&)>);
Function<void()> on_load_counter_change;
int pending_loads() const { return m_pending_loads; }
private:
ResourceLoader() {}
int m_pending_loads { 0 };
};