Index: chrome/browser/browser_process_impl.cc |
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc |
index f1b30a52450a0effc6250c06f9f0553e8df127a7..f2c276e6253d0b5bfc01b25009db3c459a989d9f 100644 |
--- a/chrome/browser/browser_process_impl.cc |
+++ b/chrome/browser/browser_process_impl.cc |
@@ -88,6 +88,7 @@ |
#if defined(OS_CHROMEOS) |
#include "chrome/browser/chromeos/proxy_config_service_impl.h" |
+#include "chrome/browser/chromeos/web_socket_proxy_controller.h" |
#endif // defined(OS_CHROMEOS) |
#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) |
@@ -113,6 +114,9 @@ BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) |
created_cache_thread_(false), |
created_gpu_thread_(false), |
created_watchdog_thread_(false), |
+#if defined(OS_CHROMEOS) |
+ created_web_socket_proxy_thread_(false), |
+#endif |
created_profile_manager_(false), |
created_local_state_(false), |
created_icon_manager_(false), |
@@ -152,6 +156,12 @@ BrowserProcessImpl::~BrowserProcessImpl() { |
// Store the profile path for clearing local state data on exit. |
clear_local_state_on_exit = ShouldClearLocalState(&profile_path); |
+#if defined(OS_CHROMEOS) |
+ if (web_socket_proxy_thread_.get()) |
+ chromeos::WebSocketProxyController::Shutdown(); |
+ web_socket_proxy_thread_.reset(); |
+#endif |
+ |
// Delete the AutomationProviderList before NotificationService, |
// since it may try to unregister notifications |
// Both NotificationService and AutomationProvider are singleton instances in |
@@ -435,6 +445,16 @@ WatchDogThread* BrowserProcessImpl::watchdog_thread() { |
return watchdog_thread_.get(); |
} |
+#if defined(OS_CHROMEOS) |
+base::Thread* BrowserProcessImpl::web_socket_proxy_thread() { |
+ DCHECK(CalledOnValidThread()); |
+ if (!created_web_socket_proxy_thread_) |
+ CreateWebSocketProxyThread(); |
+ DCHECK(web_socket_proxy_thread_.get() != NULL); |
+ return web_socket_proxy_thread_.get(); |
+} |
+#endif |
+ |
ProfileManager* BrowserProcessImpl::profile_manager() { |
DCHECK(CalledOnValidThread()); |
if (!created_profile_manager_) |
@@ -763,6 +783,22 @@ void BrowserProcessImpl::CreateFileThread() { |
file_thread_.swap(thread); |
} |
+#if defined(OS_CHROMEOS) |
+void BrowserProcessImpl::CreateWebSocketProxyThread() { |
+ DCHECK(!created_web_socket_proxy_thread_); |
+ DCHECK(web_socket_proxy_thread_.get() == NULL); |
+ created_web_socket_proxy_thread_ = true; |
+ |
+ scoped_ptr<base::Thread> thread( |
+ new BrowserProcessSubThread(BrowserThread::WEB_SOCKET_PROXY)); |
+ base::Thread::Options options; |
+ options.message_loop_type = MessageLoop::TYPE_IO; |
+ if (!thread->StartWithOptions(options)) |
+ return; |
+ web_socket_proxy_thread_.swap(thread); |
+} |
+#endif |
+ |
void BrowserProcessImpl::CreateDBThread() { |
DCHECK(!created_db_thread_ && db_thread_.get() == NULL); |
created_db_thread_ = true; |