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

Side by Side Diff: content/browser/media/session/media_session_impl.cc

Issue 2442303002: Adding new media controls to MediaNotification (Closed)
Patch Set: rebased onto MediaSession refactoring 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 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 "content/browser/media/session/media_session_impl.h" 5 #include "content/browser/media/session/media_session_impl.h"
6 6
7 #include "content/browser/media/session/audio_focus_delegate.h" 7 #include "content/browser/media/session/audio_focus_delegate.h"
8 #include "content/browser/media/session/media_session_player_observer.h" 8 #include "content/browser/media/session/media_session_player_observer.h"
9 #include "content/browser/media/session/media_session_service_impl.h"
9 #include "content/browser/web_contents/web_contents_impl.h" 10 #include "content/browser/web_contents/web_contents_impl.h"
11 #include "content/public/browser/media_session.h"
12 #include "content/public/browser/media_session_observer.h"
10 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
11 #include "content/public/browser/web_contents_delegate.h"
12 #include "media/base/media_content_type.h" 14 #include "media/base/media_content_type.h"
13 15
14 #if defined(OS_ANDROID) 16 #if defined(OS_ANDROID)
15 #include "content/browser/media/session/media_session_android.h" 17 #include "content/browser/media/session/media_session_android.h"
16 #include "jni/MediaSession_jni.h" 18 #include "jni/MediaSession_jni.h"
17 #endif // defined(OS_ANDROID) 19 #endif // defined(OS_ANDROID)
18 20
19 namespace content { 21 namespace content {
20 22
21 namespace { 23 namespace {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 observer.MediaSessionDestroyed(); 91 observer.MediaSessionDestroyed();
90 for (auto& observer : observers_) 92 for (auto& observer : observers_)
91 observer.StopObserving(); 93 observer.StopObserving();
92 } 94 }
93 95
94 void MediaSessionImpl::WebContentsDestroyed() { 96 void MediaSessionImpl::WebContentsDestroyed() {
95 // This should only work for tests. In production, all the players should have 97 // This should only work for tests. In production, all the players should have
96 // already been removed before WebContents is destroyed. 98 // already been removed before WebContents is destroyed.
97 99
98 // TODO(zqzhang): refactor MediaSessionImpl, maybe move the interface used to 100 // TODO(zqzhang): refactor MediaSessionImpl, maybe move the interface used to
99 // talk 101 // talk with AudioFocusManager out to a seperate class. The AudioFocusManager
100 // with AudioFocusManager out to a seperate class. The AudioFocusManager unit 102 // unit tests then could mock the interface and abandon audio focus when
101 // tests then could mock the interface and abandon audio focus when
102 // WebContents is destroyed. See https://crbug.com/651069 103 // WebContents is destroyed. See https://crbug.com/651069
103 players_.clear(); 104 players_.clear();
104 pepper_players_.clear(); 105 pepper_players_.clear();
105 AbandonSystemAudioFocusIfNeeded(); 106 AbandonSystemAudioFocusIfNeeded();
106 } 107 }
107 108
109 void MediaSessionImpl::SetMediaSessionService(
110 MediaSessionServiceImpl* service) {
111 service_ = service;
whywhat 2016/10/28 16:10:23 nit: I assume this is supposed to be called only o
Zhiqiang Zhang (Slow) 2016/11/01 15:24:15 It could be set and unset. My point is the service
112 }
113
108 void MediaSessionImpl::AddObserver(MediaSessionObserver* observer) { 114 void MediaSessionImpl::AddObserver(MediaSessionObserver* observer) {
109 observers_.AddObserver(observer); 115 observers_.AddObserver(observer);
110 } 116 }
111 117
112 void MediaSessionImpl::RemoveObserver(MediaSessionObserver* observer) { 118 void MediaSessionImpl::RemoveObserver(MediaSessionObserver* observer) {
113 observers_.RemoveObserver(observer); 119 observers_.RemoveObserver(observer);
114 } 120 }
115 121
116 void MediaSessionImpl::SetMetadata( 122 void MediaSessionImpl::SetMetadata(
117 const base::Optional<MediaMetadata>& metadata) { 123 const base::Optional<MediaMetadata>& metadata) {
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 275
270 if (audio_focus_state_ != State::SUSPENDED) 276 if (audio_focus_state_ != State::SUSPENDED)
271 OnSuspendInternal(suspend_type, State::SUSPENDED); 277 OnSuspendInternal(suspend_type, State::SUSPENDED);
272 278
273 DCHECK(audio_focus_state_ == State::SUSPENDED); 279 DCHECK(audio_focus_state_ == State::SUSPENDED);
274 players_.clear(); 280 players_.clear();
275 281
276 AbandonSystemAudioFocusIfNeeded(); 282 AbandonSystemAudioFocusIfNeeded();
277 } 283 }
278 284
285 void MediaSessionImpl::DidReceiveAction(
286 blink::mojom::MediaSessionAction action) {
287 if (service_)
whywhat 2016/10/28 16:10:23 nit: Is it possible to have service_ nullptr?
Zhiqiang Zhang (Slow) 2016/11/01 15:24:15 See my other reply.
288 service_->GetClient()->DidReceiveAction(action);
289 }
290
291 void MediaSessionImpl::OnMediaSessionEnabledAction(
292 blink::mojom::MediaSessionAction action) {
293 for (auto& observer : observers_)
294 observer.MediaSessionEnabledAction(action);
295 }
296
297 void MediaSessionImpl::OnMediaSessionDisabledAction(
298 blink::mojom::MediaSessionAction action) {
299 for (auto& observer : observers_)
300 observer.MediaSessionDisabledAction(action);
301 }
302
279 void MediaSessionImpl::StartDucking() { 303 void MediaSessionImpl::StartDucking() {
280 if (is_ducking_) 304 if (is_ducking_)
281 return; 305 return;
282 is_ducking_ = true; 306 is_ducking_ = true;
283 UpdateVolumeMultiplier(); 307 UpdateVolumeMultiplier();
284 } 308 }
285 309
286 void MediaSessionImpl::StopDucking() { 310 void MediaSessionImpl::StopDucking() {
287 if (!is_ducking_) 311 if (!is_ducking_)
288 return; 312 return;
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 it.observer->OnSetVolumeMultiplier(it.player_id, GetVolumeMultiplier()); 438 it.observer->OnSetVolumeMultiplier(it.player_id, GetVolumeMultiplier());
415 439
416 UpdateWebContents(); 440 UpdateWebContents();
417 } 441 }
418 442
419 MediaSessionImpl::MediaSessionImpl(WebContents* web_contents) 443 MediaSessionImpl::MediaSessionImpl(WebContents* web_contents)
420 : WebContentsObserver(web_contents), 444 : WebContentsObserver(web_contents),
421 audio_focus_state_(State::INACTIVE), 445 audio_focus_state_(State::INACTIVE),
422 audio_focus_type_( 446 audio_focus_type_(
423 AudioFocusManager::AudioFocusType::GainTransientMayDuck), 447 AudioFocusManager::AudioFocusType::GainTransientMayDuck),
424 is_ducking_(false) { 448 is_ducking_(false),
449 service_(nullptr) {
425 #if defined(OS_ANDROID) 450 #if defined(OS_ANDROID)
426 session_android_.reset(new MediaSessionAndroid(this)); 451 session_android_.reset(new MediaSessionAndroid(this));
427 #endif // defined(OS_ANDROID) 452 #endif // defined(OS_ANDROID)
428 } 453 }
429 454
430 void MediaSessionImpl::Initialize() { 455 void MediaSessionImpl::Initialize() {
431 delegate_ = AudioFocusDelegate::Create(this); 456 delegate_ = AudioFocusDelegate::Create(this);
432 } 457 }
433 458
434 bool MediaSessionImpl::RequestSystemAudioFocus( 459 bool MediaSessionImpl::RequestSystemAudioFocus(
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 DCHECK(success); 510 DCHECK(success);
486 511
487 pepper_players_.insert(PlayerIdentifier(observer, player_id)); 512 pepper_players_.insert(PlayerIdentifier(observer, player_id));
488 513
489 observer->OnSetVolumeMultiplier(player_id, GetVolumeMultiplier()); 514 observer->OnSetVolumeMultiplier(player_id, GetVolumeMultiplier());
490 515
491 return true; 516 return true;
492 } 517 }
493 518
494 } // namespace content 519 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698