copresence_manager_impl.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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/macros.h"
13#include "base/memory/scoped_ptr.h"
14#include "base/memory/weak_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 base::SupportsWeakPtr<CopresenceManagerImpl> {
40 public:
41  virtual ~CopresenceManagerImpl();
42  virtual void ExecuteReportRequest(ReportRequest request,
43                                    const std::string& app_id,
44                                    const StatusCallback& callback) OVERRIDE;
45
46 private:
47  // Create managers with the CopresenceManager::Create() method.
48  friend class CopresenceManager;
49  CopresenceManagerImpl(CopresenceDelegate* delegate);
50
51  void CompleteInitialization();
52  void InitStepComplete(const std::string& step, bool success);
53
54  bool init_failed_;
55  std::vector<PendingRequest> pending_requests_queue_;
56
57  // TODO(rkc): This code is almost identical to what we use in feedback to
58  // perform multiple blocking tasks and then run a post process method. Look
59  // into refactoring it all out to a common construct, like maybe a
60  // PostMultipleTasksAndReply?
61  size_t pending_init_operations_;
62
63  CopresenceDelegate* const delegate_;
64  scoped_ptr<RpcHandler> rpc_handler_;
65
66  DISALLOW_COPY_AND_ASSIGN(CopresenceManagerImpl);
67};
68
69}  // namespace copresence
70
71#endif  // COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_
72