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