Reland "alloy: Allow --remote-debugging-port=0 (fixes #3619)"

This relands commit 70471059cf
with necessary changes.
This commit is contained in:
Marshall Greenblatt
2024-02-15 15:39:15 -05:00
parent bfed26c5fc
commit 706193f3d9
2 changed files with 25 additions and 20 deletions

View File

@ -70,28 +70,29 @@ class TCPServerSocketFactory : public content::DevToolsSocketFactory {
std::unique_ptr<content::DevToolsSocketFactory> 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
// <cache-dir>/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<uint16_t>(temp_port);
if (base::StringToInt(port_str, &port) &&
(0 == port || (port >= 1024 && port < 65535))) {
return std::unique_ptr<content::DevToolsSocketFactory>(
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<content::DevToolsSocketFactory>(
new TCPServerSocketFactory("127.0.0.1", port));
return nullptr;
}
} // namespace