Index: chrome/browser/chromeos/web_socket_proxy_controller.cc |
diff --git a/chrome/browser/chromeos/web_socket_proxy_controller.cc b/chrome/browser/chromeos/web_socket_proxy_controller.cc |
index 5436afa0e0622ece2671d31bdaa20d6fa056dc64..e2bf804ce9eb1e87d93105fe2951eae57c0d294c 100644 |
--- a/chrome/browser/chromeos/web_socket_proxy_controller.cc |
+++ b/chrome/browser/chromeos/web_socket_proxy_controller.cc |
@@ -24,6 +24,7 @@ |
#include "content/browser/browser_thread.h" |
#include "content/public/browser/notification_observer.h" |
#include "content/public/browser/notification_registrar.h" |
+#include "content/public/browser/notification_service.h" |
#include "content/public/common/url_constants.h" |
#include "googleurl/src/gurl.h" |
#include "net/base/network_change_notifier.h" |
@@ -99,18 +100,35 @@ class ProxyTask : public Task { |
virtual void Run() OVERRIDE; |
}; |
-class ProxyLifetime : public net::NetworkChangeNotifier::OnlineStateObserver { |
+class ProxyLifetime |
+ : public net::NetworkChangeNotifier::OnlineStateObserver, |
+ public content::NotificationObserver { |
public: |
- ProxyLifetime() : delay_ms_(1000), shutdown_requested_(false) { |
+ ProxyLifetime() : delay_ms_(1000), port_(-1), shutdown_requested_(false) { |
+ LOG(INFO) << "WebSocketProxyController initiation"; |
miket_OOO
2011/10/24 19:53:00
Sorry if I missed this earlier. Can this be a DLOG
Denis Lagno
2011/10/25 11:19:37
Done.
|
BrowserThread::PostTask( |
BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, new ProxyTask()); |
net::NetworkChangeNotifier::AddOnlineStateObserver(this); |
+ registrar_.Add( |
+ this, chrome::NOTIFICATION_WEB_SOCKET_PROXY_STARTED, |
+ content::NotificationService::AllSources()); |
} |
virtual ~ProxyLifetime() { |
net::NetworkChangeNotifier::RemoveOnlineStateObserver(this); |
} |
+ virtual void Observe(int type, const content::NotificationSource& source, |
+ const content::NotificationDetails& details) OVERRIDE { |
+ base::AutoLock alk(lock_); |
+ port_ = *content::Details<int>(details).ptr(); |
+ } |
+ |
+ int GetPort() { |
+ base::AutoLock alk(lock_); |
+ return port_; |
+ } |
+ |
private: |
// net::NetworkChangeNotifier::OnlineStateObserver overrides. |
virtual void OnOnlineStateChanged(bool online) OVERRIDE { |
@@ -121,7 +139,10 @@ class ProxyLifetime : public net::NetworkChangeNotifier::OnlineStateObserver { |
} |
// Delay between next attempt to run proxy. |
- int delay_ms_; |
+ int volatile delay_ms_; |
+ |
+ // Proxy listens for incoming websocket connections on this port. |
+ int volatile port_; |
chromeos::WebSocketProxy* volatile server_; |
volatile bool shutdown_requested_; |
@@ -173,7 +194,6 @@ void FillWithExtensionsIdsWithPrivateAccess(std::vector<std::string>* ids) { |
// static |
void WebSocketProxyController::Initiate() { |
- LOG(INFO) << "WebSocketProxyController initiation"; |
g_proxy_lifetime.Get(); |
} |
@@ -183,6 +203,13 @@ bool WebSocketProxyController::IsInitiated() { |
} |
// static |
+int WebSocketProxyController::GetPort() { |
+ int port = g_proxy_lifetime.Get().GetPort(); |
+ DCHECK(IsInitiated()); |
+ return port; |
+} |
+ |
+// static |
void WebSocketProxyController::Shutdown() { |
if (IsInitiated()) { |
LOG(INFO) << "WebSocketProxyController shutdown"; |