diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-17 18:22:40 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-17 18:22:40 +0000 |
commit | 13305952c9f0dea2d4f8b59a7bfa14535d64e299 (patch) | |
tree | 772d133079b86ba409f7ffe06d88d8735dfd5719 | |
parent | 300c386b2aa297d9fe887f4c63f840d9b60db3ca (diff) | |
download | chromium_src-13305952c9f0dea2d4f8b59a7bfa14535d64e299.zip chromium_src-13305952c9f0dea2d4f8b59a7bfa14535d64e299.tar.gz chromium_src-13305952c9f0dea2d4f8b59a7bfa14535d64e299.tar.bz2 |
Revert 212022 "The previous implementation is not correct, it de..."
> The previous implementation is not correct, it depended on the Fullscreen video class, but the PowerSaveBlocker could be used for embedding video or the use case which isn't related to the video at all.
>
> This patch adds new API to PowerSaveBlocker.
>
> BUG=247892
>
> Review URL: https://chromiumcodereview.appspot.com/17175009
TBR=michaelbai@chromium.org
Review URL: https://codereview.chromium.org/19659002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212092 0039d316-1c4b-4281-b951-d872f2087c98
17 files changed, 110 insertions, 166 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java index 7de19e5..41f2446 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java @@ -157,6 +157,10 @@ public abstract class AwContentsClient { } @Override + public void keepScreenOn(boolean screenOn) { + } + + @Override public ContentVideoViewControls createControls() { return null; } diff --git a/content/browser/android/browser_jni_registrar.cc b/content/browser/android/browser_jni_registrar.cc index 9ee8f24..b914a9a 100644 --- a/content/browser/android/browser_jni_registrar.cc +++ b/content/browser/android/browser_jni_registrar.cc @@ -25,7 +25,6 @@ #include "content/browser/android/tracing_intent_handler.h" #include "content/browser/android/web_contents_observer_android.h" #include "content/browser/geolocation/location_api_adapter_android.h" -#include "content/browser/power_save_blocker_android.h" #include "content/browser/renderer_host/ime_adapter_android.h" #include "content/browser/renderer_host/java/java_bound_object.h" #include "content/browser/speech/speech_recognizer_impl_android.h" @@ -54,7 +53,6 @@ base::android::RegistrationMethod kContentRegisteredMethods[] = { { "MediaResourceGetterImpl", content::MediaResourceGetterImpl::RegisterMediaResourceGetter }, { "LoadUrlParams", content::RegisterLoadUrlParams }, - { "PowerSaveBlock", content::RegisterPowerSaveBlocker }, { "RegisterImeAdapter", content::RegisterImeAdapter }, { "SpeechRecognizerImplAndroid", content::SpeechRecognizerImplAndroid::RegisterSpeechRecognizer }, diff --git a/content/browser/android/content_video_view.cc b/content/browser/android/content_video_view.cc index 144ac01..366182e 100644 --- a/content/browser/android/content_video_view.cc +++ b/content/browser/android/content_video_view.cc @@ -65,6 +65,12 @@ void ContentVideoView::OpenVideo() { Java_ContentVideoView_openVideo(env, content_video_view.obj()); } +// static +void ContentVideoView::KeepScreenOn(bool screen_on) { + Java_ContentVideoView_keepScreenOnContentVideoView(AttachCurrentThread(), + screen_on); +} + void ContentVideoView::OnMediaPlayerError(int error_type) { JNIEnv *env = AttachCurrentThread(); ScopedJavaLocalRef<jobject> content_video_view = GetJavaObject(env); diff --git a/content/browser/power_save_blocker_android.cc b/content/browser/power_save_blocker_android.cc index 45dda18..2358049 100644 --- a/content/browser/power_save_blocker_android.cc +++ b/content/browser/power_save_blocker_android.cc @@ -2,27 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/power_save_blocker_android.h" +#include "content/browser/power_save_blocker_impl.h" -#include "base/android/jni_android.h" #include "base/logging.h" -#include "content/browser/power_save_blocker_impl.h" +#include "content/browser/android/content_video_view.h" #include "content/public/browser/browser_thread.h" -#include "jni/PowerSaveBlocker_jni.h" -#include "ui/android/window_android.h" - -using base::android::AttachCurrentThread; -using base::android::ScopedJavaLocalRef; namespace content { class PowerSaveBlockerImpl::Delegate : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate> { public: - explicit Delegate(gfx::NativeWindow native_window) { - j_window_android_ = JavaObjectWeakGlobalRef(AttachCurrentThread(), - static_cast<ui::WindowAndroid*>(native_window)->GetJavaObject().obj()); - } + explicit Delegate(PowerSaveBlockerType type) : type_(type) {} // Does the actual work to apply or remove the desired power save block. void ApplyBlock(); @@ -32,51 +23,49 @@ class PowerSaveBlockerImpl::Delegate friend class base::RefCountedThreadSafe<Delegate>; ~Delegate() {} - JavaObjectWeakGlobalRef j_window_android_; + // The counter of requests from clients for type + // kPowerSaveBlockPreventDisplaySleep. + static int blocker_count_; + const PowerSaveBlockerType type_; DISALLOW_COPY_AND_ASSIGN(Delegate); }; +int PowerSaveBlockerImpl::Delegate::blocker_count_ = 0; + void PowerSaveBlockerImpl::Delegate::ApplyBlock() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jobject> j_object = j_window_android_.get(env); - if (j_object.obj()) - Java_PowerSaveBlocker_applyBlock(env, j_object.obj()); + if (type_ != kPowerSaveBlockPreventDisplaySleep) + return; + + if (blocker_count_ == 0) + ContentVideoView::KeepScreenOn(true); + ++blocker_count_; } void PowerSaveBlockerImpl::Delegate::RemoveBlock() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jobject> j_object = j_window_android_.get(env); - if (j_object.obj()) - Java_PowerSaveBlocker_removeBlock(env, j_object.obj()); -} - -PowerSaveBlockerImpl::PowerSaveBlockerImpl(PowerSaveBlockerType type, - const std::string& reason) { - // Don't support kPowerSaveBlockPreventAppSuspension -} + if (type_ != kPowerSaveBlockPreventDisplaySleep) + return; -PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { - if (delegate_) { - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - base::Bind(&Delegate::RemoveBlock, delegate_)); - } + --blocker_count_; + if (blocker_count_ == 0) + ContentVideoView::KeepScreenOn(false); } -void PowerSaveBlockerImpl::InitDisplaySleepBlocker( - gfx::NativeWindow native_window) { - delegate_ = new Delegate(native_window); +PowerSaveBlockerImpl::PowerSaveBlockerImpl(PowerSaveBlockerType type, + const std::string& reason) + : delegate_(new Delegate(type)) { // This may be called on any thread. BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, base::Bind(&Delegate::ApplyBlock, delegate_)); } -bool RegisterPowerSaveBlocker(JNIEnv* env) { - return RegisterNativesImpl(env); +PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&Delegate::RemoveBlock, delegate_)); } } // namespace content diff --git a/content/browser/power_save_blocker_android.h b/content/browser/power_save_blocker_android.h deleted file mode 100644 index 1df7d69..0000000 --- a/content/browser/power_save_blocker_android.h +++ /dev/null @@ -1,11 +0,0 @@ -// 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. - -#include <jni.h> - -namespace content { - -bool RegisterPowerSaveBlocker(JNIEnv* env); - -} // namespace content diff --git a/content/browser/power_save_blocker_impl.h b/content/browser/power_save_blocker_impl.h index c3a105d..fd0e63a 100644 --- a/content/browser/power_save_blocker_impl.h +++ b/content/browser/power_save_blocker_impl.h @@ -7,7 +7,6 @@ #include "base/memory/ref_counted.h" #include "content/public/browser/power_save_blocker.h" -#include "ui/gfx/native_widget_types.h" namespace content { @@ -16,14 +15,6 @@ class PowerSaveBlockerImpl : public PowerSaveBlocker { PowerSaveBlockerImpl(PowerSaveBlockerType type, const std::string& reason); virtual ~PowerSaveBlockerImpl(); -#if defined(OS_ANDROID) - // In Android platform, the |native_window| is needed to create the - // kPowerSaveBlockPreventDisplaySleep type of PowerSaveBlocker - // so the blocker could be removed by platform if the window isn't in the - // foreground. - void InitDisplaySleepBlocker(gfx::NativeWindow native_window); -#endif - private: class Delegate; diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index 3ff6ed0..a7fa73e 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc @@ -50,6 +50,7 @@ #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_types.h" +#include "content/public/browser/power_save_blocker.h" #include "content/public/browser/render_view_host_observer.h" #include "content/public/browser/user_metrics.h" #include "content/public/common/bindings_policy.h" @@ -203,7 +204,9 @@ RenderViewHostImpl::~RenderViewHostImpl() { FOR_EACH_OBSERVER( RenderViewHostObserver, observers_, RenderViewHostDestruction()); - GetDelegate()->RenderViewDeleted(this); + ClearPowerSaveBlockers(); + + GetDelegate()->RenderViewDeleted(this); // Be sure to clean up any leftover state from cross-site requests. CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( @@ -987,6 +990,7 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) { OnSelectionBoundsChanged) IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL) + IPC_MESSAGE_HANDLER(ViewHostMsg_MediaNotification, OnMediaNotification) IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowSnapshot, OnGetWindowSnapshot) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission, OnRequestDesktopNotificationPermission) @@ -1126,6 +1130,7 @@ void RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) { static_cast<base::TerminationStatus>(status); // Reset state. + ClearPowerSaveBlockers(); main_frame_id_ = -1; // Our base class RenderWidgetHost needs to reset some stuff. @@ -1611,9 +1616,7 @@ void RenderViewHostImpl::RequestToLockMouse(bool user_gesture, } bool RenderViewHostImpl::IsFullscreen() const { - if (delegate_) - return delegate_->IsFullscreenForCurrentTab(); - return false; + return delegate_->IsFullscreenForCurrentTab(); } void RenderViewHostImpl::OnFocus() { @@ -1946,6 +1949,33 @@ void RenderViewHostImpl::OnDidZoomURL(double zoom_level, } } +void RenderViewHostImpl::OnMediaNotification(int64 player_cookie, + bool has_video, + bool has_audio, + bool is_playing) { + // Chrome OS does its own detection of audio and video. +#if !defined(OS_CHROMEOS) + if (is_playing) { + scoped_ptr<PowerSaveBlocker> blocker; + if (has_video) { + blocker = PowerSaveBlocker::Create( + PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, + "Playing video"); + } else if (has_audio) { + blocker = PowerSaveBlocker::Create( + PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, + "Playing audio"); + } + + if (blocker) + power_save_blockers_[player_cookie] = blocker.release(); + } else { + delete power_save_blockers_[player_cookie]; + power_save_blockers_.erase(player_cookie); + } +#endif +} + void RenderViewHostImpl::OnRequestDesktopNotificationPermission( const GURL& source_origin, int callback_context) { GetContentClient()->browser()->RequestDesktopNotificationPermission( @@ -2047,6 +2077,10 @@ void RenderViewHostImpl::SetSwappedOut(bool is_swapped_out) { has_timed_out_on_unload_ = false; } +void RenderViewHostImpl::ClearPowerSaveBlockers() { + STLDeleteValues(&power_save_blockers_); +} + bool RenderViewHostImpl::CanAccessFilesOfPageState( const PageState& state) const { ChildProcessSecurityPolicyImpl* policy = diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h index 7f63ba9..23d1941 100644 --- a/content/browser/renderer_host/render_view_host_impl.h +++ b/content/browser/renderer_host/render_view_host_impl.h @@ -63,6 +63,7 @@ namespace content { class ChildProcessSecurityPolicyImpl; class PageState; +class PowerSaveBlocker; class RenderFrameHostImpl; class RenderViewHostObserver; class RenderWidgetHostDelegate; @@ -567,6 +568,10 @@ class CONTENT_EXPORT RenderViewHostImpl const std::vector<AccessibilityHostMsg_NotificationParams>& params); void OnScriptEvalResponse(int id, const base::ListValue& result); void OnDidZoomURL(double zoom_level, bool remember, const GURL& url); + void OnMediaNotification(int64 player_cookie, + bool has_video, + bool has_audio, + bool is_playing); void OnRequestDesktopNotificationPermission(const GURL& origin, int callback_id); void OnShowDesktopNotification( @@ -590,6 +595,8 @@ class CONTENT_EXPORT RenderViewHostImpl // and clears any waiting state that is no longer relevant. void SetSwappedOut(bool is_swapped_out); + void ClearPowerSaveBlockers(); + bool CanAccessFilesOfPageState(const PageState& state) const; // This is an RenderFrameHost object associated with the top-level frame in @@ -694,6 +701,11 @@ class CONTENT_EXPORT RenderViewHostImpl // The termination status of the last render view that terminated. base::TerminationStatus render_view_termination_status_; + // Holds PowerSaveBlockers for the media players in use. Key is the + // player_cookie passed to OnMediaNotification, value is the PowerSaveBlocker. + typedef std::map<int64, PowerSaveBlocker*> PowerSaveBlockerMap; + PowerSaveBlockerMap power_save_blockers_; + // A list of observers that filter messages. Weak references. ObserverList<RenderViewHostObserver> observers_; diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index e929992..a122414 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -32,7 +32,6 @@ #include "content/browser/gpu/gpu_process_host.h" #include "content/browser/host_zoom_map_impl.h" #include "content/browser/loader/resource_dispatcher_host_impl.h" -#include "content/browser/power_save_blocker_impl.h" #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" @@ -367,8 +366,6 @@ WebContentsImpl::WebContentsImpl( WebContentsImpl::~WebContentsImpl() { is_being_destroyed_ = true; - ClearAllPowerSaveBlockers(); - for (std::set<RenderWidgetHostImpl*>::iterator iter = created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { (*iter)->DetachDelegate(); @@ -730,7 +727,6 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, #endif IPC_MESSAGE_HANDLER(ViewHostMsg_FrameAttached, OnFrameAttached) IPC_MESSAGE_HANDLER(ViewHostMsg_FrameDetached, OnFrameDetached) - IPC_MESSAGE_HANDLER(ViewHostMsg_MediaNotification, OnMediaNotification) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP_EX() message_source_ = NULL; @@ -2593,38 +2589,6 @@ void WebContentsImpl::OnFrameDetached(int64 parent_frame_id, int64 frame_id) { parent->RemoveChild(frame_id); } -void WebContentsImpl::OnMediaNotification(int64 player_cookie, - bool has_video, - bool has_audio, - bool is_playing) { - // Chrome OS does its own detection of audio and video. -#if !defined(OS_CHROMEOS) - if (is_playing) { - scoped_ptr<PowerSaveBlocker> blocker; - if (has_video) { - blocker = PowerSaveBlocker::Create( - PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, - "Playing video"); -#if defined(OS_ANDROID) - static_cast<PowerSaveBlockerImpl*>(blocker.get())-> - InitDisplaySleepBlocker(GetView()->GetTopLevelNativeWindow()); -#endif - } else if (has_audio) { - blocker = PowerSaveBlocker::Create( - PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, - "Playing audio"); - } - - if (blocker) - power_save_blockers_[message_source_][player_cookie] = blocker.release(); - } else { - delete power_save_blockers_[message_source_][player_cookie]; - power_save_blockers_[message_source_].erase(player_cookie); - } -#endif // !defined(OS_CHROMEOS) -} - - void WebContentsImpl::DidChangeVisibleSSLState() { FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidChangeVisibleSSLState()); @@ -2914,7 +2878,6 @@ void WebContentsImpl::RenderViewTerminated(RenderViewHost* rvh, return; } - ClearPowerSaveBlockers(rvh); SetIsLoading(false, NULL); NotifyDisconnected(); SetIsCrashed(status, error_code); @@ -2926,7 +2889,6 @@ void WebContentsImpl::RenderViewTerminated(RenderViewHost* rvh, } void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { - ClearPowerSaveBlockers(rvh); render_manager_.RenderViewDeleted(rvh); FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh)); } @@ -3733,17 +3695,4 @@ BrowserPluginGuestManager* browser_plugin::kBrowserPluginGuestManagerKeyName)); } -void WebContentsImpl::ClearPowerSaveBlockers( - RenderViewHost* render_view_host) { - if (!power_save_blockers_[render_view_host].empty()) - STLDeleteValues(&power_save_blockers_[render_view_host]); - power_save_blockers_.erase(render_view_host); -} - -void WebContentsImpl::ClearAllPowerSaveBlockers() { - for (PowerSaveBlockerMap::iterator i(power_save_blockers_.begin()); - i != power_save_blockers_.end(); ++i) - ClearPowerSaveBlockers(i->first); -} - } // namespace content diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index b42748c..bff25b5 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h @@ -47,7 +47,6 @@ class DownloadItem; class InterstitialPageImpl; class JavaBridgeDispatcherHostManager; class JavaScriptDialogManager; -class PowerSaveBlocker; class RenderViewHost; class RenderViewHostDelegateView; class RenderViewHostImpl; @@ -625,11 +624,6 @@ class CONTENT_EXPORT WebContentsImpl const std::string& frame_name); void OnFrameDetached(int64 parent_frame_id, int64 frame_id); - void OnMediaNotification(int64 player_cookie, - bool has_video, - bool has_audio, - bool is_playing); - // Changes the IsLoading state and notifies delegate as needed // |details| is used to provide details on the load that just finished // (but can be null if not applicable). Can be overridden. @@ -747,12 +741,6 @@ class CONTENT_EXPORT WebContentsImpl // Removes browser plugin embedder if there is one. void RemoveBrowserPluginEmbedder(); - // Clear |render_view_host|'s PowerSaveBlockers. - void ClearPowerSaveBlockers(RenderViewHost* render_view_host); - - // Clear all PowerSaveBlockers, leave power_save_blocker_ empty. - void ClearAllPowerSaveBlockers(); - // Data for core operation --------------------------------------------------- // Delegate for notifying our owner about stuff. Not owned by us. @@ -798,13 +786,6 @@ class CONTENT_EXPORT WebContentsImpl // Helper classes ------------------------------------------------------------ - // Maps the RenderViewHost to its media_player_cookie and PowerSaveBlocker - // pairs. Key is the RenderViewHost, value is the map which maps player_cookie - // on to PowerSaveBlocker. - typedef std::map<RenderViewHost*, std::map<int64, PowerSaveBlocker*> > - PowerSaveBlockerMap; - PowerSaveBlockerMap power_save_blockers_; - // Manages creation and swapping of render views. RenderViewHostManager render_manager_; diff --git a/content/content_browser.gypi b/content/content_browser.gypi index 3dce377..0b7dbf1 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi @@ -698,7 +698,6 @@ 'browser/plugin_service_impl.cc', 'browser/plugin_service_impl.h', 'browser/power_save_blocker_android.cc', - 'browser/power_save_blocker_android.h', 'browser/power_save_blocker_chromeos.cc', 'browser/power_save_blocker_impl.cc', 'browser/power_save_blocker_impl.h', diff --git a/content/content_jni.gypi b/content/content_jni.gypi index 1e01586..c9b63cb 100644 --- a/content/content_jni.gypi +++ b/content/content_jni.gypi @@ -27,7 +27,6 @@ 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProvider.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', - 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/SmoothScroller.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchPoint.java', diff --git a/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java b/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java index 3b5ba7f..bebac9d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java +++ b/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java @@ -47,6 +47,15 @@ public class ActivityContentVideoViewClient implements ContentVideoViewClient { } @Override + public void keepScreenOn(boolean screenOn) { + if (screenOn) { + mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } else { + mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + + @Override public View getVideoLoadingProgressView() { return null; } diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java b/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java index 5c9541c..c156aaa 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java @@ -603,6 +603,14 @@ public class ContentVideoView } } + @CalledByNative + public static void keepScreenOnContentVideoView(boolean screenOn) { + ContentVideoView content_video_view = getContentVideoView(); + if ( content_video_view != null) { + content_video_view.mClient.keepScreenOn(screenOn); + } + } + /** * This method shall only be called by native and exitFullscreen, * To exit fullscreen, use exitFullscreen in Java. diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewClient.java b/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewClient.java index 985f993..2ba1a23 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewClient.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewClient.java @@ -30,6 +30,12 @@ public interface ContentVideoViewClient { public void onDestroyContentVideoView(); /** + * Hints the embedder to prevent or allow the screen timeout. Optional to implement. + * @param screenOn indicates if the screen should be kept on or off. + */ + public void keepScreenOn(boolean screenOn); + + /** * Allows the embedder to replace the view indicating that the video is loading. * If null is returned, the default video loading view is used. */ diff --git a/content/public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java b/content/public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java deleted file mode 100644 index 26a9d62..0000000 --- a/content/public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java +++ /dev/null @@ -1,20 +0,0 @@ -// 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. - -package org.chromium.content.browser; - -import org.chromium.base.CalledByNative; -import org.chromium.ui.WindowAndroid; - -class PowerSaveBlocker { - @CalledByNative - private static void applyBlock(WindowAndroid windowAndroid) { - windowAndroid.keepScreenOn(true); - } - - @CalledByNative - private static void removeBlock(WindowAndroid windowAndroid) { - windowAndroid.keepScreenOn(false); - } -}
\ No newline at end of file diff --git a/ui/android/java/src/org/chromium/ui/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/WindowAndroid.java index 04593b1..58716d8 100644 --- a/ui/android/java/src/org/chromium/ui/WindowAndroid.java +++ b/ui/android/java/src/org/chromium/ui/WindowAndroid.java @@ -11,7 +11,6 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.SparseArray; -import android.view.WindowManager; import android.widget.Toast; import java.util.HashMap; @@ -100,7 +99,6 @@ public class WindowAndroid { * TODO(nileshagrawal): Stop returning Activity Context crbug.com/233440. * @return Activity context. */ - @Deprecated public Context getContext() { return mActivity; } @@ -192,14 +190,6 @@ public class WindowAndroid { return mNativeWindowAndroid; } - public void keepScreenOn(boolean screenOn) { - if (screenOn) { - mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } else { - mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - } - private native int nativeInit(); private native void nativeDestroy(int nativeWindowAndroid); |