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 18 namespace net { 19 class URLContextGetter; 20 } 21 22 namespace copresence { 23 24 class RpcHandler; 25 26 struct 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. 38 class 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