copresence_manager.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/copresence/public/copresence_manager.h" 6 7#include "base/bind.h" 8#include "components/copresence/copresence_manager_impl.h" 9#include "components/copresence/rpc/rpc_handler.h" 10 11namespace copresence { 12 13// static 14scoped_ptr<CopresenceManager> CopresenceManager::Create( 15 CopresenceDelegate* delegate) { 16 CopresenceManagerImpl* manager = new CopresenceManagerImpl(delegate); 17 18 manager->pending_init_operations_++; 19 manager->rpc_handler_.reset(new RpcHandler(delegate)); 20 manager->rpc_handler_->Initialize( 21 base::Bind(&CopresenceManagerImpl::InitStepComplete, 22 // This is safe because the manager owns the RpcHandler. 23 base::Unretained(manager), 24 "Copresence device registration")); 25 26 manager->pending_init_operations_++; 27 DCHECK(delegate->GetWhispernetClient()); 28 delegate->GetWhispernetClient()->Initialize( 29 base::Bind(&CopresenceManagerImpl::InitStepComplete, 30 // We cannot cancel WhispernetClient initialization. 31 // TODO(ckehoe): Get rid of this. 32 manager->AsWeakPtr(), 33 "Whispernet proxy initialization")); 34 35 return make_scoped_ptr<CopresenceManager>(manager); 36} 37 38} // namespace copresence 39 40