1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:47:34 +00:00

LibWeb: Change Resource's m_encoding to Optional<String>

This modifies the Resource class to use Optional<String> for the
encoding. If the encoding is unknown, the Optional will not have a
value (instead of using the null state of the String class). It also
implements a has_encoding() instance method and modifies the callers
of Resource::encoding() to use the new API.
This commit is contained in:
Max Wipfli 2021-05-12 10:21:00 +02:00 committed by Andreas Kling
parent ce6d6706a6
commit a7681dbeea
3 changed files with 11 additions and 7 deletions

View file

@ -248,11 +248,15 @@ void FrameLoader::resource_did_load()
} }
m_redirects_count = 0; m_redirects_count = 0;
dbgln("I believe this content has MIME type '{}', encoding '{}'", resource()->mime_type(), resource()->encoding()); if (resource()->has_encoding()) {
dbgln("This content has MIME type '{}', encoding '{}'", resource()->mime_type(), resource()->encoding().value());
} else {
dbgln("This content has MIME type '{}', encoding unknown (defaulting to 'utf-8')", resource()->mime_type());
}
auto document = DOM::Document::create(); auto document = DOM::Document::create();
document->set_url(url); document->set_url(url);
document->set_encoding(resource()->encoding()); document->set_encoding(resource()->encoding().value_or("utf-8"));
document->set_content_type(resource()->mime_type()); document->set_content_type(resource()->mime_type());
frame().set_document(document); frame().set_document(document);

View file

@ -85,14 +85,12 @@ void Resource::did_load(Badge<ResourceLoader>, ReadonlyBytes data, const HashMap
m_mime_type = Core::guess_mime_type_based_on_filename(url().path()); m_mime_type = Core::guess_mime_type_based_on_filename(url().path());
} }
m_encoding = {};
if (content_type.has_value()) { if (content_type.has_value()) {
auto encoding = encoding_from_content_type(content_type.value()); auto encoding = encoding_from_content_type(content_type.value());
if (encoding.has_value()) { if (encoding.has_value()) {
dbgln_if(RESOURCE_DEBUG, "Set encoding '{}' from Content-Type", encoding.has_value()); dbgln_if(RESOURCE_DEBUG, "Set encoding '{}' from Content-Type", encoding.has_value());
m_encoding = encoding.value(); m_encoding = encoding.value();
} else {
// FIXME: This doesn't seem nice.
m_encoding = "utf-8";
} }
} }

View file

@ -52,7 +52,8 @@ public:
void register_client(Badge<ResourceClient>, ResourceClient&); void register_client(Badge<ResourceClient>, ResourceClient&);
void unregister_client(Badge<ResourceClient>, ResourceClient&); void unregister_client(Badge<ResourceClient>, ResourceClient&);
const String& encoding() const { return m_encoding; } bool has_encoding() const { return m_encoding.has_value(); }
const Optional<String>& encoding() const { return m_encoding; }
const String& mime_type() const { return m_mime_type; } const String& mime_type() const { return m_mime_type; }
void for_each_client(Function<void(ResourceClient&)>); void for_each_client(Function<void(ResourceClient&)>);
@ -70,7 +71,8 @@ private:
bool m_loaded { false }; bool m_loaded { false };
bool m_failed { false }; bool m_failed { false };
String m_error; String m_error;
String m_encoding; Optional<String> m_encoding;
String m_mime_type; String m_mime_type;
HashMap<String, String, CaseInsensitiveStringTraits> m_response_headers; HashMap<String, String, CaseInsensitiveStringTraits> m_response_headers;
Optional<u32> m_status_code; Optional<u32> m_status_code;