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" |
11 #include "base/strings/string_number_conversions.h" | |
11 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
12 #include "chromecast/browser/cast_browser_process.h" | 13 #include "chromecast/browser/cast_browser_process.h" |
13 #include "chromecast/browser/devtools/cast_dev_tools_delegate.h" | 14 #include "chromecast/browser/devtools/cast_dev_tools_delegate.h" |
14 #include "chromecast/common/pref_names.h" | 15 #include "chromecast/common/pref_names.h" |
15 #include "content/public/browser/browser_context.h" | 16 #include "content/public/browser/browser_context.h" |
16 #include "content/public/browser/browser_thread.h" | 17 #include "content/public/browser/browser_thread.h" |
17 #include "content/public/browser/devtools_http_handler.h" | 18 #include "content/public/browser/devtools_http_handler.h" |
18 #include "content/public/common/content_switches.h" | 19 #include "content/public/common/content_switches.h" |
19 #include "content/public/common/user_agent.h" | 20 #include "content/public/common/user_agent.h" |
20 #include "net/socket/tcp_server_socket.h" | 21 #include "net/socket/tcp_server_socket.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
86 new TCPServerSocketFactory("0.0.0.0", port, 1)); | 87 new TCPServerSocketFactory("0.0.0.0", port, 1)); |
87 #endif | 88 #endif |
88 } | 89 } |
89 | 90 |
90 std::string GetFrontendUrl() { | 91 std::string GetFrontendUrl() { |
91 return base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()); | 92 return base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()); |
92 } | 93 } |
93 | 94 |
94 } // namespace | 95 } // namespace |
95 | 96 |
96 RemoteDebuggingServer::RemoteDebuggingServer() : port_(0) { | 97 RemoteDebuggingServer::RemoteDebuggingServer() |
98 : port_(kDefaultRemoteDebuggingPort) { | |
97 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 99 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
98 pref_port_.Init(prefs::kRemoteDebuggingPort, | 100 pref_enabled_.Init(prefs::kEnableRemoteDebugging, |
99 CastBrowserProcess::GetInstance()->pref_service(), | 101 CastBrowserProcess::GetInstance()->pref_service(), |
100 base::Bind(&RemoteDebuggingServer::OnPortChanged, | 102 base::Bind(&RemoteDebuggingServer::OnEnabledChanged, |
101 base::Unretained(this))); | 103 base::Unretained(this))); |
104 | |
105 std::string port_str = base::CommandLine::ForCurrentProcess() | |
106 ->GetSwitchValueASCII(switches::kRemoteDebuggingPort); | |
107 if (!port_str.empty()) { | |
108 unsigned port; | |
byungchul
2015/01/08 06:28:56
Init to 0. StringToUint may not set port on error.
derekjchow1
2015/01/08 17:55:42
Done.
| |
109 base::StringToUint(port_str, &port); | |
byungchul
2015/01/08 06:28:56
Do we support port=0 case which disables remote de
derekjchow1
2015/01/08 17:55:42
Yes. There is a check in OnEnabledChanged that onl
byungchul
2015/01/08 18:51:21
My question is, if it is by intention or not. Alte
derekjchow1
2015/01/12 23:15:55
Done. Your correct, we should set default port.
| |
110 port_ = port; | |
111 } | |
102 | 112 |
103 // Starts new dev tools, clearing port number saved in config. | 113 // Starts new dev tools, clearing port number saved in config. |
104 // Remote debugging in production must be triggered only by config server. | 114 // Remote debugging in production must be triggered only by config server. |
105 pref_port_.SetValue(ShouldStartImmediately() ? | 115 pref_enabled_.SetValue(ShouldStartImmediately() && port_ != 0); |
106 kDefaultRemoteDebuggingPort : 0); | 116 OnEnabledChanged(); |
107 OnPortChanged(); | |
108 } | 117 } |
109 | 118 |
110 RemoteDebuggingServer::~RemoteDebuggingServer() { | 119 RemoteDebuggingServer::~RemoteDebuggingServer() { |
111 pref_port_.SetValue(0); | 120 pref_enabled_.SetValue(false); |
112 OnPortChanged(); | 121 OnEnabledChanged(); |
113 } | 122 } |
114 | 123 |
115 void RemoteDebuggingServer::OnPortChanged() { | 124 void RemoteDebuggingServer::OnEnabledChanged() { |
116 uint16 new_port = static_cast<uint16>(std::max(*pref_port_, 0)); | 125 bool enabled = *pref_enabled_ && port_ != 0; |
117 VLOG(1) << "OnPortChanged called: old_port=" << port_ | 126 if (enabled && !devtools_http_handler_) { |
118 << ", new_port=" << new_port; | 127 VLOG(1) << "Start devtools: port=" << port_; |
119 | |
120 if (new_port == port_) { | |
121 VLOG(1) << "Port has not been changed. Ignore silently."; | |
122 return; | |
123 } | |
124 | |
125 if (devtools_http_handler_) { | |
126 LOG(INFO) << "Stop old devtools: port=" << port_; | |
127 devtools_http_handler_.reset(); | |
128 } | |
129 | |
130 port_ = new_port; | |
131 if (port_ > 0) { | |
132 devtools_http_handler_.reset(content::DevToolsHttpHandler::Start( | 128 devtools_http_handler_.reset(content::DevToolsHttpHandler::Start( |
133 CreateSocketFactory(port_), | 129 CreateSocketFactory(port_), |
134 GetFrontendUrl(), | 130 GetFrontendUrl(), |
135 new CastDevToolsDelegate(), | 131 new CastDevToolsDelegate(), |
136 base::FilePath())); | 132 base::FilePath())); |
137 LOG(INFO) << "Devtools started: port=" << port_; | 133 } else if (devtools_http_handler_) { |
134 LOG(INFO) << "Stop devtools: port=" << port_; | |
gunsch
2015/01/08 03:46:52
Make the Start/Stop devtools either both LOG(INFO)
derekjchow1
2015/01/08 17:55:42
Done.
| |
135 devtools_http_handler_.reset(); | |
138 } | 136 } |
139 } | 137 } |
140 | 138 |
141 } // namespace shell | 139 } // namespace shell |
142 } // namespace chromecast | 140 } // namespace chromecast |
OLD | NEW |