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#ifndef COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ 6#define COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/callback.h" 12#include "base/cancelable_callback.h" 13#include "base/macros.h" 14#include "base/memory/scoped_ptr.h" 15#include "components/copresence/proto/rpcs.pb.h" 16#include "components/copresence/public/copresence_manager.h" 17 18namespace net { 19class URLContextGetter; 20} 21 22namespace copresence { 23 24class RpcHandler; 25 26struct PendingRequest { 27 PendingRequest(const ReportRequest& report, 28 const std::string app_id, 29 const StatusCallback& callback); 30 ~PendingRequest(); 31 32 ReportRequest report; 33 std::string app_id; 34 StatusCallback callback; 35}; 36 37// The implementation for CopresenceManager. 38class CopresenceManagerImpl : public CopresenceManager { 39 public: 40 virtual ~CopresenceManagerImpl(); 41 virtual void ExecuteReportRequest(ReportRequest request, 42 const std::string& app_id, 43 const StatusCallback& callback) OVERRIDE; 44 45 private: 46 // Create managers with the CopresenceManager::Create() method. 47 friend class CopresenceManager; 48 CopresenceManagerImpl(CopresenceDelegate* delegate); 49 50 void CompleteInitialization(); 51 void InitStepComplete(const std::string& step, bool success); 52 53 bool init_failed_; 54 std::vector<PendingRequest> pending_requests_queue_; 55 56 base::CancelableCallback<void(bool)> init_callback_; 57 58 // TODO(rkc): This code is almost identical to what we use in feedback to 59 // perform multiple blocking tasks and then run a post process method. Look 60 // into refactoring it all out to a common construct, like maybe a 61 // PostMultipleTasksAndReply? 62 size_t pending_init_operations_; 63 64 CopresenceDelegate* const delegate_; 65 scoped_ptr<RpcHandler> rpc_handler_; 66 67 DISALLOW_COPY_AND_ASSIGN(CopresenceManagerImpl); 68}; 69 70} // namespace copresence 71 72#endif // COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ 73