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

Side by Side Diff: content/renderer/media/renderer_webmediaplayer_delegate.cc

Issue 2681863005: [Video] MediaSession API event handlers can resume background video. (Closed)
Patch Set: Tweaked the logic in HTMLME a bit Created 3 years, 10 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
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/renderer/media/renderer_webmediaplayer_delegate.h" 5 #include "content/renderer/media/renderer_webmediaplayer_delegate.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 if (is_frame_hidden_for_testing_) 54 if (is_frame_hidden_for_testing_)
55 return true; 55 return true;
56 56
57 return (render_frame() && render_frame()->IsHidden()) || is_frame_closed_; 57 return (render_frame() && render_frame()->IsHidden()) || is_frame_closed_;
58 } 58 }
59 59
60 bool RendererWebMediaPlayerDelegate::IsFrameClosed() { 60 bool RendererWebMediaPlayerDelegate::IsFrameClosed() {
61 return is_frame_closed_; 61 return is_frame_closed_;
62 } 62 }
63 63
64 bool RendererWebMediaPlayerDelegate::IsBackgroundVideoPlaybackUnlocked() {
65 // TODO(sandersd): Include a check for kResumeBackgroundVideo?
66 return background_video_allowed_;
67 }
68
69 int RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { 64 int RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) {
70 return id_map_.Add(observer); 65 return id_map_.Add(observer);
71 } 66 }
72 67
73 void RendererWebMediaPlayerDelegate::RemoveObserver(int player_id) { 68 void RendererWebMediaPlayerDelegate::RemoveObserver(int player_id) {
74 DCHECK(id_map_.Lookup(player_id)); 69 DCHECK(id_map_.Lookup(player_id));
75 id_map_.Remove(player_id); 70 id_map_.Remove(player_id);
76 idle_player_map_.erase(player_id); 71 idle_player_map_.erase(player_id);
77 stale_players_.erase(player_id); 72 stale_players_.erase(player_id);
78 playing_videos_.erase(player_id); 73 playing_videos_.erase(player_id);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 168
174 for (IDMap<Observer*>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance()) 169 for (IDMap<Observer*>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance())
175 it.GetCurrentValue()->OnFrameHidden(); 170 it.GetCurrentValue()->OnFrameHidden();
176 171
177 ScheduleUpdateTask(); 172 ScheduleUpdateTask();
178 } 173 }
179 174
180 void RendererWebMediaPlayerDelegate::WasShown() { 175 void RendererWebMediaPlayerDelegate::WasShown() {
181 RecordAction(base::UserMetricsAction("Media.Shown")); 176 RecordAction(base::UserMetricsAction("Media.Shown"));
182 is_frame_closed_ = false; 177 is_frame_closed_ = false;
183 background_video_allowed_ = false;
184 178
185 for (IDMap<Observer*>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance()) 179 for (IDMap<Observer*>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance())
186 it.GetCurrentValue()->OnFrameShown(); 180 it.GetCurrentValue()->OnFrameShown();
187 181
188 ScheduleUpdateTask(); 182 ScheduleUpdateTask();
189 } 183 }
190 184
191 bool RendererWebMediaPlayerDelegate::OnMessageReceived( 185 bool RendererWebMediaPlayerDelegate::OnMessageReceived(
192 const IPC::Message& msg) { 186 const IPC::Message& msg) {
193 IPC_BEGIN_MESSAGE_MAP(RendererWebMediaPlayerDelegate, msg) 187 IPC_BEGIN_MESSAGE_MAP(RendererWebMediaPlayerDelegate, msg)
(...skipping 20 matching lines...) Expand all
214 208
215 bool RendererWebMediaPlayerDelegate::IsIdleCleanupTimerRunningForTesting() 209 bool RendererWebMediaPlayerDelegate::IsIdleCleanupTimerRunningForTesting()
216 const { 210 const {
217 return idle_cleanup_timer_.IsRunning(); 211 return idle_cleanup_timer_.IsRunning();
218 } 212 }
219 213
220 void RendererWebMediaPlayerDelegate::SetFrameHiddenForTesting(bool is_hidden) { 214 void RendererWebMediaPlayerDelegate::SetFrameHiddenForTesting(bool is_hidden) {
221 if (is_hidden == is_frame_hidden_for_testing_) 215 if (is_hidden == is_frame_hidden_for_testing_)
222 return; 216 return;
223 217
224 if (is_hidden) { 218 is_frame_hidden_for_testing_ = is_hidden;
225 is_frame_hidden_for_testing_ = true;
226 } else {
227 is_frame_hidden_for_testing_ = false;
228 background_video_allowed_ = false;
229 }
230 219
231 ScheduleUpdateTask(); 220 ScheduleUpdateTask();
232 } 221 }
233 222
234 void RendererWebMediaPlayerDelegate::OnMediaDelegatePause(int player_id) { 223 void RendererWebMediaPlayerDelegate::OnMediaDelegatePause(int player_id) {
235 RecordAction(base::UserMetricsAction("Media.Controls.RemotePause")); 224 RecordAction(base::UserMetricsAction("Media.Controls.RemotePause"));
236 225
237 Observer* observer = id_map_.Lookup(player_id); 226 Observer* observer = id_map_.Lookup(player_id);
238 if (observer) { 227 if (observer)
239 background_video_allowed_ = false;
240 observer->OnPause(); 228 observer->OnPause();
241 }
242 } 229 }
243 230
244 void RendererWebMediaPlayerDelegate::OnMediaDelegatePlay(int player_id) { 231 void RendererWebMediaPlayerDelegate::OnMediaDelegatePlay(int player_id) {
245 RecordAction(base::UserMetricsAction("Media.Controls.RemotePlay")); 232 RecordAction(base::UserMetricsAction("Media.Controls.RemotePlay"));
246 233
247 Observer* observer = id_map_.Lookup(player_id); 234 Observer* observer = id_map_.Lookup(player_id);
248 if (observer) { 235 if (observer)
249 // TODO(sandersd): Ideally we would only set the flag if the player has
250 // video, but we don't reliably know if a paused player has video.
251 if (IsFrameHidden() && !IsFrameClosed())
252 background_video_allowed_ = true;
253 observer->OnPlay(); 236 observer->OnPlay();
254 }
255 } 237 }
256 238
257 void RendererWebMediaPlayerDelegate::OnMediaDelegateSuspendAllMediaPlayers() { 239 void RendererWebMediaPlayerDelegate::OnMediaDelegateSuspendAllMediaPlayers() {
258 is_frame_closed_ = true; 240 is_frame_closed_ = true;
259 241
260 for (IDMap<Observer*>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance()) 242 for (IDMap<Observer*>::iterator it(&id_map_); !it.IsAtEnd(); it.Advance())
261 it.GetCurrentValue()->OnFrameClosed(); 243 it.GetCurrentValue()->OnFrameClosed();
262 } 244 }
263 245
264 void RendererWebMediaPlayerDelegate::OnMediaDelegateVolumeMultiplierUpdate( 246 void RendererWebMediaPlayerDelegate::OnMediaDelegateVolumeMultiplierUpdate(
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 player->OnIdleTimeout(); 346 player->OnIdleTimeout();
365 } 347 }
366 } 348 }
367 } 349 }
368 350
369 void RendererWebMediaPlayerDelegate::OnDestruct() { 351 void RendererWebMediaPlayerDelegate::OnDestruct() {
370 delete this; 352 delete this;
371 } 353 }
372 354
373 } // namespace media 355 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698