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

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 mfoltz's comments Created 5 years, 2 months 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..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) {

Powered by Google App Engine
This is Rietveld 408576698