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

Side by Side Diff: content/browser/wake_lock/wake_lock_service_context.cc

Issue 1107333002: Wake Lock API implementation (Chromium part) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/wake_lock/wake_lock_service_context.h"
6
7 #include "base/bind.h"
8 #include "content/browser/power_save_blocker_impl.h"
9 #include "content/browser/web_contents/web_contents_impl.h"
10 #include "content/browser/web_contents/web_contents_view.h"
11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/power_save_blocker.h"
13 #include "content/public/browser/render_frame_host.h"
14 #include "content/public/common/service_registry.h"
15
16 namespace content {
17
18 WakeLockServiceContext::WakeLockServiceContext(WebContents* web_contents)
19 : WebContentsObserver(web_contents),
20 weak_factory_(this) {
21 }
22
23 WakeLockServiceContext::~WakeLockServiceContext() {
24 }
25
26 void WakeLockServiceContext::RenderFrameCreated(
27 RenderFrameHost* render_frame_host) {
28 if (auto registry = render_frame_host->GetServiceRegistry()) {
29 registry->AddService<WakeLockService>(
30 base::Bind(&WakeLockServiceImpl::CreateService,
31 weak_factory_.GetWeakPtr(),
32 base::Unretained(render_frame_host)));
33 }
34 }
35
36 void WakeLockServiceContext::RenderFrameDeleted(
37 RenderFrameHost* render_frame_host) {
38 wake_lock_state_.RemoveFrame(render_frame_host);
39 UpdateBlocker();
40 }
41
42 void WakeLockServiceContext::RenderFrameHostChanged(
43 RenderFrameHost* old_host,
44 RenderFrameHost* new_host) {
45 wake_lock_state_.RemoveFrame(old_host);
46 UpdateBlocker();
47 }
48
49 void WakeLockServiceContext::RequestWakeLock(
50 RenderFrameHost* render_frame_host) {
51 DCHECK_CURRENTLY_ON(BrowserThread::UI);
52 wake_lock_state_.AddFrame(render_frame_host);
53 UpdateBlocker();
54 }
55
56 void WakeLockServiceContext::CancelWakeLock(
57 RenderFrameHost* render_frame_host) {
58 DCHECK_CURRENTLY_ON(BrowserThread::UI);
59 wake_lock_state_.RemoveFrame(render_frame_host);
60 UpdateBlocker();
61 }
62
63 void WakeLockServiceContext::CreateBlocker() {
64 DCHECK(!blocker_);
65 blocker_ = PowerSaveBlocker::Create(
66 PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
67 PowerSaveBlocker::kReasonOther,
68 "WakeLock API");
69 // On Android, additionaly associate the blocker with this WebContents'
70 // NativeView.
71 #if defined(OS_ANDROID)
72 DCHECK(web_contents());
73 static_cast<PowerSaveBlockerImpl*>(blocker_.get())->InitDisplaySleepBlocker(
74 web_contents());
75 #endif
76 }
77
78 void WakeLockServiceContext::RemoveBlocker() {
79 blocker_.reset();
80 }
81
82 void WakeLockServiceContext::UpdateBlocker() {
83 if (wake_lock_state_.HasFrame()) {
84 if (!blocker_) {
85 CreateBlocker();
86 }
87 } else {
88 RemoveBlocker();
89 }
90 NotifyUpdate();
91 }
92
93 void WakeLockServiceContext::NotifyUpdate() {
94 FOR_EACH_OBSERVER(Observer, observer_list_, OnUpdate());
mlamouri (slow - plz ping) 2015/08/21 10:03:35 Why is that needed?
95 }
96
97 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698