LibCore+LibWeb: Move guess-mimetype-based-on-filename logic to LibCore

This could be useful in more places.
This commit is contained in:
Andreas Kling 2020-07-27 19:49:43 +02:00
parent e3437414f0
commit 78518d230c
3 changed files with 30 additions and 27 deletions

View file

@ -70,4 +70,30 @@ void MimeData::set_text(const String& text)
set_data("text/plain", text.to_byte_buffer());
}
String guess_mime_type_based_on_filename(const URL& url)
{
String lowercase_url = url.path().to_lowercase();
if (lowercase_url.ends_with(".pbm"))
return "image/xportablebitmap";
if (url.path().ends_with(".pgm"))
return "image/xportablegraymap";
if (url.path().ends_with(".png"))
return "image/png";
if (lowercase_url.ends_with(".ppm"))
return "image/xportablepixmap";
if (lowercase_url.ends_with(".gif"))
return "image/gif";
if (lowercase_url.ends_with(".bmp"))
return "image/bmp";
if (lowercase_url.ends_with(".jpg") || lowercase_url.ends_with(".jpeg"))
return "image/jpeg";
if (lowercase_url.ends_with(".md"))
return "text/markdown";
if (lowercase_url.ends_with(".html") || lowercase_url.ends_with(".htm"))
return "text/html";
if (lowercase_url.ends_with("/"))
return "text/html";
return "text/plain";
}
}

View file

@ -61,4 +61,6 @@ private:
HashMap<String, ByteBuffer> m_data;
};
String guess_mime_type_based_on_filename(const URL&);
}

View file

@ -25,6 +25,7 @@
*/
#include <AK/Function.h>
#include <LibCore/MimeData.h>
#include <LibWeb/HTML/HTMLImageElement.h>
#include <LibWeb/Loader/Resource.h>
@ -83,32 +84,6 @@ String mime_type_from_content_type(const String& content_type)
return content_type;
}
static String guess_mime_type_based_on_filename(const URL& url)
{
String lowercase_url = url.path().to_lowercase();
if (lowercase_url.ends_with(".pbm"))
return "image/xportablebitmap";
if (url.path().ends_with(".pgm"))
return "image/xportablegraymap";
if (url.path().ends_with(".png"))
return "image/png";
if (lowercase_url.ends_with(".ppm"))
return "image/xportablepixmap";
if (lowercase_url.ends_with(".gif"))
return "image/gif";
if (lowercase_url.ends_with(".bmp"))
return "image/bmp";
if (lowercase_url.ends_with(".jpg") || lowercase_url.ends_with(".jpeg"))
return "image/jpeg";
if (lowercase_url.ends_with(".md"))
return "text/markdown";
if (lowercase_url.ends_with(".html") || lowercase_url.ends_with(".htm"))
return "text/html";
if (lowercase_url.ends_with("/"))
return "text/html";
return "text/plain";
}
void Resource::did_load(Badge<ResourceLoader>, const ByteBuffer& data, const HashMap<String, String, CaseInsensitiveStringTraits>& headers)
{
ASSERT(!m_loaded);
@ -134,7 +109,7 @@ void Resource::did_load(Badge<ResourceLoader>, const ByteBuffer& data, const Has
dbg() << "No Content-Type header to go on! Guessing based on filename...";
#endif
m_encoding = "utf-8"; // FIXME: This doesn't seem nice.
m_mime_type = guess_mime_type_based_on_filename(url());
m_mime_type = Core::guess_mime_type_based_on_filename(url());
}
for_each_client([](auto& client) {