OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "android_webview/native/permission/permission_request_handler.h" |
| 6 |
| 7 #include <utility> |
| 8 |
5 #include "android_webview/native/permission/aw_permission_request.h" | 9 #include "android_webview/native/permission/aw_permission_request.h" |
6 #include "android_webview/native/permission/aw_permission_request_delegate.h" | 10 #include "android_webview/native/permission/aw_permission_request_delegate.h" |
7 #include "android_webview/native/permission/permission_request_handler.h" | |
8 #include "android_webview/native/permission/permission_request_handler_client.h" | 11 #include "android_webview/native/permission/permission_request_handler_client.h" |
9 #include "base/bind.h" | 12 #include "base/bind.h" |
10 #include "base/callback.h" | 13 #include "base/callback.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
12 | 15 |
13 namespace android_webview { | 16 namespace android_webview { |
14 | 17 |
15 class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate { | 18 class TestAwPermissionRequestDelegate : public AwPermissionRequestDelegate { |
16 public: | 19 public: |
17 TestAwPermissionRequestDelegate(const GURL& origin, | 20 TestAwPermissionRequestDelegate(const GURL& origin, |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 base::Unretained(this)))); | 142 base::Unretained(this)))); |
140 } | 143 } |
141 | 144 |
142 const GURL& origin() { | 145 const GURL& origin() { |
143 return origin_; | 146 return origin_; |
144 } | 147 } |
145 | 148 |
146 int64_t resources() { return resources_; } | 149 int64_t resources() { return resources_; } |
147 | 150 |
148 scoped_ptr<AwPermissionRequestDelegate> delegate() { | 151 scoped_ptr<AwPermissionRequestDelegate> delegate() { |
149 return delegate_.Pass(); | 152 return std::move(delegate_); |
150 } | 153 } |
151 | 154 |
152 TestPermissionRequestHandler* handler() { | 155 TestPermissionRequestHandler* handler() { |
153 return &handler_; | 156 return &handler_; |
154 } | 157 } |
155 | 158 |
156 TestPermissionRequestHandlerClient* client() { | 159 TestPermissionRequestHandlerClient* client() { |
157 return &client_; | 160 return &client_; |
158 } | 161 } |
159 | 162 |
160 bool allowed() { | 163 bool allowed() { |
161 return allowed_; | 164 return allowed_; |
162 } | 165 } |
163 | 166 |
164 private: | 167 private: |
165 GURL origin_; | 168 GURL origin_; |
166 int64_t resources_; | 169 int64_t resources_; |
167 scoped_ptr<AwPermissionRequestDelegate> delegate_; | 170 scoped_ptr<AwPermissionRequestDelegate> delegate_; |
168 TestPermissionRequestHandlerClient client_; | 171 TestPermissionRequestHandlerClient client_; |
169 TestPermissionRequestHandler handler_; | 172 TestPermissionRequestHandler handler_; |
170 bool allowed_; | 173 bool allowed_; |
171 }; | 174 }; |
172 | 175 |
173 TEST_F(PermissionRequestHandlerTest, TestPermissionGranted) { | 176 TEST_F(PermissionRequestHandlerTest, TestPermissionGranted) { |
174 handler()->SendRequest(delegate().Pass()); | 177 handler()->SendRequest(delegate()); |
175 // Verify Handler store the request correctly. | 178 // Verify Handler store the request correctly. |
176 ASSERT_EQ(1u, handler()->requests().size()); | 179 ASSERT_EQ(1u, handler()->requests().size()); |
177 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | 180 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
178 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); | 181 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); |
179 | 182 |
180 // Verify client's onPermissionRequest was called | 183 // Verify client's onPermissionRequest was called |
181 EXPECT_EQ(origin(), client()->request()->GetOrigin()); | 184 EXPECT_EQ(origin(), client()->request()->GetOrigin()); |
182 EXPECT_EQ(resources(), client()->request()->GetResources()); | 185 EXPECT_EQ(resources(), client()->request()->GetResources()); |
183 | 186 |
184 // Simulate the grant request. | 187 // Simulate the grant request. |
185 client()->Grant(); | 188 client()->Grant(); |
186 // Verify the request is notified as granted | 189 // Verify the request is notified as granted |
187 EXPECT_TRUE(allowed()); | 190 EXPECT_TRUE(allowed()); |
188 handler()->PruneRequests(); | 191 handler()->PruneRequests(); |
189 // Verify the weak reference in handler was removed. | 192 // Verify the weak reference in handler was removed. |
190 EXPECT_TRUE(handler()->requests().empty()); | 193 EXPECT_TRUE(handler()->requests().empty()); |
191 } | 194 } |
192 | 195 |
193 TEST_F(PermissionRequestHandlerTest, TestPermissionDenied) { | 196 TEST_F(PermissionRequestHandlerTest, TestPermissionDenied) { |
194 handler()->SendRequest(delegate().Pass()); | 197 handler()->SendRequest(delegate()); |
195 // Verify Handler store the request correctly. | 198 // Verify Handler store the request correctly. |
196 ASSERT_EQ(1u, handler()->requests().size()); | 199 ASSERT_EQ(1u, handler()->requests().size()); |
197 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | 200 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
198 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); | 201 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); |
199 | 202 |
200 // Verify client's onPermissionRequest was called | 203 // Verify client's onPermissionRequest was called |
201 EXPECT_EQ(origin(), client()->request()->GetOrigin()); | 204 EXPECT_EQ(origin(), client()->request()->GetOrigin()); |
202 EXPECT_EQ(resources(), client()->request()->GetResources()); | 205 EXPECT_EQ(resources(), client()->request()->GetResources()); |
203 | 206 |
204 // Simulate the deny request. | 207 // Simulate the deny request. |
205 client()->Deny(); | 208 client()->Deny(); |
206 // Verify the request is notified as granted | 209 // Verify the request is notified as granted |
207 EXPECT_FALSE(allowed()); | 210 EXPECT_FALSE(allowed()); |
208 handler()->PruneRequests(); | 211 handler()->PruneRequests(); |
209 // Verify the weak reference in handler was removed. | 212 // Verify the weak reference in handler was removed. |
210 EXPECT_TRUE(handler()->requests().empty()); | 213 EXPECT_TRUE(handler()->requests().empty()); |
211 } | 214 } |
212 | 215 |
213 TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) { | 216 TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) { |
214 GURL origin1 = GURL("http://a.google.com"); | 217 GURL origin1 = GURL("http://a.google.com"); |
215 int64_t resources1 = AwPermissionRequest::Geolocation; | 218 int64_t resources1 = AwPermissionRequest::Geolocation; |
216 | 219 |
217 scoped_ptr<AwPermissionRequestDelegate> delegate1; | 220 scoped_ptr<AwPermissionRequestDelegate> delegate1; |
218 delegate1.reset(new TestAwPermissionRequestDelegate( | 221 delegate1.reset(new TestAwPermissionRequestDelegate( |
219 origin1, resources1, | 222 origin1, resources1, |
220 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | 223 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
221 base::Unretained(this)))); | 224 base::Unretained(this)))); |
222 | 225 |
223 // Send 1st request | 226 // Send 1st request |
224 handler()->SendRequest(delegate().Pass()); | 227 handler()->SendRequest(delegate()); |
225 // Verify Handler store the request correctly. | 228 // Verify Handler store the request correctly. |
226 ASSERT_EQ(1u, handler()->requests().size()); | 229 ASSERT_EQ(1u, handler()->requests().size()); |
227 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | 230 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
228 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); | 231 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); |
229 // Verify client's onPermissionRequest was called | 232 // Verify client's onPermissionRequest was called |
230 EXPECT_EQ(origin(), client()->request()->GetOrigin()); | 233 EXPECT_EQ(origin(), client()->request()->GetOrigin()); |
231 EXPECT_EQ(resources(), client()->request()->GetResources()); | 234 EXPECT_EQ(resources(), client()->request()->GetResources()); |
232 | 235 |
233 // Send 2nd request | 236 // Send 2nd request |
234 handler()->SendRequest(delegate1.Pass()); | 237 handler()->SendRequest(std::move(delegate1)); |
235 // Verify Handler store the request correctly. | 238 // Verify Handler store the request correctly. |
236 ASSERT_EQ(2u, handler()->requests().size()); | 239 ASSERT_EQ(2u, handler()->requests().size()); |
237 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | 240 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
238 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); | 241 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); |
239 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin()); | 242 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin()); |
240 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources()); | 243 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources()); |
241 // Verify client's onPermissionRequest was called | 244 // Verify client's onPermissionRequest was called |
242 EXPECT_EQ(origin1, client()->request()->GetOrigin()); | 245 EXPECT_EQ(origin1, client()->request()->GetOrigin()); |
243 EXPECT_EQ(resources1, client()->request()->GetResources()); | 246 EXPECT_EQ(resources1, client()->request()->GetResources()); |
244 | 247 |
245 // Send 3rd request which has same origin and resources as first one. | 248 // Send 3rd request which has same origin and resources as first one. |
246 delegate1.reset(new TestAwPermissionRequestDelegate(origin(), resources(), | 249 delegate1.reset(new TestAwPermissionRequestDelegate(origin(), resources(), |
247 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | 250 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
248 base::Unretained(this)))); | 251 base::Unretained(this)))); |
249 handler()->SendRequest(delegate1.Pass()); | 252 handler()->SendRequest(std::move(delegate1)); |
250 // Verify Handler store the request correctly. | 253 // Verify Handler store the request correctly. |
251 ASSERT_EQ(3u, handler()->requests().size()); | 254 ASSERT_EQ(3u, handler()->requests().size()); |
252 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | 255 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
253 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); | 256 EXPECT_EQ(resources(), handler()->requests()[0]->GetResources()); |
254 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin()); | 257 EXPECT_EQ(origin1, handler()->requests()[1]->GetOrigin()); |
255 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources()); | 258 EXPECT_EQ(resources1, handler()->requests()[1]->GetResources()); |
256 EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin()); | 259 EXPECT_EQ(origin(), handler()->requests()[2]->GetOrigin()); |
257 EXPECT_EQ(resources(), handler()->requests()[2]->GetResources()); | 260 EXPECT_EQ(resources(), handler()->requests()[2]->GetResources()); |
258 // Verify client's onPermissionRequest was called | 261 // Verify client's onPermissionRequest was called |
259 EXPECT_EQ(origin(), client()->request()->GetOrigin()); | 262 EXPECT_EQ(origin(), client()->request()->GetOrigin()); |
260 EXPECT_EQ(resources(), client()->request()->GetResources()); | 263 EXPECT_EQ(resources(), client()->request()->GetResources()); |
261 | 264 |
262 // Cancel the request. | 265 // Cancel the request. |
263 handler()->CancelRequest(origin(), resources()); | 266 handler()->CancelRequest(origin(), resources()); |
264 // Verify client's OnPermissionRequestCancled() was called. | 267 // Verify client's OnPermissionRequestCancled() was called. |
265 EXPECT_EQ(origin(), client()->canceled_permission().origin); | 268 EXPECT_EQ(origin(), client()->canceled_permission().origin); |
266 EXPECT_EQ(resources(), client()->canceled_permission().resources); | 269 EXPECT_EQ(resources(), client()->canceled_permission().resources); |
267 // Verify Handler store the request correctly, the 1st and 3rd were removed. | 270 // Verify Handler store the request correctly, the 1st and 3rd were removed. |
268 handler()->PruneRequests(); | 271 handler()->PruneRequests(); |
269 ASSERT_EQ(1u, handler()->requests().size()); | 272 ASSERT_EQ(1u, handler()->requests().size()); |
270 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin()); | 273 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin()); |
271 EXPECT_EQ(resources1, handler()->requests()[0]->GetResources()); | 274 EXPECT_EQ(resources1, handler()->requests()[0]->GetResources()); |
272 } | 275 } |
273 | 276 |
274 TEST_F(PermissionRequestHandlerTest, TestPreauthorizePermission) { | 277 TEST_F(PermissionRequestHandlerTest, TestPreauthorizePermission) { |
275 handler()->PreauthorizePermission(origin(), resources()); | 278 handler()->PreauthorizePermission(origin(), resources()); |
276 | 279 |
277 // Permission should granted without asking PermissionRequestHandlerClient. | 280 // Permission should granted without asking PermissionRequestHandlerClient. |
278 handler()->SendRequest(delegate().Pass()); | 281 handler()->SendRequest(delegate()); |
279 EXPECT_TRUE(allowed()); | 282 EXPECT_TRUE(allowed()); |
280 EXPECT_EQ(NULL, client()->request()); | 283 EXPECT_EQ(NULL, client()->request()); |
281 | 284 |
282 // Only ask one preauthorized resource, permission should granted | 285 // Only ask one preauthorized resource, permission should granted |
283 // without asking PermissionRequestHandlerClient. | 286 // without asking PermissionRequestHandlerClient. |
284 scoped_ptr<AwPermissionRequestDelegate> delegate; | 287 scoped_ptr<AwPermissionRequestDelegate> delegate; |
285 delegate.reset(new TestAwPermissionRequestDelegate( | 288 delegate.reset(new TestAwPermissionRequestDelegate( |
286 origin(), AwPermissionRequest::AudioCapture, | 289 origin(), AwPermissionRequest::AudioCapture, |
287 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | 290 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
288 base::Unretained(this)))); | 291 base::Unretained(this)))); |
289 client()->Reset(); | 292 client()->Reset(); |
290 handler()->SendRequest(delegate.Pass()); | 293 handler()->SendRequest(std::move(delegate)); |
291 EXPECT_TRUE(allowed()); | 294 EXPECT_TRUE(allowed()); |
292 EXPECT_EQ(NULL, client()->request()); | 295 EXPECT_EQ(NULL, client()->request()); |
293 } | 296 } |
294 | 297 |
295 TEST_F(PermissionRequestHandlerTest, TestOriginNotPreauthorized) { | 298 TEST_F(PermissionRequestHandlerTest, TestOriginNotPreauthorized) { |
296 handler()->PreauthorizePermission(origin(), resources()); | 299 handler()->PreauthorizePermission(origin(), resources()); |
297 | 300 |
298 // Ask the origin which wasn't preauthorized. | 301 // Ask the origin which wasn't preauthorized. |
299 GURL origin ("http://a.google.com/a/b"); | 302 GURL origin ("http://a.google.com/a/b"); |
300 scoped_ptr<AwPermissionRequestDelegate> delegate; | 303 scoped_ptr<AwPermissionRequestDelegate> delegate; |
301 int64_t requested_resources = AwPermissionRequest::AudioCapture; | 304 int64_t requested_resources = AwPermissionRequest::AudioCapture; |
302 delegate.reset(new TestAwPermissionRequestDelegate( | 305 delegate.reset(new TestAwPermissionRequestDelegate( |
303 origin, requested_resources, | 306 origin, requested_resources, |
304 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | 307 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
305 base::Unretained(this)))); | 308 base::Unretained(this)))); |
306 handler()->SendRequest(delegate.Pass()); | 309 handler()->SendRequest(std::move(delegate)); |
307 EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin()); | 310 EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin()); |
308 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); | 311 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); |
309 client()->Grant(); | 312 client()->Grant(); |
310 EXPECT_TRUE(allowed()); | 313 EXPECT_TRUE(allowed()); |
311 } | 314 } |
312 | 315 |
313 TEST_F(PermissionRequestHandlerTest, TestResourcesNotPreauthorized) { | 316 TEST_F(PermissionRequestHandlerTest, TestResourcesNotPreauthorized) { |
314 handler()->PreauthorizePermission(origin(), resources()); | 317 handler()->PreauthorizePermission(origin(), resources()); |
315 | 318 |
316 // Ask the resources which weren't preauthorized. | 319 // Ask the resources which weren't preauthorized. |
317 scoped_ptr<AwPermissionRequestDelegate> delegate; | 320 scoped_ptr<AwPermissionRequestDelegate> delegate; |
318 int64_t requested_resources = | 321 int64_t requested_resources = |
319 AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation; | 322 AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation; |
320 delegate.reset(new TestAwPermissionRequestDelegate( | 323 delegate.reset(new TestAwPermissionRequestDelegate( |
321 origin(), requested_resources, | 324 origin(), requested_resources, |
322 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | 325 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
323 base::Unretained(this)))); | 326 base::Unretained(this)))); |
324 | 327 |
325 handler()->SendRequest(delegate.Pass()); | 328 handler()->SendRequest(std::move(delegate)); |
326 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | 329 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
327 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); | 330 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); |
328 client()->Deny(); | 331 client()->Deny(); |
329 EXPECT_FALSE(allowed()); | 332 EXPECT_FALSE(allowed()); |
330 } | 333 } |
331 | 334 |
332 TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) { | 335 TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) { |
333 handler()->PreauthorizePermission(origin(), resources()); | 336 handler()->PreauthorizePermission(origin(), resources()); |
334 // Preauthorize another permission. | 337 // Preauthorize another permission. |
335 GURL origin ("http://a.google.com/a/b"); | 338 GURL origin ("http://a.google.com/a/b"); |
336 handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation); | 339 handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation); |
337 GURL origin_hostname ("http://a.google.com/"); | 340 GURL origin_hostname ("http://a.google.com/"); |
338 scoped_ptr<AwPermissionRequestDelegate> delegate; | 341 scoped_ptr<AwPermissionRequestDelegate> delegate; |
339 delegate.reset(new TestAwPermissionRequestDelegate( | 342 delegate.reset(new TestAwPermissionRequestDelegate( |
340 origin_hostname, AwPermissionRequest::Geolocation, | 343 origin_hostname, AwPermissionRequest::Geolocation, |
341 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | 344 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
342 base::Unretained(this)))); | 345 base::Unretained(this)))); |
343 handler()->SendRequest(delegate.Pass()); | 346 handler()->SendRequest(std::move(delegate)); |
344 EXPECT_TRUE(allowed()); | 347 EXPECT_TRUE(allowed()); |
345 EXPECT_EQ(NULL, client()->request()); | 348 EXPECT_EQ(NULL, client()->request()); |
346 } | 349 } |
347 | 350 |
348 } // android_webview | 351 } // android_webview |
OLD | NEW |