1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/notifications/message_center_notification_manager.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/pref_names.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/message_center/message_center_tray.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid MessageCenterNotificationManager::DisplayFirstRunBalloon() {
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Store for posterity the fact that we've shown the first-run balloon.
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DCHECK(tray_.get());
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  first_run_pref_.SetValue(true);
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_->DisplayFirstRunBalloon();
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid MessageCenterNotificationManager::SetFirstRunTimeoutForTest(
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::TimeDelta timeout) {
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  first_run_idle_timeout_ = timeout;
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool MessageCenterNotificationManager::FirstRunTimerIsActive() const {
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return first_run_balloon_timer_.IsRunning();
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid MessageCenterNotificationManager::CheckFirstRunTimer() {
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // If there is no tray_, we can't display a balloon here anyway.
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Also, we only want to display the first run balloon once, so the pref will
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // store the flag on disk based on whether we ever showed the balloon.
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DCHECK(tray_.get());
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (first_run_pref_.GetValue())
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return;
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // If there are popups, the message center is visible, or there are no more
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // notifications, don't continue the timer since it will be annoying or
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // useless.
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (message_center_->HasPopupNotifications() ||
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      message_center_->IsMessageCenterVisible() ||
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      0 == message_center_->NotificationCount()) {
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    first_run_balloon_timer_.Stop();
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return;
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // No need to restart the timer if it's already going.
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (first_run_balloon_timer_.IsRunning())
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return;
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  first_run_balloon_timer_.Start(
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      FROM_HERE,
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      first_run_idle_timeout_,
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::Bind(&MessageCenterNotificationManager::DisplayFirstRunBalloon,
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                 weak_factory_.GetWeakPtr()));
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
54