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 int64 requested_resources = AwPermissionRequest::AudioCapture; |
| 306 delegate.reset(new TestAwPermissionRequestDelegate( |
| 307 origin, requested_resources, |
| 308 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| 309 base::Unretained(this)))); |
| 310 handler()->SendRequest(delegate.Pass()); |
| 311 EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin()); |
| 312 EXPECT_EQ(requested_resources, 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 int64 requested_resources = AwPermissionRequest::AudioCapture |
| 323 | AwPermissionRequest::Geolocation; |
| 324 delegate.reset(new TestAwPermissionRequestDelegate( |
| 325 origin(), requested_resources, |
| 326 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| 327 base::Unretained(this)))); |
| 328 |
| 329 handler()->SendRequest(delegate.Pass()); |
| 330 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
| 331 EXPECT_EQ(requested_resources, handler()->requests()[0]->GetResources()); |
| 332 client()->Deny(); |
| 333 EXPECT_FALSE(allowed()); |
| 334 } |
| 335 |
| 336 TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) { |
| 337 handler()->PreauthorizePermission(origin(), resources()); |
| 338 // Preauthorize another permission. |
| 339 GURL origin ("http://a.google.com/a/b"); |
| 340 handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation); |
| 341 GURL origin_hostname ("http://a.google.com/"); |
| 342 scoped_ptr<AwPermissionRequestDelegate> delegate; |
| 343 delegate.reset(new TestAwPermissionRequestDelegate( |
| 344 origin_hostname, AwPermissionRequest::Geolocation, |
| 345 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| 346 base::Unretained(this)))); |
| 347 handler()->SendRequest(delegate.Pass()); |
| 348 EXPECT_TRUE(allowed()); |
| 349 EXPECT_EQ(NULL, client()->request()); |
| 350 } |
| 351 |
269 } // android_webview | 352 } // android_webview |
OLD | NEW |