From 552f63a2835e66f3966b093e58c0711da2f23490 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sun, 3 Mar 2024 12:18:06 -0500 Subject: [PATCH] LibWebView: Protect the Inspector against rapid inspection requests This was seen in Browser when hotkey activations were processed twice. If we open the Inspector with a hotkey (F12) and quickly activate that hotkey again, we could try sending a JS command (inspector.loadDOMTree) before the inspector.js file was actually loaded in the WebContent. The window for this bug is larger on Serenity, where loading WebContent is a bit slower than on Linux. So even with the Browser bug fixed, it is pretty easy to hit this window still. --- Userland/Libraries/LibWebView/InspectorClient.cpp | 3 +++ Userland/Libraries/LibWebView/InspectorClient.h | 1 + 2 files changed, 4 insertions(+) diff --git a/Userland/Libraries/LibWebView/InspectorClient.cpp b/Userland/Libraries/LibWebView/InspectorClient.cpp index 928b691218..b1326aed81 100644 --- a/Userland/Libraries/LibWebView/InspectorClient.cpp +++ b/Userland/Libraries/LibWebView/InspectorClient.cpp @@ -118,6 +118,7 @@ InspectorClient::InspectorClient(ViewImplementation& content_web_view, ViewImple m_inspector_web_view.use_native_user_style_sheet(); m_inspector_web_view.on_inspector_loaded = [this]() { + m_inspector_loaded = true; inspect(); m_content_web_view.js_console_request_messages(0); @@ -191,6 +192,8 @@ InspectorClient::~InspectorClient() void InspectorClient::inspect() { + if (!m_inspector_loaded) + return; if (m_dom_tree_loaded) return; diff --git a/Userland/Libraries/LibWebView/InspectorClient.h b/Userland/Libraries/LibWebView/InspectorClient.h index 15289f62e3..1a87b88b10 100644 --- a/Userland/Libraries/LibWebView/InspectorClient.h +++ b/Userland/Libraries/LibWebView/InspectorClient.h @@ -70,6 +70,7 @@ private: Optional m_body_node_id; Optional m_pending_selection; + bool m_inspector_loaded { false }; bool m_dom_tree_loaded { false }; struct ContextMenuData {