| 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 |