diff options
Diffstat (limited to 'chrome/browser/extensions')
3 files changed, 13 insertions, 7 deletions
diff --git a/chrome/browser/extensions/extension_web_socket_proxy_private_api.cc b/chrome/browser/extensions/extension_web_socket_proxy_private_api.cc index bda21c73..31fd122 100644 --- a/chrome/browser/extensions/extension_web_socket_proxy_private_api.cc +++ b/chrome/browser/extensions/extension_web_socket_proxy_private_api.cc @@ -41,7 +41,7 @@ void WebSocketProxyPrivate::Finalize() { if (is_finalized_) return; is_finalized_ = true; - SendResponse(true); + SendResponse(listening_port_ > 0); Release(); } @@ -59,10 +59,14 @@ void WebSocketProxyPrivateGetURLForTCPFunction::Observe( } void WebSocketProxyPrivateGetURLForTCPFunction::Finalize() { +#if defined(OS_CHROMEOS) StringValue* url = Value::CreateStringValue(std::string( "ws://127.0.0.1:" + base::IntToString(listening_port_) + "/tcpproxy?" + query_)); result_.reset(url); + if (listening_port_ < 1) + listening_port_ = chromeos::WebSocketProxyController::GetPort(); +#endif WebSocketProxyPrivate::Finalize(); } @@ -80,12 +84,12 @@ bool WebSocketProxyPrivateGetPassportForTCPFunction::RunImpl() { if (chromeos::WebSocketProxyController::CheckCredentials( extension_id(), hostname, port, chromeos::WebSocketProxyController::PLAIN_TCP)) { - if (!chromeos::WebSocketProxyController::IsInitiated()) { + listening_port_ = chromeos::WebSocketProxyController::GetPort(); + if (listening_port_ < 1) { delay_response = true; registrar_.Add( this, chrome::NOTIFICATION_WEB_SOCKET_PROXY_STARTED, content::NotificationService::AllSources()); - chromeos::WebSocketProxyController::Initiate(); } std::map<std::string, std::string> map; @@ -132,12 +136,12 @@ bool WebSocketProxyPrivateGetURLForTCPFunction::RunImpl() { extension_id(), hostname, port, do_tls ? chromeos::WebSocketProxyController::TLS_OVER_TCP : chromeos::WebSocketProxyController::PLAIN_TCP)) { - if (!chromeos::WebSocketProxyController::IsInitiated()) { + listening_port_ = chromeos::WebSocketProxyController::GetPort(); + if (listening_port_ < 1) { delay_response = true; registrar_.Add( this, chrome::NOTIFICATION_WEB_SOCKET_PROXY_STARTED, content::NotificationService::AllSources()); - chromeos::WebSocketProxyController::Initiate(); } std::map<std::string, std::string> map; @@ -155,7 +159,7 @@ bool WebSocketProxyPrivateGetURLForTCPFunction::RunImpl() { #endif // defined(OS_CHROMEOS) if (delay_response) { - const int kTimeout = 3; + const int kTimeout = 12; timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(kTimeout), this, &WebSocketProxyPrivate::Finalize); } else { diff --git a/chrome/browser/extensions/extension_web_socket_proxy_private_api.h b/chrome/browser/extensions/extension_web_socket_proxy_private_api.h index 8f888cf..eb2af4a 100644 --- a/chrome/browser/extensions/extension_web_socket_proxy_private_api.h +++ b/chrome/browser/extensions/extension_web_socket_proxy_private_api.h @@ -35,7 +35,7 @@ class WebSocketProxyPrivate content::NotificationRegistrar registrar_; - // Proxy listens incoming websocket connection on this port. + // Proxy accepts websocket connections on this port. int listening_port_; }; diff --git a/chrome/browser/extensions/extension_web_socket_proxy_private_apitest.cc b/chrome/browser/extensions/extension_web_socket_proxy_private_apitest.cc index 8d6d12d..060583e 100644 --- a/chrome/browser/extensions/extension_web_socket_proxy_private_apitest.cc +++ b/chrome/browser/extensions/extension_web_socket_proxy_private_apitest.cc @@ -18,6 +18,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionWebSocketProxyPrivateApiTest, Pass) { #if defined(OS_CHROMEOS) ASSERT_TRUE(StartTestServer()); ASSERT_TRUE(RunExtensionTest("web_socket_proxy_private")) << message_; + // Check if API still works on subsequent calls. + ASSERT_TRUE(RunExtensionTest("web_socket_proxy_private")) << message_; #endif } |