Index: components/copresence/copresence_manager_impl.cc |
diff --git a/components/copresence/copresence_manager_impl.cc b/components/copresence/copresence_manager_impl.cc |
index e5f6afb3cb8421a72a7a0fb4a35c89ad95af76d7..d867c7fe19af58bb17de0a012625b42f080b166a 100644 |
--- a/components/copresence/copresence_manager_impl.cc |
+++ b/components/copresence/copresence_manager_impl.cc |
@@ -6,7 +6,8 @@ |
#include "base/bind.h" |
#include "base/strings/stringprintf.h" |
-#include "components/copresence/public/copresence_delegate.h" |
+#include "components/copresence/handlers/directive_handler.h" |
+#include "components/copresence/proto/rpcs.pb.h" |
#include "components/copresence/public/whispernet_client.h" |
#include "components/copresence/rpc/rpc_handler.h" |
@@ -37,7 +38,7 @@ scoped_ptr<CopresenceManager> CopresenceManager::Create( |
} |
-// Public methods |
+// Public functions. |
CopresenceManagerImpl::~CopresenceManagerImpl() { |
whispernet_init_callback_.Cancel(); |
@@ -57,7 +58,6 @@ void CopresenceManagerImpl::ExecuteReportRequest( |
// Check if we are initialized enough to execute this request. |
// If we haven't seen this auth token yet, we need to register for it. |
// TODO(ckehoe): Queue per device ID instead of globally. |
- DCHECK(rpc_handler_); |
const std::string& auth_token = delegate_->GetAuthToken(); |
if (!rpc_handler_->IsRegisteredForToken(auth_token)) { |
std::string token_str = auth_token.empty() ? "(anonymous)" : |
@@ -87,18 +87,20 @@ void CopresenceManagerImpl::ExecuteReportRequest( |
} |
} |
-// Private methods |
+ |
+// Private functions. |
CopresenceManagerImpl::CopresenceManagerImpl(CopresenceDelegate* delegate) |
- : init_failed_(false), |
+ : delegate_(delegate), |
+ pending_init_operations_(0), |
// This callback gets cancelled when we are destroyed. |
whispernet_init_callback_( |
base::Bind(&CopresenceManagerImpl::InitStepComplete, |
base::Unretained(this), |
"Whispernet proxy initialization")), |
- pending_init_operations_(0), |
- delegate_(delegate), |
- rpc_handler_(new RpcHandler(delegate)) { |
+ init_failed_(false), |
+ directive_handler_(new DirectiveHandler), |
+ rpc_handler_(new RpcHandler(delegate, directive_handler_.get())) { |
DCHECK(delegate); |
DCHECK(delegate->GetWhispernetClient()); |
@@ -111,9 +113,14 @@ void CopresenceManagerImpl::CompleteInitialization() { |
if (pending_init_operations_) |
return; |
- DCHECK(rpc_handler_.get()); |
- if (!init_failed_) |
- rpc_handler_->ConnectToWhispernet(); |
+ if (!init_failed_) { |
+ // When RpcHandler is destroyed, it disconnects this callback. |
+ // TODO(ckehoe): Use a CancelableCallback instead. |
+ delegate_->GetWhispernetClient()->RegisterTokensCallback( |
+ base::Bind(&RpcHandler::ReportTokens, |
+ base::Unretained(rpc_handler_.get()))); |
+ directive_handler_->Start(delegate_->GetWhispernetClient()); |
+ } |
// Not const because SendReportRequest takes ownership of the ReportRequests. |
// This is ok though, as the entire queue is deleted afterwards. |