Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: chrome/browser/chromeos/web_socket_proxy_controller.cc

Issue 9146007: Get rid of BrowserThread::WEB_SOCKET_PROXY. BrowserThread is only for threads that are used in ma... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/web_socket_proxy_controller.h" 5 #include "chrome/browser/chromeos/web_socket_proxy_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include <netinet/in.h> 9 #include <netinet/in.h>
10 #include <sys/wait.h> 10 #include <sys/wait.h>
11 #include <unistd.h> 11 #include <unistd.h>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.h"
15 #include "base/command_line.h" 15 #include "base/command_line.h"
16 #include "base/lazy_instance.h" 16 #include "base/lazy_instance.h"
17 #include "base/message_loop.h" 17 #include "base/message_loop.h"
18 #include "base/string_tokenizer.h" 18 #include "base/string_tokenizer.h"
19 #include "base/threading/thread.h" 19 #include "base/threading/thread.h"
20 #include "chrome/browser/browser_process.h" 20 #include "chrome/browser/browser_process.h"
21 #include "chrome/browser/chromeos/web_socket_proxy.h" 21 #include "chrome/browser/chromeos/web_socket_proxy.h"
22 #include "chrome/common/chrome_notification_types.h" 22 #include "chrome/common/chrome_notification_types.h"
23 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/extensions/extension.h" 24 #include "chrome/common/extensions/extension.h"
25 #include "chrome/common/url_constants.h" 25 #include "chrome/common/url_constants.h"
26 #include "content/public/browser/browser_thread.h"
27 #include "content/public/browser/notification_observer.h" 26 #include "content/public/browser/notification_observer.h"
28 #include "content/public/browser/notification_registrar.h" 27 #include "content/public/browser/notification_registrar.h"
29 #include "content/public/browser/notification_service.h" 28 #include "content/public/browser/notification_service.h"
30 #include "content/public/common/url_constants.h" 29 #include "content/public/common/url_constants.h"
31 #include "googleurl/src/gurl.h" 30 #include "googleurl/src/gurl.h"
32 #include "net/base/network_change_notifier.h" 31 #include "net/base/network_change_notifier.h"
33 32
34 using content::BrowserThread;
35
36 namespace { 33 namespace {
37 34
38 const char* kAllowedIds[] = { 35 const char* kAllowedIds[] = {
39 "haiffjcadagjlijoggckpgfnoeiflnem", 36 "haiffjcadagjlijoggckpgfnoeiflnem",
40 "gnedhmakppccajfpfiihfcdlnpgomkcf", 37 "gnedhmakppccajfpfiihfcdlnpgomkcf",
41 "fjcibdnjlbfnbfdjneajpipnlcppleek", 38 "fjcibdnjlbfnbfdjneajpipnlcppleek",
42 "okddffdblfhhnmhodogpojmfkjmhinfp" 39 "okddffdblfhhnmhodogpojmfkjmhinfp"
43 }; 40 };
44 41
45 class OriginValidator { 42 class OriginValidator {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 std::vector<std::string> allowed_ids_; 94 std::vector<std::string> allowed_ids_;
98 std::vector<std::string> allowed_origins_; 95 std::vector<std::string> allowed_origins_;
99 }; 96 };
100 97
101 base::LazyInstance<OriginValidator> g_validator = LAZY_INSTANCE_INITIALIZER; 98 base::LazyInstance<OriginValidator> g_validator = LAZY_INSTANCE_INITIALIZER;
102 99
103 class ProxyLifetime 100 class ProxyLifetime
104 : public net::NetworkChangeNotifier::OnlineStateObserver, 101 : public net::NetworkChangeNotifier::OnlineStateObserver,
105 public content::NotificationObserver { 102 public content::NotificationObserver {
106 public: 103 public:
107 ProxyLifetime() : delay_ms_(1000), port_(-1), shutdown_requested_(false) { 104 ProxyLifetime()
105 : delay_ms_(1000),
106 port_(-1),
107 shutdown_requested_(false),
108 web_socket_proxy_thread_("Chrome_WebSocketproxyThread") {
108 DLOG(INFO) << "WebSocketProxyController initiation"; 109 DLOG(INFO) << "WebSocketProxyController initiation";
109 BrowserThread::PostTask( 110 base::Thread::Options options(MessageLoop::TYPE_IO, 0);
110 BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, 111 web_socket_proxy_thread_.StartWithOptions(options);
112 web_socket_proxy_thread_.message_loop()->PostTask(
113 FROM_HERE,
111 base::Bind(&ProxyLifetime::ProxyCallback, base::Unretained(this))); 114 base::Bind(&ProxyLifetime::ProxyCallback, base::Unretained(this)));
112 net::NetworkChangeNotifier::AddOnlineStateObserver(this); 115 net::NetworkChangeNotifier::AddOnlineStateObserver(this);
113 registrar_.Add( 116 registrar_.Add(
114 this, chrome::NOTIFICATION_WEB_SOCKET_PROXY_STARTED, 117 this, chrome::NOTIFICATION_WEB_SOCKET_PROXY_STARTED,
115 content::NotificationService::AllSources()); 118 content::NotificationService::AllSources());
116 } 119 }
117 120
118 virtual ~ProxyLifetime() { 121 virtual ~ProxyLifetime() {
119 net::NetworkChangeNotifier::RemoveOnlineStateObserver(this); 122 net::NetworkChangeNotifier::RemoveOnlineStateObserver(this);
120 } 123 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 { 157 {
155 base::AutoLock alk(lock_); 158 base::AutoLock alk(lock_);
156 delete server; 159 delete server;
157 server_ = NULL; 160 server_ = NULL;
158 if (!shutdown_requested_) { 161 if (!shutdown_requested_) {
159 // Proxy terminated unexpectedly or failed to start (it can happen due 162 // Proxy terminated unexpectedly or failed to start (it can happen due
160 // to a network problem). Keep trying. 163 // to a network problem). Keep trying.
161 if (delay_ms_ < 100 * 1000) 164 if (delay_ms_ < 100 * 1000)
162 (delay_ms_ *= 3) /= 2; 165 (delay_ms_ *= 3) /= 2;
163 166
164 BrowserThread::PostDelayedTask( 167 MessageLoop::current()->PostDelayedTask(
165 BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, 168 FROM_HERE,
166 base::Bind(&ProxyLifetime::ProxyCallback, base::Unretained(this)), 169 base::Bind(&ProxyLifetime::ProxyCallback, base::Unretained(this)),
167 delay_ms_); 170 delay_ms_);
168 } 171 }
169 } 172 }
170 } 173 }
171 174
172 // Delay between next attempt to run proxy. 175 // Delay between next attempt to run proxy.
173 int volatile delay_ms_; 176 int volatile delay_ms_;
174 177
175 // Proxy listens for incoming websocket connections on this port. 178 // Proxy listens for incoming websocket connections on this port.
176 int volatile port_; 179 int volatile port_;
177 180
178 chromeos::WebSocketProxy* volatile server_; 181 chromeos::WebSocketProxy* volatile server_;
179 volatile bool shutdown_requested_; 182 volatile bool shutdown_requested_;
180 base::Lock lock_; 183 base::Lock lock_;
181 content::NotificationRegistrar registrar_; 184 content::NotificationRegistrar registrar_;
182 friend class chromeos::WebSocketProxyController; 185 friend class chromeos::WebSocketProxyController;
186 base::Thread web_socket_proxy_thread_;
183 }; 187 };
184 188
185 base::LazyInstance<ProxyLifetime> g_proxy_lifetime = LAZY_INSTANCE_INITIALIZER; 189 base::LazyInstance<ProxyLifetime> g_proxy_lifetime = LAZY_INSTANCE_INITIALIZER;
186 190
187 } // namespace 191 } // namespace
188 192
189 namespace chromeos { 193 namespace chromeos {
190 194
191 void FillWithExtensionsIdsWithPrivateAccess(std::vector<std::string>* ids) { 195 void FillWithExtensionsIdsWithPrivateAccess(std::vector<std::string>* ids) {
192 ids->clear(); 196 ids->clear();
(...skipping 13 matching lines...) Expand all
206 210
207 // static 211 // static
208 int WebSocketProxyController::GetPort() { 212 int WebSocketProxyController::GetPort() {
209 int port = g_proxy_lifetime.Get().GetPort(); 213 int port = g_proxy_lifetime.Get().GetPort();
210 DCHECK(IsInitiated()); 214 DCHECK(IsInitiated());
211 return port; 215 return port;
212 } 216 }
213 217
214 // static 218 // static
215 void WebSocketProxyController::Shutdown() { 219 void WebSocketProxyController::Shutdown() {
216 if (IsInitiated()) { 220 if (!IsInitiated())
217 DLOG(INFO) << "WebSocketProxyController shutdown"; 221 return;
222
223 DLOG(INFO) << "WebSocketProxyController shutdown";
224 {
218 base::AutoLock alk(g_proxy_lifetime.Get().lock_); 225 base::AutoLock alk(g_proxy_lifetime.Get().lock_);
219 g_proxy_lifetime.Get().shutdown_requested_ = true; 226 g_proxy_lifetime.Get().shutdown_requested_ = true;
220 if (g_proxy_lifetime.Get().server_) 227 if (g_proxy_lifetime.Get().server_)
221 g_proxy_lifetime.Get().server_->Shutdown(); 228 g_proxy_lifetime.Get().server_->Shutdown();
222 } 229 }
230 g_proxy_lifetime.Get().web_socket_proxy_thread_.Stop();
223 } 231 }
224 232
225 // static 233 // static
226 bool WebSocketProxyController::CheckCredentials( 234 bool WebSocketProxyController::CheckCredentials(
227 const std::string& extension_id, 235 const std::string& extension_id,
228 const std::string& hostname, 236 const std::string& hostname,
229 unsigned short port, 237 unsigned short port,
230 ConnectionFlags flags) { 238 ConnectionFlags flags) {
231 return g_validator.Get().CheckCredentials( 239 return g_validator.Get().CheckCredentials(
232 extension_id, hostname, port, flags); 240 extension_id, hostname, port, flags);
233 } 241 }
234 242
235 } // namespace chromeos 243 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/chrome_browser_main_chromeos.cc ('k') | chrome/browser/metrics/thread_watcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698