Chromium Code Reviews| Index: headless/lib/browser/headless_focus_client.cc |
| diff --git a/headless/lib/browser/headless_focus_client.cc b/headless/lib/browser/headless_focus_client.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..069ec9be082dd708bc1fca7d7c8fbc0be161a98c |
| --- /dev/null |
| +++ b/headless/lib/browser/headless_focus_client.cc |
| @@ -0,0 +1,62 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "headless/lib/browser/headless_focus_client.h" |
| + |
| +#include "ui/aura/client/focus_change_observer.h" |
| +#include "ui/aura/window.h" |
| + |
| +namespace headless { |
| + |
| +HeadlessFocusClient::HeadlessFocusClient() : observer_manager_(this) {} |
| + |
| +HeadlessFocusClient::~HeadlessFocusClient() {} |
| + |
| +void HeadlessFocusClient::AddObserver( |
| + aura::client::FocusChangeObserver* observer) { |
| + focus_observers_.AddObserver(observer); |
| +} |
| + |
| +void HeadlessFocusClient::RemoveObserver( |
| + aura::client::FocusChangeObserver* observer) { |
| + focus_observers_.RemoveObserver(observer); |
| +} |
| + |
| +void HeadlessFocusClient::FocusWindow(aura::Window* window) { |
| + if (window && !window->CanFocus()) |
| + return; |
| + |
| + focused_windows_.insert(window); |
| + if (window) |
| + observer_manager_.Add(window); |
| + |
| + for (aura::client::FocusChangeObserver& observer : focus_observers_) |
| + observer.OnWindowFocused(window, NULL); |
| + aura::client::FocusChangeObserver* observer = |
| + aura::client::GetFocusChangeObserver(window); |
| + if (observer) |
| + observer->OnWindowFocused(window, NULL); |
| +} |
| + |
| +void HeadlessFocusClient::ResetFocusWithinActiveWindow(aura::Window* window) { |
| + for (auto focused_window : focused_windows_) { |
| + if (focused_window->Contains(window)) { |
| + FocusWindow(window); |
| + break; |
| + } |
| + } |
| +} |
| + |
| +aura::Window* HeadlessFocusClient::GetFocusedWindow() { |
|
irisu
2017/02/24 04:48:31
I'm not sure what we'd want to return here. Just r
Eric Seckler
2017/02/27 08:39:38
Hmm, I see. Looks like aura doesn't really support
|
| + if (focused_windows_.empty()) |
| + return NULL; |
| + return *focused_windows_.begin(); |
| +} |
| + |
| +void HeadlessFocusClient::OnWindowDestroying(aura::Window* window) { |
| + observer_manager_.Remove(window); |
| + focused_windows_.erase(window); |
| +} |
| + |
| +} // namespace headless |