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

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

Issue 2873983002: Add --enable-internal-media-session to trigger the MediaSession backend. (Closed)
Patch Set: rebase Created 3 years, 7 months 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
« no previous file with comments | « content/browser/media/session/media_session_browsertest.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_controllers_manager.h" 5 #include "content/browser/media/session/media_session_controllers_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "content/browser/media/session/media_session_controller.h" 8 #include "content/browser/media/session/media_session_controller.h"
9 #include "media/base/media_switches.h" 9 #include "media/base/media_switches.h"
10 10
11 namespace content { 11 namespace content {
12 12
13 namespace { 13 namespace {
14 14
15 bool IsDefaultMediaSessionEnabled() { 15 bool IsMediaSessionEnabled() {
16 #if defined(OS_ANDROID) 16 #if defined(OS_ANDROID)
17 return true; 17 return true;
18 #else 18 #else
19 return base::CommandLine::ForCurrentProcess()->HasSwitch( 19 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
20 switches::kEnableAudioFocus); 20 return command_line->HasSwitch(switches::kEnableInternalMediaSession) ||
21 command_line->HasSwitch(switches::kEnableAudioFocus);
21 #endif 22 #endif
22 } 23 }
23 24
24 } // anonymous namespace 25 } // anonymous namespace
25 26
26 MediaSessionControllersManager::MediaSessionControllersManager( 27 MediaSessionControllersManager::MediaSessionControllersManager(
27 MediaWebContentsObserver* media_web_contents_observer) 28 MediaWebContentsObserver* media_web_contents_observer)
28 : media_web_contents_observer_(media_web_contents_observer) { 29 : media_web_contents_observer_(media_web_contents_observer) {
29 } 30 }
30 31
31 MediaSessionControllersManager::~MediaSessionControllersManager() = default; 32 MediaSessionControllersManager::~MediaSessionControllersManager() = default;
32 33
33 void MediaSessionControllersManager::RenderFrameDeleted( 34 void MediaSessionControllersManager::RenderFrameDeleted(
34 RenderFrameHost* render_frame_host) { 35 RenderFrameHost* render_frame_host) {
35 if (!IsDefaultMediaSessionEnabled()) 36 if (!IsMediaSessionEnabled())
36 return; 37 return;
37 38
38 for (auto it = controllers_map_.begin(); it != controllers_map_.end();) { 39 for (auto it = controllers_map_.begin(); it != controllers_map_.end();) {
39 if (it->first.first == render_frame_host) 40 if (it->first.first == render_frame_host)
40 it = controllers_map_.erase(it); 41 it = controllers_map_.erase(it);
41 else 42 else
42 ++it; 43 ++it;
43 } 44 }
44 } 45 }
45 46
46 bool MediaSessionControllersManager::RequestPlay( 47 bool MediaSessionControllersManager::RequestPlay(
47 const MediaPlayerId& id, 48 const MediaPlayerId& id,
48 bool has_audio, 49 bool has_audio,
49 bool is_remote, 50 bool is_remote,
50 media::MediaContentType media_content_type) { 51 media::MediaContentType media_content_type) {
51 if (!IsDefaultMediaSessionEnabled()) 52 if (!IsMediaSessionEnabled())
52 return true; 53 return true;
53 54
54 // Since we don't remove session instances on pause, there may be an existing 55 // Since we don't remove session instances on pause, there may be an existing
55 // instance for this playback attempt. 56 // instance for this playback attempt.
56 // 57 //
57 // In this case, try to reinitialize it with the new settings. If they are 58 // In this case, try to reinitialize it with the new settings. If they are
58 // the same, this is a no-op. If the reinitialize fails, destroy the 59 // the same, this is a no-op. If the reinitialize fails, destroy the
59 // controller. A later playback attempt will create a new controller. 60 // controller. A later playback attempt will create a new controller.
60 auto it = controllers_map_.find(id); 61 auto it = controllers_map_.find(id);
61 if (it != controllers_map_.end()) { 62 if (it != controllers_map_.end()) {
62 if (it->second->Initialize(has_audio, is_remote, media_content_type)) 63 if (it->second->Initialize(has_audio, is_remote, media_content_type))
63 return true; 64 return true;
64 controllers_map_.erase(it); 65 controllers_map_.erase(it);
65 return false; 66 return false;
66 } 67 }
67 68
68 std::unique_ptr<MediaSessionController> controller( 69 std::unique_ptr<MediaSessionController> controller(
69 new MediaSessionController(id, media_web_contents_observer_)); 70 new MediaSessionController(id, media_web_contents_observer_));
70 71
71 if (!controller->Initialize(has_audio, is_remote, media_content_type)) 72 if (!controller->Initialize(has_audio, is_remote, media_content_type))
72 return false; 73 return false;
73 74
74 controllers_map_[id] = std::move(controller); 75 controllers_map_[id] = std::move(controller);
75 return true; 76 return true;
76 } 77 }
77 78
78 void MediaSessionControllersManager::OnPause(const MediaPlayerId& id) { 79 void MediaSessionControllersManager::OnPause(const MediaPlayerId& id) {
79 if (!IsDefaultMediaSessionEnabled()) 80 if (!IsMediaSessionEnabled())
80 return; 81 return;
81 82
82 auto it = controllers_map_.find(id); 83 auto it = controllers_map_.find(id);
83 if (it == controllers_map_.end()) 84 if (it == controllers_map_.end())
84 return; 85 return;
85 86
86 it->second->OnPlaybackPaused(); 87 it->second->OnPlaybackPaused();
87 } 88 }
88 89
89 void MediaSessionControllersManager::OnEnd(const MediaPlayerId& id) { 90 void MediaSessionControllersManager::OnEnd(const MediaPlayerId& id) {
90 if (!IsDefaultMediaSessionEnabled()) 91 if (!IsMediaSessionEnabled())
91 return; 92 return;
92 controllers_map_.erase(id); 93 controllers_map_.erase(id);
93 } 94 }
94 95
95 } // namespace content 96 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/session/media_session_browsertest.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698