1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-24 05:55:06 +00:00

LibWeb: Start working on spec-aligned HTML scripting semantics

This patch adds HTML::Script and HTML::ClassicScript (subclass of the
former.)
This commit is contained in:
Andreas Kling 2021-09-09 18:03:01 +02:00
parent 612a23d6fc
commit 0839442da5
5 changed files with 105 additions and 0 deletions

View file

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

View file

@ -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()
{
}
}

View file

@ -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;
};
}

View file

@ -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()
{
}
}

View file

@ -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;
};
}