17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifndef CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_MEDIA_PLAYER_MANAGER_H_ 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_MEDIA_PLAYER_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/content_video_view.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/common/content_export.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/common/media/media_player_messages_enums_android.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ipc/ipc_message.h" 17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "media/base/android/media_player_android.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "media/base/android/media_player_manager.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/base/android/media_url_interceptor.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/rect_f.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace media { 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class DemuxerAndroid; 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct MediaPlayerHostMsg_Initialize_Params; 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class BrowserDemuxerAndroid; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ContentViewCoreImpl; 32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass ExternalVideoSurfaceContainer; 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class RenderFrameHost; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebContents; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// This class manages all the MediaPlayerAndroid objects. 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// It receives control operations from the the render process, and forwards 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// them to corresponding MediaPlayerAndroid object. Callbacks from 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// MediaPlayerAndroid objects are converted to IPCs and then sent to the render 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// process. 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass CONTENT_EXPORT BrowserMediaPlayerManager 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : public media::MediaPlayerManager { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Permits embedders to provide an extended version of the class. 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef BrowserMediaPlayerManager* (*Factory)(RenderFrameHost*); 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) static void RegisterFactory(Factory factory); 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Permits embedders to handle custom urls. 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static void RegisterMediaUrlInterceptor( 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) media::MediaUrlInterceptor* media_url_interceptor); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Returns a new instance using the registered factory if available. 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static BrowserMediaPlayerManager* Create(RenderFrameHost* rfh); 54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ContentViewCoreImpl* GetContentViewCore() const; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~BrowserMediaPlayerManager(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fullscreen video playback controls. 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void FullscreenPlayerPlay(); 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void FullscreenPlayerPause(); 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void FullscreenPlayerSeek(int msec); 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void ExitFullscreen(bool release_media_player); 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetVideoSurface(gfx::ScopedJavaSurface surface); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Called when browser player wants the renderer media element to seek. 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Any actual seek started by renderer will be handled by browser in OnSeek(). 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void OnSeekRequest(int player_id, const base::TimeDelta& time_to_seek); 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Stops and releases every media managed by this class. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ReleaseAllMediaPlayers(); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // media::MediaPlayerManager overrides. 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnTimeUpdate( 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int player_id, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta current_timestamp, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks current_time_ticks) OVERRIDE; 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnMediaMetadataChanged( 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int player_id, 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::TimeDelta duration, 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int width, 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int height, 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool success) OVERRIDE; 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnPlaybackComplete(int player_id) OVERRIDE; 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnMediaInterrupted(int player_id) OVERRIDE; 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnBufferingUpdate(int player_id, int percentage) OVERRIDE; 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnSeekComplete( 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int player_id, 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::TimeDelta& current_time) OVERRIDE; 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnError(int player_id, int error) OVERRIDE; 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnVideoSizeChanged( 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int player_id, int width, int height) OVERRIDE; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual media::MediaResourceGetter* GetMediaResourceGetter() OVERRIDE; 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual media::MediaUrlInterceptor* GetMediaUrlInterceptor() OVERRIDE; 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual media::MediaPlayerAndroid* GetFullscreenPlayer() OVERRIDE; 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual media::MediaPlayerAndroid* GetPlayer(int player_id) OVERRIDE; 970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void RequestFullScreen(int player_id) OVERRIDE; 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(VIDEO_HOLE) 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ShouldUseVideoOverlayForEmbeddedEncryptedVideo() OVERRIDE; 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AttachExternalVideoSurface(int player_id, jobject surface); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DetachExternalVideoSurface(int player_id); 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void OnFrameInfoUpdated(); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(VIDEO_HOLE) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnEnterFullscreen(int player_id); 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnExitFullscreen(int player_id); 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnInitialize( 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const MediaPlayerHostMsg_Initialize_Params& media_player_params); 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnStart(int player_id); 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void OnSeek(int player_id, const base::TimeDelta& time); 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnPause(int player_id, bool is_media_related_action); 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void OnSetVolume(int player_id, double volume); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnSetPoster(int player_id, const GURL& poster); 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnReleaseResources(int player_id); 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnDestroyPlayer(int player_id); 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnRequestRemotePlayback(int player_id); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnRequestRemotePlaybackControl(int player_id); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void ReleaseFullscreenPlayer(media::MediaPlayerAndroid* player); 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(VIDEO_HOLE) 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnNotifyExternalSurface( 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int player_id, bool is_request, const gfx::RectF& rect); 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // defined(VIDEO_HOLE) 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Clients must use Create() or subclass constructor. 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit BrowserMediaPlayerManager(RenderFrameHost* render_frame_host); 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContents* web_contents() const { return web_contents_; } 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Adds a given player to the list. 133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void AddPlayer(media::MediaPlayerAndroid* player); 134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Removes the player with the specified id. 136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void RemovePlayer(int player_id); 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 138d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Replaces a player with the specified id with a given MediaPlayerAndroid 139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // object. This will also return the original MediaPlayerAndroid object that 140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // was replaced. 141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<media::MediaPlayerAndroid> SwapPlayer( 142d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int player_id, 143d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) media::MediaPlayerAndroid* player); 144d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int RoutingID(); 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Helper function to send messages to RenderFrameObserver. 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool Send(IPC::Message* msg); 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Constructs a MediaPlayerAndroid object. 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) media::MediaPlayerAndroid* CreateMediaPlayer( 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const MediaPlayerHostMsg_Initialize_Params& media_player_params, 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool hide_url_log, 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) media::MediaPlayerManager* manager, 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserDemuxerAndroid* demuxer); 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // MediaPlayerAndroid must call this before it is going to decode 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // media streams. This helps the manager object maintain an array 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // of active MediaPlayerAndroid objects and release the resources 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // when needed. Currently we only count video resources as they are 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // constrained by hardware and memory limits. 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnMediaResourcesRequested(int player_id); 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Called when a player releases all decoding resources. 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ReleaseMediaResources(int player_id); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Releases the player. However, don't remove it from |players_|. 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ReleasePlayer(media::MediaPlayerAndroid* player); 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(VIDEO_HOLE) 172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void OnRequestExternalSurface(int player_id, const gfx::RectF& rect); 173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // defined(VIDEO_HOLE) 174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RenderFrameHost* const render_frame_host_; 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An array of managed players. 178b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedVector<media::MediaPlayerAndroid> players_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The fullscreen video view object or NULL if video is not played in 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // fullscreen. 182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<ContentVideoView> video_view_; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(VIDEO_HOLE) 185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<ExternalVideoSurfaceContainer> external_video_surface_container_; 186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif 187a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Player ID of the fullscreen media player. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fullscreen_player_id_; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Whether the fullscreen player has been Release()-d. 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool fullscreen_player_is_released_; 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContents* const web_contents_; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Object for retrieving resources media players. 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<media::MediaResourceGetter> media_resource_getter_; 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // NOTE: Weak pointers must be invalidated before all other member variables. 20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::WeakPtrFactory<BrowserMediaPlayerManager> weak_ptr_factory_; 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserMediaPlayerManager); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 207d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif // CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_MEDIA_PLAYER_MANAGER_H_ 208