1// Copyright 2013 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 "ui/aura/test/test_focus_client.h"
6
7#include "ui/aura/client/focus_change_observer.h"
8#include "ui/aura/window.h"
9
10namespace aura {
11namespace test {
12
13////////////////////////////////////////////////////////////////////////////////
14// TestFocusClient, public:
15
16TestFocusClient::TestFocusClient()
17    : focused_window_(NULL),
18      observer_manager_(this) {
19}
20
21TestFocusClient::~TestFocusClient() {
22}
23
24////////////////////////////////////////////////////////////////////////////////
25// TestFocusClient, client::FocusClient implementation:
26
27void TestFocusClient::AddObserver(client::FocusChangeObserver* observer) {
28}
29
30void TestFocusClient::RemoveObserver(client::FocusChangeObserver* observer) {
31}
32
33void TestFocusClient::FocusWindow(Window* window) {
34  if (window && !window->CanFocus())
35    return;
36  if (focused_window_)
37    observer_manager_.Remove(focused_window_);
38  aura::Window* old_focused_window = focused_window_;
39  focused_window_ = window;
40  if (focused_window_)
41    observer_manager_.Add(focused_window_);
42
43  client::FocusChangeObserver* observer =
44      client::GetFocusChangeObserver(old_focused_window);
45  if (observer)
46    observer->OnWindowFocused(focused_window_, old_focused_window);
47  observer = client::GetFocusChangeObserver(focused_window_);
48  if (observer)
49    observer->OnWindowFocused(focused_window_, old_focused_window);
50}
51
52void TestFocusClient::ResetFocusWithinActiveWindow(Window* window) {
53  if (!window->Contains(focused_window_))
54    FocusWindow(window);
55}
56
57Window* TestFocusClient::GetFocusedWindow() {
58  return focused_window_;
59}
60
61////////////////////////////////////////////////////////////////////////////////
62// TestFocusClient, WindowObserver implementation:
63
64void TestFocusClient::OnWindowDestroying(Window* window) {
65  DCHECK_EQ(window, focused_window_);
66  FocusWindow(NULL);
67}
68
69}  // namespace test
70}  // namespace aura
71