Index: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
index 67e41c687f6cda753faee488f5e9ba55d17bffb0..b98b15a41245400f6eb262eb0971bc9a5b29ca51 100644 |
--- a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
+++ b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
@@ -18,8 +18,8 @@ |
#include "chrome/browser/sessions/session_tab_helper.h" |
#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" |
#include "chrome/grit/generated_resources.h" |
+#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
#include "chrome/test/base/testing_profile.h" |
-#include "content/public/test/test_browser_thread_bundle.h" |
#include "content/public/test/test_web_ui.h" |
#include "extensions/browser/extension_registry.h" |
#include "extensions/common/extension.h" |
@@ -30,11 +30,12 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/base/l10n/l10n_util.h" |
+using content::WebContents; |
using testing::_; |
using testing::AnyNumber; |
using testing::Invoke; |
-using testing::SaveArg; |
using testing::Return; |
+using testing::SaveArg; |
namespace media_router { |
@@ -62,22 +63,33 @@ class MockRoutesUpdatedCallback { |
const std::vector<MediaRoute::Id>& joinable_route_ids)); |
}; |
-class MediaRouterUITest : public ::testing::Test { |
+class MediaRouterUITest : public ChromeRenderViewHostTestHarness { |
public: |
- ~MediaRouterUITest() override { |
+ void TearDown() override { |
EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)) |
.Times(AnyNumber()); |
EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)) |
.Times(AnyNumber()); |
+ web_ui_contents_.reset(); |
+ create_session_request_.reset(); |
+ media_router_ui_.reset(); |
+ message_handler_.reset(); |
+ ChromeRenderViewHostTestHarness::TearDown(); |
+ } |
+ |
+ void CreateMediaRouterUIForURL(Profile* profile, const GURL& url) { |
+ web_contents()->GetController().LoadURL(url, content::Referrer(), |
+ ui::PAGE_TRANSITION_LINK, ""); |
+ content::RenderFrameHostTester::CommitPendingLoad( |
+ &web_contents()->GetController()); |
+ CreateMediaRouterUI(profile); |
} |
void CreateMediaRouterUI(Profile* profile) { |
- initiator_.reset(content::WebContents::Create( |
- content::WebContents::CreateParams(profile))); |
- SessionTabHelper::CreateForWebContents(initiator_.get()); |
- web_contents_.reset(content::WebContents::Create( |
- content::WebContents::CreateParams(profile))); |
- web_ui_.set_web_contents(web_contents_.get()); |
+ SessionTabHelper::CreateForWebContents(web_contents()); |
+ web_ui_contents_.reset( |
+ WebContents::Create(WebContents::CreateParams(profile))); |
+ web_ui_.set_web_contents(web_ui_contents_.get()); |
media_router_ui_.reset(new MediaRouterUI(&web_ui_)); |
message_handler_.reset( |
new MediaRouterWebUIMessageHandler(media_router_ui_.get())); |
@@ -88,7 +100,7 @@ class MediaRouterUITest : public ::testing::Test { |
})); |
EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)) |
.Times(AnyNumber()); |
- media_router_ui_->InitForTest(&mock_router_, initiator_.get(), |
+ media_router_ui_->InitForTest(&mock_router_, web_contents(), |
message_handler_.get(), |
std::move(create_session_request_)); |
message_handler_->SetWebUIForTest(&web_ui_); |
@@ -103,11 +115,8 @@ class MediaRouterUITest : public ::testing::Test { |
protected: |
MockMediaRouter mock_router_; |
- content::TestBrowserThreadBundle thread_bundle_; |
- TestingProfile profile_; |
- std::unique_ptr<content::WebContents> initiator_; |
content::TestWebUI web_ui_; |
- std::unique_ptr<content::WebContents> web_contents_; |
+ std::unique_ptr<WebContents> web_ui_contents_; |
std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; |
std::unique_ptr<MediaRouterUI> media_router_ui_; |
std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_; |
@@ -115,7 +124,7 @@ class MediaRouterUITest : public ::testing::Test { |
}; |
TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
std::vector<MediaRouteResponseCallback> callbacks; |
EXPECT_CALL( |
mock_router_, |
@@ -134,7 +143,7 @@ TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { |
} |
TEST_F(MediaRouterUITest, RouteCreationTimeoutForDesktop) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
std::vector<MediaRouteResponseCallback> callbacks; |
EXPECT_CALL( |
mock_router_, |
@@ -153,7 +162,7 @@ TEST_F(MediaRouterUITest, RouteCreationTimeoutForDesktop) { |
} |
TEST_F(MediaRouterUITest, RouteCreationTimeoutForPresentation) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
PresentationRequest presentation_request( |
RenderFrameHostId(0, 0), {GURL("https://presentationurl.com")}, |
GURL("https://frameurl.fakeurl")); |
@@ -177,7 +186,7 @@ TEST_F(MediaRouterUITest, RouteCreationTimeoutForPresentation) { |
} |
TEST_F(MediaRouterUITest, RouteCreationParametersCantBeCreated) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
MediaSinkSearchResponseCallback sink_callback; |
EXPECT_CALL(mock_router_, SearchSinks(_, _, _, _, _)) |
.WillOnce(SaveArg<4>(&sink_callback)); |
@@ -192,7 +201,7 @@ TEST_F(MediaRouterUITest, RouteCreationParametersCantBeCreated) { |
} |
TEST_F(MediaRouterUITest, RouteRequestFromIncognito) { |
- CreateMediaRouterUI(profile_.GetOffTheRecordProfile()); |
+ CreateMediaRouterUI(profile()->GetOffTheRecordProfile()); |
PresentationRequest presentation_request(RenderFrameHostId(0, 0), |
{GURL("https://foo.url.com/")}, |
@@ -207,7 +216,7 @@ TEST_F(MediaRouterUITest, RouteRequestFromIncognito) { |
} |
TEST_F(MediaRouterUITest, SortedSinks) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
std::vector<MediaSinkWithCastModes> unsorted_sinks; |
std::string sink_id1("sink3"); |
std::string sink_name1("B sink"); |
@@ -236,7 +245,7 @@ TEST_F(MediaRouterUITest, SortedSinks) { |
} |
TEST_F(MediaRouterUITest, SortSinksByIconType) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
std::vector<MediaSinkWithCastModes> unsorted_sinks; |
MediaSinkWithCastModes sink1( |
@@ -348,8 +357,8 @@ TEST_F(MediaRouterUITest, |
} |
TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) { |
- CreateMediaRouterUI(&profile_); |
- SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator_.get()); |
+ CreateMediaRouterUI(profile()); |
+ SessionID::id_type tab_id = SessionTabHelper::IdForTab(web_contents()); |
MediaSource media_source_1(MediaSourceForTab(tab_id)); |
MediaSource media_source_2("mediaSource"); |
MediaSource media_source_3(MediaSourceForDesktop()); |
@@ -398,7 +407,7 @@ TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) { |
} |
TEST_F(MediaRouterUITest, UIMediaRoutesObserverSkipsUnavailableCastModes) { |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
MediaSource media_source_1("mediaSource1"); |
MediaSource media_source_2("mediaSource2"); |
MediaSource media_source_3(MediaSourceForDesktop()); |
@@ -493,7 +502,7 @@ TEST_F(MediaRouterUITest, NotFoundErrorOnCloseWithNoSinks) { |
base::Unretained(&request_callbacks)), |
base::Bind(&PresentationRequestCallbacks::Error, |
base::Unretained(&request_callbacks)))); |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
// Destroying the UI should return the expected error from above to the error |
// callback. |
media_router_ui_.reset(); |
@@ -511,7 +520,7 @@ TEST_F(MediaRouterUITest, NotFoundErrorOnCloseWithNoCompatibleSinks) { |
base::Unretained(&request_callbacks)), |
base::Bind(&PresentationRequestCallbacks::Error, |
base::Unretained(&request_callbacks)))); |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
// Send a sink to the UI that is compatible with sources other than the |
// presentation url to cause a NotFoundError. |
@@ -541,7 +550,7 @@ TEST_F(MediaRouterUITest, AbortErrorOnClose) { |
base::Unretained(&request_callbacks)), |
base::Bind(&PresentationRequestCallbacks::Error, |
base::Unretained(&request_callbacks)))); |
- CreateMediaRouterUI(&profile_); |
+ CreateMediaRouterUI(profile()); |
// Send a sink to the UI that is compatible with the presentation url to avoid |
// a NotFoundError. |
@@ -559,4 +568,48 @@ TEST_F(MediaRouterUITest, AbortErrorOnClose) { |
// callback. |
media_router_ui_.reset(); |
} |
+ |
+TEST_F(MediaRouterUITest, RecordCastModeSelections) { |
+ const GURL url_1a = GURL("https://www.example.com/watch?v=AAAA"); |
+ const GURL url_1b = GURL("https://www.example.com/watch?v=BBBB"); |
+ const GURL url_2 = GURL("https://example2.com/0000"); |
+ const GURL url_3 = GURL("https://www3.example.com/index.html"); |
+ |
+ CreateMediaRouterUIForURL(profile(), url_1a); |
+ EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); |
+ EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ |
+ CreateMediaRouterUIForURL(profile(), url_2); |
+ EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ |
+ CreateMediaRouterUIForURL(profile(), url_1b); |
+ // |url_1a| and |url_1b| have the same origin, so the selection made for |
+ // |url_1a| should be retrieved. |
+ EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ media_router_ui_->RecordCastModeSelection(MediaCastMode::DEFAULT); |
+ EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ |
+ media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); |
+ CreateMediaRouterUIForURL(profile(), url_3); |
+ // |url_1a| and |url_3| have the same domain "example.com" but different |
+ // origins, so their preferences should be separate. |
+ EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+} |
+ |
+TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) { |
+ const GURL url = GURL("https://www.example.com/watch?v=AAAA"); |
+ CreateMediaRouterUIForURL(profile(), url); |
+ |
+ EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR); |
+ // Selecting desktop mirroring should not change the recorded preferences. |
+ EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ |
+ media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); |
+ EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+ media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR); |
+ // Selecting desktop mirroring should not change the recorded preferences. |
+ EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
+} |
} // namespace media_router |