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