Chromium Code Reviews| Index: android_webview/native/permission/permission_request_handler_unittest.cc |
| diff --git a/android_webview/native/permission/permission_request_handler_unittest.cc b/android_webview/native/permission/permission_request_handler_unittest.cc |
| index 2948dd9910a2308d98ad7b0a2ba10fa405aca955..8b27a5714af148ad687045ff67cc3e217e11bc02 100644 |
| --- a/android_webview/native/permission/permission_request_handler_unittest.cc |
| +++ b/android_webview/native/permission/permission_request_handler_unittest.cc |
| @@ -54,6 +54,9 @@ class TestPermissionRequestHandlerClient : |
| int64 resources; |
| }; |
| + TestPermissionRequestHandlerClient() |
| + : request_(NULL) {} |
| + |
| virtual void OnPermissionRequest(AwPermissionRequest* request) OVERRIDE { |
| request_ = request; |
| requested_permission_ = |
| @@ -88,6 +91,12 @@ class TestPermissionRequestHandlerClient : |
| request_ = NULL; |
| } |
| + void Reset() { |
| + request_ = NULL; |
| + requested_permission_ = Permission(); |
| + canceled_permission_ = Permission(); |
| + } |
| + |
| private: |
| AwPermissionRequest* request_; |
| Permission requested_permission_; |
| @@ -266,4 +275,79 @@ TEST_F(PermissionRequestHandlerTest, TestMultiplePermissionRequest) { |
| EXPECT_EQ(resources1, handler()->requests()[0]->GetResources()); |
| } |
| +TEST_F(PermissionRequestHandlerTest, TestPreauthorizePermission) { |
| + handler()->PreauthorizePermission(origin(), resources()); |
| + |
| + // Permission should granted without asking PermissionRequestHandlerClient. |
| + handler()->SendRequest(delegate().Pass()); |
| + EXPECT_TRUE(allowed()); |
| + EXPECT_EQ(NULL, client()->request()); |
| + |
| + // Only ask one preauthorized resource, permission should granted |
| + // without asking PermissionRequestHandlerClient. |
| + scoped_ptr<AwPermissionRequestDelegate> delegate; |
| + delegate.reset(new TestAwPermissionRequestDelegate( |
| + origin(), AwPermissionRequest::AudioCapture, |
| + base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| + base::Unretained(this)))); |
| + client()->Reset(); |
| + handler()->SendRequest(delegate.Pass()); |
| + EXPECT_TRUE(allowed()); |
| + EXPECT_EQ(NULL, client()->request()); |
| +} |
| + |
| +TEST_F(PermissionRequestHandlerTest, TestOriginNotPreauthorized) { |
| + handler()->PreauthorizePermission(origin(), resources()); |
| + |
| + // Ask the origin which wasn't preauthorized. |
| + GURL origin ("http://a.google.com/a/b"); |
| + scoped_ptr<AwPermissionRequestDelegate> delegate; |
| + delegate.reset(new TestAwPermissionRequestDelegate( |
| + 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.
|
| + base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| + base::Unretained(this)))); |
| + handler()->SendRequest(delegate.Pass()); |
| + EXPECT_EQ(origin, handler()->requests()[0]->GetOrigin()); |
| + EXPECT_EQ(AwPermissionRequest::AudioCapture, |
| + handler()->requests()[0]->GetResources()); |
| + client()->Grant(); |
| + EXPECT_TRUE(allowed()); |
| +} |
| + |
| +TEST_F(PermissionRequestHandlerTest, TestResourcesNotPreauthorized) { |
| + handler()->PreauthorizePermission(origin(), resources()); |
| + |
| + // Ask the resources which weren't preauthorized. |
| + scoped_ptr<AwPermissionRequestDelegate> delegate; |
| + delegate.reset(new TestAwPermissionRequestDelegate( |
| + origin(), |
| + AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation, |
| + base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| + base::Unretained(this)))); |
| + |
| + handler()->SendRequest(delegate.Pass()); |
| + EXPECT_EQ(origin(), handler()->requests()[0]->GetOrigin()); |
| + EXPECT_EQ( |
| + AwPermissionRequest::AudioCapture | AwPermissionRequest::Geolocation, |
| + handler()->requests()[0]->GetResources()); |
| + client()->Deny(); |
| + EXPECT_FALSE(allowed()); |
| +} |
| + |
| +TEST_F(PermissionRequestHandlerTest, TestPreauthorizeMultiplePermission) { |
| + handler()->PreauthorizePermission(origin(), resources()); |
| + // Preauthorize another permission. |
| + GURL origin ("http://a.google.com/a/b"); |
| + handler()->PreauthorizePermission(origin, AwPermissionRequest::Geolocation); |
| + GURL origin_hostname ("http://a.google.com/"); |
| + scoped_ptr<AwPermissionRequestDelegate> delegate; |
| + delegate.reset(new TestAwPermissionRequestDelegate( |
| + origin_hostname, AwPermissionRequest::Geolocation, |
| + base::Bind(&PermissionRequestHandlerTest::NotifyRequestResult, |
| + base::Unretained(this)))); |
| + handler()->SendRequest(delegate.Pass()); |
| + EXPECT_TRUE(allowed()); |
| + EXPECT_EQ(NULL, client()->request()); |
| +} |
| + |
| } // android_webview |