1// Copyright (c) 2011 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/login/screen_locker_tester.h"
6
7#include <gdk/gdkkeysyms.h>
8
9#include "base/string_util.h"
10#include "base/utf_string_conversions.h"
11#include "chrome/browser/chromeos/login/mock_authenticator.h"
12#include "chrome/browser/chromeos/login/screen_lock_view.h"
13#include "chrome/browser/chromeos/login/screen_locker.h"
14#include "views/controls/button/button.h"
15#include "views/controls/label.h"
16#include "views/controls/textfield/textfield.h"
17#include "views/events/event.h"
18#include "views/widget/root_view.h"
19#include "views/widget/widget_gtk.h"
20
21namespace chromeos {
22
23test::ScreenLockerTester* ScreenLocker::GetTester() {
24  return new test::ScreenLockerTester();
25}
26
27namespace test {
28
29bool ScreenLockerTester::IsLocked() {
30  return ScreenLocker::screen_locker_ &&
31      ScreenLocker::screen_locker_->locked_;
32}
33
34void ScreenLockerTester::InjectMockAuthenticator(
35    const std::string& user, const std::string& password) {
36  DCHECK(ScreenLocker::screen_locker_);
37  ScreenLocker::screen_locker_->SetAuthenticator(
38      new MockAuthenticator(ScreenLocker::screen_locker_, user, password));
39}
40
41void ScreenLockerTester::SetPassword(const std::string& password) {
42  DCHECK(ScreenLocker::screen_locker_);
43  views::Textfield* pass = GetPasswordField();
44  pass->SetText(ASCIIToUTF16(password.c_str()));
45}
46
47std::string ScreenLockerTester::GetPassword() const {
48  DCHECK(ScreenLocker::screen_locker_);
49  views::Textfield* pass = GetPasswordField();
50  return UTF16ToUTF8(pass->text());
51}
52
53void ScreenLockerTester::EnterPassword(const std::string& password) {
54  SetPassword(password);
55  views::Textfield* pass = GetPasswordField();
56  GdkEvent* event = gdk_event_new(GDK_KEY_PRESS);
57  event->key.keyval = GDK_Return;
58  views::KeyEvent key_event(event);
59  ScreenLocker::screen_locker_->screen_lock_view_->HandleKeyEvent(
60      pass, key_event);
61  gdk_event_free(event);
62}
63
64void ScreenLockerTester::EmulateWindowManagerReady() {
65  DCHECK(ScreenLocker::screen_locker_);
66  ScreenLocker::screen_locker_->OnWindowManagerReady();
67}
68
69views::Textfield* ScreenLockerTester::GetPasswordField() const {
70  DCHECK(ScreenLocker::screen_locker_);
71  return ScreenLocker::screen_locker_->screen_lock_view_->password_field_;
72}
73
74views::Widget* ScreenLockerTester::GetWidget() const {
75  DCHECK(ScreenLocker::screen_locker_);
76  return ScreenLocker::screen_locker_->lock_window_;
77}
78
79views::Widget* ScreenLockerTester::GetChildWidget() const {
80  DCHECK(ScreenLocker::screen_locker_);
81  return ScreenLocker::screen_locker_->lock_widget_;
82}
83
84}  // namespace test
85
86}  // namespace chromeos
87