Serenity Operating System
1/*
2 * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <LibJS/Script.h>
10#include <LibWeb/Forward.h>
11#include <LibWeb/HTML/Scripting/Script.h>
12
13namespace Web::HTML {
14
15// https://html.spec.whatwg.org/multipage/webappapis.html#classic-script
16class ClassicScript final : public Script {
17 JS_CELL(ClassicScript, Script);
18
19public:
20 virtual ~ClassicScript() override;
21
22 enum class MutedErrors {
23 No,
24 Yes,
25 };
26 static JS::NonnullGCPtr<ClassicScript> create(DeprecatedString filename, StringView source, EnvironmentSettingsObject&, AK::URL base_url, size_t source_line_number = 1, MutedErrors = MutedErrors::No);
27
28 JS::Script* script_record() { return m_script_record; }
29 JS::Script const* script_record() const { return m_script_record; }
30
31 enum class RethrowErrors {
32 No,
33 Yes,
34 };
35 JS::Completion run(RethrowErrors = RethrowErrors::No, JS::GCPtr<JS::Environment> lexical_environment_override = {});
36
37 MutedErrors muted_errors() const { return m_muted_errors; }
38
39private:
40 ClassicScript(AK::URL base_url, DeprecatedString filename, EnvironmentSettingsObject& environment_settings_object);
41
42 virtual void visit_edges(Cell::Visitor&) override;
43
44 JS::GCPtr<JS::Script> m_script_record;
45 MutedErrors m_muted_errors { MutedErrors::No };
46 Optional<JS::ParserError> m_error_to_rethrow;
47};
48
49}