Chromium Code Reviews| 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> delegate1; | |
|
benm (inactive)
2014/05/07 17:01:21
Any need for the '1'?
| |
| 289 delegate1.reset(new TestAwPermissionRequestDelegate( | |
| 290 origin(), AwPermissionRequest::AudioCapture, | |
| 291 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
| 292 base::Unretained(this)))); | |
| 293 client()->Reset(); | |
| 294 handler()->SendRequest(delegate1.Pass()); | |
| 295 EXPECT_TRUE(allowed()); | |
| 296 EXPECT_EQ(NULL, client()->request()); | |
| 297 | |
| 298 // Ask the origin which wasn't preauthorized. | |
| 299 GURL origin1 ("http://a.google.com/a/b"); | |
| 300 delegate1.reset(new TestAwPermissionRequestDelegate( | |
| 301 origin1, AwPermissionRequest::AudioCapture, | |
| 302 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
| 303 base::Unretained(this)))); | |
| 304 client()->Reset(); | |
| 305 handler()->SendRequest(delegate1.Pass()); | |
| 306 EXPECT_EQ(origin1, handler()->requests()[0]->GetOrigin()); | |
| 307 EXPECT_EQ(AwPermissionRequest::AudioCapture, | |
| 308 handler()->requests()[0]->GetResources()); | |
| 309 client()->Grant(); | |
| 310 EXPECT_TRUE(allowed()); | |
| 311 | |
| 312 // Ask the resources which weren't preauthorized. | |
|
benm (inactive)
2014/05/07 17:01:21
would it make sense to split this into two test ca
mkosiba (inactive)
2014/05/07 17:25:50
or 4 even?
| |
| 313 delegate1.reset(new TestAwPermissionRequestDelegate( | |
| 314 origin(), | |
| 315 AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation, | |
| 316 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
| 317 base::Unretained(this)))); | |
| 318 client()->Reset(); | |
| 319 handler()->SendRequest(delegate1.Pass()); | |
| 320 EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); | |
| 321 EXPECT_EQ( | |
| 322 AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation, | |
| 323 handler()->requests()[0]->GetResources()); | |
| 324 client()->Deny(); | |
| 325 EXPECT_FALSE(allowed()); | |
| 326 | |
| 327 // Preauthorize another permission. | |
| 328 handler()->PreauthorizePermission(origin1, AwPermissionRequest::Geolocation); | |
| 329 GURL origin1_hostname ("http://a.google.com/"); | |
| 330 delegate1.reset(new TestAwPermissionRequestDelegate( | |
| 331 origin1_hostname, AwPermissionRequest::Geolocation, | |
| 332 base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, | |
| 333 base::Unretained(this)))); | |
| 334 client()->Reset(); | |
| 335 handler()->SendRequest(delegate1.Pass()); | |
| 336 EXPECT_TRUE(allowed()); | |
| 337 EXPECT_EQ(NULL, client()->request()); | |
| 338 } | |
| 339 | |
| 269 } // android_webview | 340 } // android_webview |
| OLD | NEW |