Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(890)

Unified Diff: chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc

Issue 2332693003: Show media router toolbar icon ephemerally for active local routes and issues (Closed)
Patch Set: Address Derek's comment Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698