LibWeb: Support loading data: URLs transparently via ResourceLoader

This is pretty darn cool! :^)
This commit is contained in:
Andreas Kling 2020-04-26 22:52:30 +02:00
parent 50c1eca9d4
commit e3232eb25b
Notes: sideshowbarker 2024-07-19 07:15:34 +09:00
2 changed files with 24 additions and 0 deletions

View File

@ -0,0 +1,8 @@
<html>
<head></head>
<body>
<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7">
<br>
<img src="data:image/png;base64,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">
</body>
</html>

View File

@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <AK/Base64.h>
#include <AK/SharedBuffer.h>
#include <LibCore/EventLoop.h>
#include <LibCore/File.h>
@ -72,6 +73,21 @@ void ResourceLoader::load(const URL& url, Function<void(const ByteBuffer&)> succ
return;
}
if (url.protocol() == "data") {
dbg() << "ResourceLoader loading a data URL with mime-type: '" << url.data_mime_type() << "', base64=" << url.data_payload_is_base64() << ", payload='" << url.data_payload() << "'";
ByteBuffer data;
if (url.data_payload_is_base64())
data = decode_base64(url.data_payload());
else
data = url.data_payload().to_byte_buffer();
deferred_invoke([data = move(data), success_callback = move(success_callback)](auto&) {
success_callback(data);
});
return;
}
if (url.protocol() == "file") {
auto f = Core::File::construct();
f->set_filename(url.path());