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 { ...@@ -725,6 +725,10 @@ std::string MediaRouterUI::GetTruncatedPresentationRequestSourceName() const {
: TruncateHost(GetHostFromURL(gurl)); : TruncateHost(GetHostFromURL(gurl));
} }
const std::set<MediaCastMode>& MediaRouterUI::cast_modes() const {
return cast_modes_;
}
const std::string& MediaRouterUI::GetRouteProviderExtensionId() const { const std::string& MediaRouterUI::GetRouteProviderExtensionId() const {
// TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl // TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl
return static_cast<MediaRouterMojoImpl*>(router_) return static_cast<MediaRouterMojoImpl*>(router_)
......
...@@ -95,8 +95,9 @@ class MediaRouterUI : public ConstrainedWebDialogUI, ...@@ -95,8 +95,9 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
// Closes the media router UI. // Closes the media router UI.
void Close(); void Close();
// Notifies this instance that the UI has been initialized. // Notifies this instance that the UI has been initialized. Marked virtual for
void UIInitialized(); // tests.
virtual void UIInitialized();
// Requests a route be created from the source mapped to // Requests a route be created from the source mapped to
// |cast_mode|, to the sink given by |sink_id|. // |cast_mode|, to the sink given by |sink_id|.
...@@ -127,12 +128,12 @@ class MediaRouterUI : public ConstrainedWebDialogUI, ...@@ -127,12 +128,12 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
MediaCastMode cast_mode); MediaCastMode cast_mode);
// Returns true if the cast mode last chosen for the current origin is tab // Returns true if the cast mode last chosen for the current origin is tab
// mirroring. // mirroring. Marked virtual for tests.
bool UserSelectedTabMirroringForCurrentOrigin() const; virtual bool UserSelectedTabMirroringForCurrentOrigin() const;
// Records the cast mode selection for the current origin, unless the cast // Records the cast mode selection for the current origin, unless the cast
// mode is MediaCastMode::DESKTOP_MIRROR. // mode is MediaCastMode::DESKTOP_MIRROR. Marked virtual for tests.
void RecordCastModeSelection(MediaCastMode cast_mode); virtual void RecordCastModeSelection(MediaCastMode cast_mode);
// Returns the hostname of the default source's parent frame URL. // Returns the hostname of the default source's parent frame URL.
std::string GetPresentationRequestSourceName() const; std::string GetPresentationRequestSourceName() const;
...@@ -145,7 +146,8 @@ class MediaRouterUI : public ConstrainedWebDialogUI, ...@@ -145,7 +146,8 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
const std::vector<MediaRoute::Id>& joinable_route_ids() const { const std::vector<MediaRoute::Id>& joinable_route_ids() const {
return joinable_route_ids_; 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>& const std::unordered_map<MediaRoute::Id, MediaCastMode>&
routes_and_cast_modes() const { routes_and_cast_modes() const {
return routes_and_cast_modes_; return routes_and_cast_modes_;
......
...@@ -577,6 +577,20 @@ TEST_F(MediaRouterUITest, RecordCastModeSelections) { ...@@ -577,6 +577,20 @@ TEST_F(MediaRouterUITest, RecordCastModeSelections) {
EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 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) { TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) {
const GURL url = GURL("https://www.example.com/watch?v=AAAA"); const GURL url = GURL("https://www.example.com/watch?v=AAAA");
CreateMediaRouterUIForURL(profile(), url); CreateMediaRouterUIForURL(profile(), url);
...@@ -592,4 +606,5 @@ TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) { ...@@ -592,4 +606,5 @@ TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) {
// Selecting desktop mirroring should not change the recorded preferences. // Selecting desktop mirroring should not change the recorded preferences.
EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
} }
} // namespace media_router } // namespace media_router
...@@ -59,6 +59,11 @@ class MediaRouterWebUIMessageHandler : public content::WebUIMessageHandler { ...@@ -59,6 +59,11 @@ class MediaRouterWebUIMessageHandler : public content::WebUIMessageHandler {
void set_incognito_for_test(bool incognito) { incognito_ = incognito; } void set_incognito_for_test(bool incognito) { incognito_ = incognito; }
private: private:
FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
RecordCastModeSelection);
FRIEND_TEST_ALL_PREFIXES(MediaRouterWebUIMessageHandlerTest,
RetrieveCastModeSelection);
// WebUIMessageHandler implementation. // WebUIMessageHandler implementation.
void RegisterMessages() override; void RegisterMessages() override;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
using testing::Return;
using testing::ReturnRef; using testing::ReturnRef;
namespace media_router { namespace media_router {
...@@ -30,6 +31,10 @@ class MockMediaRouterUI : public MediaRouterUI { ...@@ -30,6 +31,10 @@ class MockMediaRouterUI : public MediaRouterUI {
: MediaRouterUI(web_ui) {} : MediaRouterUI(web_ui) {}
~MockMediaRouterUI() {} ~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&()); MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&());
}; };
...@@ -583,4 +588,51 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) { ...@@ -583,4 +588,51 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) {
EXPECT_TRUE(actual_is_blocking); 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 } // 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