summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Wipfli <mail@maxwipfli.ch>2021-05-12 10:32:41 +0200
committerAndreas Kling <kling@serenityos.org>2021-05-18 21:02:07 +0200
commit67a9ebc8176e6dff4c3af3bc26ef3de829d87286 (patch)
tree7d1aee3464e2d5c67a2027878abc45be80e77dfa
parenta7681dbeea882456915e01a12095429460a0df30 (diff)
downloadserenity-67a9ebc8176e6dff4c3af3bc26ef3de829d87286.zip
LibWeb: Change Document's m_encoding to Optional<String>
This modifies the Document class to use Optional<String> for the encoding. If the encoding is unknown, the Optional will not have a value. It also implements the has_encoding() and encoding_or_default() instance methods, the latter of which will return "UTF-8" as a fallback if no encoding is present. The usage of Optional<String> instead of the null string is part of an effort to explicitly indicate that a string could not have a value. This also modifies the former callers of encoding() to use encoding_or_default(). Furthermore, the encoding will now only be set if it is actually known, rather than just guessed by earlier code.
-rw-r--r--Userland/Libraries/LibWeb/DOM/Document.h14
-rw-r--r--Userland/Libraries/LibWeb/Loader/FrameLoader.cpp6
2 files changed, 11 insertions, 9 deletions
diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h
index 43195032d7..98b73fe919 100644
--- a/Userland/Libraries/LibWeb/DOM/Document.h
+++ b/Userland/Libraries/LibWeb/DOM/Document.h
@@ -237,13 +237,15 @@ public:
const String& content_type() const { return m_content_type; }
void set_content_type(const String& content_type) { m_content_type = content_type; }
- const String& encoding() const { return m_encoding; }
- void set_encoding(const String& encoding) { m_encoding = encoding; }
+ bool has_encoding() const { return m_encoding.has_value(); }
+ const Optional<String>& encoding() const { return m_encoding; }
+ String encoding_or_default() const { return m_encoding.value_or("UTF-8"); }
+ void set_encoding(const Optional<String>& encoding) { m_encoding = encoding; }
// NOTE: These are intended for the JS bindings
- const String& character_set() const { return encoding(); }
- const String& charset() const { return encoding(); }
- const String& input_encoding() const { return encoding(); }
+ String character_set() const { return encoding_or_default(); }
+ String charset() const { return encoding_or_default(); }
+ String input_encoding() const { return encoding_or_default(); }
bool ready_for_post_load_tasks() const { return m_ready_for_post_load_tasks; }
void set_ready_for_post_load_tasks(bool ready) { m_ready_for_post_load_tasks = ready; }
@@ -327,7 +329,7 @@ private:
String m_ready_state { "loading" };
String m_content_type { "application/xml" };
- String m_encoding { "UTF-8" };
+ Optional<String> m_encoding;
bool m_ready_for_post_load_tasks { false };
diff --git a/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp b/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
index 00c7826f56..adaba8905e 100644
--- a/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
+++ b/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
@@ -113,7 +113,7 @@ bool FrameLoader::parse_document(DOM::Document& document, const ByteBuffer& data
{
auto& mime_type = document.content_type();
if (mime_type == "text/html" || mime_type == "image/svg+xml") {
- HTML::HTMLDocumentParser parser(document, data, document.encoding());
+ HTML::HTMLDocumentParser parser(document, data, document.encoding_or_default());
parser.run(document.url());
return true;
}
@@ -251,12 +251,12 @@ void FrameLoader::resource_did_load()
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());
+ dbgln("This content has MIME type '{}', encoding unknown", resource()->mime_type());
}
auto document = DOM::Document::create();
document->set_url(url);
- document->set_encoding(resource()->encoding().value_or("utf-8"));
+ document->set_encoding(resource()->encoding());
document->set_content_type(resource()->mime_type());
frame().set_document(document);