158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/notifications/screen_lock_notification_blocker.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/time/time.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/idle.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace {
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const int kUserStatePollingIntervalSeconds = 1;
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)ScreenLockNotificationBlocker::ScreenLockNotificationBlocker(
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    message_center::MessageCenter* message_center)
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : NotificationBlocker(message_center),
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      is_locked_(false) {
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)ScreenLockNotificationBlocker::~ScreenLockNotificationBlocker() {
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void ScreenLockNotificationBlocker::CheckState() {
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool was_locked = is_locked_;
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  is_locked_ = CheckIdleStateIsLocked();
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (is_locked_ != was_locked)
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    NotifyBlockingStateChanged();
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (is_locked_) {
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    timer_.Start(FROM_HERE,
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                 base::TimeDelta::FromSeconds(kUserStatePollingIntervalSeconds),
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                 this,
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                 &ScreenLockNotificationBlocker::CheckState);
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool ScreenLockNotificationBlocker::ShouldShowNotificationAsPopup(
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const message_center::NotifierId& notifier_id) const {
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return !is_locked_;
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
41