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/aw_permission_request.h" | 5 #include "android_webview/native/permission/aw_permission_request.h" |
6 #include "android_webview/native/permission/aw_permission_request_delegate.h" | 6 #include "android_webview/native/permission/aw_permission_request_delegate.h" |
7 #include "android_webview/native/permission/permission_request_handler.h" | 7 #include "android_webview/native/permission/permission_request_handler.h" |
8 #include "android_webview/native/permission/permission_request_handler_client.h" | 8 #include "android_webview/native/permission/permission_request_handler_client.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 struct Permission { | 47 struct Permission { |
48 Permission() | 48 Permission() |
49 :resources(0) {} | 49 :resources(0) {} |
50 Permission(const GURL& origin, int64 resources) | 50 Permission(const GURL& origin, int64 resources) |
51 : origin(origin), | 51 : origin(origin), |
52 resources(resources) {} | 52 resources(resources) {} |
53 GURL origin; | 53 GURL origin; |
54 int64 resources; | 54 int64 resources; |
55 }; | 55 }; |
56 | 56 |
57 TestPermissionRequestHandlerClient() | |
58 : request_(NULL) {} | |
59 | |
57 virtual void OnPermissionRequest(AwPermissionRequest* request) OVERRIDE { | 60 virtual void OnPermissionRequest(AwPermissionRequest* request) OVERRIDE { |
58 request_ = request; | 61 request_ = request; |
59 requested_permission_ = | 62 requested_permission_ = |
60 Permission(request->GetOrigin(), request->GetResources()); | 63 Permission(request->GetOrigin(), request->GetResources()); |
61 } | 64 } |
62 | 65 |
63 virtual void OnPermissionRequestCanceled( | 66 virtual void OnPermissionRequestCanceled( |
64 AwPermissionRequest* request) OVERRIDE{ | 67 AwPermissionRequest* request) OVERRIDE{ |
65 canceled_permission_ = | 68 canceled_permission_ = |
66 Permission(request->GetOrigin(), request->GetResources()); | 69 Permission(request->GetOrigin(), request->GetResources()); |
(...skipping 14 matching lines...) Expand all Loading... | |
81 void Grant() { | 84 void Grant() { |
82 request_->OnAccept(NULL, NULL, true); | 85 request_->OnAccept(NULL, NULL, true); |
83 request_ = NULL; | 86 request_ = NULL; |
84 } | 87 } |
85 | 88 |
86 void Deny() { | 89 void Deny() { |
87 request_->OnAccept(NULL, NULL, false); | 90 request_->OnAccept(NULL, NULL, false); |
88 request_ = NULL; | 91 request_ = NULL; |
89 } | 92 } |
90 | 93 |
94 void Reset() { | |
95 request_ = NULL; | |
96 requested_permission_ = Permission(); | |
97 canceled_permission_ = Permission(); | |
98 } | |
99 | |
91 private: | 100 private: |
92 AwPermissionRequest* request_; | 101 AwPermissionRequest* request_; |
93 Permission requested_permission_; | 102 Permission requested_permission_; |
94 Permission canceled_permission_; | 103 Permission canceled_permission_; |
95 }; | 104 }; |
96 | 105 |
97 class TestPermissionRequestHandler : public PermissionRequestHandler { | 106 class TestPermissionRequestHandler : public PermissionRequestHandler { |
98 public: | 107 public: |
99 TestPermissionRequestHandler(PermissionRequestHandlerClient* client) | 108 TestPermissionRequestHandler(PermissionRequestHandlerClient* client) |
100 : PermissionRequestHandler(client) { | 109 : PermissionRequestHandler(client) { |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
259 // Verify client's OnPermissionRequestCancled() was called. | 268 // Verify client's OnPermissionRequestCancled() was called. |
260 EXPECT_EQ(origin(), client()->canceled_permission().origin); | 269 EXPECT_EQ(origin(), client()->canceled_permission().origin); |
261 EXPECT_EQ(resources(), client()->canceled_permission().resources); | 270 EXPECT_EQ(resources(), client()->canceled_permission().resources); |
262 // Verify Handler store the request correctly, the 1st and 3rd were removed. | 271 // Verify Handler store the request correctly, the 1st and 3rd were removed. |
263 handler()->PruneRequests(); | 272 handler()->PruneRequests(); |
264 ASSERT_EQ(1u, handler()->requests().size()); | 273 ASSERT_EQ(1u, handler()->requests().size()); |
265 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin()); | 274 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin()); |
266 EXPECT_EQ(resources1, handler()->requests()[0]->GetResources()); | 275 EXPECT_EQ(resources1, handler()->requests()[0]->GetResources()); |
267 } | 276 } |
268 | 277 |
278 TEST_F(PermissionRequestHandlerTest, TestPreauthorizePermission) { | |
279 handler()->PreauthorizePermission(origin(), resources()); | |
280 | |
281 // Permission should granted without asking PermissionRequestHandlerClient. | |
282 handler()->SendRequest(delegate().Pass()); | |
283 EXPECT_TRUE(allowed()); | |
284 EXPECT_EQ(NULL, client()->request()); | |
285 | |
286 // Only ask one preauthorized resource, permission should granted | |
287 // without asking PermissionRequestHandlerClient. | |
288 scoped_ptr<AwPermissionRequestDelegate> delegate; | |
289 delegate.reset(new TestAwPermissionRequestDelegate( | |
290 origin(), AwPermissionRequest::AudioCapture, | |
291 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
292 base::Unretained(this)))); | |
293 client()->Reset(); | |
294 handler()->SendRequest(delegate.Pass()); | |
295 EXPECT_TRUE(allowed()); | |
296 EXPECT_EQ(NULL, client()->request()); | |
297 } | |
298 | |
299 TEST_F(PermissionRequestHandlerTest, TestOriginNotPreauthorized) { | |
300 handler()->PreauthorizePermission(origin(), resources()); | |
301 | |
302 // Ask the origin which wasn't preauthorized. | |
303 GURL origin ("http://a.google.com/a/b"); | |
304 scoped_ptr<AwPermissionRequestDelegate> delegate; | |
305 delegate.reset(new TestAwPermissionRequestDelegate( | |
306 origin, AwPermissionRequest::AudioCapture, | |
benm (inactive)
2014/05/08 14:50:21
make this resource param a constant (and use in th
michaelbai
2014/05/08 16:44:30
Done.
| |
307 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
308 base::Unretained(this)))); | |
309 handler()->SendRequest(delegate.Pass()); | |
310 EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin()); | |
311 EXPECT_EQ(AwPermissionRequest::AudioCapture, | |
312 handler()->requests()[0]->GetResources()); | |
313 client()->Grant(); | |
314 EXPECT_TRUE(allowed()); | |
315 } | |
316 | |
317 TEST_F(PermissionRequestHandlerTest, TestResourcesNotPreauthorized) { | |
318 handler()->PreauthorizePermission(origin(), resources()); | |
319 | |
320 // Ask the resources which weren't preauthorized. | |
321 scoped_ptr<AwPermissionRequestDelegate> delegate; | |
322 delegate.reset(new TestAwPermissionRequestDelegate( | |
323 origin(), | |
324 AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation, | |
325 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
326 base::Unretained(this)))); | |
327 | |
328 handler()->SendRequest(delegate.Pass()); | |
329 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | |
330 EXPECT_EQ( | |
331 AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation, | |
332 handler()->requests()[0]->GetResources()); | |
333 client()->Deny(); | |
334 EXPECT_FALSE(allowed()); | |
335 } | |
336 | |
337 TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) { | |
338 handler()->PreauthorizePermission(origin(), resources()); | |
339 // Preauthorize another permission. | |
340 GURL origin ("http://a.google.com/a/b"); | |
341 handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation); | |
342 GURL origin_hostname ("http://a.google.com/"); | |
343 scoped_ptr<AwPermissionRequestDelegate> delegate; | |
344 delegate.reset(new TestAwPermissionRequestDelegate( | |
345 origin_hostname, AwPermissionRequest::Geolocation, | |
346 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
347 base::Unretained(this)))); | |
348 handler()->SendRequest(delegate.Pass()); | |
349 EXPECT_TRUE(allowed()); | |
350 EXPECT_EQ(NULL, client()->request()); | |
351 } | |
352 | |
269 } // android_webview | 353 } // android_webview |
OLD | NEW |