// Copyright 2014 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 "ui/views/widget/desktop_aura/desktop_focus_rules.h"

#include "ui/aura/client/focus_client.h"
#include "ui/aura/test/test_window_delegate.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/aura/window_layer_type.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
#include "ui/views/widget/widget.h"
#include "ui/wm/core/window_util.h"

namespace views {

namespace {

scoped_ptr<Widget> CreateDesktopWidget() {
  scoped_ptr<Widget> widget(new Widget);
  Widget::InitParams params = Widget::InitParams(
      Widget::InitParams::TYPE_WINDOW);
  params.bounds = gfx::Rect(0, 0, 200, 200);
  params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
  params.native_widget = new DesktopNativeWidgetAura(widget.get());
  widget->Init(params);
  return widget.Pass();
}

}  // namespace

typedef ViewsTestBase DesktopFocusRulesTest;

// Verifies we don't attempt to activate a window in another widget.
TEST_F(DesktopFocusRulesTest, DontFocusWindowsInOtherHierarchies) {
  // Two widgets (each with a DesktopNativeWidgetAura). |w2| has a child Window
  // |w2_child| that is not focusable. |w2_child|'s has a transient parent in
  // |w1|.
  scoped_ptr<views::Widget> w1(CreateDesktopWidget());
  scoped_ptr<views::Widget> w2(CreateDesktopWidget());
  aura::test::TestWindowDelegate w2_child_delegate;
  w2_child_delegate.set_can_focus(false);
  aura::Window* w2_child = new aura::Window(&w2_child_delegate);
  w2_child->Init(aura::WINDOW_LAYER_SOLID_COLOR);
  w2->GetNativeView()->AddChild(w2_child);
  wm::AddTransientChild(w1->GetNativeView(), w2_child);
  aura::client::GetFocusClient(w2->GetNativeView())->FocusWindow(w2_child);
  aura::Window* focused =
      aura::client::GetFocusClient(w2->GetNativeView())->GetFocusedWindow();
  EXPECT_TRUE((focused == NULL) || w2->GetNativeView()->Contains(focused));
  wm::RemoveTransientChild(w1->GetNativeView(), w2_child);
  w1.reset();
  w2.reset();
}

}  // namespace views
