Chromium Code Reviews| Index: chrome/browser/ui/toolbar/media_router_action_unittest.cc |
| diff --git a/chrome/browser/ui/toolbar/media_router_action_unittest.cc b/chrome/browser/ui/toolbar/media_router_action_unittest.cc |
| index d09f0225681e175132a815f50659208f07e74950..dd98257ba3feb6a2bb7f63c96a447c16eba8e954 100644 |
| --- a/chrome/browser/ui/toolbar/media_router_action_unittest.cc |
| +++ b/chrome/browser/ui/toolbar/media_router_action_unittest.cc |
| @@ -7,6 +7,7 @@ |
| #include "chrome/browser/extensions/extension_action_test_util.h" |
| #include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| +#include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h" |
| #include "chrome/browser/ui/toolbar/media_router_action.h" |
| #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.h" |
| @@ -48,6 +49,7 @@ class TestMediaRouterAction : public MediaRouterAction { |
| MediaRouterDialogControllerImpl* controller) { |
| DCHECK(controller); |
| controller_ = controller; |
| + controller_->SetMediaRouterAction(GetWeakPtr()); |
| } |
| private: |
| @@ -115,7 +117,7 @@ class MediaRouterActionUnitTest : public MediaRouterTest { |
| void SetUp() override { |
| MediaRouterTest::SetUp(); |
| toolbar_model_ = extensions::extension_action_test_util:: |
| - CreateToolbarModelForProfileWithoutWaitingForReady(profile()); |
| + CreateToolbarModelForProfile(profile()); |
| // browser() will only be valid once BrowserWithTestWindowTest::SetUp() |
| // has run. |
| @@ -138,12 +140,16 @@ class MediaRouterActionUnitTest : public MediaRouterTest { |
| } |
| void TearDown() override { |
| - browser_action_test_util_.reset(); |
| action_.reset(); |
| + browser_action_test_util_.reset(); |
| MediaRouterTest::TearDown(); |
| } |
| TestMediaRouterAction* action() { return action_.get(); } |
| + bool ActionExists() { |
| + return toolbar_model_->HasComponentAction( |
| + ComponentToolbarActionsFactory::kMediaRouterActionId); |
| + } |
| const media_router::Issue* fake_issue_notification() { |
| return &fake_issue_notification_; |
| } |
| @@ -326,36 +332,78 @@ TEST_F(MediaRouterActionUnitTest, IconPressedState) { |
| EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| // Create a reference to initiator contents. |
| - WebContents* initiator_ = |
| + WebContents* initiator = |
| browser()->tab_strip_model()->GetActiveWebContents(); |
| - MediaRouterDialogControllerImpl::CreateForWebContents(initiator_); |
| - MediaRouterDialogControllerImpl* dialog_controller_ = |
| - MediaRouterDialogControllerImpl::FromWebContents(initiator_); |
| - ASSERT_TRUE(dialog_controller_); |
| + MediaRouterDialogControllerImpl::CreateForWebContents(initiator); |
| + MediaRouterDialogControllerImpl* dialog_controller = |
| + MediaRouterDialogControllerImpl::FromWebContents(initiator); |
| + ASSERT_TRUE(dialog_controller); |
| // Sets the controller to use for TestMediaRouterAction. |
| - action()->SetMediaRouterDialogController(dialog_controller_); |
| + action()->SetMediaRouterDialogController(dialog_controller); |
| // Create a ToolbarActionViewDelegate to use for MediaRouterAction. |
| std::unique_ptr<MockToolbarActionViewDelegate> mock_delegate( |
| new MockToolbarActionViewDelegate()); |
| EXPECT_CALL(*mock_delegate, GetCurrentWebContents()).WillOnce( |
| - testing::Return(initiator_)); |
| - EXPECT_CALL(*mock_delegate, OnPopupClosed()).Times(1); |
| + testing::Return(initiator)); |
| action()->SetDelegate(mock_delegate.get()); |
| - EXPECT_CALL(*mock_delegate, OnPopupShown(true)).Times(1); |
| action()->ExecuteAction(true); |
| + EXPECT_TRUE(dialog_controller->IsShowingMediaRouterDialog()); |
| // Pressing the icon while the popup is shown should close the popup |
| - EXPECT_CALL(*mock_delegate, OnPopupClosed()).Times(1); |
| action()->ExecuteAction(true); |
| + EXPECT_FALSE(dialog_controller->IsShowingMediaRouterDialog()); |
| + |
| + dialog_controller->CreateMediaRouterDialog(); |
| + EXPECT_TRUE(dialog_controller->IsShowingMediaRouterDialog()); |
| + |
| + dialog_controller->HideMediaRouterDialog(); |
| + EXPECT_FALSE(dialog_controller->IsShowingMediaRouterDialog()); |
| +} |
| + |
| +TEST_F(MediaRouterActionUnitTest, EphemeralIcon) { |
|
Devlin
2016/07/29 19:10:22
What about also testing the perma-shown icon?
takumif
2016/08/02 04:58:42
Created.
|
| + base::AutoReset<bool> disable_animations( |
| + &ToolbarActionsBar::disable_animations_for_testing_, true); |
| - EXPECT_CALL(*mock_delegate, OnPopupShown(true)).Times(1); |
| - dialog_controller_->CreateMediaRouterDialog(); |
| + // Start with one window with one tab. |
| + EXPECT_EQ(0, browser()->tab_strip_model()->count()); |
| + chrome::NewTab(browser()); |
| + EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| + |
| + // Create a reference to initiator contents. |
|
Devlin
2016/07/29 19:10:22
I don't follow this comment. What's an initiator
takumif
2016/08/02 04:58:42
It's web contents for which the dialog is being in
|
| + WebContents* initiator = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| - EXPECT_CALL(*mock_delegate, OnPopupClosed()).Times(1); |
| - dialog_controller_->HideMediaRouterDialog(); |
| + MediaRouterDialogControllerImpl::CreateForWebContents(initiator); |
| + MediaRouterDialogControllerImpl* dialog_controller = |
| + MediaRouterDialogControllerImpl::FromWebContents(initiator); |
| + ASSERT_TRUE(dialog_controller); |
| + |
| + EXPECT_FALSE(ActionExists()); |
| + // Show the popup. The icon should become visible. |
| + dialog_controller->ShowMediaRouterDialog(); |
| + EXPECT_TRUE(ActionExists()); |
| + // Hide the popup. The icon should become hidden. |
| + dialog_controller->HideMediaRouterDialog(); |
| + EXPECT_FALSE(ActionExists()); |
| + |
| + // Show the popup. |
| + dialog_controller->ShowMediaRouterDialog(); |
| + // Add a local display route. |
| + dialog_controller->action_for_test() |
| + ->OnRoutesUpdated(local_display_route_list(), empty_route_id_list()); |
| + EXPECT_TRUE(ActionExists()); |
| + // Hide the popup while there's still a local media route. The icon should not |
| + // be hidden as long as the media route exists. |
| + dialog_controller->HideMediaRouterDialog(); |
| + EXPECT_TRUE(ActionExists()); |
| + // Remove the local route. Now the icon should be hidden. |
| + dialog_controller->action_for_test()->OnRoutesUpdated( |
| + std::vector<media_router::MediaRoute>(), |
| + empty_route_id_list()); |
| + EXPECT_FALSE(ActionExists()); |
| } |