Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Side by Side Diff: content/browser/android/content_video_view.cc

Issue 639413002: [aw] Reuse WebContents PowerSaveBlocker in fullscreen. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@testsForPowerSaver
Patch Set: Nits Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/content_video_view.h" 5 #include "content/browser/android/content_video_view.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 return g_content_video_view; 46 return g_content_video_view;
47 } 47 }
48 48
49 ContentVideoView::ContentVideoView( 49 ContentVideoView::ContentVideoView(
50 BrowserMediaPlayerManager* manager) 50 BrowserMediaPlayerManager* manager)
51 : manager_(manager), 51 : manager_(manager),
52 weak_factory_(this) { 52 weak_factory_(this) {
53 DCHECK(!g_content_video_view); 53 DCHECK(!g_content_video_view);
54 j_content_video_view_ = CreateJavaObject(); 54 j_content_video_view_ = CreateJavaObject();
55 g_content_video_view = this; 55 g_content_video_view = this;
56 CreatePowerSaveBlocker();
57 } 56 }
58 57
59 ContentVideoView::~ContentVideoView() { 58 ContentVideoView::~ContentVideoView() {
60 DCHECK(g_content_video_view); 59 DCHECK(g_content_video_view);
61 JNIEnv* env = AttachCurrentThread(); 60 JNIEnv* env = AttachCurrentThread();
62 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 61 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
63 if (!content_video_view.is_null()) { 62 if (!content_video_view.is_null()) {
64 Java_ContentVideoView_destroyContentVideoView(env, 63 Java_ContentVideoView_destroyContentVideoView(env,
65 content_video_view.obj(), true); 64 content_video_view.obj(), true);
66 j_content_video_view_.reset(); 65 j_content_video_view_.reset();
67 } 66 }
68 g_content_video_view = NULL; 67 g_content_video_view = NULL;
69 } 68 }
70 69
71 void ContentVideoView::OpenVideo() { 70 void ContentVideoView::OpenVideo() {
72 JNIEnv* env = AttachCurrentThread(); 71 JNIEnv* env = AttachCurrentThread();
73 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 72 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
74 if (!content_video_view.is_null()) { 73 if (!content_video_view.is_null()) {
75 CreatePowerSaveBlocker();
76 Java_ContentVideoView_openVideo(env, content_video_view.obj()); 74 Java_ContentVideoView_openVideo(env, content_video_view.obj());
77 } 75 }
78 } 76 }
79 77
80 void ContentVideoView::OnMediaPlayerError(int error_type) { 78 void ContentVideoView::OnMediaPlayerError(int error_type) {
81 JNIEnv* env = AttachCurrentThread(); 79 JNIEnv* env = AttachCurrentThread();
82 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 80 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
83 if (!content_video_view.is_null()) { 81 if (!content_video_view.is_null()) {
84 power_save_blocker_.reset();
85 Java_ContentVideoView_onMediaPlayerError(env, content_video_view.obj(), 82 Java_ContentVideoView_onMediaPlayerError(env, content_video_view.obj(),
86 error_type); 83 error_type);
87 } 84 }
88 } 85 }
89 86
90 void ContentVideoView::OnVideoSizeChanged(int width, int height) { 87 void ContentVideoView::OnVideoSizeChanged(int width, int height) {
91 JNIEnv* env = AttachCurrentThread(); 88 JNIEnv* env = AttachCurrentThread();
92 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 89 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
93 if (!content_video_view.is_null()) { 90 if (!content_video_view.is_null()) {
94 Java_ContentVideoView_onVideoSizeChanged(env, content_video_view.obj(), 91 Java_ContentVideoView_onVideoSizeChanged(env, content_video_view.obj(),
95 width, height); 92 width, height);
96 } 93 }
97 } 94 }
98 95
99 void ContentVideoView::OnBufferingUpdate(int percent) { 96 void ContentVideoView::OnBufferingUpdate(int percent) {
100 JNIEnv* env = AttachCurrentThread(); 97 JNIEnv* env = AttachCurrentThread();
101 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 98 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
102 if (!content_video_view.is_null()) { 99 if (!content_video_view.is_null()) {
103 Java_ContentVideoView_onBufferingUpdate(env, content_video_view.obj(), 100 Java_ContentVideoView_onBufferingUpdate(env, content_video_view.obj(),
104 percent); 101 percent);
105 } 102 }
106 } 103 }
107 104
108 void ContentVideoView::OnPlaybackComplete() { 105 void ContentVideoView::OnPlaybackComplete() {
109 JNIEnv* env = AttachCurrentThread(); 106 JNIEnv* env = AttachCurrentThread();
110 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 107 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
111 if (!content_video_view.is_null()) { 108 if (!content_video_view.is_null()) {
112 power_save_blocker_.reset();
113 Java_ContentVideoView_onPlaybackComplete(env, content_video_view.obj()); 109 Java_ContentVideoView_onPlaybackComplete(env, content_video_view.obj());
114 } 110 }
115 } 111 }
116 112
117 void ContentVideoView::OnExitFullscreen() { 113 void ContentVideoView::OnExitFullscreen() {
118 JNIEnv* env = AttachCurrentThread(); 114 JNIEnv* env = AttachCurrentThread();
119 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); 115 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
120 if (!content_video_view.is_null()) 116 if (!content_video_view.is_null())
121 Java_ContentVideoView_onExitFullscreen(env, content_video_view.obj()); 117 Java_ContentVideoView_onExitFullscreen(env, content_video_view.obj());
122 } 118 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 bool ContentVideoView::IsPlaying(JNIEnv*, jobject obj) { 190 bool ContentVideoView::IsPlaying(JNIEnv*, jobject obj) {
195 media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer(); 191 media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
196 return player ? player->IsPlaying() : false; 192 return player ? player->IsPlaying() : false;
197 } 193 }
198 194
199 void ContentVideoView::SeekTo(JNIEnv*, jobject obj, jint msec) { 195 void ContentVideoView::SeekTo(JNIEnv*, jobject obj, jint msec) {
200 manager_->FullscreenPlayerSeek(msec); 196 manager_->FullscreenPlayerSeek(msec);
201 } 197 }
202 198
203 void ContentVideoView::Play(JNIEnv*, jobject obj) { 199 void ContentVideoView::Play(JNIEnv*, jobject obj) {
204 CreatePowerSaveBlocker();
205 manager_->FullscreenPlayerPlay(); 200 manager_->FullscreenPlayerPlay();
206 } 201 }
207 202
208 void ContentVideoView::Pause(JNIEnv*, jobject obj) { 203 void ContentVideoView::Pause(JNIEnv*, jobject obj) {
209 power_save_blocker_.reset();
210 manager_->FullscreenPlayerPause(); 204 manager_->FullscreenPlayerPause();
211 } 205 }
212 206
213 void ContentVideoView::ExitFullscreen( 207 void ContentVideoView::ExitFullscreen(
214 JNIEnv*, jobject, jboolean release_media_player) { 208 JNIEnv*, jobject, jboolean release_media_player) {
215 power_save_blocker_.reset();
216 j_content_video_view_.reset(); 209 j_content_video_view_.reset();
217 manager_->ExitFullscreen(release_media_player); 210 manager_->ExitFullscreen(release_media_player);
218 } 211 }
219 212
220 void ContentVideoView::SetSurface(JNIEnv* env, jobject obj, 213 void ContentVideoView::SetSurface(JNIEnv* env, jobject obj,
221 jobject surface) { 214 jobject surface) {
222 manager_->SetVideoSurface( 215 manager_->SetVideoSurface(
223 gfx::ScopedJavaSurface::AcquireExternalSurface(surface)); 216 gfx::ScopedJavaSurface::AcquireExternalSurface(surface));
224 } 217 }
225 218
226 void ContentVideoView::RequestMediaMetadata(JNIEnv* env, jobject obj) { 219 void ContentVideoView::RequestMediaMetadata(JNIEnv* env, jobject obj) {
227 base::MessageLoop::current()->PostTask( 220 base::MessageLoop::current()->PostTask(
228 FROM_HERE, 221 FROM_HERE,
229 base::Bind(&ContentVideoView::UpdateMediaMetadata, 222 base::Bind(&ContentVideoView::UpdateMediaMetadata,
230 weak_factory_.GetWeakPtr())); 223 weak_factory_.GetWeakPtr()));
231 } 224 }
232 225
233 ScopedJavaLocalRef<jobject> ContentVideoView::GetJavaObject(JNIEnv* env) { 226 ScopedJavaLocalRef<jobject> ContentVideoView::GetJavaObject(JNIEnv* env) {
234 return j_content_video_view_.get(env); 227 return j_content_video_view_.get(env);
235 } 228 }
236 229
237 gfx::NativeView ContentVideoView::GetNativeView() {
238 JNIEnv* env = AttachCurrentThread();
239 ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
240 if (content_video_view.is_null())
241 return NULL;
242
243 return reinterpret_cast<gfx::NativeView>(
244 Java_ContentVideoView_getNativeViewAndroid(env,
245 content_video_view.obj()));
246
247 }
248
249 JavaObjectWeakGlobalRef ContentVideoView::CreateJavaObject() { 230 JavaObjectWeakGlobalRef ContentVideoView::CreateJavaObject() {
250 ContentViewCoreImpl* content_view_core = manager_->GetContentViewCore(); 231 ContentViewCoreImpl* content_view_core = manager_->GetContentViewCore();
251 JNIEnv* env = AttachCurrentThread(); 232 JNIEnv* env = AttachCurrentThread();
252 return JavaObjectWeakGlobalRef( 233 return JavaObjectWeakGlobalRef(
253 env, 234 env,
254 Java_ContentVideoView_createContentVideoView( 235 Java_ContentVideoView_createContentVideoView(
255 env, 236 env,
256 content_view_core->GetJavaObject().obj(), 237 content_view_core->GetJavaObject().obj(),
257 reinterpret_cast<intptr_t>(this)).obj()); 238 reinterpret_cast<intptr_t>(this)).obj());
258 } 239 }
259
260 void ContentVideoView::CreatePowerSaveBlocker() {
261 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
262 switches::kEnableContentVideoViewPowerSaveBlocker)) {
263 // In fullscreen Clank reuses the power save blocker attached to the
264 // container view that was created for embedded video. The WebView cannot
265 // reuse that so we create a new blocker instead.
266 if (power_save_blocker_) return;
267 power_save_blocker_ = PowerSaveBlocker::Create(
268 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
269 "Playing video").Pass();
270 static_cast<PowerSaveBlockerImpl*>(power_save_blocker_.get())->
271 InitDisplaySleepBlocker(GetNativeView());
272 }
273 }
274
275 } // namespace content 240 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698