| 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 <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 JNIEnv* env = base::android::AttachCurrentThread(); | 110 JNIEnv* env = base::android::AttachCurrentThread(); |
| 111 ScopedJavaLocalRef<jstring> jsource_id = | 111 ScopedJavaLocalRef<jstring> jsource_id = |
| 112 base::android::ConvertUTF8ToJavaString(env, source_id); | 112 base::android::ConvertUTF8ToJavaString(env, source_id); |
| 113 ScopedJavaLocalRef<jstring> jsink_id = | 113 ScopedJavaLocalRef<jstring> jsink_id = |
| 114 base::android::ConvertUTF8ToJavaString(env, sink_id); | 114 base::android::ConvertUTF8ToJavaString(env, sink_id); |
| 115 ScopedJavaLocalRef<jstring> jpresentation_id = | 115 ScopedJavaLocalRef<jstring> jpresentation_id = |
| 116 base::android::ConvertUTF8ToJavaString(env, presentation_id); | 116 base::android::ConvertUTF8ToJavaString(env, presentation_id); |
| 117 ScopedJavaLocalRef<jstring> jorigin = | 117 ScopedJavaLocalRef<jstring> jorigin = |
| 118 base::android::ConvertUTF8ToJavaString(env, origin.spec()); | 118 base::android::ConvertUTF8ToJavaString(env, origin.spec()); |
| 119 | 119 |
| 120 Java_ChromeMediaRouter_createRoute( | 120 Java_ChromeMediaRouter_createRoute(env, java_media_router_, jsource_id, |
| 121 env, | 121 jsink_id, jpresentation_id, jorigin, |
| 122 java_media_router_.obj(), | 122 tab_id, is_incognito, route_request_id); |
| 123 jsource_id.obj(), | |
| 124 jsink_id.obj(), | |
| 125 jpresentation_id.obj(), | |
| 126 jorigin.obj(), | |
| 127 tab_id, | |
| 128 is_incognito, | |
| 129 route_request_id); | |
| 130 } | 123 } |
| 131 | 124 |
| 132 void MediaRouterAndroid::ConnectRouteByRouteId( | 125 void MediaRouterAndroid::ConnectRouteByRouteId( |
| 133 const MediaSource::Id& source, | 126 const MediaSource::Id& source, |
| 134 const MediaRoute::Id& route_id, | 127 const MediaRoute::Id& route_id, |
| 135 const GURL& origin, | 128 const GURL& origin, |
| 136 content::WebContents* web_contents, | 129 content::WebContents* web_contents, |
| 137 const std::vector<MediaRouteResponseCallback>& callbacks, | 130 const std::vector<MediaRouteResponseCallback>& callbacks, |
| 138 base::TimeDelta timeout, | 131 base::TimeDelta timeout, |
| 139 bool incognito) { | 132 bool incognito) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 int request_id = route_requests_.Add(request); | 166 int request_id = route_requests_.Add(request); |
| 174 | 167 |
| 175 JNIEnv* env = base::android::AttachCurrentThread(); | 168 JNIEnv* env = base::android::AttachCurrentThread(); |
| 176 ScopedJavaLocalRef<jstring> jsource_id = | 169 ScopedJavaLocalRef<jstring> jsource_id = |
| 177 base::android::ConvertUTF8ToJavaString(env, source_id); | 170 base::android::ConvertUTF8ToJavaString(env, source_id); |
| 178 ScopedJavaLocalRef<jstring> jpresentation_id = | 171 ScopedJavaLocalRef<jstring> jpresentation_id = |
| 179 base::android::ConvertUTF8ToJavaString(env, presentation_id); | 172 base::android::ConvertUTF8ToJavaString(env, presentation_id); |
| 180 ScopedJavaLocalRef<jstring> jorigin = | 173 ScopedJavaLocalRef<jstring> jorigin = |
| 181 base::android::ConvertUTF8ToJavaString(env, origin.spec()); | 174 base::android::ConvertUTF8ToJavaString(env, origin.spec()); |
| 182 | 175 |
| 183 Java_ChromeMediaRouter_joinRoute( | 176 Java_ChromeMediaRouter_joinRoute(env, java_media_router_, jsource_id, |
| 184 env, | 177 jpresentation_id, jorigin, tab_id, |
| 185 java_media_router_.obj(), | 178 request_id); |
| 186 jsource_id.obj(), | |
| 187 jpresentation_id.obj(), | |
| 188 jorigin.obj(), | |
| 189 tab_id, | |
| 190 request_id); | |
| 191 } | 179 } |
| 192 | 180 |
| 193 void MediaRouterAndroid::TerminateRoute(const MediaRoute::Id& route_id) { | 181 void MediaRouterAndroid::TerminateRoute(const MediaRoute::Id& route_id) { |
| 194 JNIEnv* env = base::android::AttachCurrentThread(); | 182 JNIEnv* env = base::android::AttachCurrentThread(); |
| 195 ScopedJavaLocalRef<jstring> jroute_id = | 183 ScopedJavaLocalRef<jstring> jroute_id = |
| 196 base::android::ConvertUTF8ToJavaString(env, route_id); | 184 base::android::ConvertUTF8ToJavaString(env, route_id); |
| 197 Java_ChromeMediaRouter_closeRoute( | 185 Java_ChromeMediaRouter_closeRoute(env, java_media_router_, jroute_id); |
| 198 env, java_media_router_.obj(), jroute_id.obj()); | |
| 199 } | 186 } |
| 200 | 187 |
| 201 void MediaRouterAndroid::SendRouteMessage( | 188 void MediaRouterAndroid::SendRouteMessage( |
| 202 const MediaRoute::Id& route_id, | 189 const MediaRoute::Id& route_id, |
| 203 const std::string& message, | 190 const std::string& message, |
| 204 const SendRouteMessageCallback& callback) { | 191 const SendRouteMessageCallback& callback) { |
| 205 int callback_id = message_callbacks_.Add( | 192 int callback_id = message_callbacks_.Add( |
| 206 new SendRouteMessageCallback(callback)); | 193 new SendRouteMessageCallback(callback)); |
| 207 JNIEnv* env = base::android::AttachCurrentThread(); | 194 JNIEnv* env = base::android::AttachCurrentThread(); |
| 208 ScopedJavaLocalRef<jstring> jroute_id = | 195 ScopedJavaLocalRef<jstring> jroute_id = |
| 209 base::android::ConvertUTF8ToJavaString(env, route_id); | 196 base::android::ConvertUTF8ToJavaString(env, route_id); |
| 210 ScopedJavaLocalRef<jstring> jmessage = | 197 ScopedJavaLocalRef<jstring> jmessage = |
| 211 base::android::ConvertUTF8ToJavaString(env, message); | 198 base::android::ConvertUTF8ToJavaString(env, message); |
| 212 Java_ChromeMediaRouter_sendStringMessage( | 199 Java_ChromeMediaRouter_sendStringMessage(env, java_media_router_, jroute_id, |
| 213 env, | 200 jmessage, callback_id); |
| 214 java_media_router_.obj(), | |
| 215 jroute_id.obj(), | |
| 216 jmessage.obj(), | |
| 217 callback_id); | |
| 218 } | 201 } |
| 219 | 202 |
| 220 void MediaRouterAndroid::SendRouteBinaryMessage( | 203 void MediaRouterAndroid::SendRouteBinaryMessage( |
| 221 const MediaRoute::Id& route_id, | 204 const MediaRoute::Id& route_id, |
| 222 std::unique_ptr<std::vector<uint8_t>> data, | 205 std::unique_ptr<std::vector<uint8_t>> data, |
| 223 const SendRouteMessageCallback& callback) { | 206 const SendRouteMessageCallback& callback) { |
| 224 int callback_id = | 207 int callback_id = |
| 225 message_callbacks_.Add(new SendRouteMessageCallback(callback)); | 208 message_callbacks_.Add(new SendRouteMessageCallback(callback)); |
| 226 JNIEnv* env = base::android::AttachCurrentThread(); | 209 JNIEnv* env = base::android::AttachCurrentThread(); |
| 227 ScopedJavaLocalRef<jstring> jroute_id = | 210 ScopedJavaLocalRef<jstring> jroute_id = |
| 228 base::android::ConvertUTF8ToJavaString(env, route_id); | 211 base::android::ConvertUTF8ToJavaString(env, route_id); |
| 229 ScopedJavaLocalRef<jbyteArray> jbyte_array = | 212 ScopedJavaLocalRef<jbyteArray> jbyte_array = |
| 230 base::android::ToJavaByteArray(env, &((*data)[0]), data->size()); | 213 base::android::ToJavaByteArray(env, &((*data)[0]), data->size()); |
| 231 Java_ChromeMediaRouter_sendBinaryMessage(env, java_media_router_.obj(), | 214 Java_ChromeMediaRouter_sendBinaryMessage(env, java_media_router_, jroute_id, |
| 232 jroute_id.obj(), jbyte_array.obj(), | 215 jbyte_array, callback_id); |
| 233 callback_id); | |
| 234 } | 216 } |
| 235 | 217 |
| 236 void MediaRouterAndroid::AddIssue(const Issue& issue) { | 218 void MediaRouterAndroid::AddIssue(const Issue& issue) { |
| 237 NOTIMPLEMENTED(); | 219 NOTIMPLEMENTED(); |
| 238 } | 220 } |
| 239 | 221 |
| 240 void MediaRouterAndroid::ClearIssue(const Issue::Id& issue_id) { | 222 void MediaRouterAndroid::ClearIssue(const Issue::Id& issue_id) { |
| 241 NOTIMPLEMENTED(); | 223 NOTIMPLEMENTED(); |
| 242 } | 224 } |
| 243 | 225 |
| 244 void MediaRouterAndroid::OnUserGesture() { | 226 void MediaRouterAndroid::OnUserGesture() { |
| 245 } | 227 } |
| 246 | 228 |
| 247 void MediaRouterAndroid::SearchSinks( | 229 void MediaRouterAndroid::SearchSinks( |
| 248 const MediaSink::Id& sink_id, | 230 const MediaSink::Id& sink_id, |
| 249 const MediaSource::Id& source_id, | 231 const MediaSource::Id& source_id, |
| 250 const std::string& search_input, | 232 const std::string& search_input, |
| 251 const std::string& domain, | 233 const std::string& domain, |
| 252 const MediaSinkSearchResponseCallback& sink_callback) { | 234 const MediaSinkSearchResponseCallback& sink_callback) { |
| 253 NOTIMPLEMENTED(); | 235 NOTIMPLEMENTED(); |
| 254 } | 236 } |
| 255 | 237 |
| 256 void MediaRouterAndroid::DetachRoute(const MediaRoute::Id& route_id) { | 238 void MediaRouterAndroid::DetachRoute(const MediaRoute::Id& route_id) { |
| 257 JNIEnv* env = base::android::AttachCurrentThread(); | 239 JNIEnv* env = base::android::AttachCurrentThread(); |
| 258 ScopedJavaLocalRef<jstring> jroute_id = | 240 ScopedJavaLocalRef<jstring> jroute_id = |
| 259 base::android::ConvertUTF8ToJavaString(env, route_id); | 241 base::android::ConvertUTF8ToJavaString(env, route_id); |
| 260 Java_ChromeMediaRouter_detachRoute( | 242 Java_ChromeMediaRouter_detachRoute(env, java_media_router_, jroute_id); |
| 261 env, java_media_router_.obj(), jroute_id.obj()); | |
| 262 } | 243 } |
| 263 | 244 |
| 264 bool MediaRouterAndroid::RegisterMediaSinksObserver( | 245 bool MediaRouterAndroid::RegisterMediaSinksObserver( |
| 265 MediaSinksObserver* observer) { | 246 MediaSinksObserver* observer) { |
| 266 const std::string& source_id = observer->source().id(); | 247 const std::string& source_id = observer->source().id(); |
| 267 base::ObserverList<MediaSinksObserver>* observer_list = | 248 base::ObserverList<MediaSinksObserver>* observer_list = |
| 268 sinks_observers_.get(source_id); | 249 sinks_observers_.get(source_id); |
| 269 if (!observer_list) { | 250 if (!observer_list) { |
| 270 observer_list = new base::ObserverList<MediaSinksObserver>; | 251 observer_list = new base::ObserverList<MediaSinksObserver>; |
| 271 sinks_observers_.add(source_id, base::WrapUnique(observer_list)); | 252 sinks_observers_.add(source_id, base::WrapUnique(observer_list)); |
| 272 } else { | 253 } else { |
| 273 DCHECK(!observer_list->HasObserver(observer)); | 254 DCHECK(!observer_list->HasObserver(observer)); |
| 274 } | 255 } |
| 275 | 256 |
| 276 observer_list->AddObserver(observer); | 257 observer_list->AddObserver(observer); |
| 277 JNIEnv* env = base::android::AttachCurrentThread(); | 258 JNIEnv* env = base::android::AttachCurrentThread(); |
| 278 ScopedJavaLocalRef<jstring> jsource_id = | 259 ScopedJavaLocalRef<jstring> jsource_id = |
| 279 base::android::ConvertUTF8ToJavaString(env, source_id); | 260 base::android::ConvertUTF8ToJavaString(env, source_id); |
| 280 return Java_ChromeMediaRouter_startObservingMediaSinks( | 261 return Java_ChromeMediaRouter_startObservingMediaSinks( |
| 281 env, java_media_router_.obj(), jsource_id.obj()); | 262 env, java_media_router_, jsource_id); |
| 282 } | 263 } |
| 283 | 264 |
| 284 void MediaRouterAndroid::UnregisterMediaSinksObserver( | 265 void MediaRouterAndroid::UnregisterMediaSinksObserver( |
| 285 MediaSinksObserver* observer) { | 266 MediaSinksObserver* observer) { |
| 286 const std::string& source_id = observer->source().id(); | 267 const std::string& source_id = observer->source().id(); |
| 287 auto* observer_list = sinks_observers_.get(source_id); | 268 auto* observer_list = sinks_observers_.get(source_id); |
| 288 if (!observer_list || !observer_list->HasObserver(observer)) | 269 if (!observer_list || !observer_list->HasObserver(observer)) |
| 289 return; | 270 return; |
| 290 | 271 |
| 291 // If we are removing the final observer for the source, then stop | 272 // If we are removing the final observer for the source, then stop |
| 292 // observing sinks for it. | 273 // observing sinks for it. |
| 293 // might_have_observers() is reliable here on the assumption that this call | 274 // might_have_observers() is reliable here on the assumption that this call |
| 294 // is not inside the ObserverList iteration. | 275 // is not inside the ObserverList iteration. |
| 295 observer_list->RemoveObserver(observer); | 276 observer_list->RemoveObserver(observer); |
| 296 if (!observer_list->might_have_observers()) { | 277 if (!observer_list->might_have_observers()) { |
| 297 sinks_observers_.erase(source_id); | 278 sinks_observers_.erase(source_id); |
| 298 JNIEnv* env = base::android::AttachCurrentThread(); | 279 JNIEnv* env = base::android::AttachCurrentThread(); |
| 299 ScopedJavaLocalRef<jstring> jsource_id = | 280 ScopedJavaLocalRef<jstring> jsource_id = |
| 300 base::android::ConvertUTF8ToJavaString(env, source_id); | 281 base::android::ConvertUTF8ToJavaString(env, source_id); |
| 301 Java_ChromeMediaRouter_stopObservingMediaSinks( | 282 Java_ChromeMediaRouter_stopObservingMediaSinks(env, java_media_router_, |
| 302 env, java_media_router_.obj(), jsource_id.obj()); | 283 jsource_id); |
| 303 } | 284 } |
| 304 } | 285 } |
| 305 | 286 |
| 306 void MediaRouterAndroid::RegisterMediaRoutesObserver( | 287 void MediaRouterAndroid::RegisterMediaRoutesObserver( |
| 307 MediaRoutesObserver* observer) { | 288 MediaRoutesObserver* observer) { |
| 308 DVLOG(2) << "Added MediaRoutesObserver: " << observer; | 289 DVLOG(2) << "Added MediaRoutesObserver: " << observer; |
| 309 if (!observer->source_id().empty()) | 290 if (!observer->source_id().empty()) |
| 310 NOTIMPLEMENTED() << "Joinable routes query not implemented."; | 291 NOTIMPLEMENTED() << "Joinable routes query not implemented."; |
| 311 | 292 |
| 312 routes_observers_.AddObserver(observer); | 293 routes_observers_.AddObserver(observer); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 } | 334 } |
| 354 | 335 |
| 355 void MediaRouterAndroid::OnSinksReceived( | 336 void MediaRouterAndroid::OnSinksReceived( |
| 356 JNIEnv* env, | 337 JNIEnv* env, |
| 357 const JavaParamRef<jobject>& obj, | 338 const JavaParamRef<jobject>& obj, |
| 358 const JavaParamRef<jstring>& jsource_urn, | 339 const JavaParamRef<jstring>& jsource_urn, |
| 359 jint jcount) { | 340 jint jcount) { |
| 360 std::vector<MediaSink> sinks_converted; | 341 std::vector<MediaSink> sinks_converted; |
| 361 sinks_converted.reserve(jcount); | 342 sinks_converted.reserve(jcount); |
| 362 for (int i = 0; i < jcount; ++i) { | 343 for (int i = 0; i < jcount; ++i) { |
| 363 ScopedJavaLocalRef<jstring> jsink_urn = | 344 ScopedJavaLocalRef<jstring> jsink_urn = Java_ChromeMediaRouter_getSinkUrn( |
| 364 Java_ChromeMediaRouter_getSinkUrn( | 345 env, java_media_router_, jsource_urn, i); |
| 365 env, java_media_router_.obj(), jsource_urn, i); | 346 ScopedJavaLocalRef<jstring> jsink_name = Java_ChromeMediaRouter_getSinkName( |
| 366 ScopedJavaLocalRef<jstring> jsink_name = | 347 env, java_media_router_, jsource_urn, i); |
| 367 Java_ChromeMediaRouter_getSinkName( | |
| 368 env, java_media_router_.obj(), jsource_urn, i); | |
| 369 sinks_converted.push_back( | 348 sinks_converted.push_back( |
| 370 MediaSink(ConvertJavaStringToUTF8(env, jsink_urn.obj()), | 349 MediaSink(ConvertJavaStringToUTF8(env, jsink_urn.obj()), |
| 371 ConvertJavaStringToUTF8(env, jsink_name.obj()), | 350 ConvertJavaStringToUTF8(env, jsink_name.obj()), |
| 372 MediaSink::GENERIC)); | 351 MediaSink::GENERIC)); |
| 373 } | 352 } |
| 374 | 353 |
| 375 std::string source_urn = ConvertJavaStringToUTF8(env, jsource_urn); | 354 std::string source_urn = ConvertJavaStringToUTF8(env, jsource_urn); |
| 376 auto it = sinks_observers_.find(source_urn); | 355 auto it = sinks_observers_.find(source_urn); |
| 377 if (it != sinks_observers_.end()) { | 356 if (it != sinks_observers_.end()) { |
| 378 // TODO(imcheng): Pass origins to OnSinksUpdated (crbug.com/594858). | 357 // TODO(imcheng): Pass origins to OnSinksUpdated (crbug.com/594858). |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 return; | 460 return; |
| 482 | 461 |
| 483 std::vector<RouteMessage> messages(1); | 462 std::vector<RouteMessage> messages(1); |
| 484 messages.front().type = RouteMessage::TEXT; | 463 messages.front().type = RouteMessage::TEXT; |
| 485 messages.front().text = ConvertJavaStringToUTF8(env, jmessage); | 464 messages.front().text = ConvertJavaStringToUTF8(env, jmessage); |
| 486 FOR_EACH_OBSERVER(RouteMessageObserver, *observer_list, | 465 FOR_EACH_OBSERVER(RouteMessageObserver, *observer_list, |
| 487 OnMessagesReceived(messages)); | 466 OnMessagesReceived(messages)); |
| 488 } | 467 } |
| 489 | 468 |
| 490 } // namespace media_router | 469 } // namespace media_router |
| OLD | NEW |