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 |