OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromecast/browser/devtools/remote_debugging_server.h" | 5 #include "chromecast/browser/devtools/remote_debugging_server.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "net/socket/unix_domain_server_socket_posix.h" | 24 #include "net/socket/unix_domain_server_socket_posix.h" |
25 #endif // defined(OS_ANDROID) | 25 #endif // defined(OS_ANDROID) |
26 | 26 |
27 namespace chromecast { | 27 namespace chromecast { |
28 namespace shell { | 28 namespace shell { |
29 | 29 |
30 namespace { | 30 namespace { |
31 | 31 |
32 const char kFrontEndURL[] = | 32 const char kFrontEndURL[] = |
33 "https://chrome-devtools-frontend.appspot.com/serve_rev/%s/devtools.html"; | 33 "https://chrome-devtools-frontend.appspot.com/serve_rev/%s/devtools.html"; |
34 const int kDefaultRemoteDebuggingPort = 9222; | 34 const uint16 kDefaultRemoteDebuggingPort = 9222; |
35 | 35 |
36 #if defined(OS_ANDROID) | 36 #if defined(OS_ANDROID) |
37 class UnixDomainServerSocketFactory | 37 class UnixDomainServerSocketFactory |
38 : public content::DevToolsHttpHandler::ServerSocketFactory { | 38 : public content::DevToolsHttpHandler::ServerSocketFactory { |
39 public: | 39 public: |
40 explicit UnixDomainServerSocketFactory(const std::string& socket_name) | 40 explicit UnixDomainServerSocketFactory(const std::string& socket_name) |
41 : content::DevToolsHttpHandler::ServerSocketFactory(socket_name, 0, 1) {} | 41 : content::DevToolsHttpHandler::ServerSocketFactory(socket_name, 0, 1) {} |
42 | 42 |
43 private: | 43 private: |
44 // content::DevToolsHttpHandler::ServerSocketFactory. | 44 // content::DevToolsHttpHandler::ServerSocketFactory. |
45 virtual scoped_ptr<net::ServerSocket> Create() const override { | 45 virtual scoped_ptr<net::ServerSocket> Create() const override { |
46 return scoped_ptr<net::ServerSocket>( | 46 return scoped_ptr<net::ServerSocket>( |
47 new net::UnixDomainServerSocket( | 47 new net::UnixDomainServerSocket( |
48 base::Bind(&content::CanUserConnectToDevTools), | 48 base::Bind(&content::CanUserConnectToDevTools), |
49 true /* use_abstract_namespace */)); | 49 true /* use_abstract_namespace */)); |
50 } | 50 } |
51 | 51 |
52 DISALLOW_COPY_AND_ASSIGN(UnixDomainServerSocketFactory); | 52 DISALLOW_COPY_AND_ASSIGN(UnixDomainServerSocketFactory); |
53 }; | 53 }; |
54 #else | 54 #else |
55 class TCPServerSocketFactory | 55 class TCPServerSocketFactory |
56 : public content::DevToolsHttpHandler::ServerSocketFactory { | 56 : public content::DevToolsHttpHandler::ServerSocketFactory { |
57 public: | 57 public: |
58 TCPServerSocketFactory(const std::string& address, int port, int backlog) | 58 TCPServerSocketFactory(const std::string& address, uint16 port, int backlog) |
59 : content::DevToolsHttpHandler::ServerSocketFactory( | 59 : content::DevToolsHttpHandler::ServerSocketFactory( |
60 address, port, backlog) {} | 60 address, port, backlog) {} |
61 | 61 |
62 private: | 62 private: |
63 // content::DevToolsHttpHandler::ServerSocketFactory. | 63 // content::DevToolsHttpHandler::ServerSocketFactory. |
64 virtual scoped_ptr<net::ServerSocket> Create() const override { | 64 virtual scoped_ptr<net::ServerSocket> Create() const override { |
65 return scoped_ptr<net::ServerSocket>( | 65 return scoped_ptr<net::ServerSocket>( |
66 new net::TCPServerSocket(NULL, net::NetLog::Source())); | 66 new net::TCPServerSocket(NULL, net::NetLog::Source())); |
67 } | 67 } |
68 | 68 |
69 DISALLOW_COPY_AND_ASSIGN(TCPServerSocketFactory); | 69 DISALLOW_COPY_AND_ASSIGN(TCPServerSocketFactory); |
70 }; | 70 }; |
71 #endif | 71 #endif |
72 | 72 |
73 scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory> | 73 scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory> |
74 CreateSocketFactory(int port) { | 74 CreateSocketFactory(uint16 port) { |
75 #if defined(OS_ANDROID) | 75 #if defined(OS_ANDROID) |
76 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 76 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
77 std::string socket_name = "cast_shell_devtools_remote"; | 77 std::string socket_name = "cast_shell_devtools_remote"; |
78 if (command_line->HasSwitch(switches::kRemoteDebuggingSocketName)) { | 78 if (command_line->HasSwitch(switches::kRemoteDebuggingSocketName)) { |
79 socket_name = command_line->GetSwitchValueASCII( | 79 socket_name = command_line->GetSwitchValueASCII( |
80 switches::kRemoteDebuggingSocketName); | 80 switches::kRemoteDebuggingSocketName); |
81 } | 81 } |
82 return scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory>( | 82 return scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory>( |
83 new UnixDomainServerSocketFactory(socket_name)); | 83 new UnixDomainServerSocketFactory(socket_name)); |
84 #else | 84 #else |
(...skipping 23 matching lines...) Expand all Loading... |
108 kDefaultRemoteDebuggingPort : 0); | 108 kDefaultRemoteDebuggingPort : 0); |
109 OnPortChanged(); | 109 OnPortChanged(); |
110 } | 110 } |
111 | 111 |
112 RemoteDebuggingServer::~RemoteDebuggingServer() { | 112 RemoteDebuggingServer::~RemoteDebuggingServer() { |
113 pref_port_.SetValue(0); | 113 pref_port_.SetValue(0); |
114 OnPortChanged(); | 114 OnPortChanged(); |
115 } | 115 } |
116 | 116 |
117 void RemoteDebuggingServer::OnPortChanged() { | 117 void RemoteDebuggingServer::OnPortChanged() { |
118 int new_port = *pref_port_; | 118 uint16 new_port = static_cast<uint16>(std::max(*pref_port_, 0)); |
119 if (new_port < 0) { | |
120 new_port = 0; | |
121 } | |
122 VLOG(1) << "OnPortChanged called: old_port=" << port_ | 119 VLOG(1) << "OnPortChanged called: old_port=" << port_ |
123 << ", new_port=" << new_port; | 120 << ", new_port=" << new_port; |
124 | 121 |
125 if (new_port == port_) { | 122 if (new_port == port_) { |
126 VLOG(1) << "Port has not been changed. Ignore silently."; | 123 VLOG(1) << "Port has not been changed. Ignore silently."; |
127 return; | 124 return; |
128 } | 125 } |
129 | 126 |
130 if (devtools_http_handler_) { | 127 if (devtools_http_handler_) { |
131 LOG(INFO) << "Stop old devtools: port=" << port_; | 128 LOG(INFO) << "Stop old devtools: port=" << port_; |
132 // Note: Stop destroys devtools_http_handler_. | 129 // Note: Stop destroys devtools_http_handler_. |
133 devtools_http_handler_->Stop(); | 130 devtools_http_handler_->Stop(); |
134 devtools_http_handler_ = NULL; | 131 devtools_http_handler_ = NULL; |
135 } | 132 } |
136 | 133 |
137 port_ = new_port; | 134 port_ = new_port; |
138 if (port_ > 0) { | 135 if (port_ > 0) { |
139 devtools_http_handler_ = content::DevToolsHttpHandler::Start( | 136 devtools_http_handler_ = content::DevToolsHttpHandler::Start( |
140 CreateSocketFactory(port_), | 137 CreateSocketFactory(port_), |
141 GetFrontendUrl(), | 138 GetFrontendUrl(), |
142 new CastDevToolsDelegate(), | 139 new CastDevToolsDelegate(), |
143 base::FilePath()); | 140 base::FilePath()); |
144 LOG(INFO) << "Devtools started: port=" << port_; | 141 LOG(INFO) << "Devtools started: port=" << port_; |
145 } | 142 } |
146 } | 143 } |
147 | 144 |
148 } // namespace shell | 145 } // namespace shell |
149 } // namespace chromecast | 146 } // namespace chromecast |
OLD | NEW |