diff options
author | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-30 20:51:47 +0000 |
---|---|---|
committer | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-30 20:51:47 +0000 |
commit | 3403f0614d8ad41fd5918b147e98db604f5380dc (patch) | |
tree | dad21ca863ed6a58b0e542284d71330538bfa2b3 /remoting/client/chromoting_client.cc | |
parent | 64b01a37155c8ab702dfd1b18d13bd26bab026c8 (diff) | |
download | chromium_src-3403f0614d8ad41fd5918b147e98db604f5380dc.zip chromium_src-3403f0614d8ad41fd5918b147e98db604f5380dc.tar.gz chromium_src-3403f0614d8ad41fd5918b147e98db604f5380dc.tar.bz2 |
Replace ScopedThreadProxy with MessageLoopProxy & WeakPtrs.
This affects the following classes:
* ChromotingClient
* ChromotingInstance
* HostUserInterface
* It2MeHostUserInterface
The MessageLoopProxy/WeakPtr combination requires that the WeakPtr is created on the thread referred to by the proxy; code in which that is hard to arrange usually has subtle race-conditions.
TEST=Existing unit-tests, and manual testing.
Review URL: https://chromiumcodereview.appspot.com/10454040
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139623 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/client/chromoting_client.cc')
-rw-r--r-- | remoting/client/chromoting_client.cc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/remoting/client/chromoting_client.cc b/remoting/client/chromoting_client.cc index 4dabdd2..2a3aa56 100644 --- a/remoting/client/chromoting_client.cc +++ b/remoting/client/chromoting_client.cc @@ -41,7 +41,7 @@ ChromotingClient::ChromotingClient(const ClientConfig& config, client_done_(client_done), packet_being_processed_(false), last_sequence_number_(0), - thread_proxy_(context_->network_message_loop()) { + weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { } ChromotingClient::~ChromotingClient() { @@ -52,6 +52,9 @@ void ChromotingClient::Start( scoped_ptr<protocol::TransportFactory> transport_factory) { DCHECK(message_loop()->BelongsToCurrentThread()); + // Create a WeakPtr to ourself for to use for all posted tasks. + weak_ptr_ = weak_factory_.GetWeakPtr(); + scoped_ptr<protocol::Authenticator> authenticator; if (config_.use_v1_authenticator) { authenticator.reset(new protocol::V1ClientAuthenticator( @@ -75,7 +78,7 @@ void ChromotingClient::Stop(const base::Closure& shutdown_task) { if (!message_loop()->BelongsToCurrentThread()) { message_loop()->PostTask( FROM_HERE, base::Bind(&ChromotingClient::Stop, - base::Unretained(this), shutdown_task)); + weak_ptr_, shutdown_task)); return; } @@ -87,7 +90,7 @@ void ChromotingClient::Stop(const base::Closure& shutdown_task) { } connection_->Disconnect(base::Bind(&ChromotingClient::OnDisconnected, - base::Unretained(this), shutdown_task)); + weak_ptr_, shutdown_task)); } void ChromotingClient::OnDisconnected(const base::Closure& shutdown_task) { @@ -192,7 +195,7 @@ base::MessageLoopProxy* ChromotingClient::message_loop() { void ChromotingClient::OnPacketDone(bool last_packet, base::Time decode_start) { if (!message_loop()->BelongsToCurrentThread()) { - thread_proxy_.PostTask(FROM_HERE, base::Bind( + message_loop()->PostTask(FROM_HERE, base::Bind( &ChromotingClient::OnPacketDone, base::Unretained(this), last_packet, decode_start)); return; @@ -216,8 +219,8 @@ void ChromotingClient::OnPacketDone(bool last_packet, void ChromotingClient::Initialize() { if (!message_loop()->BelongsToCurrentThread()) { - thread_proxy_.PostTask(FROM_HERE, base::Bind( - &ChromotingClient::Initialize, base::Unretained(this))); + message_loop()->PostTask(FROM_HERE, base::Bind( + &ChromotingClient::Initialize, weak_ptr_)); return; } |