mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
LibCore+WebServer+LibWeb: Make MIME type guesser take a StringView
This reverts my previous commit in WebServer and fixes the whole issue in a much better way. Instead of having the MIME type guesser take a URL (which we don't actually have in the WebServer at that point), just take a path as a StringView. Also, make use of the case-insensitive StringView::ends_with() :^)
This commit is contained in:
parent
9c14e2ea5d
commit
5043c4a3e5
Notes:
sideshowbarker
2024-07-19 01:49:19 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/5043c4a3e55
4 changed files with 15 additions and 25 deletions
|
@ -70,30 +70,29 @@ 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 guess_mime_type_based_on_filename(const StringView& path)
|
||||
{
|
||||
String lowercase_url = url.path().to_lowercase();
|
||||
if (lowercase_url.ends_with(".pbm"))
|
||||
if (path.ends_with(".pbm", CaseSensitivity::CaseInsensitive))
|
||||
return "image/x‑portable‑bitmap";
|
||||
if (url.path().ends_with(".pgm"))
|
||||
if (path.ends_with(".pgm", CaseSensitivity::CaseInsensitive))
|
||||
return "image/x‑portable‑graymap";
|
||||
if (url.path().ends_with(".png"))
|
||||
if (path.ends_with(".png", CaseSensitivity::CaseInsensitive))
|
||||
return "image/png";
|
||||
if (lowercase_url.ends_with(".ppm"))
|
||||
if (path.ends_with(".ppm", CaseSensitivity::CaseInsensitive))
|
||||
return "image/x‑portable‑pixmap";
|
||||
if (lowercase_url.ends_with(".gif"))
|
||||
if (path.ends_with(".gif", CaseSensitivity::CaseInsensitive))
|
||||
return "image/gif";
|
||||
if (lowercase_url.ends_with(".bmp"))
|
||||
if (path.ends_with(".bmp", CaseSensitivity::CaseInsensitive))
|
||||
return "image/bmp";
|
||||
if (lowercase_url.ends_with(".jpg") || lowercase_url.ends_with(".jpeg"))
|
||||
if (path.ends_with(".jpg", CaseSensitivity::CaseInsensitive) || path.ends_with(".jpeg", CaseSensitivity::CaseInsensitive))
|
||||
return "image/jpeg";
|
||||
if (lowercase_url.ends_with(".svg"))
|
||||
if (path.ends_with(".svg", CaseSensitivity::CaseInsensitive))
|
||||
return "image/svg+xml";
|
||||
if (lowercase_url.ends_with(".md"))
|
||||
if (path.ends_with(".md", CaseSensitivity::CaseInsensitive))
|
||||
return "text/markdown";
|
||||
if (lowercase_url.ends_with(".html") || lowercase_url.ends_with(".htm"))
|
||||
if (path.ends_with(".html", CaseSensitivity::CaseInsensitive) || path.ends_with(".htm", CaseSensitivity::CaseInsensitive))
|
||||
return "text/html";
|
||||
if (lowercase_url.ends_with("/"))
|
||||
if (path.ends_with("/", CaseSensitivity::CaseInsensitive))
|
||||
return "text/html";
|
||||
return "text/plain";
|
||||
}
|
||||
|
|
|
@ -61,6 +61,6 @@ private:
|
|||
HashMap<String, ByteBuffer> m_data;
|
||||
};
|
||||
|
||||
String guess_mime_type_based_on_filename(const URL&);
|
||||
String guess_mime_type_based_on_filename(const StringView&);
|
||||
|
||||
}
|
||||
|
|
|
@ -109,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 = Core::guess_mime_type_based_on_filename(url());
|
||||
m_mime_type = Core::guess_mime_type_based_on_filename(url().path());
|
||||
}
|
||||
|
||||
for_each_client([](auto& client) {
|
||||
|
|
|
@ -96,8 +96,6 @@ void Client::handle_request(ByteBuffer raw_request)
|
|||
path_builder.append(requested_path);
|
||||
auto real_path = path_builder.to_string();
|
||||
|
||||
String forced_mime_type;
|
||||
|
||||
if (Core::File::is_directory(real_path)) {
|
||||
|
||||
if (!request.resource().ends_with("/")) {
|
||||
|
@ -119,7 +117,6 @@ void Client::handle_request(ByteBuffer raw_request)
|
|||
return;
|
||||
}
|
||||
real_path = index_html_path;
|
||||
forced_mime_type = "text/html";
|
||||
}
|
||||
|
||||
auto file = Core::File::construct(real_path);
|
||||
|
@ -128,13 +125,7 @@ void Client::handle_request(ByteBuffer raw_request)
|
|||
return;
|
||||
}
|
||||
|
||||
String mime_type;
|
||||
if (!forced_mime_type.is_null())
|
||||
mime_type = forced_mime_type;
|
||||
else
|
||||
mime_type = Core::guess_mime_type_based_on_filename(request.url());
|
||||
|
||||
send_response(file->read_all(), request, mime_type);
|
||||
send_response(file->read_all(), request, Core::guess_mime_type_based_on_filename(real_path));
|
||||
}
|
||||
|
||||
void Client::send_response(StringView response, const HTTP::HttpRequest& request, const String& content_type)
|
||||
|
|
Loading…
Reference in a new issue