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

Side by Side Diff: chrome/browser/media/android/router/media_router_android.cc

Issue 1415103006: Non-Local Join for Media Router and Presentation API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ready for Review Created 5 years 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 "chrome/browser/media/android/router/media_router_android.h" 5 #include "chrome/browser/media/android/router/media_router_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/guid.h" 10 #include "base/guid.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 env, 97 env,
98 java_media_router_.obj(), 98 java_media_router_.obj(),
99 jsource_id.obj(), 99 jsource_id.obj(),
100 jsink_id.obj(), 100 jsink_id.obj(),
101 jpresentation_id.obj(), 101 jpresentation_id.obj(),
102 jorigin.obj(), 102 jorigin.obj(),
103 tab_id, 103 tab_id,
104 route_request_id); 104 route_request_id);
105 } 105 }
106 106
107 void MediaRouterAndroid::JoinRouteByRouteId(
108 const MediaSource::Id& source,
109 const MediaRoute::Id& route_id,
110 const GURL& origin,
111 content::WebContents* web_contents,
112 const std::vector<MediaRouteResponseCallback>& callbacks) {
113 NOTIMPLEMENTED();
114 }
115
107 void MediaRouterAndroid::JoinRoute( 116 void MediaRouterAndroid::JoinRoute(
108 const MediaSource::Id& source_id, 117 const MediaSource::Id& source_id,
109 const std::string& presentation_id, 118 const std::string& presentation_id,
110 const GURL& origin, 119 const GURL& origin,
111 content::WebContents* web_contents, 120 content::WebContents* web_contents,
112 const std::vector<MediaRouteResponseCallback>& callbacks) { 121 const std::vector<MediaRouteResponseCallback>& callbacks) {
113 if (!origin.is_valid()) { 122 if (!origin.is_valid()) {
114 for (const MediaRouteResponseCallback& callback : callbacks) 123 for (const MediaRouteResponseCallback& callback : callbacks)
115 callback.Run(nullptr, "", "Invalid origin"); 124 callback.Run(nullptr, "", "Invalid origin");
116 return; 125 return;
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 ScopedJavaLocalRef<jstring> jsource_id = 261 ScopedJavaLocalRef<jstring> jsource_id =
253 base::android::ConvertUTF8ToJavaString(env, source_id); 262 base::android::ConvertUTF8ToJavaString(env, source_id);
254 Java_ChromeMediaRouter_stopObservingMediaSinks( 263 Java_ChromeMediaRouter_stopObservingMediaSinks(
255 env, java_media_router_.obj(), jsource_id.obj()); 264 env, java_media_router_.obj(), jsource_id.obj());
256 } 265 }
257 } 266 }
258 267
259 void MediaRouterAndroid::RegisterMediaRoutesObserver( 268 void MediaRouterAndroid::RegisterMediaRoutesObserver(
260 MediaRoutesObserver* observer) { 269 MediaRoutesObserver* observer) {
261 DVLOG(2) << "Added MediaRoutesObserver: " << observer; 270 DVLOG(2) << "Added MediaRoutesObserver: " << observer;
262 routes_observers_.AddObserver(observer); 271 const std::string& source_id = observer->source_id();
272 base::ObserverList<MediaRoutesObserver>* observer_list =
imcheng 2015/11/26 00:49:45 Use auto* so it's consistent with below.
matt.boetger 2015/12/01 01:26:55 Reverting.
273 routes_observers_.get(source_id);
274 if (!observer_list) {
imcheng 2015/11/26 00:49:45 It looks like we don't currently support joinable
whywhat 2015/11/26 14:43:04 So actually, on Android it doesn't seem like we ca
matt.boetger 2015/12/01 01:26:55 Done.
matt.boetger 2015/12/01 01:26:55 Done.
275 observer_list = new base::ObserverList<MediaRoutesObserver>;
276 routes_observers_.add(source_id, make_scoped_ptr(observer_list));
277 } else {
278 DCHECK(!observer_list->HasObserver(observer));
279 }
280 observer_list->AddObserver(observer);
263 } 281 }
264 282
265 void MediaRouterAndroid::UnregisterMediaRoutesObserver( 283 void MediaRouterAndroid::UnregisterMediaRoutesObserver(
266 MediaRoutesObserver* observer) { 284 MediaRoutesObserver* observer) {
267 if (!routes_observers_.HasObserver(observer)) 285 const std::string& source_id = observer->source_id();
286 auto* observer_list = routes_observers_.get(source_id);
287 if (!observer_list || !observer_list->HasObserver(observer))
268 return; 288 return;
269 routes_observers_.RemoveObserver(observer); 289
290 observer_list->RemoveObserver(observer);
270 } 291 }
271 292
272 void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) { 293 void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) {
273 NOTIMPLEMENTED(); 294 NOTIMPLEMENTED();
274 } 295 }
275 296
276 void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) { 297 void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) {
277 NOTIMPLEMENTED(); 298 NOTIMPLEMENTED();
278 } 299 }
279 300
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 ConvertJavaStringToUTF8(env, jsink_id), std::string(), 377 ConvertJavaStringToUTF8(env, jsink_id), std::string(),
357 jis_local, std::string(), 378 jis_local, std::string(),
358 true); // TODO(avayvod): Populate for_display. 379 true); // TODO(avayvod): Populate for_display.
359 380
360 for (const MediaRouteResponseCallback& callback : request->callbacks) 381 for (const MediaRouteResponseCallback& callback : request->callbacks)
361 callback.Run(&route, request->presentation_id, std::string()); 382 callback.Run(&route, request->presentation_id, std::string());
362 383
363 route_requests_.Remove(jroute_request_id); 384 route_requests_.Remove(jroute_request_id);
364 385
365 active_routes_.push_back(route); 386 active_routes_.push_back(route);
366 FOR_EACH_OBSERVER(MediaRoutesObserver, routes_observers_, 387 for (auto it = routes_observers_.begin();
367 OnRoutesUpdated(active_routes_)); 388 it != routes_observers_.end();
389 ++it) {
390 FOR_EACH_OBSERVER(MediaRoutesObserver, *it->second,
391 OnRoutesUpdated(active_routes_,
392 std::vector<MediaRoute::Id>()));
393 }
368 } 394 }
369 395
370 void MediaRouterAndroid::OnRouteRequestError( 396 void MediaRouterAndroid::OnRouteRequestError(
371 JNIEnv* env, 397 JNIEnv* env,
372 jobject obj, 398 jobject obj,
373 jstring jerror_text, 399 jstring jerror_text,
374 jint jroute_request_id) { 400 jint jroute_request_id) {
375 MediaRouteRequest* request = route_requests_.Lookup(jroute_request_id); 401 MediaRouteRequest* request = route_requests_.Lookup(jroute_request_id);
376 if (!request) 402 if (!request)
377 return; 403 return;
378 404
379 std::string error_text = ConvertJavaStringToUTF8(env, jerror_text); 405 std::string error_text = ConvertJavaStringToUTF8(env, jerror_text);
380 406
381 for (const MediaRouteResponseCallback& callback : request->callbacks) 407 for (const MediaRouteResponseCallback& callback : request->callbacks)
382 callback.Run(nullptr, std::string(), error_text); 408 callback.Run(nullptr, std::string(), error_text);
383 409
384 route_requests_.Remove(jroute_request_id); 410 route_requests_.Remove(jroute_request_id);
385 } 411 }
386 412
387 void MediaRouterAndroid::OnRouteClosed(JNIEnv* env, 413 void MediaRouterAndroid::OnRouteClosed(JNIEnv* env,
388 jobject obj, 414 jobject obj,
389 jstring jmedia_route_id) { 415 jstring jmedia_route_id) {
390 MediaRoute::Id route_id = ConvertJavaStringToUTF8(env, jmedia_route_id); 416 MediaRoute::Id route_id = ConvertJavaStringToUTF8(env, jmedia_route_id);
391 for (auto it = active_routes_.begin(); it != active_routes_.end(); ++it) 417 for (auto it = active_routes_.begin(); it != active_routes_.end(); ++it)
392 if (it->media_route_id() == route_id) { 418 if (it->media_route_id() == route_id) {
393 active_routes_.erase(it); 419 active_routes_.erase(it);
394 break; 420 break;
395 } 421 }
396 422
397 FOR_EACH_OBSERVER(MediaRoutesObserver, routes_observers_, 423 for (auto it = routes_observers_.begin();
398 OnRoutesUpdated(active_routes_)); 424 it != routes_observers_.end();
425 ++it) {
426 FOR_EACH_OBSERVER(MediaRoutesObserver, *it->second,
427 OnRoutesUpdated(active_routes_,
428 std::vector<MediaRoute::Id>()));
429 }
399 } 430 }
400 431
401 void MediaRouterAndroid::OnMessageSentResult( 432 void MediaRouterAndroid::OnMessageSentResult(
402 JNIEnv* env, jobject obj, jboolean jsuccess, jint jcallback_id) { 433 JNIEnv* env, jobject obj, jboolean jsuccess, jint jcallback_id) {
403 SendRouteMessageCallback* callback = message_callbacks_.Lookup(jcallback_id); 434 SendRouteMessageCallback* callback = message_callbacks_.Lookup(jcallback_id);
404 callback->Run(jsuccess); 435 callback->Run(jsuccess);
405 message_callbacks_.Remove(jcallback_id); 436 message_callbacks_.Remove(jcallback_id);
406 } 437 }
407 438
408 // Notifies the media router about a message received from the media route. 439 // Notifies the media router about a message received from the media route.
409 void MediaRouterAndroid::OnMessage( 440 void MediaRouterAndroid::OnMessage(
410 JNIEnv* env, jobject obj, jstring jmedia_route_id, jstring jmessage) { 441 JNIEnv* env, jobject obj, jstring jmedia_route_id, jstring jmessage) {
411 MediaRoute::Id route_id = ConvertJavaStringToUTF8(env, jmedia_route_id); 442 MediaRoute::Id route_id = ConvertJavaStringToUTF8(env, jmedia_route_id);
412 auto* observer_list = messages_observers_.get(route_id); 443 auto* observer_list = messages_observers_.get(route_id);
413 if (!observer_list) 444 if (!observer_list)
414 return; 445 return;
415 446
416 ScopedVector<content::PresentationSessionMessage> session_messages; 447 ScopedVector<content::PresentationSessionMessage> session_messages;
417 scoped_ptr<content::PresentationSessionMessage> message( 448 scoped_ptr<content::PresentationSessionMessage> message(
418 new content::PresentationSessionMessage(content::TEXT)); 449 new content::PresentationSessionMessage(content::TEXT));
419 message->message = ConvertJavaStringToUTF8(env, jmessage); 450 message->message = ConvertJavaStringToUTF8(env, jmessage);
420 session_messages.push_back(message.Pass()); 451 session_messages.push_back(message.Pass());
421 452
422 FOR_EACH_OBSERVER(PresentationSessionMessagesObserver, *observer_list, 453 FOR_EACH_OBSERVER(PresentationSessionMessagesObserver, *observer_list,
423 OnMessagesReceived(session_messages, true)); 454 OnMessagesReceived(session_messages, true));
424 } 455 }
425 456
426 } // namespace media_router 457 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698