1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_MEDIA_ANDROID_REMOTE_REMOTE_MEDIA_PLAYER_MANAGER_H_
6 #define CHROME_BROWSER_MEDIA_ANDROID_REMOTE_REMOTE_MEDIA_PLAYER_MANAGER_H_
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h"
12 #include "chrome/browser/media/android/remote/remote_media_player_bridge.h"
13 #include "content/browser/media/android/browser_media_player_manager.h"
14 #include "media/base/android/media_player_android.h"
16 struct MediaPlayerHostMsg_Initialize_Params
;
18 namespace remote_media
{
20 // media::MediaPlayerManager implementation that allows the user to play media
22 class RemoteMediaPlayerManager
: public content::BrowserMediaPlayerManager
{
24 explicit RemoteMediaPlayerManager(
25 content::RenderFrameHost
* render_frame_host
);
26 ~RemoteMediaPlayerManager() override
;
28 void OnPlaying(int player_id
);
29 void OnPaused(int player_id
);
31 // Callback to trigger when a remote device has been selected.
32 void OnRemoteDeviceSelected(int player_id
);
34 // Callback to trigger when a remote device has been unselected.
35 void OnRemoteDeviceUnselected(int player_id
);
37 // Callback to trigger when the video on a remote device finishes playing.
38 void OnRemotePlaybackFinished(int player_id
);
40 // Callback to trigger when the availability of remote routes changes.
41 void OnRouteAvailabilityChanged(int tab_id
, bool routes_available
);
43 void OnMediaMetadataChanged(int player_id
,
44 base::TimeDelta duration
,
47 bool success
) override
;
50 void OnSetPoster(int player_id
, const GURL
& url
) override
;
53 // Returns a MediaPlayerAndroid implementation for playing the media remotely.
54 RemoteMediaPlayerBridge
* CreateRemoteMediaPlayer(
55 media::MediaPlayerAndroid
* local_player
);
57 // Replaces the given local player with the remote one. Does nothing if the
58 // player is remote already.
59 void ReplaceLocalPlayerWithRemote(media::MediaPlayerAndroid
* player
);
61 // Replaces the remote player with the local player this class is holding.
62 // Does nothing if there is no remote player.
63 void ReplaceRemotePlayerWithLocal();
65 // Checks if the URL managed by the player should be played remotely.
66 // Returns true if the manager should do nothing, false if it needs to
68 bool MaybeStartPlayingRemotely(int player_id
);
70 // content::BrowserMediaPlayerManager overrides.
71 void OnStart(int player_id
) override
;
73 const MediaPlayerHostMsg_Initialize_Params
& media_player_params
) override
;
74 void OnDestroyPlayer(int player_id
) override
;
75 void OnReleaseResources(int player_id
) override
;
76 void OnRequestRemotePlayback(int player_id
) override
;
77 void OnRequestRemotePlaybackControl(int player_id
) override
;
79 void ReleaseFullscreenPlayer(media::MediaPlayerAndroid
* player
) override
;
81 // Callback for when the download of poster image is done.
82 void DidDownloadPoster(
86 const GURL
& image_url
,
87 const std::vector
<SkBitmap
>& bitmaps
,
88 const std::vector
<gfx::Size
>& original_bitmap_sizes
);
90 // Return the ID of the tab that's associated with this controller. Returns
91 // -1 in case something goes wrong.
94 // Get the player id of current remote player, if any, or -1 if none.
97 // Get the remote player for a given player id, whether or not it is currently
99 RemoteMediaPlayerBridge
* GetRemotePlayer(int player_id
);
101 // The local player that we have replaced with a remote player. This is NULL
102 // if we do not have a remote player currently running.
103 scoped_ptr
<media::MediaPlayerAndroid
> replaced_local_player_
;
105 ScopedVector
<RemoteMediaPlayerBridge
> remote_players_
;
107 base::WeakPtrFactory
<RemoteMediaPlayerManager
> weak_ptr_factory_
;
109 DISALLOW_COPY_AND_ASSIGN(RemoteMediaPlayerManager
);
112 } // namespace remote_media
114 #endif // CHROME_BROWSER_MEDIA_ANDROID_REMOTE_REMOTE_MEDIA_PLAYER_MANAGER_H_