Chromium Code Reviews| Index: chrome/browser/media/android/remote/remote_media_player_bridge.h |
| diff --git a/chrome/browser/media/android/remote/remote_media_player_bridge.h b/chrome/browser/media/android/remote/remote_media_player_bridge.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fe9c66a539a1611cf9e866e490e9071dcac63cbc |
| --- /dev/null |
| +++ b/chrome/browser/media/android/remote/remote_media_player_bridge.h |
| @@ -0,0 +1,153 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CLANK_NATIVE_FRAMEWORK_CHROME_REMOTE_MEDIA_PLAYER_BRIDGE_H_ |
|
whywhat
2015/02/25 16:31:31
update the include guards
aberent
2015/03/11 18:29:58
Done.
|
| +#define CLANK_NATIVE_FRAMEWORK_CHROME_REMOTE_MEDIA_PLAYER_BRIDGE_H_ |
| + |
| +#include "media/base/android/media_player_bridge.h" |
|
whywhat
2015/02/25 16:31:31
nit: sort the headers
aberent
2015/03/11 18:29:58
Done.
|
| +#include "base/time/time.h" |
| +#include "base/timer/timer.h" |
| + |
| +#include <jni.h> |
| +#include <vector> |
| + |
| +class SkBitmap; |
| + |
| +// This is the version of MediaPlayerBridge that handles the remote media |
| +// playback. |
| + |
| +namespace remote_media { |
| + |
| +class RemoteMediaPlayerManager; |
| + |
| +class RemoteMediaPlayerBridge : public media::MediaPlayerAndroid { |
| + public: |
| + RemoteMediaPlayerBridge( |
| + MediaPlayerAndroid* local_player, |
| + const std::string& user_agent, |
| + bool hide_url_log, |
| + RemoteMediaPlayerManager* manager); |
| + ~RemoteMediaPlayerBridge() override; |
| + |
| + static bool RegisterRemoteMediaPlayerBridge(JNIEnv* env); |
| + |
| + // Initialize this object. |
| + virtual void Initialize(); |
| + |
| + // MediaPlayerAndroid implementation. |
| + void SetVideoSurface(gfx::ScopedJavaSurface surface) override; |
| + void Start() override; |
| + void Pause(bool is_media_related_action) override; |
| + void SeekTo(base::TimeDelta timestamp) override; |
| + void Release() override; |
| + void SetVolume(double volume) override; |
| + int GetVideoWidth() override; |
| + int GetVideoHeight() override; |
| + base::TimeDelta GetCurrentTime() override; |
| + base::TimeDelta GetDuration() override; |
| + bool IsPlaying() override; |
| + bool CanPause() override; |
| + bool CanSeekForward() override; |
| + bool CanSeekBackward() override; |
| + bool IsPlayerReady() override; |
| + GURL GetUrl() override; |
| + GURL GetFirstPartyForCookies() override; |
| + |
| + // JNI functions |
| + base::android::ScopedJavaLocalRef<jstring> GetFrameUrl( |
| + JNIEnv* env, jobject obj); |
| + void OnPlaying(JNIEnv* env, jobject obj); |
| + void OnPaused(JNIEnv* env, jobject obj); |
| + void OnRouteSelected(JNIEnv* env, jobject obj, jstring castingMessage); |
| + void OnRouteUnselected(JNIEnv* env, jobject obj); |
| + void OnPlaybackFinished(JNIEnv* env, jobject obj); |
| + void OnRouteAvailabilityChanged(JNIEnv* env, jobject obj, jboolean available); |
| + base::android::ScopedJavaLocalRef<jstring> GetTitle(JNIEnv* env, jobject obj); |
| + |
| + // Wrappers for calls to Java used by the remote media player manager |
| + void RequestRemotePlayback(); |
| + void RequestRemotePlaybackControl(); |
| + void SetNativePlayer(); |
| + void OnPlayerCreated(); |
| + void OnPlayerDestroyed(); |
| + bool IsRemotePlaybackAvailable() const; |
| + bool IsRemotePlaybackPreferredForFrame() const; |
| + |
| + // Returns true if the we can play the media remotely |
| + bool IsMediaPlayableRemotely() const; |
| + |
| + // Gets the message to display on the embedded player while casting. |
| + std::string GetCastingMessage(); |
| + |
| + // Tell the java side about the poster image for a given media. |
| + void SetPosterBitmap(const std::vector<SkBitmap>& bitmaps); |
| + |
| + protected: |
| + // MediaPlayerAndroid implementation. |
| + void OnVideoSizeChanged(int width, int height) override; |
| + void OnPlaybackComplete() override; |
| + void OnMediaInterrupted() override; |
| + void OnMediaPrepared() override; |
| + |
| + virtual void PendingSeekInternal(const base::TimeDelta& time); |
| + |
| + // Prepare the player for playback, asynchronously. When succeeds, |
| + // OnMediaPrepared() will be called. Otherwise, OnMediaError() will |
| + // be called with an error type. |
| + virtual void Prepare(); |
| + |
| + private: |
| + // Functions that implements media player control. |
| + void StartInternal(); |
| + void PauseInternal(); |
| + void SeekInternal(base::TimeDelta time); |
| + |
| + // Called when |time_update_timer_| fires. |
| + void OnTimeUpdateTimerFired(); |
| + |
| + // Callback function passed to |resource_getter_|. Called when the cookies |
| + // are retrieved. |
| + void OnCookiesRetrieved(const std::string& cookies); |
| + |
| + long start_position_millis_; |
| + MediaPlayerAndroid* local_player_; |
| + bool in_use_; |
| + bool prepared_; |
| + bool pending_play_; |
| + int width_; |
| + int height_; |
| + base::RepeatingTimer<RemoteMediaPlayerBridge> time_update_timer_; |
| + base::TimeDelta duration_; |
| + bool should_seek_on_prepare_; |
| + base::TimeDelta pending_seek_; |
| + |
| + // Hide url log from media player. |
| + bool hide_url_log_; |
| + |
| + // Volume of playback. |
| + double volume_; |
| + |
| + // Url for playback. |
| + GURL url_; |
| + |
| + // First party url for cookies. |
| + GURL first_party_for_cookies_; |
| + |
| + // Cookies for |url_|. |
| + std::string cookies_; |
| + |
| + // User agent string to be used for media player. |
| + const std::string user_agent_; |
| + |
| + base::android::ScopedJavaGlobalRef<jobject> java_bridge_; |
| + scoped_ptr<std::string> casting_message_; |
| + |
| + // NOTE: Weak pointers must be invalidated before all other member variables. |
| + base::WeakPtrFactory<RemoteMediaPlayerBridge> weak_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(RemoteMediaPlayerBridge); |
| +}; |
| + |
| +} // namespace remote_media |
| +#endif // CLANK_NATIVE_FRAMEWORK_CHROME_REMOTE_MEDIA_PLAYER_BRIDGE_H_ |
|
whywhat
2015/02/25 16:31:31
nit: I'd put a blank line before the #endif
aberent
2015/03/11 18:29:58
Done.
|