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

Side by Side Diff: chrome/browser/media/android/remote/remote_media_player_bridge.cc

Issue 2468303002: [RemotePlayback] Stop remote playback when disableRemotePlayback is set (Closed)
Patch Set: Rebase, addressed comments Created 4 years, 1 month 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/remote/remote_media_player_bridge.h" 5 #include "chrome/browser/media/android/remote/remote_media_player_bridge.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 manager->GetLocalPlayer(player_id)->frame_url()), 51 manager->GetLocalPlayer(player_id)->frame_url()),
52 width_(0), 52 width_(0),
53 height_(0), 53 height_(0),
54 url_(manager->GetLocalPlayer(player_id)->GetUrl()), 54 url_(manager->GetLocalPlayer(player_id)->GetUrl()),
55 first_party_for_cookies_( 55 first_party_for_cookies_(
56 manager->GetLocalPlayer(player_id)->GetFirstPartyForCookies()), 56 manager->GetLocalPlayer(player_id)->GetFirstPartyForCookies()),
57 user_agent_(user_agent), 57 user_agent_(user_agent),
58 weak_factory_(this) { 58 weak_factory_(this) {
59 DCHECK_CURRENTLY_ON(BrowserThread::UI); 59 DCHECK_CURRENTLY_ON(BrowserThread::UI);
60 JNIEnv* env = base::android::AttachCurrentThread(); 60 JNIEnv* env = base::android::AttachCurrentThread();
61 CHECK(env); 61 DCHECK(env);
62 ScopedJavaLocalRef<jstring> j_url_string; 62 ScopedJavaLocalRef<jstring> j_url_string;
63 if (url_.is_valid()) { 63 if (url_.is_valid()) {
64 // Escape the URL to make it safe to use. Don't escape existing escape 64 // Escape the URL to make it safe to use. Don't escape existing escape
65 // sequences though. 65 // sequences though.
66 std::string escaped_url = net::EscapeExternalHandlerValue(url_.spec()); 66 std::string escaped_url = net::EscapeExternalHandlerValue(url_.spec());
67 // Create a Java String for the URL. 67 // Create a Java String for the URL.
68 j_url_string = ConvertUTF8ToJavaString(env, escaped_url); 68 j_url_string = ConvertUTF8ToJavaString(env, escaped_url);
69 } 69 }
70 ScopedJavaLocalRef<jstring> j_frame_url_string; 70 ScopedJavaLocalRef<jstring> j_frame_url_string;
71 GURL frameUrl = GetLocalPlayer()->frame_url(); 71 GURL frameUrl = GetLocalPlayer()->frame_url();
72 if (frameUrl.is_valid()) { 72 if (frameUrl.is_valid()) {
73 // Create a Java String for the URL. 73 // Create a Java String for the URL.
74 j_frame_url_string = ConvertUTF8ToJavaString(env, frameUrl.spec()); 74 j_frame_url_string = ConvertUTF8ToJavaString(env, frameUrl.spec());
75 } 75 }
76 java_bridge_.Reset(Java_RemoteMediaPlayerBridge_create( 76 java_bridge_.Reset(Java_RemoteMediaPlayerBridge_create(
77 env, reinterpret_cast<intptr_t>(this), j_url_string, j_frame_url_string, 77 env, reinterpret_cast<intptr_t>(this), j_url_string, j_frame_url_string,
78 ConvertUTF8ToJavaString(env, user_agent))); 78 ConvertUTF8ToJavaString(env, user_agent)));
79 } 79 }
80 80
81 RemoteMediaPlayerBridge::~RemoteMediaPlayerBridge() { 81 RemoteMediaPlayerBridge::~RemoteMediaPlayerBridge() {
82 JNIEnv* env = base::android::AttachCurrentThread(); 82 JNIEnv* env = base::android::AttachCurrentThread();
83 CHECK(env); 83 DCHECK(env);
84 Java_RemoteMediaPlayerBridge_destroy(env, java_bridge_); 84 Java_RemoteMediaPlayerBridge_destroy(env, java_bridge_);
85 Release(); 85 Release();
86 } 86 }
87 87
88 bool RemoteMediaPlayerBridge::HasVideo() const { 88 bool RemoteMediaPlayerBridge::HasVideo() const {
89 NOTIMPLEMENTED(); 89 NOTIMPLEMENTED();
90 return true; 90 return true;
91 } 91 }
92 92
93 bool RemoteMediaPlayerBridge::HasAudio() const { 93 bool RemoteMediaPlayerBridge::HasAudio() const {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 DCHECK(g_RemoteMediaPlayerBridge_clazz); 255 DCHECK(g_RemoteMediaPlayerBridge_clazz);
256 return ret; 256 return ret;
257 } 257 }
258 258
259 void RemoteMediaPlayerBridge::RequestRemotePlayback() { 259 void RemoteMediaPlayerBridge::RequestRemotePlayback() {
260 DCHECK_CURRENTLY_ON(BrowserThread::UI); 260 DCHECK_CURRENTLY_ON(BrowserThread::UI);
261 MediaPlayerAndroid* local_player = GetLocalPlayer(); 261 MediaPlayerAndroid* local_player = GetLocalPlayer();
262 if (!local_player) 262 if (!local_player)
263 return; 263 return;
264 JNIEnv* env = AttachCurrentThread(); 264 JNIEnv* env = AttachCurrentThread();
265 CHECK(env); 265 DCHECK(env);
266 266
267 Java_RemoteMediaPlayerBridge_requestRemotePlayback( 267 Java_RemoteMediaPlayerBridge_requestRemotePlayback(
268 env, java_bridge_, local_player->GetCurrentTime().InMilliseconds()); 268 env, java_bridge_, local_player->GetCurrentTime().InMilliseconds());
269 } 269 }
270 270
271 void RemoteMediaPlayerBridge::RequestRemotePlaybackControl() { 271 void RemoteMediaPlayerBridge::RequestRemotePlaybackControl() {
272 DCHECK_CURRENTLY_ON(BrowserThread::UI); 272 DCHECK_CURRENTLY_ON(BrowserThread::UI);
273 JNIEnv* env = AttachCurrentThread(); 273 JNIEnv* env = AttachCurrentThread();
274 CHECK(env); 274 DCHECK(env);
275 275
276 Java_RemoteMediaPlayerBridge_requestRemotePlaybackControl(env, java_bridge_); 276 Java_RemoteMediaPlayerBridge_requestRemotePlaybackControl(env, java_bridge_);
277 } 277 }
278 278
279 void RemoteMediaPlayerBridge::RequestRemotePlaybackStop() {
280 DCHECK_CURRENTLY_ON(BrowserThread::UI);
281 JNIEnv* env = AttachCurrentThread();
282 DCHECK(env);
283
284 Java_RemoteMediaPlayerBridge_requestRemotePlaybackStop(env, java_bridge_);
285 }
286
279 void RemoteMediaPlayerBridge::SetNativePlayer() { 287 void RemoteMediaPlayerBridge::SetNativePlayer() {
280 DCHECK_CURRENTLY_ON(BrowserThread::UI); 288 DCHECK_CURRENTLY_ON(BrowserThread::UI);
281 JNIEnv* env = AttachCurrentThread(); 289 JNIEnv* env = AttachCurrentThread();
282 CHECK(env); 290 DCHECK(env);
283 291
284 Java_RemoteMediaPlayerBridge_setNativePlayer(env, java_bridge_); 292 Java_RemoteMediaPlayerBridge_setNativePlayer(env, java_bridge_);
285 } 293 }
286 294
287 void RemoteMediaPlayerBridge::OnPlayerCreated() { 295 void RemoteMediaPlayerBridge::OnPlayerCreated() {
288 DCHECK_CURRENTLY_ON(BrowserThread::UI); 296 DCHECK_CURRENTLY_ON(BrowserThread::UI);
289 JNIEnv* env = AttachCurrentThread(); 297 JNIEnv* env = AttachCurrentThread();
290 CHECK(env); 298 DCHECK(env);
291 299
292 Java_RemoteMediaPlayerBridge_onPlayerCreated(env, java_bridge_); 300 Java_RemoteMediaPlayerBridge_onPlayerCreated(env, java_bridge_);
293 } 301 }
294 302
295 void RemoteMediaPlayerBridge::OnPlayerDestroyed() { 303 void RemoteMediaPlayerBridge::OnPlayerDestroyed() {
296 DCHECK_CURRENTLY_ON(BrowserThread::UI); 304 DCHECK_CURRENTLY_ON(BrowserThread::UI);
297 JNIEnv* env = AttachCurrentThread(); 305 JNIEnv* env = AttachCurrentThread();
298 CHECK(env); 306 DCHECK(env);
299 307
300 Java_RemoteMediaPlayerBridge_onPlayerDestroyed(env, java_bridge_); 308 Java_RemoteMediaPlayerBridge_onPlayerDestroyed(env, java_bridge_);
301 } 309 }
302 310
303 std::string RemoteMediaPlayerBridge::GetCastingMessage() { 311 std::string RemoteMediaPlayerBridge::GetCastingMessage() {
304 return casting_message_ ? 312 return casting_message_ ?
305 *casting_message_ : std::string(); 313 *casting_message_ : std::string();
306 } 314 }
307 315
308 void RemoteMediaPlayerBridge::SetPosterBitmap( 316 void RemoteMediaPlayerBridge::SetPosterBitmap(
309 const std::vector<SkBitmap>& bitmaps) { 317 const std::vector<SkBitmap>& bitmaps) {
310 DCHECK_CURRENTLY_ON(BrowserThread::UI); 318 DCHECK_CURRENTLY_ON(BrowserThread::UI);
311 JNIEnv* env = AttachCurrentThread(); 319 JNIEnv* env = AttachCurrentThread();
312 CHECK(env); 320 DCHECK(env);
313 321
314 if (bitmaps.empty()) { 322 if (bitmaps.empty()) {
315 Java_RemoteMediaPlayerBridge_setPosterBitmap(env, java_bridge_, nullptr); 323 Java_RemoteMediaPlayerBridge_setPosterBitmap(env, java_bridge_, nullptr);
316 } else { 324 } else {
317 ScopedJavaLocalRef<jobject> j_poster_bitmap; 325 ScopedJavaLocalRef<jobject> j_poster_bitmap;
318 j_poster_bitmap = gfx::ConvertToJavaBitmap(&(bitmaps[0])); 326 j_poster_bitmap = gfx::ConvertToJavaBitmap(&(bitmaps[0]));
319 327
320 Java_RemoteMediaPlayerBridge_setPosterBitmap(env, java_bridge_, 328 Java_RemoteMediaPlayerBridge_setPosterBitmap(env, java_bridge_,
321 j_poster_bitmap); 329 j_poster_bitmap);
322 } 330 }
(...skipping 12 matching lines...) Expand all
335 time = duration; 343 time = duration;
336 344
337 // Seeking to an invalid position may cause media player to stuck in an 345 // Seeking to an invalid position may cause media player to stuck in an
338 // error state. 346 // error state.
339 if (time < base::TimeDelta()) { 347 if (time < base::TimeDelta()) {
340 DCHECK_EQ(-1.0, time.InMillisecondsF()); 348 DCHECK_EQ(-1.0, time.InMillisecondsF());
341 return; 349 return;
342 } 350 }
343 351
344 JNIEnv* env = AttachCurrentThread(); 352 JNIEnv* env = AttachCurrentThread();
345 CHECK(env); 353 DCHECK(env);
346 int time_msec = static_cast<int>(time.InMilliseconds()); 354 int time_msec = static_cast<int>(time.InMilliseconds());
347 Java_RemoteMediaPlayerBridge_seekTo(env, java_bridge_, time_msec); 355 Java_RemoteMediaPlayerBridge_seekTo(env, java_bridge_, time_msec);
348 } 356 }
349 357
350 void RemoteMediaPlayerBridge::Release() { 358 void RemoteMediaPlayerBridge::Release() {
351 DCHECK_CURRENTLY_ON(BrowserThread::UI); 359 DCHECK_CURRENTLY_ON(BrowserThread::UI);
352 time_update_timer_.Stop(); 360 time_update_timer_.Stop();
353 JNIEnv* env = AttachCurrentThread(); 361 JNIEnv* env = AttachCurrentThread();
354 Java_RemoteMediaPlayerBridge_release(env, java_bridge_); 362 Java_RemoteMediaPlayerBridge_release(env, java_bridge_);
355 DetachListener(); 363 DetachListener();
356 } 364 }
357 365
358 void RemoteMediaPlayerBridge::UpdateEffectiveVolumeInternal( 366 void RemoteMediaPlayerBridge::UpdateEffectiveVolumeInternal(
359 double effective_volume) { 367 double effective_volume) {
360 DCHECK_CURRENTLY_ON(BrowserThread::UI); 368 DCHECK_CURRENTLY_ON(BrowserThread::UI);
361 JNIEnv* env = AttachCurrentThread(); 369 JNIEnv* env = AttachCurrentThread();
362 CHECK(env); 370 DCHECK(env);
363 Java_RemoteMediaPlayerBridge_setVolume(env, java_bridge_, 371 Java_RemoteMediaPlayerBridge_setVolume(env, java_bridge_,
364 GetEffectiveVolume()); 372 GetEffectiveVolume());
365 } 373 }
366 374
367 base::TimeDelta RemoteMediaPlayerBridge::GetCurrentTime() { 375 base::TimeDelta RemoteMediaPlayerBridge::GetCurrentTime() {
368 DCHECK_CURRENTLY_ON(BrowserThread::UI); 376 DCHECK_CURRENTLY_ON(BrowserThread::UI);
369 JNIEnv* env = AttachCurrentThread(); 377 JNIEnv* env = AttachCurrentThread();
370 return base::TimeDelta::FromMilliseconds( 378 return base::TimeDelta::FromMilliseconds(
371 Java_RemoteMediaPlayerBridge_getCurrentPosition(env, java_bridge_)); 379 Java_RemoteMediaPlayerBridge_getCurrentPosition(env, java_bridge_));
372 } 380 }
(...skipping 13 matching lines...) Expand all
386 return media::kInfiniteDuration; 394 return media::kInfiniteDuration;
387 return local_player->GetDuration(); 395 return local_player->GetDuration();
388 } 396 }
389 return duration_ms < 0 ? media::kInfiniteDuration 397 return duration_ms < 0 ? media::kInfiniteDuration
390 : base::TimeDelta::FromMilliseconds(duration_ms); 398 : base::TimeDelta::FromMilliseconds(duration_ms);
391 } 399 }
392 400
393 bool RemoteMediaPlayerBridge::IsPlaying() { 401 bool RemoteMediaPlayerBridge::IsPlaying() {
394 DCHECK_CURRENTLY_ON(BrowserThread::UI); 402 DCHECK_CURRENTLY_ON(BrowserThread::UI);
395 JNIEnv* env = AttachCurrentThread(); 403 JNIEnv* env = AttachCurrentThread();
396 CHECK(env); 404 DCHECK(env);
397 jboolean result = Java_RemoteMediaPlayerBridge_isPlaying(env, java_bridge_); 405 jboolean result = Java_RemoteMediaPlayerBridge_isPlaying(env, java_bridge_);
398 return result; 406 return result;
399 } 407 }
400 408
401 bool RemoteMediaPlayerBridge::CanPause() { 409 bool RemoteMediaPlayerBridge::CanPause() {
402 return true; 410 return true;
403 } 411 }
404 412
405 bool RemoteMediaPlayerBridge::CanSeekForward() { 413 bool RemoteMediaPlayerBridge::CanSeekForward() {
406 return true; 414 return true;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 ->OnCancelledRemotePlaybackRequest(player_id()); 469 ->OnCancelledRemotePlaybackRequest(player_id());
462 } 470 }
463 471
464 472
465 void RemoteMediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) { 473 void RemoteMediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) {
466 DCHECK_CURRENTLY_ON(BrowserThread::UI); 474 DCHECK_CURRENTLY_ON(BrowserThread::UI);
467 // TODO(aberent) Do we need to retrieve auth credentials for basic 475 // TODO(aberent) Do we need to retrieve auth credentials for basic
468 // authentication? MediaPlayerBridge does. 476 // authentication? MediaPlayerBridge does.
469 cookies_ = cookies; 477 cookies_ = cookies;
470 JNIEnv* env = AttachCurrentThread(); 478 JNIEnv* env = AttachCurrentThread();
471 CHECK(env); 479 DCHECK(env);
472 Java_RemoteMediaPlayerBridge_setCookies( 480 Java_RemoteMediaPlayerBridge_setCookies(
473 env, java_bridge_, ConvertUTF8ToJavaString(env, cookies)); 481 env, java_bridge_, ConvertUTF8ToJavaString(env, cookies));
474 } 482 }
475 483
476 MediaPlayerAndroid* RemoteMediaPlayerBridge::GetLocalPlayer() { 484 MediaPlayerAndroid* RemoteMediaPlayerBridge::GetLocalPlayer() {
477 return static_cast<RemoteMediaPlayerManager*>(manager())->GetLocalPlayer( 485 return static_cast<RemoteMediaPlayerManager*>(manager())->GetLocalPlayer(
478 player_id()); 486 player_id());
479 } 487 }
480 488
481 } // namespace remote_media 489 } // namespace remote_media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698