Ver código fonte

LibWeb: Use the sandboxed ImageDecoder when creating image documents

An image document is the synthetic DOM::Document we create to wrap an
image when you open the URL of an image directly in a web view.
The path that creates these documents will now also call out to the
separate ImageDecoder process for the actual decoding work.
Andreas Kling 3 anos atrás
pai
commit
25a8bd3a8a
1 arquivos alterados com 7 adições e 5 exclusões
  1. 7 5
      Userland/Libraries/LibWeb/Loader/FrameLoader.cpp

+ 7 - 5
Userland/Libraries/LibWeb/Loader/FrameLoader.cpp

@@ -17,6 +17,7 @@
 #include <LibWeb/HTML/BrowsingContext.h>
 #include <LibWeb/HTML/HTMLIFrameElement.h>
 #include <LibWeb/HTML/Parser/HTMLParser.h>
+#include <LibWeb/ImageDecoding.h>
 #include <LibWeb/Loader/FrameLoader.h>
 #include <LibWeb/Loader/ResourceLoader.h>
 #include <LibWeb/Page/Page.h>
@@ -72,13 +73,14 @@ static bool build_text_document(DOM::Document& document, const ByteBuffer& data)
     return true;
 }
 
-static bool build_image_document(DOM::Document& document, const ByteBuffer& data)
+static bool build_image_document(DOM::Document& document, ByteBuffer const& data)
 {
-    auto image_decoder = Gfx::ImageDecoder::try_create(data.bytes());
-    if (!image_decoder)
+    NonnullRefPtr decoder = image_decoder_client();
+    auto image = decoder->decode_image(data);
+    if (!image.has_value() || image->frames.is_empty())
         return false;
-    auto frame = image_decoder->frame(0);
-    auto bitmap = frame.image;
+    auto const& frame = image->frames[0];
+    auto const& bitmap = frame.bitmap;
     if (!bitmap)
         return false;