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#include "content/renderer/media/webrtc_uma_histograms.h"
6
7#include "testing/gmock/include/gmock/gmock.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10using ::testing::_;
11
12namespace content {
13
14class MockPerSessionWebRTCAPIMetrics : public PerSessionWebRTCAPIMetrics {
15 public:
16  MockPerSessionWebRTCAPIMetrics() {}
17
18  using PerSessionWebRTCAPIMetrics::LogUsageOnlyOnce;
19
20  MOCK_METHOD1(LogUsage, void(JavaScriptAPIName));
21};
22
23TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingGetUserMedia) {
24  MockPerSessionWebRTCAPIMetrics metrics;
25  EXPECT_CALL(metrics, LogUsage(_)).Times(1);
26  metrics.LogUsageOnlyOnce(WEBKIT_GET_USER_MEDIA);
27}
28
29TEST(PerSessionWebRTCAPIMetrics, CallOngoingGetUserMedia) {
30  MockPerSessionWebRTCAPIMetrics metrics;
31  metrics.IncrementStreamCounter();
32  EXPECT_CALL(metrics, LogUsage(WEBKIT_GET_USER_MEDIA)).Times(1);
33  metrics.LogUsageOnlyOnce(WEBKIT_GET_USER_MEDIA);
34}
35
36TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingGetMediaDevices) {
37  MockPerSessionWebRTCAPIMetrics metrics;
38  EXPECT_CALL(metrics, LogUsage(_)).Times(1);
39  metrics.LogUsageOnlyOnce(WEBKIT_GET_MEDIA_DEVICES);
40}
41
42TEST(PerSessionWebRTCAPIMetrics, CallOngoingGetMediaDevices) {
43  MockPerSessionWebRTCAPIMetrics metrics;
44  metrics.IncrementStreamCounter();
45  EXPECT_CALL(metrics, LogUsage(WEBKIT_GET_MEDIA_DEVICES)).Times(1);
46  metrics.LogUsageOnlyOnce(WEBKIT_GET_MEDIA_DEVICES);
47}
48
49TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingRTCPeerConnection) {
50  MockPerSessionWebRTCAPIMetrics metrics;
51  EXPECT_CALL(metrics, LogUsage(WEBKIT_RTC_PEER_CONNECTION));
52  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
53}
54
55TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingMultiplePC) {
56  MockPerSessionWebRTCAPIMetrics metrics;
57  EXPECT_CALL(metrics, LogUsage(WEBKIT_RTC_PEER_CONNECTION)).Times(1);
58  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
59  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
60  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
61}
62
63TEST(PerSessionWebRTCAPIMetrics, BeforeAfterCallMultiplePC) {
64  MockPerSessionWebRTCAPIMetrics metrics;
65  EXPECT_CALL(metrics, LogUsage(WEBKIT_RTC_PEER_CONNECTION)).Times(1);
66  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
67  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
68  metrics.IncrementStreamCounter();
69  metrics.IncrementStreamCounter();
70  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
71  metrics.DecrementStreamCounter();
72  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
73  metrics.DecrementStreamCounter();
74  EXPECT_CALL(metrics, LogUsage(WEBKIT_RTC_PEER_CONNECTION)).Times(1);
75  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
76  metrics.LogUsageOnlyOnce(WEBKIT_RTC_PEER_CONNECTION);
77}
78
79}  // namespace content
80