172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/command_line.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/automation/ui_controls.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/cros/mock_input_method_library.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/cros/mock_screen_lock_library.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/mock_authenticator.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/screen_locker.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/screen_locker_tester.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/user_manager.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/profiles/profile_manager.h" 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h" 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/browser_dialogs.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h" 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_service.h" 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_type.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/textfield/textfield.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window_gtk.h" 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// An object that wait for lock state and fullscreen state. 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Waiter : public NotificationObserver { 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick explicit Waiter(Browser* browser) 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch : browser_(browser), 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch running_(false) { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::SCREEN_LOCK_STATE_CHANGED, 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch handler_id_ = g_signal_connect( 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch G_OBJECT(browser_->window()->GetNativeHandle()), 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "window-state-event", 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch G_CALLBACK(OnWindowStateEventThunk), 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~Waiter() { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_signal_handler_disconnect( 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch G_OBJECT(browser_->window()->GetNativeHandle()), 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch handler_id_); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details) { 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(type == NotificationType::SCREEN_LOCK_STATE_CHANGED); 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (running_) 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Quit(); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Wait until the two conditions are met. 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Wait(bool locker_state, bool fullscreen) { 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch running_ = true; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<chromeos::test::ScreenLockerTester> 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester(chromeos::ScreenLocker::GetTester()); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch while (tester->IsLocked() != locker_state || 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_->window()->IsFullscreen() != fullscreen) { 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunMessageLoop(); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure all pending tasks are executed. 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch running_ = false; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CHROMEGTK_CALLBACK_1(Waiter, gboolean, OnWindowStateEvent, 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GdkEventWindowState*); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser* browser_; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gulong handler_id_; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Are we currently running the message loop? 844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool running_; 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(Waiter); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgboolean Waiter::OnWindowStateEvent(GtkWidget* widget, 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GdkEventWindowState* event) { 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ScreenLockerTest : public CrosInProcessBrowserTest { 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ScreenLockerTest() : mock_screen_lock_library_(NULL), 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick mock_input_method_library_(NULL) { 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MockScreenLockLibrary *mock_screen_lock_library_; 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MockInputMethodLibrary *mock_input_method_library_; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test the no password mode with different unlock scheme given by 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |unlock| function. 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void TestNoPassword(void (unlock)(views::Widget*)) { 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenUnlockRequested()) 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenLockCompleted()) 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserManager::Get()->OffTheRecordUserLoggedIn(); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Show(); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<test::ScreenLockerTester> tester(ScreenLocker::GetTester()); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->EmulateWindowManagerReady(); 1224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (!chromeos::ScreenLocker::GetTester()->IsLocked()) 1234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ui_test_utils::WaitForNotification( 1244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch NotificationType::SCREEN_LOCK_STATE_CHANGED); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->InjectMockAuthenticator("", ""); 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unlock(tester->GetWidget()); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Emulate LockScreen request from PowerManager (via SessionManager). 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Hide(); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(tester->IsLocked()); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void LockScreenWithUser(test::ScreenLockerTester* tester, 14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& user) { 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UserManager::Get()->UserLoggedIn(user); 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ScreenLocker::Show(); 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tester->EmulateWindowManagerReady(); 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!tester->IsLocked()) { 14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_test_utils::WaitForNotification( 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationType::SCREEN_LOCK_STATE_CHANGED); 14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(tester->IsLocked()); 14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUpInProcessBrowserTestFixture() { 1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cros_mock_->InitStatusAreaMocks(); 1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cros_mock_->InitMockScreenLockLibrary(); 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick mock_screen_lock_library_ = cros_mock_->mock_screen_lock_library(); 1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick mock_input_method_library_ = cros_mock_->mock_input_method_library(); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, AddObserver(testing::_)) 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenUnlockCompleted()) 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Expectations for the status are on the screen lock window. 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cros_mock_->SetStatusAreaMocksExpectations(); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Expectations for the status area on the browser window. 1663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cros_mock_->SetStatusAreaMocksExpectations(); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUpCommandLine(CommandLine* command_line) { 1703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick command_line->AppendSwitchASCII(switches::kLoginProfile, "user"); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch command_line->AppendSwitch(switches::kNoFirstRun); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ScreenLockerTest); 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Temporarily disabling all screen locker tests while investigating the 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// issue crbug.com/78764. 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, DISABLED_TestBasic) { 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_input_method_library_, GetNumActiveInputMethods()) 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .WillRepeatedly((testing::Return(0))) 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenUnlockRequested()) 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenLockCompleted()) 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserManager::Get()->UserLoggedIn("user"); 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Show(); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<test::ScreenLockerTester> tester(ScreenLocker::GetTester()); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->EmulateWindowManagerReady(); 1944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (!chromeos::ScreenLocker::GetTester()->IsLocked()) 1954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ui_test_utils::WaitForNotification( 1964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch NotificationType::SCREEN_LOCK_STATE_CHANGED); 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Test to make sure that the widget is actually appearing and is of 1993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // reasonable size, preventing a regression of 2003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // http://code.google.com/p/chromium-os/issues/detail?id=5987 201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen gfx::Rect lock_bounds = tester->GetChildWidget()->GetWindowScreenBounds(); 2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_GT(lock_bounds.width(), 10); 2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_GT(lock_bounds.height(), 10); 2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->InjectMockAuthenticator("user", "pass"); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->EnterPassword("fail"); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->EnterPassword("pass"); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Successful authentication simply send a unlock request to PowerManager. 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Emulate LockScreen request from PowerManager (via SessionManager). 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(oshima): Find out better way to handle this in mock. 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Hide(); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(tester->IsLocked()); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, DISABLED_TestFullscreenExit) { 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenUnlockRequested()) 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenLockCompleted()) 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(1) 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<test::ScreenLockerTester> tester(ScreenLocker::GetTester()); 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Waiter waiter(browser()); 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ToggleFullscreenMode(); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch waiter.Wait(false /* not locked */, true /* full screen */); 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(browser()->window()->IsFullscreen()); 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(tester->IsLocked()); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Waiter waiter(browser()); 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserManager::Get()->UserLoggedIn("user"); 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Show(); 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->EmulateWindowManagerReady(); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch waiter.Wait(true /* locked */, false /* full screen */); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(browser()->window()->IsFullscreen()); 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->InjectMockAuthenticator("user", "pass"); 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tester->EnterPassword("pass"); 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ui_test_utils::RunAllPendingInMessageLoop(); 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Hide(); 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(tester->IsLocked()); 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MouseMove(views::Widget* widget) { 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_controls::SendMouseMove(10, 10); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISABLED_TestNoPasswordWithMouseMove) { 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestNoPassword(MouseMove); 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MouseClick(views::Widget* widget) { 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_controls::SendMouseClick(ui_controls::RIGHT); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISABLED_TestNoPasswordWithMouseClick) { 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestNoPassword(MouseClick); 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid KeyPress(views::Widget* widget) { 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_controls::SendKeyPress(GTK_WINDOW(widget->GetNativeView()), 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::VKEY_SPACE, false, false, false, false); 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, DISABLED_TestNoPasswordWithKeyPress) { 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestNoPassword(KeyPress); 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, DISABLED_TestShowTwice) { 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenLockCompleted()) 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .Times(2) 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RetiresOnSaturation(); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<test::ScreenLockerTester> tester(ScreenLocker::GetTester()); 28672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen LockScreenWithUser(tester.get(), "user"); 28772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 28872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Ensure there's a profile or this test crashes. 28972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProfileManager::GetDefaultProfile(); 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calling Show again simply send LockCompleted signal. 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Show(); 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tester->IsLocked()); 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the locker to match expectations. 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScreenLocker::Hide(); 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunAllPendingInMessageLoop(); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(tester->IsLocked()); 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ScreenLockerTest, DISABLED_TestEscape) { 30272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_CALL(*mock_screen_lock_library_, NotifyScreenLockCompleted()) 30372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .Times(1) 30472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .RetiresOnSaturation(); 30572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<test::ScreenLockerTester> tester(ScreenLocker::GetTester()); 30672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen LockScreenWithUser(tester.get(), "user"); 30772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 30872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Ensure there's a profile or this test crashes. 30972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProfileManager::GetDefaultProfile(); 31072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 31172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tester->SetPassword("password"); 31272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("password", tester->GetPassword()); 31372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Escape clears the password. 31472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_controls::SendKeyPress(GTK_WINDOW(tester->GetWidget()->GetNativeView()), 31572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::VKEY_ESCAPE, false, false, false, false); 31672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_test_utils::RunAllPendingInMessageLoop(); 31772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("", tester->GetPassword()); 31872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 31972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Close the locker to match expectations. 32072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ScreenLocker::Hide(); 32172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_test_utils::RunAllPendingInMessageLoop(); 32272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(tester->IsLocked()); 32372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 32472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 326