Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |