OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | |
scottmg
2017/05/17 16:00:33
ni;t no (c).
ke.he
2017/05/19 03:46:51
Done.
| |
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 "base/run_loop.h" | |
6 #include "device/wake_lock/public/interfaces/wake_lock_context.mojom.h" | |
7 #include "device/wake_lock/public/interfaces/wake_lock_provider.mojom.h" | |
8 #include "device/wake_lock/public/interfaces/wake_lock_service.mojom.h" | |
9 #include "mojo/public/cpp/bindings/interface_ptr.h" | |
10 #include "services/device/device_service_test_base.h" | |
11 #include "services/device/public/interfaces/constants.mojom.h" | |
12 | |
13 namespace device { | |
14 | |
15 namespace { | |
16 | |
17 class WakeLockServiceImplTest : public DeviceServiceTestBase { | |
18 public: | |
19 WakeLockServiceImplTest() = default; | |
20 ~WakeLockServiceImplTest() override = default; | |
21 | |
22 protected: | |
23 void SetUp() override { | |
24 DeviceServiceTestBase::SetUp(); | |
25 connector()->BindInterface(mojom::kServiceName, &wake_lock_provider_); | |
26 | |
27 wake_lock_provider_->GetWakeLockWithoutContext( | |
28 device::mojom::WakeLockType::PreventAppSuspension, | |
29 device::mojom::WakeLockReason::ReasonOther, "WakeLockServiceImplTest", | |
30 mojo::MakeRequest(&wake_lock_)); | |
31 } | |
32 | |
33 void OnHasWakeLock(base::Closure quit_closure, bool has_wakelock) { | |
34 has_wakelock_ = has_wakelock; | |
35 quit_closure.Run(); | |
36 } | |
37 | |
38 bool HasWakeLock() { | |
39 has_wakelock_ = false; | |
40 | |
41 base::RunLoop run_loop; | |
42 wake_lock_->HasWakeLockForTests( | |
43 base::Bind(&WakeLockServiceImplTest::OnHasWakeLock, | |
44 base::Unretained(this), run_loop.QuitClosure())); | |
45 run_loop.Run(); | |
46 | |
47 return has_wakelock_; | |
48 } | |
49 | |
50 bool has_wakelock_; | |
51 | |
52 mojom::WakeLockProviderPtr wake_lock_provider_; | |
53 mojom::WakeLockServicePtr wake_lock_; | |
54 | |
55 DISALLOW_COPY_AND_ASSIGN(WakeLockServiceImplTest); | |
56 }; | |
57 | |
58 // Request a wake lock, then cancel. | |
59 TEST_F(WakeLockServiceImplTest, RequestThenCancel) { | |
60 EXPECT_FALSE(HasWakeLock()); | |
61 | |
62 wake_lock_->RequestWakeLock(); | |
63 EXPECT_TRUE(HasWakeLock()); | |
64 | |
65 wake_lock_->CancelWakeLock(); | |
66 EXPECT_FALSE(HasWakeLock()); | |
67 } | |
68 | |
69 // Cancel a wake lock first, which should have no effect. | |
70 TEST_F(WakeLockServiceImplTest, CancelThenRequest) { | |
71 EXPECT_FALSE(HasWakeLock()); | |
72 | |
73 wake_lock_->CancelWakeLock(); | |
74 EXPECT_FALSE(HasWakeLock()); | |
75 | |
76 wake_lock_->RequestWakeLock(); | |
77 EXPECT_TRUE(HasWakeLock()); | |
78 | |
79 wake_lock_->CancelWakeLock(); | |
80 EXPECT_FALSE(HasWakeLock()); | |
81 } | |
82 | |
83 // Send multiple requests, which should be coallesced as one request. | |
scottmg
2017/05/17 16:00:32
"coalesced"
ke.he
2017/05/19 03:46:51
Done.
| |
84 TEST_F(WakeLockServiceImplTest, MultipleRequests) { | |
85 EXPECT_FALSE(HasWakeLock()); | |
86 | |
87 wake_lock_->RequestWakeLock(); | |
88 wake_lock_->RequestWakeLock(); | |
89 wake_lock_->RequestWakeLock(); | |
90 EXPECT_TRUE(HasWakeLock()); | |
91 | |
92 wake_lock_->CancelWakeLock(); | |
93 EXPECT_FALSE(HasWakeLock()); | |
94 } | |
95 | |
96 // WakeLockProvider connection broken doesn't effect WakeLockService. | |
scottmg
2017/05/17 16:00:33
effect -> affect.
ke.he
2017/05/19 03:46:51
Done.
| |
97 TEST_F(WakeLockServiceImplTest, OnWakeLockProviderConnectionError) { | |
98 EXPECT_FALSE(HasWakeLock()); | |
99 | |
100 wake_lock_->RequestWakeLock(); | |
101 EXPECT_TRUE(HasWakeLock()); | |
102 | |
103 wake_lock_provider_.reset(); | |
104 base::RunLoop().RunUntilIdle(); | |
105 | |
106 EXPECT_TRUE(HasWakeLock()); | |
107 wake_lock_->CancelWakeLock(); | |
108 EXPECT_FALSE(HasWakeLock()); | |
109 } | |
110 | |
111 // One WakeLockService instance can serves multiple clients at same time. | |
scottmg
2017/05/17 16:00:32
serves -> serve.
ke.he
2017/05/19 03:46:51
Done.
| |
112 TEST_F(WakeLockServiceImplTest, MultipleClients) { | |
113 EXPECT_FALSE(HasWakeLock()); | |
114 | |
115 mojom::WakeLockServicePtr wake_lock_1; | |
116 mojom::WakeLockServicePtr wake_lock_2; | |
117 mojom::WakeLockServicePtr wake_lock_3; | |
118 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1)); | |
119 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2)); | |
120 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3)); | |
121 | |
122 EXPECT_FALSE(HasWakeLock()); | |
123 | |
124 wake_lock_1->RequestWakeLock(); | |
125 wake_lock_2->RequestWakeLock(); | |
126 wake_lock_3->RequestWakeLock(); | |
127 EXPECT_TRUE(HasWakeLock()); | |
128 | |
129 wake_lock_1->CancelWakeLock(); | |
130 wake_lock_2->CancelWakeLock(); | |
131 EXPECT_TRUE(HasWakeLock()); | |
132 | |
133 wake_lock_3->CancelWakeLock(); | |
134 EXPECT_FALSE(HasWakeLock()); | |
135 } | |
136 | |
137 // WakeLockService should update the wake lock status correctly when | |
138 // connection error happens. | |
139 TEST_F(WakeLockServiceImplTest, OnWakeLockConnectionError) { | |
140 EXPECT_FALSE(HasWakeLock()); | |
141 | |
142 mojom::WakeLockServicePtr wake_lock_1; | |
143 mojom::WakeLockServicePtr wake_lock_2; | |
144 mojom::WakeLockServicePtr wake_lock_3; | |
145 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1)); | |
146 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2)); | |
147 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3)); | |
148 | |
149 EXPECT_FALSE(HasWakeLock()); | |
150 | |
151 wake_lock_1->RequestWakeLock(); | |
152 wake_lock_2->RequestWakeLock(); | |
153 wake_lock_3->RequestWakeLock(); | |
154 EXPECT_TRUE(HasWakeLock()); | |
155 | |
156 wake_lock_1.reset(); | |
157 base::RunLoop().RunUntilIdle(); | |
158 EXPECT_TRUE(HasWakeLock()); | |
159 | |
160 wake_lock_2.reset(); | |
161 wake_lock_3.reset(); | |
162 base::RunLoop().RunUntilIdle(); | |
163 EXPECT_FALSE(HasWakeLock()); | |
164 } | |
165 | |
166 // Test mixed operations. | |
167 TEST_F(WakeLockServiceImplTest, MixedTest) { | |
168 EXPECT_FALSE(HasWakeLock()); | |
169 | |
170 mojom::WakeLockServicePtr wake_lock_1; | |
171 mojom::WakeLockServicePtr wake_lock_2; | |
172 mojom::WakeLockServicePtr wake_lock_3; | |
173 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1)); | |
174 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2)); | |
175 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3)); | |
176 | |
177 EXPECT_FALSE(HasWakeLock()); | |
178 | |
179 // Execute a series of calls that should result in |wake_lock_1| and | |
180 // |wake_lock_3| having outstanding wake lock requests. | |
181 wake_lock_1->RequestWakeLock(); | |
182 wake_lock_1->CancelWakeLock(); | |
183 wake_lock_2->RequestWakeLock(); | |
184 wake_lock_1->RequestWakeLock(); | |
185 wake_lock_1->RequestWakeLock(); | |
186 wake_lock_3->CancelWakeLock(); | |
187 wake_lock_3->CancelWakeLock(); | |
188 wake_lock_2->CancelWakeLock(); | |
189 wake_lock_3->RequestWakeLock(); | |
190 wake_lock_2.reset(); | |
191 EXPECT_TRUE(HasWakeLock()); | |
192 | |
193 wake_lock_1.reset(); | |
194 base::RunLoop().RunUntilIdle(); | |
195 EXPECT_TRUE(HasWakeLock()); | |
196 | |
197 wake_lock_3->CancelWakeLock(); | |
198 EXPECT_FALSE(HasWakeLock()); | |
199 } | |
200 | |
201 } // namespace | |
202 | |
203 } // namespace device | |
OLD | NEW |