Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Unified Diff: remoting/host/host_user_interface.cc

Issue 10440107: Replace ScopedThreadProxy with MessageLoopProxy & WeakPtrs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use correct TaskRunner reference, and copy instance reference in lock. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/host_user_interface.h ('k') | remoting/host/it2me_host_user_interface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/host_user_interface.cc
diff --git a/remoting/host/host_user_interface.cc b/remoting/host/host_user_interface.cc
index 4401fb5e65b4ed59066aeaa39cdf1e9cec601a09..964473bb53db9f4a3d57124ddddaccb3cf222af5 100644
--- a/remoting/host/host_user_interface.cc
+++ b/remoting/host/host_user_interface.cc
@@ -16,7 +16,8 @@ HostUserInterface::HostUserInterface(ChromotingHostContext* context)
: host_(NULL),
context_(context),
is_monitoring_local_inputs_(false),
- ui_thread_proxy_(context->ui_message_loop()) {
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
+ weak_ptr_(weak_factory_.GetWeakPtr()) {
}
HostUserInterface::~HostUserInterface() {
@@ -24,8 +25,6 @@ HostUserInterface::~HostUserInterface() {
MonitorLocalInputs(false);
ShowDisconnectWindow(false, std::string());
-
- ui_thread_proxy_.Detach();
}
void HostUserInterface::Start(ChromotingHost* host,
@@ -42,19 +41,23 @@ void HostUserInterface::Start(ChromotingHost* host,
}
void HostUserInterface::OnClientAuthenticated(const std::string& jid) {
+ DCHECK(network_message_loop()->BelongsToCurrentThread());
+
authenticated_jid_ = jid;
std::string username = jid.substr(0, jid.find('/'));
- ui_thread_proxy_.PostTask(FROM_HERE, base::Bind(
+ ui_message_loop()->PostTask(FROM_HERE, base::Bind(
&HostUserInterface::ProcessOnClientAuthenticated,
- base::Unretained(this), username));
+ weak_ptr_, username));
}
void HostUserInterface::OnClientDisconnected(const std::string& jid) {
+ DCHECK(network_message_loop()->BelongsToCurrentThread());
+
if (jid == authenticated_jid_) {
- ui_thread_proxy_.PostTask(FROM_HERE, base::Bind(
+ ui_message_loop()->PostTask(FROM_HERE, base::Bind(
&HostUserInterface::ProcessOnClientDisconnected,
- base::Unretained(this)));
+ weak_ptr_));
}
}
@@ -62,20 +65,20 @@ void HostUserInterface::OnAccessDenied(const std::string& jid) {
}
void HostUserInterface::OnShutdown() {
+ DCHECK(network_message_loop()->BelongsToCurrentThread());
+
// Host status observers must be removed on the network thread, so
// it must happen here instead of in the destructor.
host_->RemoveStatusObserver(this);
host_ = NULL;
- disconnect_callback_ = base::Closure();
}
void HostUserInterface::OnDisconnectCallback() {
DCHECK(ui_message_loop()->BelongsToCurrentThread());
- DCHECK(!disconnect_callback_.is_null());
MonitorLocalInputs(false);
ShowDisconnectWindow(false, std::string());
- disconnect_callback_.Run();
+ DisconnectSession();
}
base::MessageLoopProxy* HostUserInterface::network_message_loop() const {
@@ -86,7 +89,10 @@ base::MessageLoopProxy* HostUserInterface::ui_message_loop() const {
}
void HostUserInterface::DisconnectSession() const {
- return disconnect_callback_.Run();
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
+ DCHECK(!disconnect_callback_.is_null());
+
+ disconnect_callback_.Run();
}
void HostUserInterface::ProcessOnClientAuthenticated(
@@ -140,7 +146,7 @@ void HostUserInterface::ShowDisconnectWindow(bool show,
disconnect_window_->Show(
host_,
base::Bind(&HostUserInterface::OnDisconnectCallback,
- base::Unretained(this)),
+ weak_ptr_),
username);
} else {
disconnect_window_->Hide();
« no previous file with comments | « remoting/host/host_user_interface.h ('k') | remoting/host/it2me_host_user_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698