103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file. 403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <string> 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <vector> 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/callback.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/cancelable_callback.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/macros.h" 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/copresence/proto/rpcs.pb.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/copresence/public/copresence_manager.h" 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace net { 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class URLContextGetter; 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace copresence { 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class RpcHandler; 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)struct PendingRequest { 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) PendingRequest(const ReportRequest& report, 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::string app_id, 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const StatusCallback& callback); 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ~PendingRequest(); 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ReportRequest report; 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string app_id; 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) StatusCallback callback; 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// The implementation for CopresenceManager. 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CopresenceManagerImpl : public CopresenceManager { 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual ~CopresenceManagerImpl(); 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void ExecuteReportRequest(ReportRequest request, 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::string& app_id, 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const StatusCallback& callback) OVERRIDE; 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private: 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Create managers with the CopresenceManager::Create() method. 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) friend class CopresenceManager; 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CopresenceManagerImpl(CopresenceDelegate* delegate); 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void CompleteInitialization(); 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void InitStepComplete(const std::string& step, bool success); 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool init_failed_; 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<PendingRequest> pending_requests_queue_; 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::CancelableCallback<void(bool)> init_callback_; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // TODO(rkc): This code is almost identical to what we use in feedback to 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // perform multiple blocking tasks and then run a post process method. Look 6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // into refactoring it all out to a common construct, like maybe a 6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // PostMultipleTasksAndReply? 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size_t pending_init_operations_; 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CopresenceDelegate* const delegate_; 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<RpcHandler> rpc_handler_; 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CopresenceManagerImpl); 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace copresence 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif // COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ 73