| 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..aaa1ed3173da09ba8c540566c0150dbbfb42dda1 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,11 @@ 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*));
|
| };
|
|
|
| class PresentationServiceDelegateImplTest
|
| @@ -55,6 +56,9 @@ class PresentationServiceDelegateImplTest
|
| delegate_impl_->SetMediaRouterForTest(&router_);
|
| }
|
|
|
| + MOCK_METHOD1(OnDefaultPresentationStarted,
|
| + void(const content::PresentationSessionInfo& session_info));
|
| +
|
| PresentationServiceDelegateImpl* delegate_impl_;
|
| MockMediaRouter router_;
|
| };
|
| @@ -119,70 +123,139 @@ 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_->GetDefaultPresentationRequest());
|
| +
|
| + 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();
|
|
|
| + auto callback = base::Bind(
|
| + &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted,
|
| + base::Unretained(this));
|
| std::string presentation_url1("http://foo");
|
| 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);
|
| + const PresentationRequest* request =
|
| + delegate_impl_->GetDefaultPresentationRequest();
|
| + ASSERT_TRUE(request);
|
| + EXPECT_EQ(presentation_url1, request->presentation_url());
|
| + EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id),
|
| + request->render_frame_host_id());
|
| + EXPECT_EQ(frame_url, request->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);
|
| + request = delegate_impl_->GetDefaultPresentationRequest();
|
| + ASSERT_TRUE(request);
|
| + EXPECT_EQ(presentation_url2, request->presentation_url());
|
| + EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id),
|
| + request->render_frame_host_id());
|
| + EXPECT_EQ(frame_url, request->frame_url());
|
| +
|
| + // Remove default presentation URL.
|
| + delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, "",
|
| + callback);
|
| + request = delegate_impl_->GetDefaultPresentationRequest();
|
| + EXPECT_FALSE(request);
|
| +}
|
| +
|
| +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();
|
| +
|
| + auto callback = base::Bind(
|
| + &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted,
|
| + base::Unretained(this));
|
| + std::string presentation_url1("http://foo");
|
| + delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id,
|
| + presentation_url1, callback);
|
| +
|
| + const PresentationRequest* request =
|
| + delegate_impl_->GetDefaultPresentationRequest();
|
| + ASSERT_TRUE(request);
|
| +
|
| + // 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");
|
| + PresentationRequest different_request(RenderFrameHostId(100, 200),
|
| + presentation_url2,
|
| + GURL("http://anotherFrameUrl"));
|
| + 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, DefaultMediaSourceObserver) {
|
| +TEST_F(PresentationServiceDelegateImplTest,
|
| + DefaultPresentationRequestObserver) {
|
| + auto callback = base::Bind(
|
| + &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted,
|
| + base::Unretained(this));
|
| +
|
| + StrictMock<MockDefaultPresentationRequestObserver> observer;
|
| + delegate_impl_->AddDefaultPresentationRequestObserver(&observer);
|
| +
|
| content::WebContentsTester::For(web_contents())
|
| ->NavigateAndCommit(GURL("http://www.google.com"));
|
| 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);
|
| + const PresentationRequest* observed_request = nullptr;
|
| + EXPECT_CALL(observer, OnDefaultPresentationChanged(_))
|
| + .WillOnce(SaveArg<0>(&observed_request));
|
| + delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, url1,
|
| + callback);
|
| +
|
| + const PresentationRequest* request =
|
| + delegate_impl_->GetDefaultPresentationRequest();
|
| + ASSERT_TRUE(request);
|
| + EXPECT_EQ(request, observed_request);
|
| +
|
| + EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer));
|
| + observed_request = nullptr;
|
| + request = nullptr;
|
| +
|
| 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);
|
| + EXPECT_CALL(observer, OnDefaultPresentationChanged(_))
|
| + .WillOnce(SaveArg<0>(&observed_request));
|
| + delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, url2,
|
| + callback);
|
| + request = delegate_impl_->GetDefaultPresentationRequest();
|
| + ASSERT_TRUE(request);
|
| + EXPECT_EQ(request, observed_request);
|
| +
|
| + EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer));
|
| + observed_request = nullptr;
|
| + request = nullptr;
|
|
|
| - 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, OnDefaultPresentationChanged(nullptr)).Times(1);
|
| + delegate_impl_->SetDefaultPresentationUrl(render_process_id, routing_id, "",
|
| + callback);
|
| }
|
|
|
| TEST_F(PresentationServiceDelegateImplTest, Reset) {
|
|
|