diff options
author | Andreas Kling <kling@serenityos.org> | 2022-12-09 18:48:25 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-12-09 18:51:03 +0000 |
commit | fbf9cb338728bdae160655a1e1527f5ce0e1871a (patch) | |
tree | 6cc659f9f431338e9a8977b341f98fd1f85a7c22 /Userland/Libraries/LibWeb/HTML | |
parent | 23b07b3408728f5ea184c6fa928729e11b0c4957 (diff) | |
download | serenity-fbf9cb338728bdae160655a1e1527f5ce0e1871a.zip |
WebContent+LibWeb+LibJS: Simplify injection of JS console globals
Instead of creating a new global object and proxying everything through
it, we now evaluate console inputs inside a `with` environment.
This seems to match the behavior of WebKit and Gecko in my basic
testing, and removes the ConsoleGlobalObject which has been a source of
confusion and invalid downcasts.
The globals now live in a class called ConsoleGlobalObjectExtensions
(renamed from ConsoleGlobalObject since it's no longer a global object).
To make this possible, I had to add a way to override the initial
lexical environment when calling JS::Interpreter::run(). This is plumbed
via Web::HTML::ClassicScript::run().
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML')
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp | 4 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.h | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp index 2fdc908821..d4dedf47a5 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp @@ -71,7 +71,7 @@ JS::NonnullGCPtr<ClassicScript> ClassicScript::create(DeprecatedString filename, } // https://html.spec.whatwg.org/multipage/webappapis.html#run-a-classic-script -JS::Completion ClassicScript::run(RethrowErrors rethrow_errors) +JS::Completion ClassicScript::run(RethrowErrors rethrow_errors, JS::GCPtr<JS::Environment> lexical_environment_override) { auto& vm = settings_object().realm().vm(); @@ -97,7 +97,7 @@ JS::Completion ClassicScript::run(RethrowErrors rethrow_errors) // 6. Otherwise, set evaluationStatus to ScriptEvaluation(script's record). auto interpreter = JS::Interpreter::create_with_existing_realm(m_script_record->realm()); - evaluation_status = interpreter->run(*m_script_record); + evaluation_status = interpreter->run(*m_script_record, lexical_environment_override); // FIXME: If ScriptEvaluation does not complete because the user agent has aborted the running script, leave evaluationStatus as null. diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.h b/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.h index 9f1ef9c2ab..3d602f1d66 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.h +++ b/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.h @@ -32,7 +32,7 @@ public: No, Yes, }; - JS::Completion run(RethrowErrors = RethrowErrors::No); + JS::Completion run(RethrowErrors = RethrowErrors::No, JS::GCPtr<JS::Environment> lexical_environment_override = {}); MutedErrors muted_errors() const { return m_muted_errors; } |