diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-18 07:43:56 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-18 07:43:56 +0000 |
commit | 10807a7da2e42e09f5bd20068a916b6220bd88d7 (patch) | |
tree | abc3d09b16e3541b565da174ea571616b922e402 /ash | |
parent | 77ad20e3e4473c7f7ce4a94c3269b389d2e8b648 (diff) | |
download | chromium_src-10807a7da2e42e09f5bd20068a916b6220bd88d7.zip chromium_src-10807a7da2e42e09f5bd20068a916b6220bd88d7.tar.gz chromium_src-10807a7da2e42e09f5bd20068a916b6220bd88d7.tar.bz2 |
ash: Fix launcher overflow bubble crash.
LauncherView needs a valid ShelfLayoutManager now so passing the outer
launcher's shelf layout manager to the one hosted by the bubble.
And add a LauncherTest.ShowOverflowBubble for sanity test.
BUG=166457
TEST=Verify no crash on showing launcher overflow bubble
and LauncherTest.ShowOverflowBubble should pass.
R=jamescook@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11623002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173683 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/launcher/launcher_unittest.cc | 27 | ||||
-rw-r--r-- | ash/launcher/launcher_view_unittest.cc | 6 | ||||
-rw-r--r-- | ash/launcher/overflow_bubble.cc | 20 | ||||
-rw-r--r-- | ash/launcher/overflow_bubble.h | 2 | ||||
-rw-r--r-- | ash/test/launcher_view_test_api.cc | 4 | ||||
-rw-r--r-- | ash/test/launcher_view_test_api.h | 3 |
6 files changed, 51 insertions, 11 deletions
diff --git a/ash/launcher/launcher_unittest.cc b/ash/launcher/launcher_unittest.cc index 2c3f8a8..528e302 100644 --- a/ash/launcher/launcher_unittest.cc +++ b/ash/launcher/launcher_unittest.cc @@ -77,4 +77,31 @@ TEST_F(LauncherTest, OpenBrowser) { ASSERT_EQ(--button_count, test.GetButtonCount()); } +TEST_F(LauncherTest, ShowOverflowBubble) { + Launcher* launcher = Launcher::ForPrimaryDisplay(); + ASSERT_TRUE(launcher); + + LauncherView* launcher_view = launcher->GetLauncherViewForTest(); + test::LauncherViewTestAPI test(launcher_view); + test.SetAnimationDuration(1); // Speeds up animation for test. + + LauncherModel* model = launcher_view->model(); + + // Add tabbed browser until overflow. + int items_added = 0; + while (!test.IsOverflowButtonVisible()) { + LauncherItem item; + item.type = TYPE_TABBED; + item.status = STATUS_RUNNING; + model->Add(item); + + ++items_added; + ASSERT_LT(items_added, 10000); + } + + // Shows overflow bubble. + test.ShowOverflowBubble(); + EXPECT_TRUE(launcher->IsShowingOverflowBubble()); +} + } // namespace ash diff --git a/ash/launcher/launcher_view_unittest.cc b/ash/launcher/launcher_view_unittest.cc index 8fb6529..9be81d8 100644 --- a/ash/launcher/launcher_view_unittest.cc +++ b/ash/launcher/launcher_view_unittest.cc @@ -90,7 +90,7 @@ class LauncherViewIconObserverTest : public ash::test::AshTestBase { TestLauncherIconObserver* observer() { return observer_.get(); } - LauncherViewTestAPI* launcher_vew_test() { + LauncherViewTestAPI* launcher_view_test() { return launcher_view_test_.get(); } @@ -113,13 +113,13 @@ TEST_F(LauncherViewIconObserverTest, AddRemove) { scoped_ptr<views::Widget> widget(new views::Widget()); widget->Init(params); launcher_delegate->AddLauncherItem(widget->GetNativeWindow()); - launcher_vew_test()->RunMessageLoopUntilAnimationsDone(); + launcher_view_test()->RunMessageLoopUntilAnimationsDone(); EXPECT_TRUE(observer()->change_notified()); observer()->Reset(); widget->Show(); widget->GetNativeWindow()->parent()->RemoveChild(widget->GetNativeWindow()); - launcher_vew_test()->RunMessageLoopUntilAnimationsDone(); + launcher_view_test()->RunMessageLoopUntilAnimationsDone(); EXPECT_TRUE(observer()->change_notified()); observer()->Reset(); } diff --git a/ash/launcher/overflow_bubble.cc b/ash/launcher/overflow_bubble.cc index 06a0f52..58201e5 100644 --- a/ash/launcher/overflow_bubble.cc +++ b/ash/launcher/overflow_bubble.cc @@ -101,23 +101,29 @@ void OverflowBubbleView::InitOverflowBubble(LauncherDelegate* delegate, LauncherModel* model, views::View* anchor, int overflow_start_index) { + // set_anchor_view needs to be called before GetShelfLayoutManagerForLauncher + // can be called. + set_anchor_view(anchor); + set_arrow_location(GetBubbleArrowLocation()); + set_background(NULL); + set_color(SkColorSetARGB(kLauncherBackgroundAlpha, 0, 0, 0)); + set_margins(gfx::Insets(kPadding, kPadding, kPadding, kPadding)); + set_move_with_anchor(true); + // Makes bubble view has a layer and clip its children layers. SetPaintToLayer(true); SetFillsBoundsOpaquely(false); layer()->SetMasksToBounds(true); - launcher_view_ = new LauncherView(model, delegate, NULL); + + launcher_view_ = new LauncherView(model, + delegate, + GetShelfLayoutManagerForLauncher()); launcher_view_->set_first_visible_index(overflow_start_index); launcher_view_->set_leading_inset(kLauncherViewLeadingInset); launcher_view_->Init(); launcher_view_->OnShelfAlignmentChanged(); AddChildView(launcher_view_); - set_anchor_view(anchor); - set_arrow_location(GetBubbleArrowLocation()); - set_background(NULL); - set_color(SkColorSetARGB(kLauncherBackgroundAlpha, 0, 0, 0)); - set_margins(gfx::Insets(kPadding, kPadding, kPadding, kPadding)); - set_move_with_anchor(true); views::BubbleDelegateView::CreateBubble(this); } diff --git a/ash/launcher/overflow_bubble.h b/ash/launcher/overflow_bubble.h index b1ea42e..dd70f4f 100644 --- a/ash/launcher/overflow_bubble.h +++ b/ash/launcher/overflow_bubble.h @@ -22,7 +22,7 @@ namespace internal { class LauncherView; -// OverflowBubble displays an overflow bubble. +// OverflowBubble displays the overflown launcher items in a bubble. class OverflowBubble : public views::WidgetObserver { public: OverflowBubble(); diff --git a/ash/test/launcher_view_test_api.cc b/ash/test/launcher_view_test_api.cc index 8d2885b..8853ca4 100644 --- a/ash/test/launcher_view_test_api.cc +++ b/ash/test/launcher_view_test_api.cc @@ -64,6 +64,10 @@ bool LauncherViewTestAPI::IsOverflowButtonVisible() { return launcher_view_->overflow_button_->visible(); } +void LauncherViewTestAPI::ShowOverflowBubble() { + launcher_view_->ShowOverflowBubble(); +} + const gfx::Rect& LauncherViewTestAPI::GetBoundsByIndex(int index) { return launcher_view_->view_model_->view_at(index)->bounds(); } diff --git a/ash/test/launcher_view_test_api.h b/ash/test/launcher_view_test_api.h index ee56607..f44f617 100644 --- a/ash/test/launcher_view_test_api.h +++ b/ash/test/launcher_view_test_api.h @@ -42,6 +42,9 @@ class LauncherViewTestAPI { // Returns true if overflow button is visible. bool IsOverflowButtonVisible(); + // Makes launcher view show its overflow bubble. + void ShowOverflowBubble(); + // Sets animation duration in milliseconds for test. void SetAnimationDuration(int duration_ms); |