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

Unified Diff: content/browser/media/media_web_contents_observer.h

Issue 1478643002: Refactor media out of WebContentsImpl to MediaWebContentsObserver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix namespace for cast. Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/BUILD.gn ('k') | content/browser/media/media_web_contents_observer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/media_web_contents_observer.h
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h
index 382dcdf772f63b00749b65918d4d87bcd3098028..0a249130eb5c05a48d616d011752ba8d3a2456e0 100644
--- a/content/browser/media/media_web_contents_observer.h
+++ b/content/browser/media/media_web_contents_observer.h
@@ -5,8 +5,13 @@
#ifndef CONTENT_BROWSER_MEDIA_MEDIA_WEB_CONTENTS_OBSERVER_H_
#define CONTENT_BROWSER_MEDIA_MEDIA_WEB_CONTENTS_OBSERVER_H_
+#include <map>
+#include <set>
+#include <vector>
+
#include "base/compiler_specific.h"
#include "base/containers/scoped_ptr_hash_map.h"
+#include "content/browser/power_save_blocker_impl.h"
#include "content/common/content_export.h"
#include "content/public/browser/web_contents_observer.h"
@@ -24,40 +29,98 @@ class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
explicit MediaWebContentsObserver(WebContents* web_contents);
~MediaWebContentsObserver() override;
- // WebContentsObserver implementations.
- void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
+ // Called when the audible state has changed. If inaudible any audio power
+ // save blockers are released.
+ void MaybeUpdateAudibleState(bool recently_audible);
-#if defined(OS_ANDROID)
+ // WebContentsObserver implementation.
+ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
bool OnMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host) override;
+ void WasShown() override;
+ void WasHidden() override;
- // Helper functions to handle media player IPC messages. Returns whether the
- // |message| is handled in the function.
- bool OnMediaPlayerMessageReceived(const IPC::Message& message,
- RenderFrameHost* render_frame_host);
- bool OnMediaPlayerSetCdmMessageReceived(const IPC::Message& message,
- RenderFrameHost* render_frame_host);
-
+#if defined(OS_ANDROID)
// Gets the media player manager associated with |render_frame_host|. Creates
// a new one if it doesn't exist. The caller doesn't own the returned pointer.
BrowserMediaPlayerManager* GetMediaPlayerManager(
RenderFrameHost* render_frame_host);
- void OnSetCdm(RenderFrameHost* render_frame_host, int player_id, int cdm_id);
-
#if defined(VIDEO_HOLE)
void OnFrameInfoUpdated();
#endif // defined(VIDEO_HOLE)
+#endif // defined(OS_ANDROID)
+
+ bool has_audio_power_save_blocker_for_testing() const {
+ return audio_power_save_blocker_;
+ }
+
+ bool has_video_power_save_blocker_for_testing() const {
+ return video_power_save_blocker_;
+ }
private:
+ bool OnMediaPlayerDelegateMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host);
+
+ void OnMediaPlayingNotification(RenderFrameHost* render_frame_host,
+ int64_t player_cookie,
+ bool has_video,
+ bool has_audio,
+ bool is_remote);
+ void OnMediaPausedNotification(RenderFrameHost* render_frame_host,
+ int64_t player_cookie);
+
+ // Clear |render_frame_host|'s tracking entry for its power save blockers.
+ void ClearPowerSaveBlockers(RenderFrameHost* render_frame_host);
+
+ // Creates an audio or video power save blocker respectively.
+ void CreateAudioPowerSaveBlocker();
+ void CreateVideoPowerSaveBlocker();
+
+ // Releases the audio power save blockers if |active_audio_players_| is empty.
+ // Likewise, releases the video power save blockers if |active_video_players_|
+ // is empty.
+ void MaybeReleasePowerSaveBlockers();
+
+ // Helper methods for adding or removing player entries in |player_map|.
+ using PlayerList = std::vector<int64_t>;
+ using ActiveMediaPlayerMap = std::map<RenderFrameHost*, PlayerList>;
+ void AddMediaPlayerEntry(const MediaPlayerId& id,
+ ActiveMediaPlayerMap* player_map);
+ // Returns true if an entry is actually removed.
+ bool RemoveMediaPlayerEntry(const MediaPlayerId& id,
+ ActiveMediaPlayerMap* player_map);
+ // Removes all entries from |player_map| for |render_frame_host|. Removed
+ // entries are added to |removed_players|.
+ void RemoveAllMediaPlayerEntries(RenderFrameHost* render_frame_host,
+ ActiveMediaPlayerMap* player_map,
+ std::set<MediaPlayerId>* removed_players);
+
+#if defined(OS_ANDROID)
+ // Helper functions to handle media player IPC messages. Returns whether the
+ // |message| is handled in the function.
+ bool OnMediaPlayerMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host);
+
+ bool OnMediaPlayerSetCdmMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host);
+
+ void OnSetCdm(RenderFrameHost* render_frame_host, int player_id, int cdm_id);
+
// Map from RenderFrameHost* to BrowserMediaPlayerManager.
- typedef base::ScopedPtrHashMap<uintptr_t,
- scoped_ptr<BrowserMediaPlayerManager>>
- MediaPlayerManagerMap;
+ using MediaPlayerManagerMap =
+ base::ScopedPtrHashMap<RenderFrameHost*,
+ scoped_ptr<BrowserMediaPlayerManager>>;
MediaPlayerManagerMap media_player_managers_;
#endif // defined(OS_ANDROID)
- private:
+ // Tracking variables and associated power save blockers for media playback.
+ ActiveMediaPlayerMap active_audio_players_;
+ ActiveMediaPlayerMap active_video_players_;
+ scoped_ptr<PowerSaveBlocker> audio_power_save_blocker_;
+ scoped_ptr<PowerSaveBlocker> video_power_save_blocker_;
+
DISALLOW_COPY_AND_ASSIGN(MediaWebContentsObserver);
};
« no previous file with comments | « content/browser/BUILD.gn ('k') | content/browser/media/media_web_contents_observer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698