summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-04-03 16:45:14 +0200
committerAndreas Kling <kling@serenityos.org>2021-04-03 16:54:33 +0200
commit5c67b2cb8fed0a98aa9781d1a272ff890409ff43 (patch)
treee9bf0f772a9db60b2f33e4442d6eacf569659313 /Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
parent57ead17d54b73cbb0b113ad2980f71fd77637601 (diff)
downloadserenity-5c67b2cb8fed0a98aa9781d1a272ff890409ff43.zip
LibWeb: Defer creation of subframes until host element is connected
This allows parsing of document fragments with "<iframe>" to construct the iframe element without requiring that the fragment have a frame.
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp')
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
index c183fa6074..7d8cce2ef6 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
@@ -35,8 +35,6 @@ namespace Web::HTML {
HTMLIFrameElement::HTMLIFrameElement(DOM::Document& document, QualifiedName qualified_name)
: FrameHostElement(document, move(qualified_name))
{
- VERIFY(document.frame());
- m_content_frame = Frame::create_subframe(*this, document.frame()->main_frame());
}
HTMLIFrameElement::~HTMLIFrameElement()
@@ -56,8 +54,18 @@ void HTMLIFrameElement::parse_attribute(const FlyString& name, const String& val
load_src(value);
}
+void HTMLIFrameElement::inserted_into(Node& parent)
+{
+ FrameHostElement::inserted_into(parent);
+ if (is_connected())
+ load_src(attribute(HTML::AttributeNames::src));
+}
+
void HTMLIFrameElement::load_src(const String& value)
{
+ if (!m_content_frame)
+ return;
+
auto url = document().complete_url(value);
if (!url.is_valid()) {
dbgln("iframe failed to load URL: Invalid URL: {}", value);