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

Side by Side Diff: content/renderer/presentation/presentation_dispatcher.cc

Issue 1024903003: [Presentation API] Plumbing of |onstatechange| from the Mojo service to the public/platform (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Call the Mojo method again from the callback Created 5 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/presentation/presentation_dispatcher.h" 5 #include "content/renderer/presentation/presentation_dispatcher.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/common/presentation/presentation_service.mojom.h" 8 #include "content/common/presentation/presentation_service.mojom.h"
9 #include "content/public/common/service_registry.h" 9 #include "content/public/common/service_registry.h"
10 #include "content/public/renderer/render_frame.h" 10 #include "content/public/renderer/render_frame.h"
(...skipping 15 matching lines...) Expand all
26 case presentation::PRESENTATION_ERROR_TYPE_SESSION_REQUEST_CANCELLED: 26 case presentation::PRESENTATION_ERROR_TYPE_SESSION_REQUEST_CANCELLED:
27 return blink::WebPresentationError::ErrorTypeSessionRequestCancelled; 27 return blink::WebPresentationError::ErrorTypeSessionRequestCancelled;
28 case presentation::PRESENTATION_ERROR_TYPE_NO_PRESENTATION_FOUND: 28 case presentation::PRESENTATION_ERROR_TYPE_NO_PRESENTATION_FOUND:
29 return blink::WebPresentationError::ErrorTypeNoPresentationFound; 29 return blink::WebPresentationError::ErrorTypeNoPresentationFound;
30 case presentation::PRESENTATION_ERROR_TYPE_UNKNOWN: 30 case presentation::PRESENTATION_ERROR_TYPE_UNKNOWN:
31 default: 31 default:
32 return blink::WebPresentationError::ErrorTypeUnknown; 32 return blink::WebPresentationError::ErrorTypeUnknown;
33 } 33 }
34 } 34 }
35 35
36 blink::WebPresentationSessionState GetWebPresentationSessionStateFromMojo(
37 presentation::PresentationSessionState mojoSessionState) {
38 switch (mojoSessionState) {
39 case presentation::PRESENTATION_SESSION_STATE_CONNECTED:
40 return blink::WebPresentationSessionState::Connected;
41 case presentation::PRESENTATION_SESSION_STATE_DISCONNECTED:
42 return blink::WebPresentationSessionState::Disconnected;
43 }
44
45 NOTREACHED();
46 return blink::WebPresentationSessionState::Disconnected;
47 }
48
36 GURL GetPresentationURLFromFrame(content::RenderFrame* frame) { 49 GURL GetPresentationURLFromFrame(content::RenderFrame* frame) {
37 DCHECK(frame); 50 DCHECK(frame);
38 51
39 GURL url(frame->GetWebFrame()->document().defaultPresentationURL()); 52 GURL url(frame->GetWebFrame()->document().defaultPresentationURL());
40 return url.is_valid() ? url : GURL(); 53 return url.is_valid() ? url : GURL();
41 } 54 }
42 55
43 } // namespace 56 } // namespace
44 57
45 namespace content { 58 namespace content {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 presentation::PresentationSessionInfoPtr session_info) { 167 presentation::PresentationSessionInfoPtr session_info) {
155 if (!controller_) 168 if (!controller_)
156 return; 169 return;
157 170
158 // Reset the callback to get the next event. 171 // Reset the callback to get the next event.
159 presentation_service_->ListenForDefaultSessionStart(base::Bind( 172 presentation_service_->ListenForDefaultSessionStart(base::Bind(
160 &PresentationDispatcher::OnDefaultSessionStarted, 173 &PresentationDispatcher::OnDefaultSessionStarted,
161 base::Unretained(this))); 174 base::Unretained(this)));
162 175
163 DCHECK(!session_info.is_null()); 176 DCHECK(!session_info.is_null());
164 PresentationSessionDispatcher* session_dispatcher =
165 new PresentationSessionDispatcher(session_info.Pass());
166 presentation_session_dispatchers_.push_back(session_dispatcher);
167 controller_->didStartDefaultSession( 177 controller_->didStartDefaultSession(
168 new PresentationSessionClient(session_dispatcher)); 178 new PresentationSessionClient(session_info.Pass()));
169 } 179 }
170 180
171 void PresentationDispatcher::OnSessionCreated( 181 void PresentationDispatcher::OnSessionCreated(
172 blink::WebPresentationSessionClientCallbacks* callback, 182 blink::WebPresentationSessionClientCallbacks* callback,
173 presentation::PresentationSessionInfoPtr session_info, 183 presentation::PresentationSessionInfoPtr session_info,
174 presentation::PresentationErrorPtr error) { 184 presentation::PresentationErrorPtr error) {
175 DCHECK(callback); 185 DCHECK(callback);
176 if (!error.is_null()) { 186 if (!error.is_null()) {
177 DCHECK(session_info.is_null()); 187 DCHECK(session_info.is_null());
178 callback->onError(new blink::WebPresentationError( 188 callback->onError(new blink::WebPresentationError(
179 GetWebPresentationErrorTypeFromMojo(error->error_type), 189 GetWebPresentationErrorTypeFromMojo(error->error_type),
180 blink::WebString::fromUTF8(error->message))); 190 blink::WebString::fromUTF8(error->message)));
181 return; 191 return;
182 } 192 }
183 193
184 DCHECK(!session_info.is_null()); 194 DCHECK(!session_info.is_null());
185 PresentationSessionDispatcher* session_dispatcher = 195 callback->onSuccess(new PresentationSessionClient(session_info.Pass()));
186 new PresentationSessionDispatcher(session_info.Pass()); 196 }
187 presentation_session_dispatchers_.push_back(session_dispatcher); 197
188 callback->onSuccess(new PresentationSessionClient(session_dispatcher)); 198 void PresentationDispatcher::OnSessionStateChange(
199 presentation::PresentationSessionInfoPtr session_info,
200 presentation::PresentationSessionState session_state) {
201 if (!controller_)
202 return;
203
204 presentation_service_->ListenForSessionStateChange(base::Bind(
205 &PresentationDispatcher::OnSessionStateChange,
206 base::Unretained(this)));
207
208 DCHECK(!session_info.is_null());
209 controller_->didChangeSessionState(
210 new PresentationSessionClient(session_info.Pass()),
211 GetWebPresentationSessionStateFromMojo(session_state));
189 } 212 }
190 213
191 void PresentationDispatcher::ConnectToPresentationServiceIfNeeded() { 214 void PresentationDispatcher::ConnectToPresentationServiceIfNeeded() {
192 if (presentation_service_.get()) 215 if (presentation_service_.get())
193 return; 216 return;
194 217
195 render_frame()->GetServiceRegistry()->ConnectToRemoteService( 218 render_frame()->GetServiceRegistry()->ConnectToRemoteService(
196 &presentation_service_); 219 &presentation_service_);
197 presentation_service_->ListenForDefaultSessionStart(base::Bind( 220 presentation_service_->ListenForDefaultSessionStart(base::Bind(
198 &PresentationDispatcher::OnDefaultSessionStarted, 221 &PresentationDispatcher::OnDefaultSessionStarted,
199 base::Unretained(this))); 222 base::Unretained(this)));
223 presentation_service_->ListenForSessionStateChange(base::Bind(
224 &PresentationDispatcher::OnSessionStateChange,
225 base::Unretained(this)));
200 } 226 }
201 227
202 } // namespace content 228 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/presentation/presentation_dispatcher.h ('k') | content/renderer/presentation/presentation_session_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698