Commit a600d8d8 authored by takumif's avatar takumif Committed by Commit bot

[Media Router] Unit tests for sticky cast modes

This CL adds test cases to MediaRouterUITest and
MediaRouterWebUIMessageHandlerTest that test recording and retrieving users'
preferred cast modes (whether they chose tab mirroring for the current origin)
in regular and incognito profiles.

BUG=664671

Review-Url: https://codereview.chromium.org/2549323002
Cr-Commit-Position: refs/heads/master@{#440908}
parent 24e8964b
......@@ -725,6 +725,10 @@ std::string MediaRouterUI::GetTruncatedPresentationRequestSourceName() const {
: TruncateHost(GetHostFromURL(gurl));
}
const std::set<MediaCastMode>& MediaRouterUI::cast_modes() const {
return cast_modes_;
}
const std::string& MediaRouterUI::GetRouteProviderExtensionId() const {
// TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl
return static_cast<MediaRouterMojoImpl*>(router_)
......
......@@ -95,8 +95,9 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
// Closes the media router UI.
void Close();
// Notifies this instance that the UI has been initialized.
void UIInitialized();
// Notifies this instance that the UI has been initialized. Marked virtual for
// tests.
virtual void UIInitialized();
// Requests a route be created from the source mapped to
// |cast_mode|, to the sink given by |sink_id|.
......@@ -127,12 +128,12 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
MediaCastMode cast_mode);
// Returns true if the cast mode last chosen for the current origin is tab
// mirroring.
bool UserSelectedTabMirroringForCurrentOrigin() const;
// mirroring. Marked virtual for tests.
virtual bool UserSelectedTabMirroringForCurrentOrigin() const;
// Records the cast mode selection for the current origin, unless the cast
// mode is MediaCastMode::DESKTOP_MIRROR.
void RecordCastModeSelection(MediaCastMode cast_mode);
// mode is MediaCastMode::DESKTOP_MIRROR. Marked virtual for tests.
virtual void RecordCastModeSelection(MediaCastMode cast_mode);
// Returns the hostname of the default source's parent frame URL.
std::string GetPresentationRequestSourceName() const;
......@@ -145,7 +146,8 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
const std::vector<MediaRoute::Id>& joinable_route_ids() const {
return joinable_route_ids_;
}
const std::set<MediaCastMode>& cast_modes() const { return cast_modes_; }
// Marked virtual for tests.
virtual const std::set<MediaCastMode>& cast_modes() const;
const std::unordered_map<MediaRoute::Id, MediaCastMode>&
routes_and_cast_modes() const {
return routes_and_cast_modes_;
......
......@@ -577,6 +577,20 @@ TEST_F(MediaRouterUITest, RecordCastModeSelections) {
EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
}
TEST_F(MediaRouterUITest, RecordCastModeSelectionsInIncognito) {
const GURL url = GURL("https://www.example.com/watch?v=AAAA");
CreateMediaRouterUIForURL(profile()->GetOffTheRecordProfile(), url);
EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
// Selections recorded in incognito shouldn't be retrieved in the regular
// profile.
CreateMediaRouterUIForURL(profile(), url);
EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
}
TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) {
const GURL url = GURL("https://www.example.com/watch?v=AAAA");
CreateMediaRouterUIForURL(profile(), url);
......@@ -592,4 +606,5 @@ TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) {
// Selecting desktop mirroring should not change the recorded preferences.
EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
}
} // namespace media_router
......@@ -59,6 +59,11 @@ class MediaRouterWebUIMessageHandler : public content::WebUIMessageHandler {
void set_incognito_for_test(bool incognito) { incognito_ = incognito; }
private:
FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
RecordCastModeSelection);
FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
RetrieveCastModeSelection);
// WebUIMessageHandler implementation.
void RegisterMessages() override;
......
......@@ -15,6 +15,7 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::Return;
using testing::ReturnRef;
namespace media_router {
......@@ -30,6 +31,10 @@ class MockMediaRouterUI : public MediaRouterUI {
: MediaRouterUI(web_ui) {}
~MockMediaRouterUI() {}
MOCK_METHOD0(UIInitialized, void());
MOCK_CONST_METHOD0(UserSelectedTabMirroringForCurrentOrigin, bool());
MOCK_METHOD1(RecordCastModeSelection, void(MediaCastMode cast_mode));
MOCK_CONST_METHOD0(cast_modes, const std::set<MediaCastMode>&());
MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&());
};
......@@ -583,4 +588,51 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) {
EXPECT_TRUE(actual_is_blocking);
}
TEST_F(MediaRouterWebUIMessageHandlerTest, RecordCastModeSelection) {
base::ListValue args;
args.AppendInteger(MediaCastMode::DEFAULT);
EXPECT_CALL(*mock_media_router_ui_.get(),
RecordCastModeSelection(MediaCastMode::DEFAULT))
.Times(1);
handler_->OnReportSelectedCastMode(&args);
args.Clear();
args.AppendInteger(MediaCastMode::TAB_MIRROR);
EXPECT_CALL(*mock_media_router_ui_.get(),
RecordCastModeSelection(MediaCastMode::TAB_MIRROR))
.Times(1);
handler_->OnReportSelectedCastMode(&args);
}
TEST_F(MediaRouterWebUIMessageHandlerTest, RetrieveCastModeSelection) {
base::ListValue args;
std::set<MediaCastMode> cast_modes = {MediaCastMode::TAB_MIRROR};
EXPECT_CALL(*mock_media_router_ui_, GetRouteProviderExtensionId())
.WillRepeatedly(ReturnRef(provider_extension_id()));
EXPECT_CALL(*mock_media_router_ui_, cast_modes())
.WillRepeatedly(ReturnRef(cast_modes));
EXPECT_CALL(*mock_media_router_ui_,
UserSelectedTabMirroringForCurrentOrigin())
.WillOnce(Return(true));
handler_->OnRequestInitialData(&args);
const content::TestWebUI::CallData& call_data1 = *web_ui_->call_data()[0];
ASSERT_EQ("media_router.ui.setInitialData", call_data1.function_name());
const base::DictionaryValue* initial_data = nullptr;
ASSERT_TRUE(call_data1.arg1()->GetAsDictionary(&initial_data));
bool use_tab_mirroring = false;
EXPECT_TRUE(initial_data->GetBoolean("useTabMirroring", &use_tab_mirroring));
EXPECT_TRUE(use_tab_mirroring);
EXPECT_CALL(*mock_media_router_ui_,
UserSelectedTabMirroringForCurrentOrigin())
.WillOnce(Return(false));
handler_->OnRequestInitialData(&args);
const content::TestWebUI::CallData& call_data2 = *web_ui_->call_data()[1];
ASSERT_EQ("media_router.ui.setInitialData", call_data2.function_name());
ASSERT_TRUE(call_data2.arg1()->GetAsDictionary(&initial_data));
EXPECT_TRUE(initial_data->GetBoolean("useTabMirroring", &use_tab_mirroring));
EXPECT_FALSE(use_tab_mirroring);
}
} // namespace media_router
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