1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MOJO_SERVICES_TEST_SERVICE_TEST_REQUEST_TRACKER_IMPL_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MOJO_SERVICES_TEST_SERVICE_TEST_REQUEST_TRACKER_IMPL_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/weak_ptr.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/system/macros.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/test_service/test_request_tracker.mojom.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ApplicationConnection;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochtypedef std::map<uint64_t, std::vector<ServiceStats> > AllRecordsMap;
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Shared state between all instances of TestRequestTrackerImpl
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// and the master TrackedRequestService.
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct TrackingContext {
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TrackingContext();
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ~TrackingContext();
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  AllRecordsMap records;
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::map<uint64_t, std::string> ids_to_names;
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  uint64_t next_id;
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestRequestTrackerImpl : public InterfaceImpl<TestRequestTracker> {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit TestRequestTrackerImpl(TrackingContext* context);
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~TestRequestTrackerImpl();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TestRequestTracker.
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void RecordStats(uint64_t client_id,
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           ServiceStatsPtr stats) MOJO_OVERRIDE;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // InterfaceImpl override.
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnConnectionEstablished() MOJO_OVERRIDE;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void UploaderNameCallback(uint64_t id, const mojo::String& name);
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TrackingContext* context_;
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::WeakPtrFactory<TestRequestTrackerImpl> weak_factory_;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MOJO_DISALLOW_COPY_AND_ASSIGN(TestRequestTrackerImpl);
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestTrackedRequestServiceImpl
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : public InterfaceImpl<TestTrackedRequestService> {
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit TestTrackedRequestServiceImpl(TrackingContext* context);
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~TestTrackedRequestServiceImpl();
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |TestTrackedRequestService| implementation.
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void GetReport(
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const mojo::Callback<void(mojo::Array<ServiceReportPtr>)>& callback)
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          MOJO_OVERRIDE;
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TrackingContext* context_;
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MOJO_DISALLOW_COPY_AND_ASSIGN(TestTrackedRequestServiceImpl);
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace test
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // MOJO_SERVICES_TEST_SERVICE_TEST_REQUEST_TRACKER_IMPL_H_
67