1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 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)
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <string>
101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <vector>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/time/time.h"
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/common/media/media_player_messages_enums_android.h"
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h"
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "media/base/android/media_player_android.h"
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "media/base/media_keys.h"
181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "url/gurl.h"
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(GOOGLE_TV)
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/gfx/rect_f.h"
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebFrame;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace gfx {
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class RectF;
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class ProxyMediaKeys;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebMediaPlayerAndroid;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class for managing all the WebMediaPlayerAndroid objects in the same
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderView.
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class RendererMediaPlayerManager : public RenderViewObserver {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Constructs a RendererMediaPlayerManager object for the |render_view|.
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  RendererMediaPlayerManager(RenderView* render_view);
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual ~RendererMediaPlayerManager();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // RenderViewObserver overrides.
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Initializes a MediaPlayerAndroid object in browser process.
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void Initialize(MediaPlayerHostMsg_Initialize_Type type,
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                  int player_id,
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                  const GURL& url,
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                  const GURL& first_party_for_cookies,
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                  int demuxer_client_id);
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Starts the player.
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void Start(int player_id);
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Pauses the player.
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // is_media_related_action should be true if this pause is coming from an
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // an action that explicitly pauses the video (user pressing pause, JS, etc.)
611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Otherwise it should be false if Pause is being called due to other reasons
621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // (cleanup, freeing resources, etc.)
631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void Pause(int player_id, bool is_media_related_action);
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Performs seek on the player.
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void Seek(int player_id, const base::TimeDelta& time);
671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Sets the player volume.
691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void SetVolume(int player_id, double volume);
701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Releases resources for the player.
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void ReleaseResources(int player_id);
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Destroys the player in the browser process
751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void DestroyPlayer(int player_id);
761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Requests the player to enter fullscreen.
7881d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch  void EnterFullscreen(int player_id, blink::WebFrame* frame);
791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Requests the player to exit fullscreen.
811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void ExitFullscreen(int player_id);
821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
83d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#if defined(VIDEO_HOLE)
841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Requests an external surface for out-of-band compositing.
851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void RequestExternalSurface(int player_id, const gfx::RectF& geometry);
861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // RenderViewObserver overrides.
881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void DidCommitCompositorFrame() OVERRIDE;
89d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#endif  // defined(VIDEO_HOLE)
901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Encrypted media related methods.
921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void InitializeCDM(int media_keys_id,
931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                     ProxyMediaKeys* media_keys,
941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                     const std::vector<uint8>& uuid,
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                     const GURL& frame_url);
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void CreateSession(int media_keys_id,
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     uint32 session_id,
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     const std::string& type,
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     const std::vector<uint8>& init_data);
100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void UpdateSession(int media_keys_id,
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     uint32 session_id,
102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     const std::vector<uint8>& response);
103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void ReleaseSession(int media_keys_id, uint32 session_id);
1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Registers and unregisters a WebMediaPlayerAndroid object.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int RegisterMediaPlayer(WebMediaPlayerAndroid* player);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UnregisterMediaPlayer(int player_id);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Registers a ProxyMediaKeys object. There must be a WebMediaPlayerAndroid
1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // object already registered for this id, and it is unregistered when the
1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // player is unregistered. For now |media_keys_id| is the same as player_id
1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // used in other methods.
1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void RegisterMediaKeys(int media_keys_id, ProxyMediaKeys* media_keys);
1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Releases the media resources managed by this object when a video
11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // is playing.
11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void ReleaseVideoResources();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checks whether a player can enter fullscreen.
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool CanEnterFullscreen(blink::WebFrame* frame);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when a player entered or exited fullscreen.
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidEnterFullscreen(blink::WebFrame* frame);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidExitFullscreen();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checks whether the Webframe is in fullscreen.
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool IsInFullscreen(blink::WebFrame* frame);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12981d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch  // True if a newly created media player should enter fullscreen.
13081d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch  bool ShouldEnterFullscreen(blink::WebFrame* frame);
13181d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch
1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Gets the pointer to WebMediaPlayerAndroid given the |player_id|.
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebMediaPlayerAndroid* GetMediaPlayer(int player_id);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Gets the pointer to ProxyMediaKeys given the |media_keys_id|.
1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ProxyMediaKeys* GetMediaKeys(int media_keys_id);
1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
138d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#if defined(VIDEO_HOLE)
1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Gets the list of media players with video geometry changes.
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void RetrieveGeometryChanges(std::map<int, gfx::RectF>* changes);
141d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#endif  // defined(VIDEO_HOLE)
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Message handlers.
1451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnMediaMetadataChanged(int player_id,
1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                              base::TimeDelta duration,
1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                              int width,
1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                              int height,
1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                              bool success);
1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnMediaPlaybackCompleted(int player_id);
1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnMediaBufferingUpdate(int player_id, int percent);
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnSeekRequest(int player_id, const base::TimeDelta& time_to_seek);
1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnSeekCompleted(int player_id, const base::TimeDelta& current_time);
1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnMediaError(int player_id, int error);
1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnVideoSizeChanged(int player_id, int width, int height);
1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnTimeUpdate(int player_id, base::TimeDelta current_time);
1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnMediaPlayerReleased(int player_id);
1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnConnectedToRemoteDevice(int player_id);
1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnDisconnectedFromRemoteDevice(int player_id);
1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnDidExitFullscreen(int player_id);
1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnDidEnterFullscreen(int player_id);
1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnPlayerPlay(int player_id);
1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void OnPlayerPause(int player_id);
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnRequestFullscreen(int player_id);
165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnSessionCreated(int media_keys_id,
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        uint32 session_id,
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        const std::string& web_session_id);
168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnSessionMessage(int media_keys_id,
169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        uint32 session_id,
170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        const std::vector<uint8>& message,
171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        const std::string& destination_url);
172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnSessionReady(int media_keys_id, uint32 session_id);
173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnSessionClosed(int media_keys_id, uint32 session_id);
174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnSessionError(int media_keys_id,
175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      uint32 session_id,
176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      media::MediaKeys::KeyError error_code,
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      int system_code);
1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Info for all available WebMediaPlayerAndroid on a page; kept so that
1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // we can enumerate them to send updates about tab focus and visibility.
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::map<int, WebMediaPlayerAndroid*> media_players_;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Info for all available ProxyMediaKeys. There must be at most one
1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // ProxyMediaKeys for each available WebMediaPlayerAndroid.
1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::map<int, ProxyMediaKeys*> media_keys_;
1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int next_media_player_id_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebFrame of the fullscreen video.
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebFrame* fullscreen_frame_;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19281d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch  // WebFrame of pending fullscreen request.
19381d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch  blink::WebFrame* pending_fullscreen_frame_;
19481d04fa4ca6b8e7c49e7a3401149aa77d5b4f381Ben Murdoch
1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(RendererMediaPlayerManager);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace content
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_
201