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

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: . 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"
boliu 2016/05/31 17:23:43 is this needed?
ncarter (slow) 2016/05/31 17:43:08 yes, for FROM_HERE. It was missing.
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
31 private: 28 private:
32 friend class base::RefCountedThreadSafe<Delegate>; 29 friend class base::RefCountedThreadSafe<Delegate>;
33 ~Delegate() override; 30 ~Delegate();
34 31
35 base::android::ScopedJavaLocalRef<jobject> GetContentViewCore(); 32 ui::ViewAndroid* view_android_;
36 33
37 base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_; 34 base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_;
38 35
39 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 36 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
40 37
41 DISALLOW_COPY_AND_ASSIGN(Delegate); 38 DISALLOW_COPY_AND_ASSIGN(Delegate);
42 }; 39 };
43 40
44 PowerSaveBlockerImpl::Delegate::Delegate( 41 PowerSaveBlockerImpl::Delegate::Delegate(
45 WebContents* web_contents, 42 ui::ViewAndroid* view_android,
46 scoped_refptr<base::SequencedTaskRunner> ui_task_runner) 43 scoped_refptr<base::SequencedTaskRunner> ui_task_runner)
47 : WebContentsObserver(web_contents), ui_task_runner_(ui_task_runner) { 44 : view_android_(view_android),
45 ui_task_runner_(ui_task_runner) {
48 JNIEnv* env = AttachCurrentThread(); 46 JNIEnv* env = AttachCurrentThread();
49 java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env)); 47 java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env));
50 } 48 }
51 49
52 PowerSaveBlockerImpl::Delegate::~Delegate() { 50 PowerSaveBlockerImpl::Delegate::~Delegate() {
53 } 51 }
54 52
55 void PowerSaveBlockerImpl::Delegate::ApplyBlock() { 53 void PowerSaveBlockerImpl::Delegate::ApplyBlock() {
56 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 54 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 55
62 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); 56 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_);
63 JNIEnv* env = AttachCurrentThread(); 57 JNIEnv* env = AttachCurrentThread();
64 Java_PowerSaveBlocker_applyBlock(env, obj.obj(), 58 ScopedJavaLocalRef<jobject> view_delegate =
65 java_content_view_core.obj()); 59 view_android_->GetViewAndroidDelegate();
60 if (view_delegate.obj())
61 Java_PowerSaveBlocker_applyBlock(env, obj.obj(), view_delegate.obj());
66 } 62 }
67 63
68 void PowerSaveBlockerImpl::Delegate::RemoveBlock() { 64 void PowerSaveBlockerImpl::Delegate::RemoveBlock() {
69 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 65 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_); 66 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_);
76 JNIEnv* env = AttachCurrentThread(); 67 JNIEnv* env = AttachCurrentThread();
77 Java_PowerSaveBlocker_removeBlock(env, obj.obj(), 68 ScopedJavaLocalRef<jobject> view_delegate =
78 java_content_view_core.obj()); 69 view_android_->GetViewAndroidDelegate();
79 } 70 if (view_delegate.obj())
80 71 Java_PowerSaveBlocker_removeBlock(env, obj.obj(), view_delegate.obj());
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 } 72 }
93 73
94 PowerSaveBlockerImpl::PowerSaveBlockerImpl( 74 PowerSaveBlockerImpl::PowerSaveBlockerImpl(
95 PowerSaveBlockerType type, 75 PowerSaveBlockerType type,
96 Reason reason, 76 Reason reason,
97 const std::string& description, 77 const std::string& description,
98 scoped_refptr<base::SequencedTaskRunner> ui_task_runner, 78 scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
99 scoped_refptr<base::SingleThreadTaskRunner> blocking_task_runner) 79 scoped_refptr<base::SingleThreadTaskRunner> blocking_task_runner)
100 : ui_task_runner_(ui_task_runner), 80 : ui_task_runner_(ui_task_runner),
101 blocking_task_runner_(blocking_task_runner) { 81 blocking_task_runner_(blocking_task_runner) {
102 // Don't support kPowerSaveBlockPreventAppSuspension 82 // Don't support kPowerSaveBlockPreventAppSuspension
103 } 83 }
104 84
105 PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { 85 PowerSaveBlockerImpl::~PowerSaveBlockerImpl() {
106 if (delegate_.get()) { 86 if (delegate_.get()) {
107 ui_task_runner_->PostTask(FROM_HERE, 87 ui_task_runner_->PostTask(FROM_HERE,
108 base::Bind(&Delegate::RemoveBlock, delegate_)); 88 base::Bind(&Delegate::RemoveBlock, delegate_));
109 } 89 }
110 } 90 }
111 91
112 void PowerSaveBlockerImpl::InitDisplaySleepBlocker(WebContents* web_contents) { 92 void PowerSaveBlockerImpl::InitDisplaySleepBlocker(
93 ui::ViewAndroid* view_android) {
113 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 94 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
114 if (!web_contents) 95 if (!view_android)
115 return; 96 return;
116 97
117 delegate_ = new Delegate(web_contents, ui_task_runner_); 98 delegate_ = new Delegate(view_android, ui_task_runner_);
118 delegate_->ApplyBlock(); 99 delegate_->ApplyBlock();
119 } 100 }
120 101
121 bool RegisterPowerSaveBlocker(JNIEnv* env) { 102 bool RegisterPowerSaveBlocker(JNIEnv* env) {
122 return RegisterNativesImpl(env); 103 return RegisterNativesImpl(env);
123 } 104 }
124 105
125 } // namespace content 106 } // 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