From 2fa5949d07a6aa984b1b5698e9913034b1911c33 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Thu, 15 Feb 2024 15:39:15 -0500 Subject: [PATCH] alloy: Allow --remote-debugging-port=0 (fixes #3619) --- include/internal/cef_types.h | 12 ++++--- .../devtools/devtools_manager_delegate.cc | 33 ++++++++++--------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/include/internal/cef_types.h b/include/internal/cef_types.h index acc707e9e..0abfe5b6b 100644 --- a/include/internal/cef_types.h +++ b/include/internal/cef_types.h @@ -433,10 +433,14 @@ typedef struct _cef_settings_t { /// /// Set to a value between 1024 and 65535 to enable remote debugging on the /// specified port. Also configurable using the "remote-debugging-port" - /// command-line switch. Remote debugging can be accessed by loading the - /// chrome://inspect page in Google Chrome. Port numbers 9222 and 9229 are - /// discoverable by default. Other port numbers may need to be configured via - /// "Discover network targets" on the Devices tab. + /// command-line switch. Specifying 0 via the command-line switch will result + /// in the selection of an ephemeral port and the port number will be printed + /// as part of the WebSocket endpoint URL to stderr. If a cache directory path + /// is provided the port will also be written to the + /// /DevToolsActivePort file. Remote debugging can be accessed by + /// loading the chrome://inspect page in Google Chrome. Port numbers 9222 and + /// 9229 are discoverable by default. Other port numbers may need to be + /// configured via "Discover network targets" on the Devices tab. /// int remote_debugging_port; diff --git a/libcef/browser/devtools/devtools_manager_delegate.cc b/libcef/browser/devtools/devtools_manager_delegate.cc index 9e6de98c7..ae04915cd 100644 --- a/libcef/browser/devtools/devtools_manager_delegate.cc +++ b/libcef/browser/devtools/devtools_manager_delegate.cc @@ -70,28 +70,29 @@ class TCPServerSocketFactory : public content::DevToolsSocketFactory { std::unique_ptr CreateSocketFactory() { const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); - // See if the user specified a port on the command line. Specifying 0 would - // result in the selection of an ephemeral port but that doesn't make sense - // for CEF where the URL is otherwise undiscoverable. Also, don't allow - // binding of ports between 0 and 1024 exclusive because they're normally - // restricted to root on Posix-based systems. - uint16_t port = 0; + // See if the user specified a port on the command line. Specifying 0 will + // result in the selection of an ephemeral port and the port number will be + // printed as part of the WebSocket endpoint URL to stderr. If a cache + // directory path is provided the port will also be written to the + // /DevToolsActivePort file. + // + // It's not allowed to bind ports between 0 and 1024 exclusive because + // they're normally restricted to root on Posix-based systems. if (command_line.HasSwitch(switches::kRemoteDebuggingPort)) { - int temp_port; + int port = 0; std::string port_str = command_line.GetSwitchValueASCII(switches::kRemoteDebuggingPort); - if (base::StringToInt(port_str, &temp_port) && temp_port >= 1024 && - temp_port < 65535) { - port = static_cast(temp_port); + + if (base::StringToInt(port_str, &port) && + (0 == port || (port >= 1024 && port < 65535))) { + return std::unique_ptr( + new TCPServerSocketFactory("127.0.0.1", port)); } else { - DLOG(WARNING) << "Invalid http debugger port number " << temp_port; + DLOG(WARNING) << "Invalid http debugger port number '" << port_str << "'"; } } - if (port == 0) { - return nullptr; - } - return std::unique_ptr( - new TCPServerSocketFactory("127.0.0.1", port)); + + return nullptr; } } // namespace