1// Copyright (c) 2012 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 "chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.h"
6
7#include "ash/shell.h"
8#include "ash/test/ash_test_base.h"
9#include "base/bind.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/message_loop/message_loop.h"
12#include "base/synchronization/waitable_event.h"
13#include "chrome/browser/chrome_notification_types.h"
14#include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
15#include "components/user_manager/user_manager.h"
16#include "content/public/browser/notification_registrar.h"
17#include "content/public/browser/notification_service.h"
18#include "testing/gtest/include/gtest/gtest.h"
19#include "ui/wm/core/user_activity_detector.h"
20
21namespace chromeos {
22
23class KioskModeIdleLogoutTest : public ash::test::AshTestBase {
24 public:
25  KioskModeIdleLogoutTest()
26      : idle_logout_(NULL) {
27  }
28
29  virtual void SetUp() OVERRIDE {
30    AshTestBase::SetUp();
31    idle_logout_ = new KioskModeIdleLogout();
32  }
33
34  virtual void TearDown() OVERRIDE {
35    delete idle_logout_;
36    AshTestBase::TearDown();
37  }
38
39  bool LoginUserObserverRegistered() {
40    return idle_logout_->registrar_.IsRegistered(
41        idle_logout_,
42        chrome::NOTIFICATION_LOGIN_USER_CHANGED,
43        content::NotificationService::AllSources());
44  }
45
46  bool UserActivityObserverRegistered() {
47    return ash::Shell::GetInstance()->user_activity_detector()->HasObserver(
48        idle_logout_);
49  }
50
51  ScopedDeviceSettingsTestHelper device_settings_test_helper_;
52
53  KioskModeIdleLogout* idle_logout_;
54  content::NotificationRegistrar registrar_;
55};
56
57// http://crbug.com/177918
58TEST_F(KioskModeIdleLogoutTest, DISABLED_CheckObserversBeforeUserLogin) {
59  EXPECT_TRUE(LoginUserObserverRegistered());
60  EXPECT_FALSE(UserActivityObserverRegistered());
61}
62
63// http://crbug.com/177918
64TEST_F(KioskModeIdleLogoutTest, DISABLED_CheckObserversAfterUserLogin) {
65  content::NotificationService::current()->Notify(
66      chrome::NOTIFICATION_LOGIN_USER_CHANGED,
67      content::Source<user_manager::UserManager>(
68          user_manager::UserManager::Get()),
69      // Ideally this should be the user logged in, but since we won't really be
70      // checking for the current logged in user in our observer anyway, giving
71      // NoDetails here is fine.
72      content::NotificationService::NoDetails());
73
74  RunAllPendingInMessageLoop();
75  EXPECT_FALSE(LoginUserObserverRegistered());
76  EXPECT_TRUE(UserActivityObserverRegistered());
77}
78
79}  // namespace chromeos
80