Fixes for FocusController to make it pass interactive_ui_tests.
http://crbug.com/162100
[email protected]
Review URL: https://codereview.chromium.org/11809002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176455 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ash/display/screen_position_controller.cc b/ash/display/screen_position_controller.cc
index 4f86bf9d3..8d7f695 100644
--- a/ash/display/screen_position_controller.cc
+++ b/ash/display/screen_position_controller.cc
@@ -195,7 +195,7 @@
// Restore focused/active window.
if (tracker.Contains(focused)) {
- aura::client::GetFocusClient(window)->FocusWindow(focused, NULL);
+ aura::client::GetFocusClient(window)->FocusWindow(focused);
} else if (tracker.Contains(active)) {
activation_client->ActivateWindow(active);
}
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index 5ea37bb..543a0840 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -449,13 +449,13 @@
// window may be deleted when losing focus (fullscreen flash for
// example). If the focused window is still alive after move, it'll
// be re-focused below.
- aura::client::GetFocusClient(dst)->FocusWindow(NULL, NULL);
+ aura::client::GetFocusClient(dst)->FocusWindow(NULL);
ReparentAllWindows(root_window_.get(), dst);
// Restore focused or active window if it's still alive.
if (focused && tracker.Contains(focused) && dst->Contains(focused)) {
- aura::client::GetFocusClient(dst)->FocusWindow(focused, NULL);
+ aura::client::GetFocusClient(dst)->FocusWindow(focused);
} else if (active && tracker.Contains(active) && dst->Contains(active)) {
activation_client->ActivateWindow(active);
}
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 54aa82d..f50fcdc4 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -160,7 +160,7 @@
aura::Window* d2 = CreateTestWindowInShellWithDelegate(
&delete_on_blur_delegate, 0, gfx::Rect(50, 50, 100, 100));
delete_on_blur_delegate.SetWindow(d2);
- aura::client::GetFocusClient(root_windows[0])->FocusWindow(d2, NULL);
+ aura::client::GetFocusClient(root_windows[0])->FocusWindow(d2);
tracker.Add(d2);
UpdateDisplay("600x600");
diff --git a/ash/shell.cc b/ash/shell.cc
index 4aa86ee..fc219da 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -233,7 +233,7 @@
// effects (e.g. crashes) from changing focus during shutdown.
// See bug crbug.com/134502.
if (active_root_window_)
- aura::client::GetFocusClient(active_root_window_)->FocusWindow(NULL, NULL);
+ aura::client::GetFocusClient(active_root_window_)->FocusWindow(NULL);
// Please keep in same order as in Init() because it's easy to miss one.
RemovePreTargetHandler(user_activity_detector_.get());
diff --git a/ash/wm/activation_controller.cc b/ash/wm/activation_controller.cc
index ccdc238c..0e50f2c 100644
--- a/ash/wm/activation_controller.cc
+++ b/ash/wm/activation_controller.cc
@@ -329,7 +329,7 @@
if (window &&
!window->Contains(aura::client::GetFocusClient(window)->
GetFocusedWindow())) {
- aura::client::GetFocusClient(window)->FocusWindow(window, event);
+ aura::client::GetFocusClient(window)->FocusWindow(window);
}
if (window) {
@@ -424,7 +424,7 @@
window = delegate_->WillFocusWindow(window);
if (GetActiveWindow() != window) {
aura::client::GetFocusClient(window)->FocusWindow(
- FindFocusableWindowFor(window), event);
+ FindFocusableWindowFor(window));
}
}
diff --git a/chrome/browser/ui/browser_focus_uitest.cc b/chrome/browser/ui/browser_focus_uitest.cc
index 3f9f689..bdfd6f9 100644
--- a/chrome/browser/ui/browser_focus_uitest.cc
+++ b/chrome/browser/ui/browser_focus_uitest.cc
@@ -735,7 +735,7 @@
// Focus stays on page with interstitials.
// http://crbug.com/81451
-#if defined(OS_MACOSX) || defined(OS_WIN)
+#if defined(OS_MACOSX) || (defined(OS_WIN) && !defined(USE_AURA))
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_InterstitialFocus) {
#else
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, InterstitialFocus) {
diff --git a/ui/aura/client/focus_client.h b/ui/aura/client/focus_client.h
index 09dcdc9..ff5f7f6 100644
--- a/ui/aura/client/focus_client.h
+++ b/ui/aura/client/focus_client.h
@@ -28,8 +28,11 @@
virtual void RemoveObserver(FocusChangeObserver* observer) = 0;
// Focuses |window|. Passing NULL clears focus.
- // TODO(beng): |event| may be obsolete.
- virtual void FocusWindow(Window* window, const ui::Event* event) = 0;
+ virtual void FocusWindow(Window* window) = 0;
+
+ // Sets focus to |window| if it's within the active window. Not intended as a
+ // general purpose API, use FocusWindow() instead.
+ virtual void ResetFocusWithinActiveWindow(Window* window) = 0;
// Retrieves the focused window, or NULL if there is none.
virtual Window* GetFocusedWindow() = 0;
diff --git a/ui/aura/focus_manager.cc b/ui/aura/focus_manager.cc
index 9bc3673..921406b4 100644
--- a/ui/aura/focus_manager.cc
+++ b/ui/aura/focus_manager.cc
@@ -31,7 +31,7 @@
observers_.RemoveObserver(observer);
}
-void FocusManager::FocusWindow(Window* focused_window, const ui::Event* event) {
+void FocusManager::FocusWindow(Window* focused_window) {
if (focused_window == focused_window_)
return;
if (focused_window && !focused_window->CanFocus())
@@ -45,7 +45,7 @@
DCHECK(root);
if (client::GetActivationClient(root) &&
!client::GetActivationClient(root)->OnWillFocusWindow(
- focused_window, event)) {
+ focused_window, NULL)) {
return;
}
}
@@ -64,6 +64,10 @@
observer->OnWindowFocused(focused_window_, old_focused_window);
}
+void FocusManager::ResetFocusWithinActiveWindow(Window* window) {
+ FocusWindow(window);
+}
+
Window* FocusManager::GetFocusedWindow() {
return focused_window_;
}
@@ -94,7 +98,7 @@
focus_to, NULL)))) {
focus_to = NULL;
}
- client::GetFocusClient(root_window)->FocusWindow(focus_to, NULL);
+ client::GetFocusClient(root_window)->FocusWindow(focus_to);
}
}
diff --git a/ui/aura/focus_manager.h b/ui/aura/focus_manager.h
index 7230a61..b3a1331 100644
--- a/ui/aura/focus_manager.h
+++ b/ui/aura/focus_manager.h
@@ -29,7 +29,8 @@
// Overridden from client::FocusClient:
virtual void AddObserver(client::FocusChangeObserver* observer) OVERRIDE;
virtual void RemoveObserver(client::FocusChangeObserver* observer) OVERRIDE;
- virtual void FocusWindow(Window* window, const ui::Event* event) OVERRIDE;
+ virtual void FocusWindow(Window* window) OVERRIDE;
+ virtual void ResetFocusWithinActiveWindow(Window* window) OVERRIDE;
virtual Window* GetFocusedWindow() OVERRIDE;
virtual void OnWindowHiddenInRootWindow(aura::Window* window,
aura::RootWindow* root_window,
diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc
index 8a14bd2..1a1995f 100644
--- a/ui/aura/root_window.cc
+++ b/ui/aura/root_window.cc
@@ -744,7 +744,7 @@
client::EventClient* client = client::GetEventClient(GetRootWindow());
Window* focused_window = client::GetFocusClient(this)->GetFocusedWindow();
if (client && !client->CanProcessEventsWithinSubtree(focused_window)) {
- client::GetFocusClient(this)->FocusWindow(NULL, NULL);
+ client::GetFocusClient(this)->FocusWindow(NULL);
return false;
}
ProcessEvent(focused_window ? focused_window : this, event);
diff --git a/ui/aura/root_window_unittest.cc b/ui/aura/root_window_unittest.cc
index 5815fc9..c6574f47 100644
--- a/ui/aura/root_window_unittest.cc
+++ b/ui/aura/root_window_unittest.cc
@@ -658,7 +658,7 @@
WindowTracker tracker;
DeletingEventFilter* w1_filter = new DeletingEventFilter;
w1->SetEventFilter(w1_filter);
- client::GetFocusClient(w1.get())->FocusWindow(w11, NULL);
+ client::GetFocusClient(w1.get())->FocusWindow(w11);
test::EventGenerator generator(root_window(), w11);
diff --git a/ui/aura/window.cc b/ui/aura/window.cc
index 8598580..9eec35c 100644
--- a/ui/aura/window.cc
+++ b/ui/aura/window.cc
@@ -522,13 +522,13 @@
void Window::Focus() {
client::FocusClient* client = client::GetFocusClient(this);
DCHECK(client);
- client->FocusWindow(this, NULL);
+ client->FocusWindow(this);
}
void Window::Blur() {
client::FocusClient* client = client::GetFocusClient(this);
DCHECK(client);
- client->FocusWindow(NULL, NULL);
+ client->FocusWindow(NULL);
}
bool Window::HasFocus() const {
diff --git a/ui/views/controls/native/native_view_host_aura.cc b/ui/views/controls/native/native_view_host_aura.cc
index 61a66384..8b62ab8 100644
--- a/ui/views/controls/native/native_view_host_aura.cc
+++ b/ui/views/controls/native/native_view_host_aura.cc
@@ -83,7 +83,7 @@
aura::Window* window = host_->native_view();
aura::client::FocusClient* client = aura::client::GetFocusClient(window);
if (client)
- client->FocusWindow(window, NULL);
+ client->FocusWindow(window);
}
gfx::NativeViewAccessible NativeViewHostAura::GetNativeViewAccessible() {
diff --git a/ui/views/corewm/corewm_switches.cc b/ui/views/corewm/corewm_switches.cc
index 52577ff..02c526f 100644
--- a/ui/views/corewm/corewm_switches.cc
+++ b/ui/views/corewm/corewm_switches.cc
@@ -10,9 +10,9 @@
namespace corewm {
namespace switches {
-// When set uses the CoreWM FocusController in place of the Ash
-// ActivationController and aura FocusManager.
-const char kUseFocusController[] = "views-corewm-use-focus-controller";
+// When set uses the old ActivationController/FocusManager instead of the new
+// CoreWM FocusController.
+const char kDisableFocusController[] = "disable-focus-controller";
// If present animations are disabled.
const char kWindowAnimationsDisabled[] =
@@ -21,8 +21,8 @@
} // namespace switches
bool UseFocusController() {
- return CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kUseFocusController);
+ return !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableFocusController);
}
} // namespace corewm
diff --git a/ui/views/corewm/focus_controller.cc b/ui/views/corewm/focus_controller.cc
index f095bbe27b..1d7fc65 100644
--- a/ui/views/corewm/focus_controller.cc
+++ b/ui/views/corewm/focus_controller.cc
@@ -63,12 +63,12 @@
}
void FocusController::ActivateWindow(aura::Window* window) {
- FocusWindow(window, NULL);
+ FocusWindow(window);
}
void FocusController::DeactivateWindow(aura::Window* window) {
if (window)
- FocusWindow(rules_->GetNextActivatableWindow(window), NULL);
+ FocusWindow(rules_->GetNextActivatableWindow(window));
}
aura::Window* FocusController::GetActiveWindow() {
@@ -106,8 +106,7 @@
focus_observers_.RemoveObserver(observer);
}
-void FocusController::FocusWindow(aura::Window* window,
- const ui::Event* event) {
+void FocusController::FocusWindow(aura::Window* window) {
if (updating_focus_)
return;
@@ -134,6 +133,15 @@
SetFocusedWindow(focusable);
}
+void FocusController::ResetFocusWithinActiveWindow(aura::Window* window) {
+ DCHECK(window);
+ if (!active_window_)
+ return;
+ if (!active_window_->Contains(window))
+ return;
+ SetFocusedWindow(window);
+}
+
aura::Window* FocusController::GetFocusedWindow() {
return focused_window_;
}
@@ -278,7 +286,7 @@
}
void FocusController::WindowFocusedFromInputEvent(aura::Window* window) {
- FocusWindow(window, NULL);
+ FocusWindow(window);
}
} // namespace corewm
diff --git a/ui/views/corewm/focus_controller.h b/ui/views/corewm/focus_controller.h
index 96664999..b14112a 100644
--- a/ui/views/corewm/focus_controller.h
+++ b/ui/views/corewm/focus_controller.h
@@ -55,7 +55,7 @@
virtual aura::Window* GetActivatableWindow(aura::Window* window) OVERRIDE;
virtual aura::Window* GetToplevelWindow(aura::Window* window) OVERRIDE;
virtual bool OnWillFocusWindow(aura::Window* window,
- const ui::Event* event) OVERRIDE;
+ const ui::Event* event) OVERRIDE;
virtual bool CanActivateWindow(aura::Window* window) const OVERRIDE;
// Overridden from aura::client::FocusClient:
@@ -63,8 +63,8 @@
aura::client::FocusChangeObserver* observer) OVERRIDE;
virtual void RemoveObserver(
aura::client::FocusChangeObserver* observer) OVERRIDE;
- virtual void FocusWindow(aura::Window* window,
- const ui::Event* event) OVERRIDE;
+ virtual void FocusWindow(aura::Window* window) OVERRIDE;
+ virtual void ResetFocusWithinActiveWindow(aura::Window* window) OVERRIDE;
virtual aura::Window* GetFocusedWindow() OVERRIDE;
virtual void OnWindowHiddenInRootWindow(aura::Window* window,
aura::RootWindow* root_window,
diff --git a/ui/views/corewm/focus_controller_unittest.cc b/ui/views/corewm/focus_controller_unittest.cc
index 01b1462..3958096 100644
--- a/ui/views/corewm/focus_controller_unittest.cc
+++ b/ui/views/corewm/focus_controller_unittest.cc
@@ -94,7 +94,7 @@
virtual void OnWindowFocused(aura::Window* gained_focus,
aura::Window* lost_focus) OVERRIDE {
DCHECK_NE(gained_focus, other_);
- aura::client::GetFocusClient(other_)->FocusWindow(other_, NULL);
+ aura::client::GetFocusClient(other_)->FocusWindow(other_);
}
aura::Window* other_;
@@ -264,7 +264,7 @@
}
void FocusWindow(aura::Window* window) {
- aura::client::GetFocusClient(root_window())->FocusWindow(window, NULL);
+ aura::client::GetFocusClient(root_window())->FocusWindow(window);
}
aura::Window* GetFocusedWindow() {
return aura::client::GetFocusClient(root_window())->GetFocusedWindow();
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc
index b4d1753..318264c 100644
--- a/ui/views/focus/focus_manager_unittest.cc
+++ b/ui/views/focus/focus_manager_unittest.cc
@@ -28,7 +28,7 @@
void FocusNativeView(gfx::NativeView view) {
#if defined(USE_AURA)
- aura::client::GetFocusClient(view)->FocusWindow(view, NULL);
+ aura::client::GetFocusClient(view)->FocusWindow(view);
#elif defined(OS_WIN)
SetFocus(view);
#else
diff --git a/ui/views/widget/desktop_aura/desktop_activation_client.cc b/ui/views/widget/desktop_aura/desktop_activation_client.cc
index 14bf80e..3f12da4 100644
--- a/ui/views/widget/desktop_aura/desktop_activation_client.cc
+++ b/ui/views/widget/desktop_aura/desktop_activation_client.cc
@@ -68,7 +68,7 @@
if (window &&
!window->Contains(aura::client::GetFocusClient(window)->
GetFocusedWindow())) {
- aura::client::GetFocusClient(window)->FocusWindow(window, NULL);
+ aura::client::GetFocusClient(window)->FocusWindow(window);
}
aura::Window* old_active = current_active_;
@@ -183,7 +183,7 @@
aura::Window* window = static_cast<aura::Window*>(event->target());
if (GetActiveWindow() != window) {
aura::client::GetFocusClient(window)->FocusWindow(
- FindFocusableWindowFor(window), event);
+ FindFocusableWindowFor(window));
}
}
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index 83ccb1f..953fac6 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -433,7 +433,7 @@
void DesktopNativeWidgetAura::ClearNativeFocus() {
desktop_root_window_host_->ClearNativeFocus();
- aura::client::GetFocusClient(window_)->FocusWindow(window_, NULL);
+ aura::client::GetFocusClient(window_)->FocusWindow(window_);
}
gfx::Rect DesktopNativeWidgetAura::GetWorkAreaBoundsInScreen() const {
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc
index fc8041e..e487e47f 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc
@@ -244,7 +244,7 @@
aura::client::SetWindowMoveClient(root_window_,
x11_window_move_client_.get());
- focus_client_->FocusWindow(content_window_, NULL);
+ focus_client_->FocusWindow(content_window_);
return root_window_;
}
@@ -519,8 +519,7 @@
if (content_window_ && aura::client::GetFocusClient(content_window_) &&
content_window_->Contains(
aura::client::GetFocusClient(content_window_)->GetFocusedWindow())) {
- aura::client::GetFocusClient(content_window_)->FocusWindow(
- content_window_, NULL);
+ aura::client::GetFocusClient(content_window_)->FocusWindow(content_window_);
}
}
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
index 23b2f06..9204a2fa 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
@@ -142,7 +142,7 @@
GetHWND()));
aura::client::SetDragDropClient(root_window_, drag_drop_client_.get());
- focus_client_->FocusWindow(content_window_, NULL);
+ focus_client_->FocusWindow(content_window_);
root_window_->SetProperty(kContentWindowForRootWindow, content_window_);
ui_controls::InstallUIControlsAura(CreateUIControlsAura(root_window_));
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 1bc65ba..5089485 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -594,7 +594,7 @@
void NativeWidgetAura::ClearNativeFocus() {
aura::client::FocusClient* client = aura::client::GetFocusClient(window_);
if (window_ && client && window_->Contains(client->GetFocusedWindow()))
- client->FocusWindow(window_, NULL);
+ client->ResetFocusWithinActiveWindow(window_);
}
gfx::Rect NativeWidgetAura::GetWorkAreaBoundsInScreen() const {