Quellcode durchsuchen

LibWeb: Start working on spec-aligned HTML scripting semantics

This patch adds HTML::Script and HTML::ClassicScript (subclass of the
former.)
Andreas Kling vor 3 Jahren
Ursprung
Commit
0839442da5

+ 2 - 0
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -157,6 +157,8 @@ set(SOURCES
     HTML/Parser/HTMLTokenizer.cpp
     HTML/Parser/ListOfActiveFormattingElements.cpp
     HTML/Parser/StackOfOpenElements.cpp
+    HTML/Scripting/ClassicScript.cpp
+    HTML/Scripting/Script.cpp
     HTML/SubmitEvent.cpp
     HTML/SyntaxHighlighter/SyntaxHighlighter.cpp
     HTML/TagNames.cpp

+ 26 - 0
Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp

@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/HTML/Scripting/ClassicScript.h>
+
+namespace Web::HTML {
+
+NonnullRefPtr<ClassicScript> ClassicScript::create(URL base_url, RefPtr<JS::Script> script_record)
+{
+    return adopt_ref(*new ClassicScript(move(base_url), move(script_record)));
+}
+
+ClassicScript::ClassicScript(URL base_url, RefPtr<JS::Script> script_record)
+    : Script(move(base_url))
+    , m_script_record(move(script_record))
+{
+}
+
+ClassicScript::~ClassicScript()
+{
+}
+
+}

+ 29 - 0
Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.h

@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibJS/Script.h>
+#include <LibWeb/HTML/Scripting/Script.h>
+
+namespace Web::HTML {
+
+// https://html.spec.whatwg.org/multipage/webappapis.html#classic-script
+class ClassicScript final : public Script {
+public:
+    ~ClassicScript();
+    static NonnullRefPtr<ClassicScript> create(URL base_url, RefPtr<JS::Script>);
+
+    JS::Script* script_record() { return m_script_record; }
+    JS::Script const* script_record() const { return m_script_record; }
+
+private:
+    explicit ClassicScript(URL base_url, RefPtr<JS::Script>);
+
+    RefPtr<JS::Script> m_script_record;
+};
+
+}

+ 20 - 0
Userland/Libraries/LibWeb/HTML/Scripting/Script.cpp

@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/HTML/Scripting/Script.h>
+
+namespace Web::HTML {
+
+Script::Script(URL base_url)
+    : m_base_url(move(base_url))
+{
+}
+
+Script::~Script()
+{
+}
+
+}

+ 28 - 0
Userland/Libraries/LibWeb/HTML/Scripting/Script.h

@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/RefCounted.h>
+#include <AK/URL.h>
+
+namespace Web::HTML {
+
+// https://html.spec.whatwg.org/multipage/webappapis.html#concept-script
+class Script : public RefCounted<Script> {
+public:
+    virtual ~Script();
+
+    URL const& base_url() const { return m_base_url; }
+
+protected:
+    explicit Script(URL base_url);
+
+private:
+    URL m_base_url;
+};
+
+}