diff options
author | haibinlu <haibinlu@chromium.org> | 2015-06-25 12:14:53 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-25 19:15:31 +0000 |
commit | 7e639ff6407b6a7939a89426821145359dafe58a (patch) | |
tree | 29c354701ce8c98c6a156c44d1b098fc3f34bb45 | |
parent | 8fef3842e2ce7721556b62e58ad875fd1ac02672 (diff) | |
download | chromium_src-7e639ff6407b6a7939a89426821145359dafe58a.zip chromium_src-7e639ff6407b6a7939a89426821145359dafe58a.tar.gz chromium_src-7e639ff6407b6a7939a89426821145359dafe58a.tar.bz2 |
[MediaRouter] wireup send/receive messages.
BUG=501539
Review URL: https://codereview.chromium.org/1199933006
Cr-Commit-Position: refs/heads/master@{#336222}
5 files changed, 37 insertions, 16 deletions
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.cc b/chrome/browser/media/router/presentation_service_delegate_impl.cc index b46c3f1..46649ae 100644 --- a/chrome/browser/media/router/presentation_service_delegate_impl.cc +++ b/chrome/browser/media/router/presentation_service_delegate_impl.cc @@ -623,8 +623,16 @@ void PresentationServiceDelegateImpl::ListenForSessionMessages( int render_process_id, int render_frame_id, const PresentationSessionMessageCallback& message_cb) { - // BUG=464205 - NOTIMPLEMENTED(); + const std::vector<MediaRoute::Id>& route_ids = frame_manager_->GetRouteIds( + RenderFrameHostId(render_process_id, render_frame_id)); + if (route_ids.empty()) { + DVLOG(1) << "No media routes found"; + message_cb.Run( + scoped_ptr<ScopedVector<content::PresentationSessionMessage>>()); + return; + } + + router_->ListenForRouteMessages(route_ids, message_cb); } void PresentationServiceDelegateImpl::SendMessage( @@ -632,8 +640,21 @@ void PresentationServiceDelegateImpl::SendMessage( int render_frame_id, scoped_ptr<content::PresentationSessionMessage> message_request, const SendMessageCallback& send_message_cb) { - // BUG=464205 - NOTIMPLEMENTED(); + if (message_request->is_binary()) { + NOTIMPLEMENTED(); + send_message_cb.Run(false); + return; + } + const MediaRoute::Id& route_id = frame_manager_->GetRouteId( + RenderFrameHostId(render_process_id, render_frame_id), + message_request->presentation_id); + if (route_id.empty()) { + DVLOG(1) << "No active route for " << message_request->presentation_id; + send_message_cb.Run(false); + return; + } + router_->SendRouteMessage(route_id, *(message_request->message), + send_message_cb); } void PresentationServiceDelegateImpl::OnRouteCreated(const MediaRoute& route) { diff --git a/content/browser/presentation/presentation_service_impl.cc b/content/browser/presentation/presentation_service_impl.cc index f652789..f387097 100644 --- a/content/browser/presentation/presentation_service_impl.cc +++ b/content/browser/presentation/presentation_service_impl.cc @@ -405,11 +405,11 @@ void PresentationServiceImpl::SendSessionMessage( weak_factory_.GetWeakPtr())); } -void PresentationServiceImpl::OnSendMessageCallback() { +void PresentationServiceImpl::OnSendMessageCallback(bool sent) { // It is possible that Reset() is invoked before receiving this callback. // So, always check send_message_callback_ for non-null. if (send_message_callback_) { - send_message_callback_->Run(true); + send_message_callback_->Run(sent); send_message_callback_.reset(); } } diff --git a/content/browser/presentation/presentation_service_impl.h b/content/browser/presentation/presentation_service_impl.h index e32ce8d..66c0da4 100644 --- a/content/browser/presentation/presentation_service_impl.h +++ b/content/browser/presentation/presentation_service_impl.h @@ -246,7 +246,7 @@ class CONTENT_EXPORT PresentationServiceImpl void OnJoinSessionError( int request_session_id, const PresentationError& error); - void OnSendMessageCallback(); + void OnSendMessageCallback(bool sent); // Passed to embedder's implementation of PresentationServiceDelegate for // later invocation when session messages arrive. diff --git a/content/browser/presentation/presentation_service_impl_unittest.cc b/content/browser/presentation/presentation_service_impl_unittest.cc index 076b31f..7a2bd91 100644 --- a/content/browser/presentation/presentation_service_impl_unittest.cc +++ b/content/browser/presentation/presentation_service_impl_unittest.cc @@ -661,7 +661,7 @@ TEST_F(PresentationServiceImplTest, SendStringMessage) { base::Unretained(this))); base::RunLoop run_loop; - base::Closure send_message_cb; + base::Callback<void(bool)> send_message_cb; PresentationSessionMessage* test_message = nullptr; EXPECT_CALL(mock_delegate_, SendMessageRawPtr( _, _, _, _)) @@ -680,7 +680,7 @@ TEST_F(PresentationServiceImplTest, SendStringMessage) { EXPECT_EQ(message, *(test_message->message.get())); EXPECT_FALSE(test_message->data); delete test_message; - send_message_cb.Run(); + send_message_cb.Run(true); SaveQuitClosureAndRunLoop(); } @@ -704,7 +704,7 @@ TEST_F(PresentationServiceImplTest, SendArrayBuffer) { base::Unretained(this))); base::RunLoop run_loop; - base::Closure send_message_cb; + base::Callback<void(bool)> send_message_cb; PresentationSessionMessage* test_message = nullptr; EXPECT_CALL(mock_delegate_, SendMessageRawPtr( _, _, _, _)) @@ -725,7 +725,7 @@ TEST_F(PresentationServiceImplTest, SendArrayBuffer) { kMaxPresentationSessionMessageSize); EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer))); delete test_message; - send_message_cb.Run(); + send_message_cb.Run(true); SaveQuitClosureAndRunLoop(); } @@ -752,7 +752,7 @@ TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { base::Unretained(this))); base::RunLoop run_loop; - base::Closure send_message_cb; + base::Callback<void(bool)> send_message_cb; PresentationSessionMessage* test_message = nullptr; EXPECT_CALL(mock_delegate_, SendMessageRawPtr( _, _, _, _)) @@ -763,7 +763,7 @@ TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { run_loop.Run(); EXPECT_FALSE(test_message); - send_message_cb.Run(); + send_message_cb.Run(true); SaveQuitClosureAndRunLoop(); } @@ -785,7 +785,7 @@ TEST_F(PresentationServiceImplTest, SendBlobData) { base::Unretained(this))); base::RunLoop run_loop; - base::Closure send_message_cb; + base::Callback<void(bool)> send_message_cb; PresentationSessionMessage* test_message = nullptr; EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _)) .WillOnce(DoAll( @@ -805,7 +805,7 @@ TEST_F(PresentationServiceImplTest, SendBlobData) { kMaxPresentationSessionMessageSize); EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer))); delete test_message; - send_message_cb.Run(); + send_message_cb.Run(true); SaveQuitClosureAndRunLoop(); } diff --git a/content/public/browser/presentation_service_delegate.h b/content/public/browser/presentation_service_delegate.h index 0d5b35b..89da14d 100644 --- a/content/public/browser/presentation_service_delegate.h +++ b/content/public/browser/presentation_service_delegate.h @@ -45,7 +45,7 @@ class CONTENT_EXPORT PresentationServiceDelegate { base::Callback<void(const PresentationError&)>; using PresentationSessionMessageCallback = base::Callback<void( scoped_ptr<ScopedVector<PresentationSessionMessage>>)>; - using SendMessageCallback = base::Closure; + using SendMessageCallback = base::Callback<void(bool)>; virtual ~PresentationServiceDelegate() {} |