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