diff --git a/src/webdrop_bridge/main.py b/src/webdrop_bridge/main.py index 31e33fc..1194d69 100644 --- a/src/webdrop_bridge/main.py +++ b/src/webdrop_bridge/main.py @@ -7,6 +7,10 @@ import sys # This ensures CSS media queries (hover: hover) evaluate correctly for desktop applications os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--touch-events=disabled" +# Enable Qt WebEngine Remote Debugging Protocol (Chromium Developer Tools) +# Allows debugging via browser DevTools at http://localhost:9222 or edge://inspect +os.environ["QTWEBENGINE_REMOTE_DEBUGGING"] = "9222" + from PySide6.QtWidgets import QApplication from webdrop_bridge.config import Config, ConfigurationError diff --git a/src/webdrop_bridge/ui/developer_tools.py b/src/webdrop_bridge/ui/developer_tools.py index c44730d..30cfe61 100644 --- a/src/webdrop_bridge/ui/developer_tools.py +++ b/src/webdrop_bridge/ui/developer_tools.py @@ -1,13 +1,9 @@ -"""Developer Tools for WebDrop Bridge. - -Uses Qt WebEngine's built-in inspector wiring instead of the remote debugging -HTTP endpoint. This avoids localhost/port timing issues that can differ between -development runs and frozen MSI installations. -""" +"""Developer Tools for WebDrop Bridge - using Chromium Remote Debugging Protocol.""" import logging from typing import Any +from PySide6.QtCore import QTimer, QUrl from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtWidgets import QVBoxLayout, QWidget @@ -19,7 +15,8 @@ __all__ = ["DeveloperToolsWidget"] class DeveloperToolsWidget(QWidget): """Embedded Chromium Developer Tools Inspector. - Attaches a dedicated DevTools page directly to the inspected web page. + Loads the Chromium DevTools UI using the Remote Debugging Protocol + running on localhost:9222. Features: - Real HTML/CSS Inspector with live editing @@ -48,7 +45,10 @@ class DeveloperToolsWidget(QWidget): self.dev_tools_view = QWebEngineView() layout.addWidget(self.dev_tools_view) - # Directly attach DevTools to the existing page. - # This is more robust than relying on the remote debugging HTTP endpoint. - self.dev_tools_view.page().setInspectedPage(self.web_view.page()) - logger.info("Developer Tools attached via QWebEnginePage.setInspectedPage") + # Load DevTools after delay to let debugger start + QTimer.singleShot(500, self._load_devtools) + + def _load_devtools(self) -> None: + """Load the DevTools targets page from localhost:9222.""" + logger.info("Loading DevTools from http://localhost:9222") + self.dev_tools_view.load(QUrl("http://localhost:9222")) diff --git a/tests/unit/test_developer_tools.py b/tests/unit/test_developer_tools.py deleted file mode 100644 index 09f0c58..0000000 --- a/tests/unit/test_developer_tools.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Unit tests for DeveloperToolsWidget.""" - -from PySide6.QtWebEngineWidgets import QWebEngineView - -from webdrop_bridge.ui.developer_tools import DeveloperToolsWidget - - -def test_developer_tools_widget_attaches_inspected_page(qtbot): - """DeveloperToolsWidget should inspect the provided web view page directly.""" - web_view = QWebEngineView() - qtbot.addWidget(web_view) - - dev_tools = DeveloperToolsWidget(web_view) - qtbot.addWidget(dev_tools) - - assert dev_tools.dev_tools_view.page().inspectedPage() is web_view.page()