| Index: ui/views/bubble/bubble_delegate_unittest.cc
 | 
| diff --git a/ui/views/bubble/bubble_delegate_unittest.cc b/ui/views/bubble/bubble_delegate_unittest.cc
 | 
| deleted file mode 100644
 | 
| index 77f92aff9aad8bd4e54df3b63f9e6d985731eeb8..0000000000000000000000000000000000000000
 | 
| --- a/ui/views/bubble/bubble_delegate_unittest.cc
 | 
| +++ /dev/null
 | 
| @@ -1,323 +0,0 @@
 | 
| -// Copyright (c) 2012 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 <stddef.h>
 | 
| -
 | 
| -#include "base/macros.h"
 | 
| -#include "ui/base/hit_test.h"
 | 
| -#include "ui/events/event_utils.h"
 | 
| -#include "ui/views/bubble/bubble_delegate.h"
 | 
| -#include "ui/views/bubble/bubble_frame_view.h"
 | 
| -#include "ui/views/controls/button/label_button.h"
 | 
| -#include "ui/views/test/test_widget_observer.h"
 | 
| -#include "ui/views/test/views_test_base.h"
 | 
| -#include "ui/views/widget/widget.h"
 | 
| -#include "ui/views/widget/widget_observer.h"
 | 
| -
 | 
| -namespace views {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -class TestBubbleDelegateView : public BubbleDelegateView {
 | 
| - public:
 | 
| -  TestBubbleDelegateView(View* anchor_view)
 | 
| -      : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT),
 | 
| -        view_(new View()) {
 | 
| -    view_->SetFocusable(true);
 | 
| -    AddChildView(view_);
 | 
| -  }
 | 
| -  ~TestBubbleDelegateView() override {}
 | 
| -
 | 
| -  void SetAnchorRectForTest(gfx::Rect rect) {
 | 
| -    SetAnchorRect(rect);
 | 
| -  }
 | 
| -
 | 
| -  void SetAnchorViewForTest(View* view) {
 | 
| -    SetAnchorView(view);
 | 
| -  }
 | 
| -
 | 
| -  // BubbleDelegateView overrides:
 | 
| -  View* GetInitiallyFocusedView() override { return view_; }
 | 
| -  gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); }
 | 
| -
 | 
| -  BubbleFrameView* GetBubbleFrameViewForTest() const {
 | 
| -    return GetBubbleFrameView();
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  View* view_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(TestBubbleDelegateView);
 | 
| -};
 | 
| -
 | 
| -class BubbleDelegateTest : public ViewsTestBase {
 | 
| - public:
 | 
| -  BubbleDelegateTest() {}
 | 
| -  ~BubbleDelegateTest() override {}
 | 
| -
 | 
| -  // Creates a test widget that owns its native widget.
 | 
| -  Widget* CreateTestWidget() {
 | 
| -    Widget* widget = new Widget();
 | 
| -    Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
 | 
| -    params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
 | 
| -    widget->Init(params);
 | 
| -    return widget;
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  DISALLOW_COPY_AND_ASSIGN(BubbleDelegateTest);
 | 
| -};
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, CreateDelegate) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -  bubble_delegate->set_color(SK_ColorGREEN);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
 | 
| -  EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
 | 
| -  test::TestWidgetObserver bubble_observer(bubble_widget);
 | 
| -  bubble_widget->Show();
 | 
| -
 | 
| -  BubbleBorder* border = bubble_delegate->GetBubbleFrameView()->bubble_border();
 | 
| -  EXPECT_EQ(bubble_delegate->arrow(), border->arrow());
 | 
| -  EXPECT_EQ(bubble_delegate->color(), border->background_color());
 | 
| -
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -  bubble_widget->CloseNow();
 | 
| -  EXPECT_TRUE(bubble_observer.widget_closed());
 | 
| -}
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, CloseAnchorWidget) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -  // Preventing close on deactivate should not prevent closing with the anchor.
 | 
| -  bubble_delegate->set_close_on_deactivate(false);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
 | 
| -  EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
 | 
| -  EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -  test::TestWidgetObserver bubble_observer(bubble_widget);
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  bubble_widget->Show();
 | 
| -  EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  // TODO(msw): Remove activation hack to prevent bookkeeping errors in:
 | 
| -  //            aura::test::TestActivationClient::OnWindowDestroyed().
 | 
| -  std::unique_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget());
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  // Ensure that closing the anchor widget also closes the bubble itself.
 | 
| -  anchor_widget->CloseNow();
 | 
| -  EXPECT_TRUE(bubble_observer.widget_closed());
 | 
| -}
 | 
| -
 | 
| -// This test checks that the bubble delegate is capable to handle an early
 | 
| -// destruction of the used anchor view. (Animations and delayed closure of the
 | 
| -// bubble will call upon the anchor view to get its location).
 | 
| -TEST_F(BubbleDelegateTest, CloseAnchorViewTest) {
 | 
| -  // Create an anchor widget and add a view to be used as an anchor view.
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  std::unique_ptr<View> anchor_view(new View());
 | 
| -  anchor_widget->GetContentsView()->AddChildView(anchor_view.get());
 | 
| -  TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView(
 | 
| -      anchor_view.get());
 | 
| -  // Prevent flakes by avoiding closing on activation changes.
 | 
| -  bubble_delegate->set_close_on_deactivate(false);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -
 | 
| -  // Check that the anchor view is correct and set up an anchor view rect.
 | 
| -  // Make sure that this rect will get ignored (as long as the anchor view is
 | 
| -  // attached).
 | 
| -  EXPECT_EQ(anchor_view.get(), bubble_delegate->GetAnchorView());
 | 
| -  const gfx::Rect set_anchor_rect = gfx::Rect(10, 10, 100, 100);
 | 
| -  bubble_delegate->SetAnchorRectForTest(set_anchor_rect);
 | 
| -  const gfx::Rect view_rect = bubble_delegate->GetAnchorRect();
 | 
| -  EXPECT_NE(view_rect.ToString(), set_anchor_rect.ToString());
 | 
| -
 | 
| -  // Create the bubble.
 | 
| -  bubble_widget->Show();
 | 
| -  EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -
 | 
| -  // Remove now the anchor view and make sure that the original found rect
 | 
| -  // is still kept, so that the bubble does not jump when the view gets deleted.
 | 
| -  anchor_widget->GetContentsView()->RemoveChildView(anchor_view.get());
 | 
| -  anchor_view.reset();
 | 
| -  EXPECT_EQ(NULL, bubble_delegate->GetAnchorView());
 | 
| -  EXPECT_EQ(view_rect.ToString(), bubble_delegate->GetAnchorRect().ToString());
 | 
| -}
 | 
| -
 | 
| -// Testing that a move of the anchor view will lead to new bubble locations.
 | 
| -TEST_F(BubbleDelegateTest, TestAnchorRectMovesWithViewTest) {
 | 
| -  // Create an anchor widget and add a view to be used as anchor view.
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView());
 | 
| -  BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -
 | 
| -  anchor_widget->GetContentsView()->SetBounds(10, 10, 100, 100);
 | 
| -  const gfx::Rect view_rect = bubble_delegate->GetAnchorRect();
 | 
| -
 | 
| -  anchor_widget->GetContentsView()->SetBounds(20, 10, 100, 100);
 | 
| -  const gfx::Rect view_rect_2 = bubble_delegate->GetAnchorRect();
 | 
| -  EXPECT_NE(view_rect.ToString(), view_rect_2.ToString());
 | 
| -}
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, ResetAnchorWidget) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -
 | 
| -  // Make sure the bubble widget is parented to a widget other than the anchor
 | 
| -  // widget so that closing the anchor widget does not close the bubble widget.
 | 
| -  std::unique_ptr<Widget> parent_widget(CreateTestWidget());
 | 
| -  bubble_delegate->set_parent_window(parent_widget->GetNativeView());
 | 
| -  // Preventing close on deactivate should not prevent closing with the parent.
 | 
| -  bubble_delegate->set_close_on_deactivate(false);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
 | 
| -  EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
 | 
| -  EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -  test::TestWidgetObserver bubble_observer(bubble_widget);
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  // Showing and hiding the bubble widget should have no effect on its anchor.
 | 
| -  bubble_widget->Show();
 | 
| -  EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -  bubble_widget->Hide();
 | 
| -  EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -
 | 
| -  // Ensure that closing the anchor widget clears the bubble's reference to that
 | 
| -  // anchor widget, but the bubble itself does not close.
 | 
| -  anchor_widget->CloseNow();
 | 
| -  EXPECT_NE(anchor_widget.get(), bubble_delegate->anchor_widget());
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  // TODO(msw): Remove activation hack to prevent bookkeeping errors in:
 | 
| -  //            aura::test::TestActivationClient::OnWindowDestroyed().
 | 
| -  std::unique_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget());
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  // Ensure that closing the parent widget also closes the bubble itself.
 | 
| -  parent_widget->CloseNow();
 | 
| -  EXPECT_TRUE(bubble_observer.widget_closed());
 | 
| -}
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, InitiallyFocusedView) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  EXPECT_EQ(bubble_delegate->GetInitiallyFocusedView(),
 | 
| -            bubble_widget->GetFocusManager()->GetFocusedView());
 | 
| -  bubble_widget->CloseNow();
 | 
| -}
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, NonClientHitTest) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  TestBubbleDelegateView* bubble_delegate =
 | 
| -      new TestBubbleDelegateView(anchor_widget->GetContentsView());
 | 
| -  BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  BubbleFrameView* frame = bubble_delegate->GetBubbleFrameView();
 | 
| -  const int border = frame->bubble_border()->GetBorderThickness();
 | 
| -
 | 
| -  struct {
 | 
| -    const int point;
 | 
| -    const int hit;
 | 
| -  } cases[] = {
 | 
| -    { border,      HTNOWHERE },
 | 
| -    { border + 50, HTCLIENT  },
 | 
| -    { 1000,        HTNOWHERE },
 | 
| -  };
 | 
| -
 | 
| -  for (size_t i = 0; i < arraysize(cases); ++i) {
 | 
| -    gfx::Point point(cases[i].point, cases[i].point);
 | 
| -    EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point))
 | 
| -        << " with border: " << border << ", at point " << cases[i].point;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, VisibleWhenAnchorWidgetBoundsChanged) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  test::TestWidgetObserver bubble_observer(bubble_widget);
 | 
| -  EXPECT_FALSE(bubble_observer.widget_closed());
 | 
| -
 | 
| -  anchor_widget->Show();
 | 
| -  bubble_widget->Show();
 | 
| -  EXPECT_TRUE(bubble_widget->IsVisible());
 | 
| -  anchor_widget->SetBounds(gfx::Rect(10, 10, 100, 100));
 | 
| -  EXPECT_TRUE(bubble_widget->IsVisible());
 | 
| -}
 | 
| -
 | 
| -// Test that setting WidgetDelegate::set_can_activate() to false makes the
 | 
| -// widget created via BubbleDelegateView::CreateBubble() not activatable.
 | 
| -TEST_F(BubbleDelegateTest, NotActivatable) {
 | 
| -  std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -  BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -      anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -  bubble_delegate->set_can_activate(false);
 | 
| -  Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -  bubble_widget->Show();
 | 
| -  EXPECT_FALSE(bubble_widget->CanActivate());
 | 
| -}
 | 
| -
 | 
| -TEST_F(BubbleDelegateTest, CloseReasons) {
 | 
| -  {
 | 
| -    std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -    BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -        anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -    bubble_delegate->set_close_on_deactivate(true);
 | 
| -    Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -    anchor_widget->Show();
 | 
| -    bubble_widget->Show();
 | 
| -    anchor_widget->Activate();
 | 
| -    EXPECT_TRUE(bubble_widget->IsClosed());
 | 
| -    EXPECT_EQ(BubbleDelegateView::CloseReason::DEACTIVATION,
 | 
| -              bubble_delegate->close_reason());
 | 
| -  }
 | 
| -
 | 
| -  {
 | 
| -    std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -    BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
 | 
| -        anchor_widget->GetContentsView(), BubbleBorder::NONE);
 | 
| -    bubble_delegate->set_close_on_esc(true);
 | 
| -    Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -    bubble_widget->Show();
 | 
| -    // Cast as a test hack to access AcceleratorPressed() (which is protected
 | 
| -    // in BubbleDelegate).
 | 
| -    static_cast<View*>(bubble_delegate)
 | 
| -        ->AcceleratorPressed(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE));
 | 
| -    EXPECT_TRUE(bubble_widget->IsClosed());
 | 
| -    EXPECT_EQ(BubbleDelegateView::CloseReason::ESCAPE,
 | 
| -              bubble_delegate->close_reason());
 | 
| -  }
 | 
| -
 | 
| -  {
 | 
| -    std::unique_ptr<Widget> anchor_widget(CreateTestWidget());
 | 
| -    TestBubbleDelegateView* bubble_delegate =
 | 
| -        new TestBubbleDelegateView(anchor_widget->GetContentsView());
 | 
| -    Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
 | 
| -    bubble_widget->Show();
 | 
| -    BubbleFrameView* frame_view = bubble_delegate->GetBubbleFrameViewForTest();
 | 
| -    LabelButton* close_button = frame_view->close_;
 | 
| -    ASSERT_TRUE(close_button);
 | 
| -    frame_view->ButtonPressed(
 | 
| -        close_button,
 | 
| -        ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), gfx::Point(0, 0),
 | 
| -                       ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE));
 | 
| -    EXPECT_TRUE(bubble_widget->IsClosed());
 | 
| -    EXPECT_EQ(BubbleDelegateView::CloseReason::CLOSE_BUTTON,
 | 
| -              bubble_delegate->close_reason());
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -}  // namespace views
 | 
| 
 |