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/ui/idle_logout_dialog_view.h" 6 7 #include "base/memory/scoped_ptr.h" 8 #include "chrome/browser/chromeos/kiosk_mode/mock_kiosk_mode_settings.h" 9 #include "chrome/test/base/in_process_browser_test.h" 10 #include "chrome/test/base/ui_test_utils.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "ui/views/widget/widget.h" 13 14 namespace chromeos { 15 16 class MockIdleLogoutSettingsProvider : public IdleLogoutSettingsProvider { 17 public: 18 explicit MockIdleLogoutSettingsProvider(KioskModeSettings* mock_settings) 19 : mock_settings_(mock_settings) {} 20 21 virtual base::TimeDelta GetCountdownUpdateInterval() OVERRIDE { 22 return base::TimeDelta::FromMilliseconds(0); 23 } 24 25 virtual KioskModeSettings* GetKioskModeSettings() OVERRIDE { 26 return mock_settings_; 27 } 28 29 virtual void LogoutCurrentUser(IdleLogoutDialogView* dialog) OVERRIDE { 30 dialog->GetWidget()->Close(); 31 } 32 33 private: 34 KioskModeSettings* mock_settings_; 35 36 DISALLOW_COPY_AND_ASSIGN(MockIdleLogoutSettingsProvider); 37 }; 38 39 class IdleLogoutDialogViewTest : public InProcessBrowserTest { 40 public: 41 IdleLogoutDialogViewTest() {} 42 43 virtual ~IdleLogoutDialogViewTest() {} 44 45 virtual void SetUpOnMainThread() OVERRIDE { 46 mock_settings_.reset(new MockKioskModeSettings()); 47 mock_provider_.reset( 48 new MockIdleLogoutSettingsProvider(mock_settings_.get())); 49 IdleLogoutDialogView::set_settings_provider(mock_provider_.get()); 50 } 51 52 void ExpectOpenDialog() { 53 IdleLogoutDialogView* dialog = IdleLogoutDialogView::current_instance(); 54 ASSERT_TRUE(dialog != NULL); 55 EXPECT_TRUE(dialog->visible()); 56 } 57 58 void ExpectClosedDialog() { 59 EXPECT_TRUE(IdleLogoutDialogView::current_instance() == NULL); 60 } 61 62 private: 63 scoped_ptr<MockIdleLogoutSettingsProvider> mock_provider_; 64 scoped_ptr<MockKioskModeSettings> mock_settings_; 65 66 DISALLOW_COPY_AND_ASSIGN(IdleLogoutDialogViewTest); 67 }; 68 69 IN_PROC_BROWSER_TEST_F(IdleLogoutDialogViewTest, ShowDialogAndClose) { 70 IdleLogoutDialogView::ShowDialog(); 71 EXPECT_NO_FATAL_FAILURE(ExpectOpenDialog()); 72 73 IdleLogoutDialogView::CloseDialog(); 74 ExpectClosedDialog(); 75 } 76 77 IN_PROC_BROWSER_TEST_F(IdleLogoutDialogViewTest, ShowDialogAndCloseView) { 78 IdleLogoutDialogView::ShowDialog(); 79 EXPECT_NO_FATAL_FAILURE(ExpectOpenDialog()); 80 81 IdleLogoutDialogView::CloseDialog(); 82 content::RunAllPendingInMessageLoop(); 83 ExpectClosedDialog(); 84 } 85 86 IN_PROC_BROWSER_TEST_F(IdleLogoutDialogViewTest, ShowDialogAndCloseViewClose) { 87 IdleLogoutDialogView::ShowDialog(); 88 EXPECT_NO_FATAL_FAILURE(ExpectOpenDialog()); 89 90 IdleLogoutDialogView::CloseDialog(); 91 content::RunAllPendingInMessageLoop(); 92 IdleLogoutDialogView::CloseDialog(); 93 94 ExpectClosedDialog(); 95 } 96 97 IN_PROC_BROWSER_TEST_F(IdleLogoutDialogViewTest, 98 OutOfOrderMultipleShowDialogAndClose) { 99 IdleLogoutDialogView::CloseDialog(); 100 ExpectClosedDialog(); 101 102 IdleLogoutDialogView::ShowDialog(); 103 EXPECT_NO_FATAL_FAILURE(ExpectOpenDialog()); 104 IdleLogoutDialogView::ShowDialog(); 105 EXPECT_NO_FATAL_FAILURE(ExpectOpenDialog()); 106 107 IdleLogoutDialogView::CloseDialog(); 108 ExpectClosedDialog(); 109 IdleLogoutDialogView::CloseDialog(); 110 ExpectClosedDialog(); 111 } 112 113 IN_PROC_BROWSER_TEST_F(IdleLogoutDialogViewTest, 114 ShowDialogAndFinishCountdown) { 115 IdleLogoutDialogView::ShowDialog(); 116 EXPECT_NO_FATAL_FAILURE(ExpectOpenDialog()); 117 118 content::RunAllPendingInMessageLoop(); 119 ExpectClosedDialog(); 120 } 121 122 } // namespace chromeos 123