From 3ec54448f51b06e270724dcb25bd011b91298b67 Mon Sep 17 00:00:00 2001 From: Luke Date: Fri, 13 Nov 2020 05:02:15 +0000 Subject: [PATCH] LibWeb: Add contentType attribute to Document --- Libraries/LibWeb/DOM/Document.h | 4 ++++ Libraries/LibWeb/DOM/Document.idl | 2 ++ Libraries/LibWeb/Loader/FrameLoader.cpp | 25 +++++++++++++++---------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Libraries/LibWeb/DOM/Document.h b/Libraries/LibWeb/DOM/Document.h index f6699bb2c6..5aef634466 100644 --- a/Libraries/LibWeb/DOM/Document.h +++ b/Libraries/LibWeb/DOM/Document.h @@ -194,6 +194,9 @@ public: Window& window() { return *m_window; } + const String& content_type() const { return m_content_type; } + void set_content_type(const String& content_type) { m_content_type = content_type; } + private: explicit Document(const URL&); @@ -254,6 +257,7 @@ private: RefPtr m_associated_inert_template_document; String m_ready_state { "loading" }; + String m_content_type; }; } diff --git a/Libraries/LibWeb/DOM/Document.idl b/Libraries/LibWeb/DOM/Document.idl index c03204c53c..6aef107d91 100644 --- a/Libraries/LibWeb/DOM/Document.idl +++ b/Libraries/LibWeb/DOM/Document.idl @@ -1,5 +1,7 @@ interface Document : Node { + readonly attribute DOMString contentType; + Element? getElementById(DOMString id); Element? querySelector(DOMString selectors); ArrayFromVector getElementsByTagName(DOMString tagName); diff --git a/Libraries/LibWeb/Loader/FrameLoader.cpp b/Libraries/LibWeb/Loader/FrameLoader.cpp index 8e11a24331..54cbe6edf7 100644 --- a/Libraries/LibWeb/Loader/FrameLoader.cpp +++ b/Libraries/LibWeb/Loader/FrameLoader.cpp @@ -132,21 +132,26 @@ static RefPtr create_gemini_document(const ByteBuffer& data, cons RefPtr FrameLoader::create_document_from_mime_type(const ByteBuffer& data, const URL& url, const String& mime_type, const String& encoding) { + RefPtr document; + if (mime_type == "text/html" || mime_type == "image/svg+xml") { HTML::HTMLDocumentParser parser(data, encoding); parser.run(url); - return parser.document(); + document = parser.document(); + } else if (mime_type.starts_with("image/")) { + document = create_image_document(data, url); + } else if (mime_type == "text/plain") { + document = create_text_document(data, url); + } else if (mime_type == "text/markdown") { + document = create_markdown_document(data, url); + } else if (mime_type == "text/gemini") { + document = create_gemini_document(data, url); } - if (mime_type.starts_with("image/")) - return create_image_document(data, url); - if (mime_type == "text/plain") - return create_text_document(data, url); - if (mime_type == "text/markdown") - return create_markdown_document(data, url); - if (mime_type == "text/gemini") - return create_gemini_document(data, url); - return nullptr; + if (document) + document->set_content_type(mime_type); + + return document; } bool FrameLoader::load(const LoadRequest& request, Type type)