普通文本  |  43行  |  1.45 KB

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/copresence/public/copresence_manager.h"

#include "base/bind.h"
#include "components/copresence/copresence_manager_impl.h"
#include "components/copresence/rpc/rpc_handler.h"

namespace copresence {

// static
scoped_ptr<CopresenceManager> CopresenceManager::Create(
    CopresenceDelegate* delegate) {
  CopresenceManagerImpl* manager = new CopresenceManagerImpl(delegate);

  manager->pending_init_operations_++;
  manager->rpc_handler_.reset(new RpcHandler(delegate));
  manager->rpc_handler_->Initialize(
      base::Bind(&CopresenceManagerImpl::InitStepComplete,
                 // This is safe because the manager owns the RpcHandler.
                 base::Unretained(manager),
                 "Copresence device registration"));

  // This callback will be canceled on manager's destruction, hence unretained
  // is safe to use here.
  manager->init_callback_.Reset(
      base::Bind(&CopresenceManagerImpl::InitStepComplete,
                 base::Unretained(manager),
                 "Whispernet proxy initialization"));

  manager->pending_init_operations_++;
  DCHECK(delegate->GetWhispernetClient());
  delegate->GetWhispernetClient()->Initialize(
      manager->init_callback_.callback());

  return make_scoped_ptr<CopresenceManager>(manager);
}

}  // namespace copresence