Index: content/browser/presentation/presentation_service_impl.cc |
diff --git a/content/browser/presentation/presentation_service_impl.cc b/content/browser/presentation/presentation_service_impl.cc |
index 9e2fd22e9c8c59971ce8f898b92864e220704a2e..20228c3537979cad9baad461dac9880e680cacee 100644 |
--- a/content/browser/presentation/presentation_service_impl.cc |
+++ b/content/browser/presentation/presentation_service_impl.cc |
@@ -300,6 +300,33 @@ void PresentationServiceImpl::SetDefaultPresentationURL( |
DoSetDefaultPresentationUrl(new_default_url, default_presentation_id); |
} |
+void PresentationServiceImpl::SendStringMessage( |
+ const mojo::String& presentation_url, |
+ const mojo::String& presentation_id, |
+ const mojo::String& message, |
+ const SendMessageMojoCallback& callback) { |
+ if (!delegate_) { |
+ callback.Run(); |
+ return; |
+ } |
+ // Save the callback and run it after request completion by delegate_. |
+ send_message_cb_ptr_.reset(new SendMessageMojoCallback(callback)); |
imcheng
2015/04/14 21:29:13
Given that incoming SendStringMessage requests are
USE s.singapati at gmail.com
2015/04/15 16:09:08
Acknowledged. Yes, I also had almost same question
USE s.singapati at gmail.com
2015/04/16 11:14:15
Also, if callback is invoked immediately after cal
|
+ delegate_->SendStringMessage( |
+ render_frame_host_->GetProcess()->GetID(), |
+ render_frame_host_->GetRoutingID(), |
+ presentation_url, |
+ presentation_id, |
+ message, |
+ base::Bind(&PresentationServiceImpl::OnSendMessageCallback, |
+ weak_factory_.GetWeakPtr())); |
+} |
+ |
+void PresentationServiceImpl::OnSendMessageCallback() { |
+ DCHECK(send_message_cb_ptr_); |
+ send_message_cb_ptr_->Run(); |
+ send_message_cb_ptr_.reset(); |
+} |
+ |
void PresentationServiceImpl::CloseSession( |
const mojo::String& presentation_url, |
const mojo::String& presentation_id) { |
@@ -373,6 +400,13 @@ void PresentationServiceImpl::Reset() { |
InvokeNewSessionMojoCallbackWithError(*pending_entry.second); |
} |
pending_session_cbs_.clear(); |
+ |
+ if (send_message_cb_ptr_) { |
+ // Running the callback might result in the PresentationDispatcher sending |
+ // the next message. So, just reset the callback since the frame is being |
+ // closed anyways. |
+ send_message_cb_ptr_.reset(); |
imcheng
2015/04/14 21:29:13
It cannot simply be reset since it will DCHECK per
USE s.singapati at gmail.com
2015/04/15 16:09:08
Acknowledged.
- Then it must run the callback for
|
+ } |
} |
void PresentationServiceImpl::InvokeNewSessionMojoCallbackWithError( |