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