| Index: chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
|
| diff --git a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
|
| index 2659688af8eac7a3cefe52afee8943656836e8b1..2d70b6061496be5f0218e3720baa7407dd7faecb 100644
|
| --- a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
|
| +++ b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
|
| @@ -5,10 +5,13 @@
|
| #include "base/bind.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "chrome/browser/extensions/browser_action_test_util.h"
|
| +#include "chrome/browser/media/router/media_router_ui_service.h"
|
| #include "chrome/browser/ui/browser.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/media_router_action_controller.h"
|
| #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h"
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| #include "chrome/browser/ui/views/toolbar/app_menu_button.h"
|
| @@ -54,6 +57,18 @@ class MediaRouterUIBrowserTest : public InProcessBrowserTest {
|
| toolbar_action_view_ = new ToolbarActionView(media_router_action_.get(),
|
| browser_actions_container);
|
| toolbar_action_view_widget_->SetContentsView(toolbar_action_view_);
|
| +
|
| + action_controller_ =
|
| + &MediaRouterUIService::Get(browser()->profile())->action_controller_;
|
| +
|
| + issue_.reset(new Issue(
|
| + "title notification", "message notification",
|
| + media_router::IssueAction(media_router::IssueAction::TYPE_DISMISS),
|
| + std::vector<media_router::IssueAction>(), "route_id",
|
| + media_router::Issue::NOTIFICATION, false, -1));
|
| +
|
| + routes_ = {MediaRoute("routeId1", MediaSource("sourceId"), "sinkId1",
|
| + "description", true, std::string(), true)};
|
| }
|
|
|
| void TearDownOnMainThread() override {
|
| @@ -92,6 +107,19 @@ class MediaRouterUIBrowserTest : public InProcessBrowserTest {
|
| media_router_action_->ExecuteAction(true);
|
| }
|
|
|
| + bool ActionExists() {
|
| + return ToolbarActionsModel::Get(browser()->profile())
|
| + ->HasComponentAction(
|
| + ComponentToolbarActionsFactory::kMediaRouterActionId);
|
| + }
|
| +
|
| + void SetAlwaysShowActionPref(bool always_show) {
|
| + return ToolbarActionsModel::Get(browser()->profile())
|
| + ->component_migration_helper()
|
| + ->SetComponentActionPref(
|
| + ComponentToolbarActionsFactory::kMediaRouterActionId, always_show);
|
| + }
|
| +
|
| protected:
|
| // Must be initialized after |InProcessBrowserTest::SetUpOnMainThread|.
|
| std::unique_ptr<BrowserActionTestUtil> browser_action_test_util_;
|
| @@ -99,10 +127,17 @@ class MediaRouterUIBrowserTest : public InProcessBrowserTest {
|
|
|
| // ToolbarActionView constructed to set the delegate on
|
| // |media_router_action_|.
|
| - ToolbarActionView* toolbar_action_view_;
|
| + ToolbarActionView* toolbar_action_view_ = nullptr;
|
|
|
| // Hosts the |toolbar_action_view_|.
|
| - views::Widget* toolbar_action_view_widget_;
|
| + views::Widget* toolbar_action_view_widget_ = nullptr;
|
| +
|
| + std::unique_ptr<Issue> issue_;
|
| +
|
| + // A vector of MediaRoutes that includes a local route.
|
| + std::vector<MediaRoute> routes_;
|
| +
|
| + MediaRouterActionController* action_controller_ = nullptr;
|
| };
|
|
|
| IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest,
|
| @@ -131,4 +166,41 @@ IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest,
|
| OpenMediaRouterDialogAndWaitForNewWebContents();
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest, EphemeralToolbarIcon) {
|
| + action_controller_->OnIssueUpdated(issue_.get());
|
| + EXPECT_TRUE(ActionExists());
|
| + action_controller_->OnIssueUpdated(nullptr);
|
| + EXPECT_FALSE(ActionExists());
|
| +
|
| + action_controller_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>());
|
| + EXPECT_TRUE(ActionExists());
|
| + action_controller_->OnRoutesUpdated(std::vector<MediaRoute>(),
|
| + std::vector<MediaRoute::Id>());
|
| + EXPECT_FALSE(ActionExists());
|
| +
|
| + SetAlwaysShowActionPref(true);
|
| + EXPECT_TRUE(ActionExists());
|
| + SetAlwaysShowActionPref(false);
|
| + EXPECT_FALSE(ActionExists());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest,
|
| + EphemeralToolbarIconWithMultipleWindows) {
|
| + action_controller_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>());
|
| + EXPECT_TRUE(ActionExists());
|
| +
|
| + // Opening and closing a window shouldn't affect the state of the ephemeral
|
| + // icon. Creating and removing the icon with multiple windows open should also
|
| + // work.
|
| + Browser* browser2 = CreateBrowser(browser()->profile());
|
| + EXPECT_TRUE(ActionExists());
|
| + action_controller_->OnRoutesUpdated(std::vector<MediaRoute>(),
|
| + std::vector<MediaRoute::Id>());
|
| + EXPECT_FALSE(ActionExists());
|
| + action_controller_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>());
|
| + EXPECT_TRUE(ActionExists());
|
| + browser2->window()->Close();
|
| + EXPECT_TRUE(ActionExists());
|
| +}
|
| +
|
| } // namespace media_router
|
|
|