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

Unified Diff: chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc

Issue 1406013003: [Presentation API / Media Router] Clean up default pres URL logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments #20, #22 Created 5 years, 1 month 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/media/router/presentation_service_delegate_impl_unittest.cc
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
index 056f05d447019cd55472c3947255bc84691d3ffb..c3099aa275a5fa1437808d4b883315795b15b95e 100644
--- a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
+++ b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
@@ -24,6 +24,7 @@
using ::testing::_;
using ::testing::Mock;
using ::testing::Return;
+using ::testing::SaveArg;
using ::testing::StrictMock;
namespace media_router {
@@ -36,11 +37,12 @@ class MockDelegateObserver
void(const content::PresentationSessionInfo&));
};
-class MockDefaultMediaSourceObserver
- : public PresentationServiceDelegateImpl::DefaultMediaSourceObserver {
+class MockDefaultPresentationRequestObserver
+ : public PresentationServiceDelegateImpl::
+ DefaultPresentationRequestObserver {
public:
- MOCK_METHOD2(OnDefaultMediaSourceChanged,
- void(const MediaSource&, const GURL&));
+ MOCK_METHOD1(OnDefaultPresentationChanged, void(const PresentationRequest&));
+ MOCK_METHOD0(OnDefaultPresentationRemoved, void());
};
class PresentationServiceDelegateImplTest
@@ -55,6 +57,9 @@ class PresentationServiceDelegateImplTest
delegate_impl_->SetMediaRouterForTest(&router_);
}
+ MOCK_METHOD1(OnDefaultPresentationStarted,
+ void(const content::PresentationSessionInfo& session_info));
+
PresentationServiceDelegateImpl* delegate_impl_;
MockMediaRouter router_;
};
@@ -62,8 +67,8 @@ class PresentationServiceDelegateImplTest
TEST_F(PresentationServiceDelegateImplTest, AddScreenAvailabilityListener) {
ON_CALL(router_, RegisterMediaSinksObserver(_)).WillByDefault(Return(true));
- std::string presentation_url1("http://url1");
- std::string presentation_url2("http://url2");
+ std::string presentation_url1("http://url1.fakeUrl");
+ std::string presentation_url2("http://url2.fakeUrl");
MediaSource source1 = MediaSourceForPresentationUrl(presentation_url1);
MediaSource source2 = MediaSourceForPresentationUrl(presentation_url2);
MockScreenAvailabilityListener listener1(presentation_url1);
@@ -98,7 +103,7 @@ TEST_F(PresentationServiceDelegateImplTest, AddScreenAvailabilityListener) {
TEST_F(PresentationServiceDelegateImplTest, AddSameListenerTwice) {
ON_CALL(router_, RegisterMediaSinksObserver(_)).WillByDefault(Return(true));
- std::string presentation_url1("http://url1");
+ std::string presentation_url1("http://url1.fakeUrl");
MediaSource source1(MediaSourceForPresentationUrl(presentation_url1));
MockScreenAvailabilityListener listener1(presentation_url1);
int render_process_id = 1;
@@ -119,76 +124,144 @@ TEST_F(PresentationServiceDelegateImplTest, AddSameListenerTwice) {
render_process_id, render_frame_id, source1.id()));
}
+// TODO(imcheng): Add a test to set default presentation URL in a different
+// RenderFrameHost and verify that it works.
TEST_F(PresentationServiceDelegateImplTest, SetDefaultPresentationUrl) {
- content::WebContentsTester::For(web_contents())
- ->NavigateAndCommit(GURL("http://www.google.com"));
+ EXPECT_FALSE(delegate_impl_->HasDefaultPresentationRequest());
+
+ GURL frame_url("http://www.google.com");
+ content::WebContentsTester::For(web_contents())->NavigateAndCommit(frame_url);
content::RenderFrameHost* main_frame = web_contents()->GetMainFrame();
ASSERT_TRUE(main_frame);
int render_process_id = main_frame->GetProcess()->GetID();
int routing_id = main_frame->GetRoutingID();
- std::string presentation_url1("http://foo");
+ auto callback = base::Bind(
+ &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted,
+ base::Unretained(this));
+ std::string presentation_url1("http://foo.fakeUrl");
delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id,
- presentation_url1);
- EXPECT_TRUE(delegate_impl_->default_source().Equals(
- MediaSourceForPresentationUrl(presentation_url1)));
-
- // Remove default presentation URL.
- delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, "");
- EXPECT_TRUE(delegate_impl_->default_source().Empty());
+ presentation_url1, callback);
+ ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest());
+ PresentationRequest request1 =
+ delegate_impl_->GetDefaultPresentationRequest();
+ EXPECT_EQ(presentation_url1, request1.presentation_url());
+ EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id),
+ request1.render_frame_host_id());
+ EXPECT_EQ(frame_url, request1.frame_url());
// Set to a new default presentation URL
std::string presentation_url2("https://youtube.com");
delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id,
- presentation_url2);
- EXPECT_TRUE(delegate_impl_->default_source().Equals(
- MediaSourceForPresentationUrl(presentation_url2)));
+ presentation_url2, callback);
+ ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest());
+ PresentationRequest request2 =
+ delegate_impl_->GetDefaultPresentationRequest();
+ EXPECT_EQ(presentation_url2, request2.presentation_url());
+ EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id),
+ request2.render_frame_host_id());
+ EXPECT_EQ(frame_url, request2.frame_url());
+
+ // Remove default presentation URL.
+ delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, "",
+ callback);
+ EXPECT_FALSE(delegate_impl_->HasDefaultPresentationRequest());
}
-TEST_F(PresentationServiceDelegateImplTest, DefaultMediaSourceObserver) {
- content::WebContentsTester::For(web_contents())
- ->NavigateAndCommit(GURL("http://www.google.com"));
+TEST_F(PresentationServiceDelegateImplTest, DefaultPresentationUrlCallback) {
content::RenderFrameHost* main_frame = web_contents()->GetMainFrame();
ASSERT_TRUE(main_frame);
int render_process_id = main_frame->GetProcess()->GetID();
int routing_id = main_frame->GetRoutingID();
- StrictMock<MockDefaultMediaSourceObserver> observer1;
- StrictMock<MockDefaultMediaSourceObserver> observer2;
- delegate_impl_->AddDefaultMediaSourceObserver(&observer1);
- delegate_impl_->AddDefaultMediaSourceObserver(&observer2);
- std::string url1("http://foo");
- EXPECT_CALL(observer1, OnDefaultMediaSourceChanged(
- Equals(MediaSourceForPresentationUrl(url1)),
- GURL("http://www.google.com"))).Times(1);
- EXPECT_CALL(observer2, OnDefaultMediaSourceChanged(
- Equals(MediaSourceForPresentationUrl(url1)),
- GURL("http://www.google.com"))).Times(1);
- delegate_impl_->SetDefaultPresentationUrl(render_process_id,
- routing_id, url1);
-
- EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1));
- EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer2));
-
- delegate_impl_->RemoveDefaultMediaSourceObserver(&observer2);
+
+ auto callback = base::Bind(
+ &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted,
+ base::Unretained(this));
+ std::string presentation_url1("http://foo.fakeUrl");
+ delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id,
+ presentation_url1, callback);
+
+ ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest());
+ PresentationRequest request = delegate_impl_->GetDefaultPresentationRequest();
+
+ // Should not trigger callback since route response is error.
+ delegate_impl_->OnRouteResponse(request, nullptr, "", "Error");
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(this));
+
+ // Should not trigger callback since request doesn't match.
+ std::string presentation_url2("http://bar.fakeUrl");
+ PresentationRequest different_request(RenderFrameHostId(100, 200),
+ presentation_url2,
+ GURL("http://anotherFrameUrl.fakeUrl"));
+ MediaRoute different_route("differentRouteId",
+ MediaSourceForPresentationUrl(presentation_url2),
+ "mediaSinkId", "", true, "", true);
+ delegate_impl_->OnRouteResponse(different_request, &different_route,
+ "differentPresentationId", "");
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(this));
+
+ // Should trigger callback since request matches.
+ MediaRoute route("routeId", MediaSourceForPresentationUrl(presentation_url1),
+ "mediaSinkId", "", true, "", true);
+ EXPECT_CALL(*this, OnDefaultPresentationStarted(_)).Times(1);
+ delegate_impl_->OnRouteResponse(request, &route, "presentationId", "");
+}
+
+TEST_F(PresentationServiceDelegateImplTest,
+ DefaultPresentationRequestObserver) {
+ auto callback = base::Bind(
+ &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted,
+ base::Unretained(this));
+
+ StrictMock<MockDefaultPresentationRequestObserver> observer;
+ delegate_impl_->AddDefaultPresentationRequestObserver(&observer);
+
+ GURL frame_url("http://www.google.com");
+ content::WebContentsTester::For(web_contents())->NavigateAndCommit(frame_url);
+ content::RenderFrameHost* main_frame = web_contents()->GetMainFrame();
+ ASSERT_TRUE(main_frame);
+ int render_process_id = main_frame->GetProcess()->GetID();
+ int routing_id = main_frame->GetRoutingID();
+
+ std::string url1("http://foo.fakeUrl");
+ PresentationRequest observed_request1(
+ RenderFrameHostId(render_process_id, routing_id), url1, frame_url);
+ EXPECT_CALL(observer, OnDefaultPresentationChanged(Equals(observed_request1)))
+ .Times(1);
+ delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, url1,
+ callback);
+
+ ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest());
+ PresentationRequest request1 =
+ delegate_impl_->GetDefaultPresentationRequest();
+ EXPECT_TRUE(request1.Equals(observed_request1));
+
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer));
+
std::string url2("http://youtube.com");
- EXPECT_CALL(observer1, OnDefaultMediaSourceChanged(
- Equals(MediaSourceForPresentationUrl(url2)),
- GURL("http://www.google.com"))).Times(1);
- delegate_impl_->SetDefaultPresentationUrl(render_process_id,
- routing_id, url2);
+ PresentationRequest observed_request2(
+ RenderFrameHostId(render_process_id, routing_id), url2, frame_url);
+ EXPECT_CALL(observer, OnDefaultPresentationChanged(Equals(observed_request2)))
mark a. foltz 2015/11/09 18:33:35 observer.OnDefaultPresentationCleared() should be
imcheng 2015/11/10 18:49:13 Yep. It is done below.
+ .Times(1);
+ delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, url2,
+ callback);
+ ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest());
+ PresentationRequest request2 =
+ delegate_impl_->GetDefaultPresentationRequest();
+ EXPECT_TRUE(request2.Equals(observed_request2));
+
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer));
- EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer1));
// Remove default presentation URL.
- EXPECT_CALL(observer1, OnDefaultMediaSourceChanged(
- Equals(MediaSource()),
- GURL("http://www.google.com"))).Times(1);
- delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, "");
+ EXPECT_CALL(observer, OnDefaultPresentationRemoved()).Times(1);
+ delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, "",
+ callback);
}
TEST_F(PresentationServiceDelegateImplTest, Reset) {
ON_CALL(router_, RegisterMediaSinksObserver(_)).WillByDefault(Return(true));
- std::string presentation_url1("http://url1");
+ std::string presentation_url1("http://url1.fakeUrl");
MediaSource source = MediaSourceForPresentationUrl(presentation_url1);
MockScreenAvailabilityListener listener1(presentation_url1);
int render_process_id = 1;
@@ -225,7 +298,7 @@ TEST_F(PresentationServiceDelegateImplTest, DelegateObservers) {
TEST_F(PresentationServiceDelegateImplTest, SinksObserverCantRegister) {
ON_CALL(router_, RegisterMediaSinksObserver(_)).WillByDefault(Return(false));
- const std::string presentation_url("http://url1");
+ const std::string presentation_url("http://url1.fakeUrl");
MockScreenAvailabilityListener listener(presentation_url);
const int render_process_id = 10;
const int render_frame_id = 1;

Powered by Google App Engine
This is Rietveld 408576698