diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-29 03:07:52 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-29 03:07:52 +0000 |
commit | be06d67c4742c12b2ad98bcfd7e0dbc74b627075 (patch) | |
tree | 8ea299a009a72a9520555f3f09f421f6974bb6d9 /chrome/browser/chromeos/web_socket_proxy_controller.cc | |
parent | 2094f18805eb060a1603dfe5b4523ac2a44a4529 (diff) | |
download | chromium_src-be06d67c4742c12b2ad98bcfd7e0dbc74b627075.zip chromium_src-be06d67c4742c12b2ad98bcfd7e0dbc74b627075.tar.gz chromium_src-be06d67c4742c12b2ad98bcfd7e0dbc74b627075.tar.bz2 |
base::Bind: Convert the following files.
* automation_provider_win.cc
* chrome_browser_main.cc
* web_socket_proxy_controller.cc
* cookie_policy_browsertest.cc
* profile_sync_service_autofill_unittest.cc
BUG=none
TEST=none
R=csilv@chromium.org
Review URL: http://codereview.chromium.org/8727018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111850 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/web_socket_proxy_controller.cc')
-rw-r--r-- | chrome/browser/chromeos/web_socket_proxy_controller.cc | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/chrome/browser/chromeos/web_socket_proxy_controller.cc b/chrome/browser/chromeos/web_socket_proxy_controller.cc index c431b7f..a9faa56 100644 --- a/chrome/browser/chromeos/web_socket_proxy_controller.cc +++ b/chrome/browser/chromeos/web_socket_proxy_controller.cc @@ -10,6 +10,8 @@ #include <sys/wait.h> #include <unistd.h> +#include "base/bind.h" +#include "base/bind_helpers.h" #include "base/command_line.h" #include "base/lazy_instance.h" #include "base/message_loop.h" @@ -98,10 +100,6 @@ class OriginValidator { base::LazyInstance<OriginValidator> g_validator = LAZY_INSTANCE_INITIALIZER; -class ProxyTask : public Task { - virtual void Run() OVERRIDE; -}; - class ProxyLifetime : public net::NetworkChangeNotifier::OnlineStateObserver, public content::NotificationObserver { @@ -109,7 +107,8 @@ class ProxyLifetime ProxyLifetime() : delay_ms_(1000), port_(-1), shutdown_requested_(false) { DLOG(INFO) << "WebSocketProxyController initiation"; BrowserThread::PostTask( - BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, new ProxyTask()); + BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, + base::Bind(&ProxyLifetime::ProxyCallback, base::Unretained(this))); net::NetworkChangeNotifier::AddOnlineStateObserver(this); registrar_.Add( this, chrome::NOTIFICATION_WEB_SOCKET_PROXY_STARTED, @@ -132,7 +131,7 @@ class ProxyLifetime } private: - // net::NetworkChangeNotifier::OnlineStateObserver overrides. + // net::NetworkChangeNotifier::OnlineStateObserver implementation. virtual void OnOnlineStateChanged(bool online) OVERRIDE { DCHECK(chromeos::WebSocketProxyController::IsInitiated()); base::AutoLock alk(lock_); @@ -140,6 +139,36 @@ class ProxyLifetime server_->OnNetworkChange(); } + void ProxyCallback() { + LOG(INFO) << "Attempt to run web socket proxy task"; + chromeos::WebSocketProxy* server = new chromeos::WebSocketProxy( + g_validator.Get().allowed_origins()); + { + base::AutoLock alk(lock_); + if (shutdown_requested_) + return; + delete server_; + server_ = server; + } + server->Run(); + { + base::AutoLock alk(lock_); + delete server; + server_ = NULL; + if (!shutdown_requested_) { + // Proxy terminated unexpectedly or failed to start (it can happen due + // to a network problem). Keep trying. + if (delay_ms_ < 100 * 1000) + (delay_ms_ *= 3) /= 2; + + BrowserThread::PostDelayedTask( + BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, + base::Bind(&ProxyLifetime::ProxyCallback, base::Unretained(this)), + delay_ms_); + } + } + } + // Delay between next attempt to run proxy. int volatile delay_ms_; @@ -150,40 +179,11 @@ class ProxyLifetime volatile bool shutdown_requested_; base::Lock lock_; content::NotificationRegistrar registrar_; - friend class ProxyTask; friend class chromeos::WebSocketProxyController; }; base::LazyInstance<ProxyLifetime> g_proxy_lifetime = LAZY_INSTANCE_INITIALIZER; -void ProxyTask::Run() { - LOG(INFO) << "Attempt to run web socket proxy task"; - chromeos::WebSocketProxy* server = new chromeos::WebSocketProxy( - g_validator.Get().allowed_origins()); - { - base::AutoLock alk(g_proxy_lifetime.Get().lock_); - if (g_proxy_lifetime.Get().shutdown_requested_) - return; - delete g_proxy_lifetime.Get().server_; - g_proxy_lifetime.Get().server_ = server; - } - server->Run(); - { - base::AutoLock alk(g_proxy_lifetime.Get().lock_); - delete server; - g_proxy_lifetime.Get().server_ = NULL; - if (!g_proxy_lifetime.Get().shutdown_requested_) { - // Proxy terminated unexpectedly or failed to start (it can happen due to - // a network problem). Keep trying. - if (g_proxy_lifetime.Get().delay_ms_ < 100 * 1000) - (g_proxy_lifetime.Get().delay_ms_ *= 3) /= 2; - BrowserThread::PostDelayedTask( - BrowserThread::WEB_SOCKET_PROXY, FROM_HERE, new ProxyTask(), - g_proxy_lifetime.Get().delay_ms_); - } - } -} - } // namespace namespace chromeos { |