| 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_string.h" | 8 #include "base/android/jni_string.h" |
| 9 #include "base/guid.h" | 9 #include "base/guid.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "chrome/browser/media/router/media_routes_observer.h" |
| 11 #include "chrome/browser/media/router/media_sinks_observer.h" | 12 #include "chrome/browser/media/router/media_sinks_observer.h" |
| 12 #include "jni/ChromeMediaRouter_jni.h" | 13 #include "jni/ChromeMediaRouter_jni.h" |
| 13 | 14 |
| 14 using base::android::ConvertUTF8ToJavaString; | 15 using base::android::ConvertUTF8ToJavaString; |
| 15 using base::android::ConvertJavaStringToUTF8; | 16 using base::android::ConvertJavaStringToUTF8; |
| 16 using base::android::ScopedJavaLocalRef; | 17 using base::android::ScopedJavaLocalRef; |
| 17 using base::android::AttachCurrentThread; | 18 using base::android::AttachCurrentThread; |
| 18 | 19 |
| 19 namespace media_router { | 20 namespace media_router { |
| 20 | 21 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 JNIEnv* env = base::android::AttachCurrentThread(); | 161 JNIEnv* env = base::android::AttachCurrentThread(); |
| 161 ScopedJavaLocalRef<jstring> jsource_id = | 162 ScopedJavaLocalRef<jstring> jsource_id = |
| 162 base::android::ConvertUTF8ToJavaString(env, source_id); | 163 base::android::ConvertUTF8ToJavaString(env, source_id); |
| 163 Java_ChromeMediaRouter_stopObservingMediaSinks( | 164 Java_ChromeMediaRouter_stopObservingMediaSinks( |
| 164 env, java_media_router_.obj(), jsource_id.obj()); | 165 env, java_media_router_.obj(), jsource_id.obj()); |
| 165 } | 166 } |
| 166 } | 167 } |
| 167 | 168 |
| 168 void MediaRouterAndroid::RegisterMediaRoutesObserver( | 169 void MediaRouterAndroid::RegisterMediaRoutesObserver( |
| 169 MediaRoutesObserver* observer) { | 170 MediaRoutesObserver* observer) { |
| 170 NOTIMPLEMENTED(); | 171 DVLOG(2) << "Added MediaRoutesObserver: " << observer; |
| 172 routes_observers_.AddObserver(observer); |
| 171 } | 173 } |
| 172 | 174 |
| 173 void MediaRouterAndroid::UnregisterMediaRoutesObserver( | 175 void MediaRouterAndroid::UnregisterMediaRoutesObserver( |
| 174 MediaRoutesObserver* observer) { | 176 MediaRoutesObserver* observer) { |
| 175 NOTIMPLEMENTED(); | 177 if (!routes_observers_.HasObserver(observer)) |
| 178 return; |
| 179 routes_observers_.RemoveObserver(observer); |
| 176 } | 180 } |
| 177 | 181 |
| 178 void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) { | 182 void MediaRouterAndroid::RegisterIssuesObserver(IssuesObserver* observer) { |
| 179 NOTIMPLEMENTED(); | 183 NOTIMPLEMENTED(); |
| 180 } | 184 } |
| 181 | 185 |
| 182 void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) { | 186 void MediaRouterAndroid::UnregisterIssuesObserver(IssuesObserver* observer) { |
| 183 NOTIMPLEMENTED(); | 187 NOTIMPLEMENTED(); |
| 184 } | 188 } |
| 185 | 189 |
| 186 void MediaRouterAndroid::RegisterPresentationSessionMessagesObserver( | 190 void MediaRouterAndroid::RegisterPresentationSessionMessagesObserver( |
| 187 PresentationSessionMessagesObserver* observer) { | 191 PresentationSessionMessagesObserver* observer) { |
| 188 NOTIMPLEMENTED(); | 192 NOTIMPLEMENTED(); |
| 189 } | 193 } |
| 190 | 194 |
| 191 void MediaRouterAndroid::UnregisterPresentationSessionMessagesObserver( | 195 void MediaRouterAndroid::UnregisterPresentationSessionMessagesObserver( |
| 192 PresentationSessionMessagesObserver* observer) { | 196 PresentationSessionMessagesObserver* observer) { |
| 193 NOTIMPLEMENTED(); | 197 NOTIMPLEMENTED(); |
| 194 } | 198 } |
| 195 | 199 |
| 196 void MediaRouterAndroid::OnSinksReceived( | 200 void MediaRouterAndroid::OnSinksReceived( |
| 197 JNIEnv* env, | 201 JNIEnv* env, |
| 198 jobject obj, | 202 jobject obj, |
| 199 jstring jsource_urn, | 203 jstring jsource_urn, |
| 200 jint count) { | 204 jint jcount) { |
| 201 std::vector<MediaSink> sinks_converted; | 205 std::vector<MediaSink> sinks_converted; |
| 202 sinks_converted.reserve(count); | 206 sinks_converted.reserve(jcount); |
| 203 for (int i = 0; i < count; ++i) { | 207 for (int i = 0; i < jcount; ++i) { |
| 204 ScopedJavaLocalRef<jstring> jsink_urn = | 208 ScopedJavaLocalRef<jstring> jsink_urn = |
| 205 Java_ChromeMediaRouter_getSinkUrn( | 209 Java_ChromeMediaRouter_getSinkUrn( |
| 206 env, java_media_router_.obj(), jsource_urn, i); | 210 env, java_media_router_.obj(), jsource_urn, i); |
| 207 ScopedJavaLocalRef<jstring> jsink_name = | 211 ScopedJavaLocalRef<jstring> jsink_name = |
| 208 Java_ChromeMediaRouter_getSinkName( | 212 Java_ChromeMediaRouter_getSinkName( |
| 209 env, java_media_router_.obj(), jsource_urn, i); | 213 env, java_media_router_.obj(), jsource_urn, i); |
| 210 sinks_converted.push_back( | 214 sinks_converted.push_back( |
| 211 MediaSink(ConvertJavaStringToUTF8(env, jsink_urn.obj()), | 215 MediaSink(ConvertJavaStringToUTF8(env, jsink_urn.obj()), |
| 212 ConvertJavaStringToUTF8(env, jsink_name.obj()))); | 216 ConvertJavaStringToUTF8(env, jsink_name.obj()))); |
| 213 } | 217 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 224 JNIEnv* env, | 228 JNIEnv* env, |
| 225 jobject obj, | 229 jobject obj, |
| 226 jstring jmedia_route_id, | 230 jstring jmedia_route_id, |
| 227 jint jcreate_route_request_id, | 231 jint jcreate_route_request_id, |
| 228 jboolean jis_local) { | 232 jboolean jis_local) { |
| 229 CreateMediaRouteRequest* request = | 233 CreateMediaRouteRequest* request = |
| 230 create_route_requests_.Lookup(jcreate_route_request_id); | 234 create_route_requests_.Lookup(jcreate_route_request_id); |
| 231 if (!request) | 235 if (!request) |
| 232 return; | 236 return; |
| 233 | 237 |
| 234 scoped_ptr<MediaRoute> route(new MediaRoute( | 238 MediaRoute route( |
| 235 ConvertJavaStringToUTF8(env, jmedia_route_id), | 239 ConvertJavaStringToUTF8(env, jmedia_route_id), |
| 236 request->media_source, | 240 request->media_source, |
| 237 request->media_sink, | 241 request->media_sink, |
| 238 std::string(), | 242 std::string(), |
| 239 jis_local, | 243 jis_local, |
| 240 std::string())); | 244 std::string()); |
| 241 | 245 |
| 242 for (const MediaRouteResponseCallback& callback : request->callbacks) | 246 for (const MediaRouteResponseCallback& callback : request->callbacks) |
| 243 callback.Run(route.get(), request->presentation_id, std::string()); | 247 callback.Run(&route, request->presentation_id, std::string()); |
| 244 | 248 |
| 245 create_route_requests_.Remove(jcreate_route_request_id); | 249 create_route_requests_.Remove(jcreate_route_request_id); |
| 250 |
| 251 active_routes_.push_back(route); |
| 252 FOR_EACH_OBSERVER(MediaRoutesObserver, routes_observers_, |
| 253 OnRoutesUpdated(active_routes_)); |
| 246 } | 254 } |
| 247 | 255 |
| 248 void MediaRouterAndroid::OnRouteCreationError( | 256 void MediaRouterAndroid::OnRouteCreationError( |
| 249 JNIEnv* env, | 257 JNIEnv* env, |
| 250 jobject obj, | 258 jobject obj, |
| 251 jstring jerror_text, | 259 jstring jerror_text, |
| 252 jint jcreate_route_request_id) { | 260 jint jcreate_route_request_id) { |
| 253 CreateMediaRouteRequest* request = | 261 CreateMediaRouteRequest* request = |
| 254 create_route_requests_.Lookup(jcreate_route_request_id); | 262 create_route_requests_.Lookup(jcreate_route_request_id); |
| 255 if (!request) | 263 if (!request) |
| 256 return; | 264 return; |
| 257 | 265 |
| 258 std::string error_text = ConvertJavaStringToUTF8(env, jerror_text); | 266 std::string error_text = ConvertJavaStringToUTF8(env, jerror_text); |
| 259 | 267 |
| 260 for (const MediaRouteResponseCallback& callback : request->callbacks) | 268 for (const MediaRouteResponseCallback& callback : request->callbacks) |
| 261 callback.Run(nullptr, std::string(), error_text); | 269 callback.Run(nullptr, std::string(), error_text); |
| 262 | 270 |
| 263 create_route_requests_.Remove(jcreate_route_request_id); | 271 create_route_requests_.Remove(jcreate_route_request_id); |
| 264 } | 272 } |
| 265 | 273 |
| 274 void MediaRouterAndroid::OnRouteClosed(JNIEnv* env, |
| 275 jobject obj, |
| 276 jstring jmedia_route_id) { |
| 277 MediaRoute::Id route_id = ConvertJavaStringToUTF8(env, jmedia_route_id); |
| 278 for (auto it = active_routes_.begin(); it != active_routes_.end(); ++it) |
| 279 if (it->media_route_id() == route_id) { |
| 280 active_routes_.erase(it); |
| 281 break; |
| 282 } |
| 283 |
| 284 FOR_EACH_OBSERVER(MediaRoutesObserver, routes_observers_, |
| 285 OnRoutesUpdated(active_routes_)); |
| 286 } |
| 287 |
| 266 } // namespace media_router | 288 } // namespace media_router |
| OLD | NEW |