content_video_view.cc revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/content_video_view.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/android/content_view_core_impl.h"
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/browser/media/android/browser_media_player_manager.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/power_save_blocker_impl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/android/surface_texture_peer.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/ContentVideoView_jni.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::AttachCurrentThread;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::CheckException;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaGlobalRef;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace {
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// There can only be one content video view at a time, this holds onto that
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// singleton instance.
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ContentVideoView* g_content_video_view = NULL;
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)static jobject GetSingletonJavaContentVideoView(JNIEnv*env, jclass) {
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (g_content_video_view)
32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return g_content_video_view->GetJavaObject(env).Release();
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  else
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return NULL;
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentVideoView::RegisterContentVideoView(JNIEnv* env) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return RegisterNativesImpl(env);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ContentVideoView* ContentVideoView::GetInstance() {
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return g_content_video_view;
43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ContentVideoView::ContentVideoView(
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    BrowserMediaPlayerManager* manager)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : manager_(manager),
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      weak_factory_(this) {
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(!g_content_video_view);
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  j_content_video_view_ = CreateJavaObject();
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  g_content_video_view = this;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CreatePowerSaveBlocker();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentVideoView::~ContentVideoView() {
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(g_content_video_view);
574ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  JNIEnv* env = AttachCurrentThread();
584ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
594ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  if (!content_video_view.is_null()) {
604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch    Java_ContentVideoView_destroyContentVideoView(env,
614ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch        content_video_view.obj(), true);
624ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch    j_content_video_view_.reset();
634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  }
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  g_content_video_view = NULL;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ContentVideoView::OpenVideo() {
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!content_video_view.is_null()) {
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    CreatePowerSaveBlocker();
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    Java_ContentVideoView_openVideo(env, content_video_view.obj());
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::OnMediaPlayerError(int error_type) {
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!content_video_view.is_null()) {
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    power_save_blocker_.reset();
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    Java_ContentVideoView_onMediaPlayerError(env, content_video_view.obj(),
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        error_type);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::OnVideoSizeChanged(int width, int height) {
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!content_video_view.is_null()) {
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    Java_ContentVideoView_onVideoSizeChanged(env, content_video_view.obj(),
91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        width, height);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::OnBufferingUpdate(int percent) {
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!content_video_view.is_null()) {
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    Java_ContentVideoView_onBufferingUpdate(env, content_video_view.obj(),
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        percent);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::OnPlaybackComplete() {
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!content_video_view.is_null()) {
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    power_save_blocker_.reset();
109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    Java_ContentVideoView_onPlaybackComplete(env, content_video_view.obj());
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ContentVideoView::OnExitFullscreen() {
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!content_video_view.is_null())
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Java_ContentVideoView_onExitFullscreen(env, content_video_view.obj());
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::UpdateMediaMetadata() {
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (content_video_view.is_null())
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (player && player->IsPlayerReady()) {
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Java_ContentVideoView_onUpdateMediaMetadata(
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        env, content_video_view.obj(), player->GetVideoWidth(),
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        player->GetVideoHeight(), player->GetDuration().InMilliseconds(),
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        player->CanPause(),player->CanSeekForward(), player->CanSeekBackward());
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ContentVideoView::GetVideoWidth(JNIEnv*, jobject obj) const {
136b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return player ? player->GetVideoWidth() : 0;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ContentVideoView::GetVideoHeight(JNIEnv*, jobject obj) const {
141b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return player ? player->GetVideoHeight() : 0;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ContentVideoView::GetDurationInMilliSeconds(JNIEnv*, jobject obj) const {
146b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return player ? player->GetDuration().InMilliseconds() : -1;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ContentVideoView::GetCurrentPosition(JNIEnv*, jobject obj) const {
151b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return player ? player->GetCurrentTime().InMilliseconds() : 0;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentVideoView::IsPlaying(JNIEnv*, jobject obj) {
156b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  media::MediaPlayerAndroid* player = manager_->GetFullscreenPlayer();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return player ? player->IsPlaying() : false;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::SeekTo(JNIEnv*, jobject obj, jint msec) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager_->FullscreenPlayerSeek(msec);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::Play(JNIEnv*, jobject obj) {
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CreatePowerSaveBlocker();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager_->FullscreenPlayerPlay();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::Pause(JNIEnv*, jobject obj) {
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  power_save_blocker_.reset();
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager_->FullscreenPlayerPause();
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::ExitFullscreen(
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    JNIEnv*, jobject, jboolean release_media_player) {
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  power_save_blocker_.reset();
177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  j_content_video_view_.reset();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager_->ExitFullscreen(release_media_player);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentVideoView::SetSurface(JNIEnv* env, jobject obj,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  jobject surface) {
183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  manager_->SetVideoSurface(
184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      gfx::ScopedJavaSurface::AcquireExternalSurface(surface));
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentVideoView::RequestMediaMetadata(JNIEnv* env, jobject obj) {
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::MessageLoop::current()->PostTask(
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      FROM_HERE,
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&ContentVideoView::UpdateMediaMetadata,
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 weak_factory_.GetWeakPtr()));
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentVideoView::GetJavaObject(JNIEnv* env) {
195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return j_content_video_view_.get(env);
196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::NativeView ContentVideoView::GetNativeView() {
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env);
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (content_video_view.is_null())
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return NULL;
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return reinterpret_cast<gfx::NativeView>(
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      Java_ContentVideoView_getNativeViewAndroid(env,
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                 content_video_view.obj()));
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)JavaObjectWeakGlobalRef ContentVideoView::CreateJavaObject() {
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ContentViewCoreImpl* content_view_core = manager_->GetContentViewCore();
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  JNIEnv* env = AttachCurrentThread();
213a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool legacyMode = CommandLine::ForCurrentProcess()->HasSwitch(
214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      switches::kDisableOverlayFullscreenVideoSubtitle);
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return JavaObjectWeakGlobalRef(
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      env,
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      Java_ContentVideoView_createContentVideoView(
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          env,
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          content_view_core->GetContext().obj(),
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          reinterpret_cast<intptr_t>(this),
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          content_view_core->GetContentVideoViewClient().obj(),
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          legacyMode).obj());
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentVideoView::CreatePowerSaveBlocker() {
226e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  if (!CommandLine::ForCurrentProcess()->HasSwitch(
227e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      switches::kDisableOverlayFullscreenVideoSubtitle)) {
228e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    return;
229e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  }
230e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (power_save_blocker_) return;
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  power_save_blocker_ = PowerSaveBlocker::Create(
2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      "Playing video").Pass();
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static_cast<PowerSaveBlockerImpl*>(power_save_blocker_.get())->
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      InitDisplaySleepBlocker(GetNativeView());
2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace content
240