Commit 4809bbc1 authored by takumif's avatar takumif Committed by Commit bot

[Media Router] Add browser tests for showing the dialog

This CL adds test cases for opening the media router dialog from the page
context menu and the app menu.

BUG=678472

Review-Url: https://codereview.chromium.org/2621723003
Cr-Commit-Position: refs/heads/master@{#443398}
parent 7766221f
......@@ -4,8 +4,10 @@
#include "base/bind.h"
#include "base/threading/thread_task_runner_handle.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/extensions/browser_action_test_util.h"
#include "chrome/browser/media/router/media_router_ui_service.h"
#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
......@@ -14,6 +16,7 @@
#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.h"
#include "chrome/browser/ui/views/toolbar/app_menu_button.h"
#include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
#include "chrome/browser/ui/views/toolbar/toolbar_action_view.h"
......@@ -22,7 +25,9 @@
#include "chrome/common/url_constants.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/context_menu_params.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/public/test/test_utils.h"
#include "ui/views/widget/widget.h"
......@@ -58,10 +63,7 @@ class MediaRouterUIBrowserTest : public InProcessBrowserTest {
content::TestNavigationObserver nav_observer(NULL);
nav_observer.StartWatchingNewWebContents();
AppMenuButton* app_menu_button =
BrowserView::GetBrowserViewForBrowser(browser())
->toolbar()
->app_menu_button();
AppMenuButton* app_menu_button = GetAppMenuButton();
// When the Media Router Action executes, it opens a dialog with web
// contents to chrome://media-router.
......@@ -105,6 +107,12 @@ class MediaRouterUIBrowserTest : public InProcessBrowserTest {
ComponentToolbarActionsFactory::kMediaRouterActionId, always_show);
}
AppMenuButton* GetAppMenuButton() {
return BrowserView::GetBrowserViewForBrowser(browser())
->toolbar()
->app_menu_button();
}
protected:
ToolbarActionsBar* toolbar_actions_bar_ = nullptr;
......@@ -147,6 +155,98 @@ IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest,
SetAlwaysShowActionPref(false);
}
IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest, OpenDialogFromContextMenu) {
// Start with one tab showing about:blank.
ASSERT_EQ(1, browser()->tab_strip_model()->count());
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
MediaRouterDialogController* dialog_controller =
MediaRouterDialogController::GetOrCreateForWebContents(
browser()->tab_strip_model()->GetActiveWebContents());
content::ContextMenuParams params;
params.page_url = web_contents->GetController().GetActiveEntry()->GetURL();
TestRenderViewContextMenu menu(web_contents->GetMainFrame(), params);
menu.Init();
ASSERT_TRUE(menu.IsItemPresent(IDC_ROUTE_MEDIA));
ASSERT_FALSE(dialog_controller->IsShowingMediaRouterDialog());
menu.ExecuteCommand(IDC_ROUTE_MEDIA, 0);
EXPECT_TRUE(dialog_controller->IsShowingMediaRouterDialog());
// Executing the command again should be a no-op, and there should only be one
// dialog opened per tab.
menu.ExecuteCommand(IDC_ROUTE_MEDIA, 0);
EXPECT_TRUE(dialog_controller->IsShowingMediaRouterDialog());
dialog_controller->HideMediaRouterDialog();
EXPECT_FALSE(dialog_controller->IsShowingMediaRouterDialog());
}
IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest, OpenDialogFromAppMenu) {
// Start with one tab showing about:blank.
ASSERT_EQ(1, browser()->tab_strip_model()->count());
AppMenuButton* menu_button = GetAppMenuButton();
base::RunLoop run_loop;
menu_button->ShowMenu(false);
run_loop.RunUntilIdle();
MediaRouterDialogController* dialog_controller =
MediaRouterDialogController::GetOrCreateForWebContents(
browser()->tab_strip_model()->GetActiveWebContents());
AppMenu* menu = menu_button->app_menu_for_testing();
ASSERT_FALSE(dialog_controller->IsShowingMediaRouterDialog());
menu->ExecuteCommand(IDC_ROUTE_MEDIA, 0);
EXPECT_TRUE(dialog_controller->IsShowingMediaRouterDialog());
// Executing the command again should be a no-op, and there should only be one
// dialog opened per tab.
menu->ExecuteCommand(IDC_ROUTE_MEDIA, 0);
EXPECT_TRUE(dialog_controller->IsShowingMediaRouterDialog());
dialog_controller->HideMediaRouterDialog();
EXPECT_FALSE(dialog_controller->IsShowingMediaRouterDialog());
}
IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest, OpenDialogsInMultipleTabs) {
// Start with two tabs.
chrome::NewTab(browser());
ASSERT_EQ(2, browser()->tab_strip_model()->count());
MediaRouterDialogController* dialog_controller1 =
MediaRouterDialogController::GetOrCreateForWebContents(
browser()->tab_strip_model()->GetWebContentsAt(0));
MediaRouterDialogController* dialog_controller2 =
MediaRouterDialogController::GetOrCreateForWebContents(
browser()->tab_strip_model()->GetWebContentsAt(1));
// Show the media router action on the toolbar.
SetAlwaysShowActionPref(true);
// Open a dialog in the first tab using the toolbar action.
browser()->tab_strip_model()->ActivateTabAt(0, true);
EXPECT_FALSE(dialog_controller1->IsShowingMediaRouterDialog());
GetMediaRouterAction()->ExecuteAction(true);
EXPECT_TRUE(dialog_controller1->IsShowingMediaRouterDialog());
// Move to the second tab, which shouldn't have a dialog at first. Open and
// close a dialog in that tab.
browser()->tab_strip_model()->ActivateTabAt(1, true);
EXPECT_FALSE(dialog_controller2->IsShowingMediaRouterDialog());
GetMediaRouterAction()->ExecuteAction(true);
EXPECT_TRUE(dialog_controller2->IsShowingMediaRouterDialog());
GetMediaRouterAction()->ExecuteAction(true);
EXPECT_FALSE(dialog_controller2->IsShowingMediaRouterDialog());
// Move back to the first tab, whose dialog should still be open. Hide the
// dialog.
browser()->tab_strip_model()->ActivateTabAt(0, true);
EXPECT_TRUE(dialog_controller1->IsShowingMediaRouterDialog());
GetMediaRouterAction()->ExecuteAction(true);
EXPECT_FALSE(dialog_controller1->IsShowingMediaRouterDialog());
// Reset the preference showing the toolbar action.
SetAlwaysShowActionPref(false);
}
IN_PROC_BROWSER_TEST_F(MediaRouterUIBrowserTest,
EphemeralToolbarIconForRoutesAndIssues) {
action_controller_->OnIssue(issue_);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment