| 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..e3ef022b826eb4054c860b68a0f1348e6802e202 100644
|
| --- a/chrome/browser/ui/toolbar/media_router_action_unittest.cc
|
| +++ b/chrome/browser/ui/toolbar/media_router_action_unittest.cc
|
| @@ -2,11 +2,14 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/command_line.h"
|
| #include "base/macros.h"
|
| #include "chrome/browser/extensions/browser_action_test_util.h"
|
| #include "chrome/browser/extensions/extension_action_test_util.h"
|
| +#include "chrome/browser/extensions/test_extension_system.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 +51,7 @@ class TestMediaRouterAction : public MediaRouterAction {
|
| MediaRouterDialogControllerImpl* controller) {
|
| DCHECK(controller);
|
| controller_ = controller;
|
| + controller_->SetMediaRouterAction(GetWeakPtr());
|
| }
|
|
|
| private:
|
| @@ -114,8 +118,12 @@ class MediaRouterActionUnitTest : public MediaRouterTest {
|
| // MediaRouterTest:
|
| void SetUp() override {
|
| MediaRouterTest::SetUp();
|
| + static_cast<extensions::TestExtensionSystem*>(
|
| + extensions::ExtensionSystem::Get(profile()))
|
| + ->CreateExtensionService(base::CommandLine::ForCurrentProcess(),
|
| + base::FilePath(), false);
|
| toolbar_model_ = extensions::extension_action_test_util::
|
| - CreateToolbarModelForProfileWithoutWaitingForReady(profile());
|
| + CreateToolbarModelForProfile(profile());
|
|
|
| // browser() will only be valid once BrowserWithTestWindowTest::SetUp()
|
| // has run.
|
| @@ -138,12 +146,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_;
|
| }
|
| @@ -325,37 +337,112 @@ TEST_F(MediaRouterActionUnitTest, IconPressedState) {
|
| chrome::NewTab(browser());
|
| EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
|
|
| - // Create a reference to initiator contents.
|
| - WebContents* initiator_ =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| -
|
| - MediaRouterDialogControllerImpl::CreateForWebContents(initiator_);
|
| - MediaRouterDialogControllerImpl* dialog_controller_ =
|
| - MediaRouterDialogControllerImpl::FromWebContents(initiator_);
|
| - ASSERT_TRUE(dialog_controller_);
|
| + WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents();
|
| + 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) {
|
| + base::AutoReset<bool> disable_animations(
|
| + &ToolbarActionsBar::disable_animations_for_testing_, true);
|
| +
|
| + // 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());
|
| +
|
| + WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents();
|
| + 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());
|
| +}
|
|
|
| - EXPECT_CALL(*mock_delegate, OnPopupShown(true)).Times(1);
|
| - dialog_controller_->CreateMediaRouterDialog();
|
| +TEST_F(MediaRouterActionUnitTest, ToggleIconVisibilityPreference) {
|
| + base::AutoReset<bool> disable_animations(
|
| + &ToolbarActionsBar::disable_animations_for_testing_, true);
|
|
|
| - EXPECT_CALL(*mock_delegate, OnPopupClosed()).Times(1);
|
| - dialog_controller_->HideMediaRouterDialog();
|
| + // 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());
|
| +
|
| + WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents();
|
| + 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());
|
| + // Turn on the settings to always show the icon.
|
| + dialog_controller->action_for_test()->ToggleVisibilityPreference();
|
| + // Hide the popup. The icon should stay visible.
|
| + dialog_controller->HideMediaRouterDialog();
|
| + EXPECT_TRUE(ActionExists());
|
| +
|
| + // Close the tab and open another.
|
| + browser()->tab_strip_model()->CloseAllTabs();
|
| + EXPECT_EQ(0, browser()->tab_strip_model()->count());
|
| + chrome::NewTab(browser());
|
| + // The icon should persist.
|
| + EXPECT_TRUE(ActionExists());
|
| + // Turn off the settings to always show the icon.
|
| + // The icon should get hidden now.
|
| + MediaRouterDialogControllerImpl::FromWebContents(
|
| + browser()->tab_strip_model()->GetActiveWebContents())
|
| + ->action_for_test()->ToggleVisibilityPreference();
|
| + EXPECT_FALSE(ActionExists());
|
| }
|
|
|