Upstream version 11.39.250.0
[platform/framework/web/crosswalk.git] / src / media / base / android / media_player_listener.h
1 // Copyright (c) 2012 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.
4
5 #ifndef MEDIA_BASE_ANDROID_MEDIA_PLAYER_LISTENER_H_
6 #define MEDIA_BASE_ANDROID_MEDIA_PLAYER_LISTENER_H_
7
8 #include <jni.h>
9
10 #include "base/android/scoped_java_ref.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/weak_ptr.h"
13
14 namespace base {
15 class SingleThreadTaskRunner;
16 }
17
18 namespace media {
19
20 class MediaPlayerAndroid;
21
22 // Acts as a thread proxy between java MediaPlayerListener object and
23 // MediaPlayerAndroid so that callbacks are posted onto the UI thread.
24 class MediaPlayerListener {
25  public:
26   // Construct a native MediaPlayerListener object. Callbacks from the java
27   // side object will be forwarded to |media_player| by posting a task on the
28   // |task_runner|.
29   MediaPlayerListener(
30       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
31       base::WeakPtr<MediaPlayerAndroid> media_player);
32  virtual ~MediaPlayerListener();
33
34   // Called by the Java MediaPlayerListener and mirrored to corresponding
35   // callbacks.
36   void OnMediaError(JNIEnv* /* env */, jobject /* obj */, jint error_type);
37   void OnVideoSizeChanged(JNIEnv* /* env */, jobject /* obj */,
38                           jint width, jint height);
39   void OnBufferingUpdate(JNIEnv* /* env */, jobject /* obj */, jint percent);
40   void OnPlaybackComplete(JNIEnv* /* env */, jobject /* obj */);
41   void OnSeekComplete(JNIEnv* /* env */, jobject /* obj */);
42   void OnMediaPrepared(JNIEnv* /* env */, jobject /* obj */);
43   void OnMediaInterrupted(JNIEnv* /* env */, jobject /* obj */);
44
45   // Create a Java MediaPlayerListener object and listens to all the media
46   // related events from system and |media_player|. If |media_player| is NULL,
47   // this class only listens to system events.
48   void CreateMediaPlayerListener(jobject context, jobject media_player);
49   void ReleaseMediaPlayerListenerResources();
50
51   // Register MediaPlayerListener in the system library loader.
52   static bool RegisterMediaPlayerListener(JNIEnv* env);
53
54  private:
55   // The message loop where |media_player_| lives.
56   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
57
58   // The MediaPlayerAndroid object all the callbacks should be sent to.
59   base::WeakPtr<MediaPlayerAndroid> media_player_;
60
61   base::android::ScopedJavaGlobalRef<jobject> j_media_player_listener_;
62
63   DISALLOW_COPY_AND_ASSIGN(MediaPlayerListener);
64 };
65
66 }  // namespace media
67
68 #endif  // MEDIA_BASE_ANDROID_MEDIA_PLAYER_LISTENER_H_