1 // Copyright 2017 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.
5 #ifndef COMPONENTS_UKM_TEST_UKM_RECORDER_H_
6 #define COMPONENTS_UKM_TEST_UKM_RECORDER_H_
15 #include "base/compiler_specific.h"
16 #include "base/macros.h"
17 #include "base/memory/weak_ptr.h"
18 #include "components/ukm/ukm_recorder_impl.h"
19 #include "services/metrics/public/cpp/ukm_recorder.h"
20 #include "services/metrics/public/mojom/ukm_interface.mojom.h"
25 // Wraps an UkmRecorder with additional accessors used for testing.
26 class TestUkmRecorder : public UkmRecorderImpl {
29 ~TestUkmRecorder() override;
31 bool ShouldRestrictToWhitelistedSourceIds() const override;
32 bool ShouldRestrictToWhitelistedEntries() const override;
34 void AddEntry(mojom::UkmEntryPtr entry) override;
36 size_t sources_count() const { return sources().size(); }
38 size_t entries_count() const { return entries().size(); }
40 using UkmRecorderImpl::UpdateSourceURL;
41 using UkmRecorderImpl::RecordOtherURL;
43 // Gets all recorded UkmSource data.
44 const std::map<ukm::SourceId, std::unique_ptr<UkmSource>>& GetSources()
49 // Gets UkmSource data for a single SourceId.
50 const UkmSource* GetSourceForSourceId(ukm::SourceId source_id) const;
52 // Sets a callback that will be called when recording an entry for entry name.
53 void SetOnAddEntryCallback(base::StringPiece entry_name,
54 base::OnceClosure on_add_entry);
56 // Gets all of the entries recorded for entry name.
57 std::vector<const mojom::UkmEntry*> GetEntriesByName(
58 base::StringPiece entry_name) const;
60 // Gets the data for all entries with given entry name, merged to one entry
61 // for each source id. Intended for singular="true" metrics.
62 std::map<ukm::SourceId, mojom::UkmEntryPtr> GetMergedEntriesByName(
63 base::StringPiece entry_name) const;
65 // Checks if an entry is associated with a url.
66 void ExpectEntrySourceHasUrl(const mojom::UkmEntry* entry,
67 const GURL& url) const;
69 // Expects the value of a metric from an entry.
70 static void ExpectEntryMetric(const mojom::UkmEntry* entry,
71 base::StringPiece metric_name,
72 int64_t expected_value);
74 // Checks if an entry contains a specific metric.
75 static bool EntryHasMetric(const mojom::UkmEntry* entry,
76 base::StringPiece metric_name);
78 // Gets the value of a metric from an entry. Returns nullptr if the metric is
80 static const int64_t* GetEntryMetric(const mojom::UkmEntry* entry,
81 base::StringPiece metric_name);
84 uint64_t entry_hash_to_wait_for_ = 0;
85 base::OnceClosure on_add_entry_;
87 DISALLOW_COPY_AND_ASSIGN(TestUkmRecorder);
90 // Similar to a TestUkmRecorder, but also sets itself as the global UkmRecorder
91 // on construction, and unsets itself on destruction.
92 class TestAutoSetUkmRecorder : public TestUkmRecorder {
94 TestAutoSetUkmRecorder();
95 ~TestAutoSetUkmRecorder() override;
98 base::WeakPtrFactory<TestAutoSetUkmRecorder> self_ptr_factory_;
103 #endif // COMPONENTS_UKM_TEST_UKM_RECORDER_H_