From 342b787d1c3560e5026d24a17b6acb877ac64e8a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 3 Feb 2021 10:41:07 +0100 Subject: [PATCH] LibWeb: Move main thread JavaScript VM to its own file Instead of being a weird little global function in DOM/Document.cpp, you can now get the main thread JS VM via Bindings::main_thread_vm(). --- .../LibWeb/Bindings/MainThreadVM.cpp | 42 +++++++++++++++++++ .../Libraries/LibWeb/Bindings/MainThreadVM.h | 35 ++++++++++++++++ Userland/Libraries/LibWeb/CMakeLists.txt | 1 + Userland/Libraries/LibWeb/DOM/Document.cpp | 17 ++------ .../Services/WebContent/ClientConnection.cpp | 7 +--- 5 files changed, 83 insertions(+), 19 deletions(-) create mode 100644 Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp create mode 100644 Userland/Libraries/LibWeb/Bindings/MainThreadVM.h diff --git a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp new file mode 100644 index 0000000000..93c02feacf --- /dev/null +++ b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021, Andreas Kling + * 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 +#include + +namespace Web::Bindings { + +JS::VM& main_thread_vm() +{ + static RefPtr vm; + if (!vm) { + vm = JS::VM::create(); + vm->set_should_log_exceptions(true); + } + return *vm; +} + +} diff --git a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h new file mode 100644 index 0000000000..b4a15043ad --- /dev/null +++ b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021, Andreas Kling + * 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 + +namespace Web::Bindings { + +JS::VM& main_thread_vm(); + +} diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 79fe39de24..e61f263f26 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -3,6 +3,7 @@ set(SOURCES Bindings/EventWrapperFactory.cpp Bindings/EventTargetWrapperFactory.cpp Bindings/LocationObject.cpp + Bindings/MainThreadVM.cpp Bindings/NavigatorObject.cpp Bindings/NodeWrapperFactory.cpp Bindings/ScriptExecutionContext.cpp diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 83b8a3a2a1..91b89e4bc5 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2018-2021, Andreas Kling * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -534,21 +534,10 @@ Color Document::visited_link_color() const return page()->palette().visited_link(); } -JS::VM& main_thread_vm(); -JS::VM& main_thread_vm() -{ - static RefPtr vm; - if (!vm) { - vm = JS::VM::create(); - vm->set_should_log_exceptions(true); - } - return *vm; -} - JS::Interpreter& Document::interpreter() { if (!m_interpreter) - m_interpreter = JS::Interpreter::create(main_thread_vm(), *m_window); + m_interpreter = JS::Interpreter::create(Bindings::main_thread_vm(), *m_window); return *m_interpreter; } diff --git a/Userland/Services/WebContent/ClientConnection.cpp b/Userland/Services/WebContent/ClientConnection.cpp index f800161533..28957c8194 100644 --- a/Userland/Services/WebContent/ClientConnection.cpp +++ b/Userland/Services/WebContent/ClientConnection.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -39,10 +40,6 @@ #include #include -namespace Web::DOM { -extern JS::VM& main_thread_vm(); -} - namespace WebContent { static HashMap> s_connections; @@ -197,7 +194,7 @@ void ClientConnection::handle(const Messages::WebContentServer::DebugRequest& me } if (message.request() == "collect-garbage") { - ::Web::DOM::main_thread_vm().heap().collect_garbage(JS::Heap::CollectionType::CollectGarbage, true); + Web::Bindings::main_thread_vm().heap().collect_garbage(JS::Heap::CollectionType::CollectGarbage, true); } if (message.request() == "set-line-box-borders") {