Jelajahi Sumber

LibHTML: Fire the file:// load completion callback asynchronously

This makes it consistent with how http:// callbacks are fired.
It would probably be fine to have file:// be synchronous, but at the
same time it's nice to have consistency.
Andreas Kling 5 tahun lalu
induk
melakukan
a1c8c754eb

+ 5 - 3
Libraries/LibHTML/ResourceLoader.cpp

@@ -8,7 +8,7 @@ ResourceLoader& ResourceLoader::the()
 {
     static ResourceLoader* s_the;
     if (!s_the)
-        s_the = new ResourceLoader;
+        s_the = &ResourceLoader::construct().leak_ref();
     return *s_the;
 }
 
@@ -18,13 +18,15 @@ void ResourceLoader::load(const URL& url, Function<void(const ByteBuffer&)> call
         auto f = CFile::construct();
         f->set_filename(url.path());
         if (!f->open(CIODevice::OpenMode::ReadOnly)) {
-            dbg() << "HtmlView::load: Error: " << f->error_string();
+            dbg() << "ResourceLoader::load: Error: " << f->error_string();
             callback({});
             return;
         }
 
         auto data = f->read_all();
-        callback(data);
+        deferred_invoke([data = move(data), callback = move(callback)](auto&) {
+            callback(data);
+        });
         return;
     }
 

+ 3 - 1
Libraries/LibHTML/ResourceLoader.h

@@ -2,8 +2,10 @@
 
 #include <AK/Function.h>
 #include <AK/URL.h>
+#include <LibCore/CObject.h>
 
-class ResourceLoader {
+class ResourceLoader : public CObject {
+    C_OBJECT(ResourceLoader)
 public:
     static ResourceLoader& the();