blob: 0355ec62969aca9b095222a3cb19df359055b47a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
// Copyright 2018 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WAKE_LOCK_WAKE_LOCK_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_WAKE_LOCK_WAKE_LOCK_H_
#include "services/device/public/mojom/wake_lock.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_property.h"
#include "third_party/blink/renderer/core/dom/context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/page/page_visibility_observer.h"
#include "third_party/blink/renderer/modules/event_target_modules.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
namespace blink {
class WakeLockRequest;
class WakeLock final : public EventTargetWithInlineData,
public ActiveScriptWrappable<WakeLock>,
public ContextLifecycleObserver,
public PageVisibilityObserver {
DEFINE_WRAPPERTYPEINFO();
USING_GARBAGE_COLLECTED_MIXIN(WakeLock);
public:
enum class LockType { kSystem, kScreen };
WakeLock(ScriptState*, LockType);
~WakeLock() override;
// wake_lock.idl implementation
AtomicString type() const;
bool active() const;
DEFINE_ATTRIBUTE_EVENT_LISTENER(activechange, kActivechange);
WakeLockRequest* createRequest();
// Called by NavigatorWakeLock to create Screen Wake Lock
static WakeLock* CreateScreenWakeLock(ScriptState*);
// Called by NavigatorWakeLock to create System Wake Lock
static WakeLock* CreateSystemWakeLock(ScriptState*);
// Resolves and returns same promise of that particular WakeLockType each time
ScriptPromise GetPromise(ScriptState*);
// EventTarget overrides.
const WTF::AtomicString& InterfaceName() const override;
ExecutionContext* GetExecutionContext() const override;
// ActiveScriptWrappable overrides.
bool HasPendingActivity() const final;
// ContextLifecycleObserver overrides.
void ContextDestroyed(ExecutionContext*) override;
// PageVisibilityObserver overrides.
void PageVisibilityChanged() override;
void Trace(blink::Visitor*) override;
// Called by WakeLockRequest to decrease the request counter by one
void CancelRequest();
private:
// Error handler in case of failure to connect to Wake Lock mojo service
void OnConnectionError();
// Depending on active_ status change, requests or cancels Wake Lock
void ChangeActiveStatus(bool);
// Binds to the Wake Lock mojo service
void BindToServiceIfNeeded();
device::mojom::blink::WakeLockPtr wake_lock_service_;
int request_counter_ = 0;
LockType type_;
bool active_ = false;
// We use ScriptPromiseProperty instead of ScriptPromiseResolver or other
// mechanism because we need to return same promise of that WakeLockType for
// any subsequent calls to navigator.getWakeLock(WakeLockType).
using WakeLockProperty = ScriptPromiseProperty<Member<WakeLock>,
Member<WakeLock>,
Member<DOMException>>;
Member<WakeLockProperty> wake_lock_property_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WAKE_LOCK_WAKE_LOCK_H_
|