summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-04-03 11:43:08 +0200
committerAndreas Kling <kling@serenityos.org>2021-04-03 11:57:32 +0200
commitdcfc357860a365c190599fca6891d845b61e6a5b (patch)
tree804b1b60515b50b67acc4f77dfa760fb6c1d964a /Userland/Libraries
parent8e3e3a71cb20ba4a743cd4ad2dcec49a31f35733 (diff)
downloadserenity-dcfc357860a365c190599fca6891d845b61e6a5b.zip
LibWeb: Add a FrameHostElement for frame/iframe common functionality
A FrameHostElement is an HTML element (<frame> or <iframe>) that may have a content frame that participates in the frame tree. This basically just moves code from <iframe> to a separate base class so we can share it with <frame> once we implement <frame>.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibWeb/CMakeLists.txt1
-rw-r--r--Userland/Libraries/LibWeb/HTML/FrameHostElement.cpp66
-rw-r--r--Userland/Libraries/LibWeb/HTML/FrameHostElement.h52
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp35
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.h18
5 files changed, 124 insertions, 48 deletions
diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt
index 4f57a2c46b..fc6adc0552 100644
--- a/Userland/Libraries/LibWeb/CMakeLists.txt
+++ b/Userland/Libraries/LibWeb/CMakeLists.txt
@@ -64,6 +64,7 @@ set(SOURCES
HTML/AttributeNames.cpp
HTML/CanvasRenderingContext2D.cpp
HTML/EventNames.cpp
+ HTML/FrameHostElement.cpp
HTML/GlobalEventHandlers.cpp
HTML/HTMLAnchorElement.cpp
HTML/HTMLAreaElement.cpp
diff --git a/Userland/Libraries/LibWeb/HTML/FrameHostElement.cpp b/Userland/Libraries/LibWeb/HTML/FrameHostElement.cpp
new file mode 100644
index 0000000000..b4d8a55c17
--- /dev/null
+++ b/Userland/Libraries/LibWeb/HTML/FrameHostElement.cpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <LibWeb/DOM/Document.h>
+#include <LibWeb/DOM/Event.h>
+#include <LibWeb/HTML/FrameHostElement.h>
+#include <LibWeb/Origin.h>
+#include <LibWeb/Page/Frame.h>
+
+namespace Web::HTML {
+
+FrameHostElement::FrameHostElement(DOM::Document& document, QualifiedName qualified_name)
+ : HTMLElement(document, move(qualified_name))
+{
+}
+
+FrameHostElement::~FrameHostElement()
+{
+}
+
+Origin FrameHostElement::content_origin() const
+{
+ if (!m_content_frame || !m_content_frame->document())
+ return {};
+ return m_content_frame->document()->origin();
+}
+
+bool FrameHostElement::may_access_from_origin(const Origin& origin) const
+{
+ return origin.is_same(content_origin());
+}
+
+const DOM::Document* FrameHostElement::content_document() const
+{
+ return m_content_frame ? m_content_frame->document() : nullptr;
+}
+
+void FrameHostElement::content_frame_did_load(Badge<FrameLoader>)
+{
+ dispatch_event(DOM::Event::create(EventNames::load));
+}
+
+}
diff --git a/Userland/Libraries/LibWeb/HTML/FrameHostElement.h b/Userland/Libraries/LibWeb/HTML/FrameHostElement.h
new file mode 100644
index 0000000000..24b6675563
--- /dev/null
+++ b/Userland/Libraries/LibWeb/HTML/FrameHostElement.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <LibWeb/HTML/HTMLElement.h>
+
+namespace Web::HTML {
+
+class FrameHostElement : public HTMLElement {
+public:
+ FrameHostElement(DOM::Document&, QualifiedName);
+ virtual ~FrameHostElement() override;
+
+ Frame* content_frame() { return m_content_frame; }
+ const Frame* content_frame() const { return m_content_frame; }
+
+ const DOM::Document* content_document() const;
+
+ Origin content_origin() const;
+ bool may_access_from_origin(const Origin&) const;
+
+ void content_frame_did_load(Badge<FrameLoader>);
+
+protected:
+ RefPtr<Frame> m_content_frame;
+};
+
+}
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
index 06b942e076..c183fa6074 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -24,25 +24,16 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <LibWeb/Bindings/WindowObject.h>
#include <LibWeb/DOM/Document.h>
-#include <LibWeb/DOM/Event.h>
-#include <LibWeb/DOM/Window.h>
-#include <LibWeb/Dump.h>
-#include <LibWeb/HTML/EventNames.h>
-#include <LibWeb/HTML/HTMLFormElement.h>
#include <LibWeb/HTML/HTMLIFrameElement.h>
-#include <LibWeb/HTML/Parser/HTMLDocumentParser.h>
-#include <LibWeb/InProcessWebView.h>
#include <LibWeb/Layout/FrameBox.h>
-#include <LibWeb/Loader/ResourceLoader.h>
#include <LibWeb/Origin.h>
#include <LibWeb/Page/Frame.h>
namespace Web::HTML {
HTMLIFrameElement::HTMLIFrameElement(DOM::Document& document, QualifiedName qualified_name)
- : HTMLElement(document, move(qualified_name))
+ : FrameHostElement(document, move(qualified_name))
{
VERIFY(document.frame());
m_content_frame = Frame::create_subframe(*this, document.frame()->main_frame());
@@ -81,26 +72,4 @@ void HTMLIFrameElement::load_src(const String& value)
m_content_frame->loader().load(url, FrameLoader::Type::IFrame);
}
-Origin HTMLIFrameElement::content_origin() const
-{
- if (!m_content_frame || !m_content_frame->document())
- return {};
- return m_content_frame->document()->origin();
-}
-
-bool HTMLIFrameElement::may_access_from_origin(const Origin& origin) const
-{
- return origin.is_same(content_origin());
-}
-
-const DOM::Document* HTMLIFrameElement::content_document() const
-{
- return m_content_frame ? m_content_frame->document() : nullptr;
-}
-
-void HTMLIFrameElement::content_frame_did_load(Badge<FrameLoader>)
-{
- dispatch_event(DOM::Event::create(EventNames::load));
-}
-
}
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.h b/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.h
index e3cd3bb882..1039c7d0ed 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,11 +26,11 @@
#pragma once
-#include <LibWeb/HTML/HTMLElement.h>
+#include <LibWeb/HTML/FrameHostElement.h>
namespace Web::HTML {
-class HTMLIFrameElement final : public HTMLElement {
+class HTMLIFrameElement final : public FrameHostElement {
public:
using WrapperType = Bindings::HTMLIFrameElementWrapper;
@@ -39,22 +39,10 @@ public:
virtual RefPtr<Layout::Node> create_layout_node() override;
- Frame* content_frame() { return m_content_frame; }
- const Frame* content_frame() const { return m_content_frame; }
-
- const DOM::Document* content_document() const;
-
- Origin content_origin() const;
- bool may_access_from_origin(const Origin&) const;
-
- void content_frame_did_load(Badge<FrameLoader>);
-
private:
virtual void parse_attribute(const FlyString& name, const String& value) override;
void load_src(const String&);
-
- RefPtr<Frame> m_content_frame;
};
}