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

Side by Side Diff: content/browser/power_save_blocker_android.cc

Issue 2003803002: Remove dependency of power_save_blocker_android on various content bits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@power-save-task-runners
Patch Set: clear Created 4 years, 6 months 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 "base/android/jni_android.h" 5 #include "base/android/jni_android.h"
6 #include "base/bind.h"
7 #include "base/location.h"
6 #include "base/logging.h" 8 #include "base/logging.h"
7 #include "base/macros.h" 9 #include "base/macros.h"
8 #include "content/browser/android/content_view_core_impl.h"
9 #include "content/browser/power_save_blocker_impl.h" 10 #include "content/browser/power_save_blocker_impl.h"
10 #include "content/browser/web_contents/web_contents_impl.h"
11 #include "content/public/browser/android/content_view_core.h"
12 #include "content/public/browser/web_contents_observer.h"
13 #include "jni/PowerSaveBlocker_jni.h" 11 #include "jni/PowerSaveBlocker_jni.h"
14 #include "ui/android/view_android.h" 12 #include "ui/android/view_android.h"
15 13
16 namespace content { 14 namespace content {
17 15
18 using base::android::AttachCurrentThread; 16 using base::android::AttachCurrentThread;
19 17
20 class PowerSaveBlockerImpl::Delegate 18 class PowerSaveBlockerImpl::Delegate
21 : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate>, 19 : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate> {
22 public WebContentsObserver {
23 public: 20 public:
24 Delegate(WebContents* web_contents, 21 Delegate(ui::ViewAndroid* view_android,
25 scoped_refptr<base::SequencedTaskRunner> ui_task_runner); 22 scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
26 23
27 // Does the actual work to apply or remove the desired power save block. 24 // Does the actual work to apply or remove the desired power save block.
28 void ApplyBlock(); 25 void ApplyBlock();
29 void RemoveBlock(); 26 void RemoveBlock();
30 27
28 void ClearView() { view_android_ = nullptr; }
29
31 private: 30 private:
32 friend class base::RefCountedThreadSafe<Delegate>; 31 friend class base::RefCountedThreadSafe<Delegate>;
33 ~Delegate() override; 32 ~Delegate();
34 33
35 base::android::ScopedJavaLocalRef<jobject> GetContentViewCore(); 34 ui::ViewAndroid* view_android_;
36 35
37 base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_; 36 base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_;
38 37
39 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 38 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
40 39
41 DISALLOW_COPY_AND_ASSIGN(Delegate); 40 DISALLOW_COPY_AND_ASSIGN(Delegate);
42 }; 41 };
43 42
44 PowerSaveBlockerImpl::Delegate::Delegate( 43 PowerSaveBlockerImpl::Delegate::Delegate(
45 WebContents* web_contents, 44 ui::ViewAndroid* view_android,
46 scoped_refptr<base::SequencedTaskRunner> ui_task_runner) 45 scoped_refptr<base::SequencedTaskRunner> ui_task_runner)
47 : WebContentsObserver(web_contents), ui_task_runner_(ui_task_runner) { 46 : view_android_(view_android), ui_task_runner_(ui_task_runner) {
48 JNIEnv* env = AttachCurrentThread(); 47 JNIEnv* env = AttachCurrentThread();
49 java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env)); 48 java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env));
50 } 49 }
51 50
52 PowerSaveBlockerImpl::Delegate::~Delegate() { 51 PowerSaveBlockerImpl::Delegate::~Delegate() {
53 } 52 }
54 53
55 void PowerSaveBlockerImpl::Delegate::ApplyBlock() { 54 void PowerSaveBlockerImpl::Delegate::ApplyBlock() {
56 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 55 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
57 base::android::ScopedJavaLocalRef<jobject> java_content_view_core =
58 GetContentViewCore();
59 if (java_content_view_core.is_null())
60 return;
61 56
62 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); 57 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_);
63 JNIEnv* env = AttachCurrentThread(); 58 JNIEnv* env = AttachCurrentThread();
64 Java_PowerSaveBlocker_applyBlock(env, obj.obj(), 59 if (view_android_ && !view_android_->GetViewAndroidDelegate().is_null()) {
boliu 2016/06/01 21:37:07 the is_null check isn't actually "safe". in theory
scottmg 2016/06/01 21:44:42 Thanks, removed.
65 java_content_view_core.obj()); 60 Java_PowerSaveBlocker_applyBlock(
61 env, obj.obj(), view_android_->GetViewAndroidDelegate().obj());
62 }
66 } 63 }
67 64
68 void PowerSaveBlockerImpl::Delegate::RemoveBlock() { 65 void PowerSaveBlockerImpl::Delegate::RemoveBlock() {
69 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 66 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
70 base::android::ScopedJavaLocalRef<jobject> java_content_view_core =
71 GetContentViewCore();
72 if (java_content_view_core.is_null())
73 return;
74
75 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); 67 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_);
76 JNIEnv* env = AttachCurrentThread(); 68 JNIEnv* env = AttachCurrentThread();
77 Java_PowerSaveBlocker_removeBlock(env, obj.obj(), 69 if (view_android_ && !view_android_->GetViewAndroidDelegate().is_null()) {
78 java_content_view_core.obj()); 70 Java_PowerSaveBlocker_removeBlock(
79 } 71 env, obj.obj(), view_android_->GetViewAndroidDelegate().obj());
80 72 }
81 base::android::ScopedJavaLocalRef<jobject>
82 PowerSaveBlockerImpl::Delegate::GetContentViewCore() {
83 if (!web_contents())
84 return base::android::ScopedJavaLocalRef<jobject>();
85
86 ContentViewCoreImpl* content_view_core_impl =
87 ContentViewCoreImpl::FromWebContents(web_contents());
88 if (!content_view_core_impl)
89 return base::android::ScopedJavaLocalRef<jobject>();
90
91 return content_view_core_impl->GetJavaObject();
92 } 73 }
93 74
94 PowerSaveBlockerImpl::PowerSaveBlockerImpl( 75 PowerSaveBlockerImpl::PowerSaveBlockerImpl(
95 PowerSaveBlockerType type, 76 PowerSaveBlockerType type,
96 Reason reason, 77 Reason reason,
97 const std::string& description, 78 const std::string& description,
98 scoped_refptr<base::SequencedTaskRunner> ui_task_runner, 79 scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
99 scoped_refptr<base::SingleThreadTaskRunner> blocking_task_runner) 80 scoped_refptr<base::SingleThreadTaskRunner> blocking_task_runner)
100 : ui_task_runner_(ui_task_runner), 81 : ui_task_runner_(ui_task_runner),
101 blocking_task_runner_(blocking_task_runner) { 82 blocking_task_runner_(blocking_task_runner) {
102 // Don't support kPowerSaveBlockPreventAppSuspension 83 // Don't support kPowerSaveBlockPreventAppSuspension
103 } 84 }
104 85
105 PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { 86 PowerSaveBlockerImpl::~PowerSaveBlockerImpl() {
106 if (delegate_.get()) { 87 if (delegate_.get()) {
107 ui_task_runner_->PostTask(FROM_HERE, 88 ui_task_runner_->PostTask(FROM_HERE,
108 base::Bind(&Delegate::RemoveBlock, delegate_)); 89 base::Bind(&Delegate::RemoveBlock, delegate_));
109 } 90 }
110 } 91 }
111 92
112 void PowerSaveBlockerImpl::InitDisplaySleepBlocker(WebContents* web_contents) { 93 void PowerSaveBlockerImpl::InitDisplaySleepBlocker(
94 ui::ViewAndroid* view_android) {
113 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 95 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
114 if (!web_contents) 96 if (!view_android)
115 return; 97 return;
116 98
117 delegate_ = new Delegate(web_contents, ui_task_runner_); 99 delegate_ = new Delegate(view_android, ui_task_runner_);
118 delegate_->ApplyBlock(); 100 delegate_->ApplyBlock();
119 } 101 }
120 102
103 void PowerSaveBlockerImpl::ClearViewForSleepBlocker() {
104 delegate_->RemoveBlock();
105 delegate_->ClearView();
106 }
107
121 bool RegisterPowerSaveBlocker(JNIEnv* env) { 108 bool RegisterPowerSaveBlocker(JNIEnv* env) {
122 return RegisterNativesImpl(env); 109 return RegisterNativesImpl(env);
123 } 110 }
124 111
125 } // namespace content 112 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/media_web_contents_observer.cc ('k') | content/browser/power_save_blocker_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698