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 MOJO_SERVICES_TEST_SERVICE_TEST_REQUEST_TRACKER_IMPL_H_
6#define MOJO_SERVICES_TEST_SERVICE_TEST_REQUEST_TRACKER_IMPL_H_
7
8#include "base/memory/weak_ptr.h"
9#include "mojo/public/cpp/system/macros.h"
10#include "mojo/services/test_service/test_request_tracker.mojom.h"
11
12namespace mojo {
13class ApplicationConnection;
14namespace test {
15
16typedef std::map<uint64_t, std::vector<ServiceStats> > AllRecordsMap;
17
18// Shared state between all instances of TestRequestTrackerImpl
19// and the master TrackedRequestService.
20struct TrackingContext {
21  TrackingContext();
22  ~TrackingContext();
23  AllRecordsMap records;
24  std::map<uint64_t, std::string> ids_to_names;
25  uint64_t next_id;
26};
27
28class TestRequestTrackerImpl : public InterfaceImpl<TestRequestTracker> {
29 public:
30  explicit TestRequestTrackerImpl(TrackingContext* context);
31  virtual ~TestRequestTrackerImpl();
32
33  // TestRequestTracker.
34  virtual void RecordStats(uint64_t client_id,
35                           ServiceStatsPtr stats) MOJO_OVERRIDE;
36
37  // InterfaceImpl override.
38  virtual void OnConnectionEstablished() MOJO_OVERRIDE;
39
40 private:
41  void UploaderNameCallback(uint64_t id, const mojo::String& name);
42  TrackingContext* context_;
43  base::WeakPtrFactory<TestRequestTrackerImpl> weak_factory_;
44  MOJO_DISALLOW_COPY_AND_ASSIGN(TestRequestTrackerImpl);
45};
46
47class TestTrackedRequestServiceImpl
48    : public InterfaceImpl<TestTrackedRequestService> {
49 public:
50  explicit TestTrackedRequestServiceImpl(TrackingContext* context);
51  virtual ~TestTrackedRequestServiceImpl();
52
53  // |TestTrackedRequestService| implementation.
54  virtual void GetReport(
55      const mojo::Callback<void(mojo::Array<ServiceReportPtr>)>& callback)
56          MOJO_OVERRIDE;
57
58 private:
59  TrackingContext* context_;
60  MOJO_DISALLOW_COPY_AND_ASSIGN(TestTrackedRequestServiceImpl);
61};
62
63}  // namespace test
64}  // namespace mojo
65
66#endif  // MOJO_SERVICES_TEST_SERVICE_TEST_REQUEST_TRACKER_IMPL_H_
67