| Index: chrome/browser/notifications/google_now_notification_stats_collector.cc
|
| diff --git a/chrome/browser/notifications/google_now_notification_stats_collector.cc b/chrome/browser/notifications/google_now_notification_stats_collector.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fb6f2c40ef145dd7c04ddb4e30263987623916c2
|
| --- /dev/null
|
| +++ b/chrome/browser/notifications/google_now_notification_stats_collector.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/notifications/google_now_notification_stats_collector.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/metrics/sparse_histogram.h"
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/notifications/notification.h"
|
| +#include "chrome/browser/notifications/notification_ui_manager.h"
|
| +#include "content/public/browser/user_metrics.h"
|
| +#include "ui/message_center/notification.h"
|
| +
|
| +namespace {
|
| +const char kChromeNowExtensionID[] = "pafkbggdmjlpgkdkcbjmhmfcdpncadgh";
|
| +}
|
| +
|
| +GoogleNowNotificationStatsCollector::GoogleNowNotificationStatsCollector(
|
| + message_center::MessageCenter* message_center)
|
| + : message_center_(message_center) {
|
| + message_center_->AddObserver(this);
|
| +}
|
| +
|
| +GoogleNowNotificationStatsCollector::~GoogleNowNotificationStatsCollector() {
|
| + message_center_->RemoveObserver(this);
|
| +}
|
| +
|
| +void GoogleNowNotificationStatsCollector::OnNotificationPoppedUp(
|
| + const std::string& notification_id) {
|
| + if (IsNotificationIdForGoogleNow(notification_id)) {
|
| + content::RecordAction(
|
| + base::UserMetricsAction(
|
| + "GoogleNow.MessageCenter.NotificationPoppedUp"));
|
| + }
|
| +}
|
| +
|
| +void GoogleNowNotificationStatsCollector::OnCenterVisibilityChanged(
|
| + message_center::Visibility visibility) {
|
| + if (visibility == message_center::VISIBILITY_MESSAGE_CENTER) {
|
| + UMA_HISTOGRAM_SPARSE_SLOWLY(
|
| + "GoogleNow.MessageCenter.Displayed.NotificationsVisible",
|
| + CountVisibleGoogleNowNotifications());
|
| + }
|
| +}
|
| +
|
| +bool GoogleNowNotificationStatsCollector::IsNotificationIdForGoogleNow(
|
| + const std::string& notification_id) {
|
| + bool isGoogleNowNotification = false;
|
| + const Notification* const notification =
|
| + g_browser_process->notification_ui_manager()->FindById(notification_id);
|
| + if (notification) {
|
| + isGoogleNowNotification =
|
| + (notification->notifier_id().id == kChromeNowExtensionID);
|
| + }
|
| + return isGoogleNowNotification;
|
| +}
|
| +
|
| +int GoogleNowNotificationStatsCollector::CountVisibleGoogleNowNotifications() {
|
| + typedef message_center::NotificationList::Notifications Notifications;
|
| + const Notifications visible_notifications =
|
| + message_center_->GetVisibleNotifications();
|
| + int google_now_notification_count = 0;
|
| + for (Notifications::iterator iter = visible_notifications.begin();
|
| + iter != visible_notifications.end();
|
| + ++iter) {
|
| + if ((*iter)->notifier_id().id == kChromeNowExtensionID)
|
| + google_now_notification_count++;
|
| + }
|
| + return google_now_notification_count;
|
| +}
|
|
|