blob: 176ebbdb9f6e469afa7beb9beb22cd8bbdd83045 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/notifications/scheduler/internal/stats.h"
#include "base/test/metrics/histogram_tester.h"
#include "chrome/browser/notifications/scheduler/public/notification_data.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace notifications {
namespace stats {
namespace {
const char kIhnrActionButtonEventHistogram[] =
"Notifications.Scheduler.IhnrActionButtonEvent";
const char kIhnrActionButtonEventTestHistogram[] =
"Notifications.Scheduler.IhnrActionButtonEvent.__Test__";
void TestLogUserAction(const UserActionData& user_action_data,
ActionButtonEvent action_button_event) {
base::HistogramTester histograms;
LogUserAction(user_action_data);
histograms.ExpectBucketCount("Notifications.Scheduler.UserAction",
user_action_data.action_type, 1);
histograms.ExpectBucketCount("Notifications.Scheduler.UserAction.__Test__",
user_action_data.action_type, 1);
histograms.ExpectBucketCount(kIhnrActionButtonEventHistogram,
action_button_event, 1);
histograms.ExpectBucketCount(kIhnrActionButtonEventTestHistogram,
action_button_event, 1);
}
void TestNotificationShow(const NotificationData& notification_data,
SchedulerClientType client_type,
bool expect_ihnr_histogram,
bool expect_life_cycle_histogram) {
base::HistogramTester histograms;
LogNotificationShow(notification_data, client_type);
if (expect_ihnr_histogram) {
histograms.ExpectBucketCount(kIhnrActionButtonEventHistogram,
ActionButtonEvent::kShown, 1);
histograms.ExpectBucketCount(kIhnrActionButtonEventTestHistogram,
ActionButtonEvent::kShown, 1);
} else {
histograms.ExpectTotalCount(kIhnrActionButtonEventHistogram, 0);
histograms.ExpectTotalCount(kIhnrActionButtonEventTestHistogram, 0);
}
if (expect_life_cycle_histogram) {
histograms.ExpectBucketCount(
"Notifications.Scheduler.NotificationLifeCycleEvent",
NotificationLifeCycleEvent::kShown, 1);
histograms.ExpectBucketCount(
"Notifications.Scheduler.NotificationLifeCycleEvent.__Test__",
NotificationLifeCycleEvent::kShown, 1);
} else {
histograms.ExpectTotalCount(
"Notifications.Scheduler.NotificationLifeCycleEvent", 0);
histograms.ExpectTotalCount(
"Notifications.Scheduler.NotificationLifeCycleEvent.__Test__", 0);
}
}
// Verifies that ihnr buttons clicks are logged.
TEST(NotificationSchedulerStatsTest, LogUserActionIhnrButton) {
UserActionData user_action_data(SchedulerClientType::kTest1,
UserActionType::kButtonClick, "guid");
user_action_data.button_click_info = ButtonClickInfo();
user_action_data.button_click_info->type = ActionButtonType::kHelpful;
TestLogUserAction(user_action_data, ActionButtonEvent::kHelpfulClick);
user_action_data.button_click_info->type = ActionButtonType::kUnhelpful;
TestLogUserAction(user_action_data, ActionButtonEvent::kUnhelpfulClick);
}
// Verifies notification show event is logged when there are ihnr buttons.
TEST(NotificationSchedulerStatsTest, LogNotificationShow) {
NotificationData notification_data;
notification_data.buttons.emplace_back(NotificationData::Button());
// Notification without ihnr buttons.
TestNotificationShow(notification_data, SchedulerClientType::kTest1,
false /*expect_ihnr_histogram*/,
true /*expect_life_cycle_histogram*/);
std::vector<ActionButtonType> types{ActionButtonType::kHelpful,
ActionButtonType::kUnhelpful};
for (auto action_button_type : types) {
notification_data.buttons.front().type = action_button_type;
// Notification with ihnr buttons.
TestNotificationShow(notification_data, SchedulerClientType::kTest1,
true /*expect_ihnr_histogram*/,
true /*expect_life_cycle_histogram*/);
}
}
// Verifies database initialization and record count are correctly tracked.
TEST(NotificationSchedulerStatsTest, LogDbInit) {
base::HistogramTester histograms;
LogDbInit(DatabaseType::kImpressionDb, true, 3);
histograms.ExpectBucketCount(
"Notifications.Scheduler.ImpressionDb.InitResult", true, 1);
histograms.ExpectBucketCount(
"Notifications.Scheduler.ImpressionDb.RecordCount", 3, 1);
LogDbInit(DatabaseType::kNotificationDb, true, 5);
histograms.ExpectBucketCount(
"Notifications.Scheduler.NotificationDb.InitResult", true, 1);
histograms.ExpectBucketCount(
"Notifications.Scheduler.NotificationDb.RecordCount", 5, 1);
LogDbInit(DatabaseType::kIconDb, true, 1);
histograms.ExpectBucketCount("Notifications.Scheduler.IconDb.InitResult",
true, 1);
histograms.ExpectTotalCount("Notifications.Scheduler.IconDb.RecordCount", 1);
}
// Verifies database operations are correctly tracked.
TEST(NotificationSchedulerStatsTest, LogDbOperationResult) {
base::HistogramTester histograms;
LogDbOperation(DatabaseType::kImpressionDb, true);
histograms.ExpectBucketCount(
"Notifications.Scheduler.ImpressionDb.OperationResult", true, 1);
LogDbOperation(DatabaseType::kNotificationDb, true);
histograms.ExpectBucketCount(
"Notifications.Scheduler.NotificationDb.OperationResult", true, 1);
LogDbOperation(DatabaseType::kIconDb, true);
histograms.ExpectBucketCount("Notifications.Scheduler.IconDb.OperationResult",
true, 1);
}
} // namespace
} // namespace stats
} // namespace notifications