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; |