소스 검색

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.
Andreas Kling 5 년 전
부모
커밋
06113b4ffe
3개의 변경된 파일22개의 추가작업 그리고 1개의 파일을 삭제
  1. 9 0
      Applications/Browser/main.cpp
  2. 7 1
      Libraries/LibHTML/ResourceLoader.cpp
  3. 6 0
      Libraries/LibHTML/ResourceLoader.h

+ 9 - 0
Applications/Browser/main.cpp

@@ -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");

+ 7 - 1
Libraries/LibHTML/ResourceLoader.cpp

@@ -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();

+ 6 - 0
Libraries/LibHTML/ResourceLoader.h

@@ -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 };
 };