| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 5 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h" | 9 #include "chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h" |
| 10 #include "chrome/browser/ui/views/tabs/tab.h" | 10 #include "chrome/browser/ui/views/tabs/tab.h" |
| 11 #include "chrome/browser/ui/views/tabs/tab_renderer_data.h" |
| 11 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 12 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
| 12 #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" | 13 #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" |
| 13 #include "chrome/browser/ui/views/tabs/tab_strip_observer.h" | 14 #include "chrome/browser/ui/views/tabs/tab_strip_observer.h" |
| 14 #include "chrome/test/base/testing_profile.h" | 15 #include "chrome/test/base/testing_profile.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "ui/base/material_design/material_design_controller.h" | 17 #include "ui/base/material_design/material_design_controller.h" |
| 17 #include "ui/gfx/canvas.h" | 18 #include "ui/gfx/canvas.h" |
| 18 #include "ui/gfx/geometry/rect_conversions.h" | 19 #include "ui/gfx/geometry/rect_conversions.h" |
| 19 #include "ui/gfx/path.h" | 20 #include "ui/gfx/path.h" |
| 20 #include "ui/gfx/skia_util.h" | 21 #include "ui/gfx/skia_util.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 widget_->Init(init_params); | 121 widget_->Init(init_params); |
| 121 widget_->SetContentsView(&parent_); | 122 widget_->SetContentsView(&parent_); |
| 122 } | 123 } |
| 123 | 124 |
| 124 void TearDown() override { | 125 void TearDown() override { |
| 125 widget_.reset(); | 126 widget_.reset(); |
| 126 views::ViewsTestBase::TearDown(); | 127 views::ViewsTestBase::TearDown(); |
| 127 } | 128 } |
| 128 | 129 |
| 129 protected: | 130 protected: |
| 131 bool IsShowingPinnedTabTitleChangedIndicator(int model_index) { |
| 132 return tab_strip_->tab_at(model_index) |
| 133 ->showing_pinned_tab_title_changed_indicator_; |
| 134 } |
| 135 |
| 130 // Returns the rectangular hit test region of |tab| in |tab|'s local | 136 // Returns the rectangular hit test region of |tab| in |tab|'s local |
| 131 // coordinate space. | 137 // coordinate space. |
| 132 gfx::Rect GetTabHitTestMask(Tab* tab) { | 138 gfx::Rect GetTabHitTestMask(Tab* tab) { |
| 133 views::ViewTargeter* targeter = tab->targeter(); | 139 views::ViewTargeter* targeter = tab->targeter(); |
| 134 DCHECK(targeter); | 140 DCHECK(targeter); |
| 135 views::MaskedTargeterDelegate* delegate = | 141 views::MaskedTargeterDelegate* delegate = |
| 136 static_cast<views::MaskedTargeterDelegate*>(tab); | 142 static_cast<views::MaskedTargeterDelegate*>(tab); |
| 137 | 143 |
| 138 gfx::Path mask; | 144 gfx::Path mask; |
| 139 bool valid_mask = delegate->GetHitTestMask(&mask); | 145 bool valid_mask = delegate->GetHitTestMask(&mask); |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 const int kTabStripWidth = 500; | 634 const int kTabStripWidth = 500; |
| 629 tab_strip_->SetBounds(0, 0, kTabStripWidth, 20); | 635 tab_strip_->SetBounds(0, 0, kTabStripWidth, 20); |
| 630 | 636 |
| 631 for (int i = 0; i < 100; ++i) | 637 for (int i = 0; i < 100; ++i) |
| 632 controller_->AddTab(i, (i == 0)); | 638 controller_->AddTab(i, (i == 0)); |
| 633 | 639 |
| 634 DoLayout(); | 640 DoLayout(); |
| 635 | 641 |
| 636 EXPECT_LE(tab_strip_->GetNewTabButtonBounds().right(), kTabStripWidth); | 642 EXPECT_LE(tab_strip_->GetNewTabButtonBounds().right(), kTabStripWidth); |
| 637 } | 643 } |
| 644 |
| 645 TEST_F(TabStripTest, PinnedTabTitleChangedIndicatorHidesOnSelect) { |
| 646 for (int i = 0; i < 2; ++i) |
| 647 controller_->AddTab(i, (i == 0)); |
| 648 |
| 649 // Two tabs, both pinned. |
| 650 TabRendererData pinned_data; |
| 651 pinned_data.pinned = true; |
| 652 tab_strip_->SetTabData(0, pinned_data); |
| 653 tab_strip_->SetTabData(1, pinned_data); |
| 654 |
| 655 EXPECT_FALSE(IsShowingPinnedTabTitleChangedIndicator(0)); |
| 656 EXPECT_FALSE(IsShowingPinnedTabTitleChangedIndicator(1)); |
| 657 |
| 658 // Change the title of the second tab (first tab is selected). |
| 659 tab_strip_->TabTitleChangedNotLoading(1); |
| 660 // Indicator should be shown. |
| 661 EXPECT_TRUE(IsShowingPinnedTabTitleChangedIndicator(1)); |
| 662 // Select the second tab. |
| 663 controller_->SelectTab(1); |
| 664 // Indicator should hide. |
| 665 EXPECT_FALSE(IsShowingPinnedTabTitleChangedIndicator(1)); |
| 666 } |
| OLD | NEW |