| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/json/json_file_value_serializer.h" | 6 #include "base/json/json_file_value_serializer.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 EXPECT_EQ(storage_name, info->GetByID( | 181 EXPECT_EQ(storage_name, info->GetByID( |
| 182 APIPermission::kUnlimitedStorage)->name()); | 182 APIPermission::kUnlimitedStorage)->name()); |
| 183 EXPECT_EQ(APIPermission::kUnlimitedStorage, | 183 EXPECT_EQ(APIPermission::kUnlimitedStorage, |
| 184 info->GetByName("unlimitedStorage")->id()); | 184 info->GetByName("unlimitedStorage")->id()); |
| 185 EXPECT_EQ(APIPermission::kUnlimitedStorage, | 185 EXPECT_EQ(APIPermission::kUnlimitedStorage, |
| 186 info->GetByName("unlimited_storage")->id()); | 186 info->GetByName("unlimited_storage")->id()); |
| 187 } | 187 } |
| 188 | 188 |
| 189 TEST(PermissionsTest, EffectiveHostPermissions) { | 189 TEST(PermissionsTest, EffectiveHostPermissions) { |
| 190 scoped_refptr<Extension> extension; | 190 scoped_refptr<Extension> extension; |
| 191 scoped_refptr<const PermissionSet> permissions; | |
| 192 | 191 |
| 193 extension = LoadManifest("effective_host_permissions", "empty.json"); | 192 extension = LoadManifest("effective_host_permissions", "empty.json"); |
| 194 permissions = extension->permissions_data()->active_permissions(); | 193 const PermissionSet* permissions = |
| 194 extension->permissions_data()->active_permissions(); |
| 195 EXPECT_EQ(0u, | 195 EXPECT_EQ(0u, |
| 196 extension->permissions_data() | 196 extension->permissions_data() |
| 197 ->GetEffectiveHostPermissions() | 197 ->GetEffectiveHostPermissions() |
| 198 .patterns() | 198 .patterns() |
| 199 .size()); | 199 .size()); |
| 200 EXPECT_FALSE( | 200 EXPECT_FALSE( |
| 201 permissions->HasEffectiveAccessToURL(GURL("http://www.google.com"))); | 201 permissions->HasEffectiveAccessToURL(GURL("http://www.google.com"))); |
| 202 EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts()); | 202 EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts()); |
| 203 | 203 |
| 204 extension = LoadManifest("effective_host_permissions", "one_host.json"); | 204 extension = LoadManifest("effective_host_permissions", "one_host.json"); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 TEST(PermissionsTest, ExplicitAccessToOrigin) { | 269 TEST(PermissionsTest, ExplicitAccessToOrigin) { |
| 270 APIPermissionSet apis; | 270 APIPermissionSet apis; |
| 271 ManifestPermissionSet manifest_permissions; | 271 ManifestPermissionSet manifest_permissions; |
| 272 URLPatternSet explicit_hosts; | 272 URLPatternSet explicit_hosts; |
| 273 URLPatternSet scriptable_hosts; | 273 URLPatternSet scriptable_hosts; |
| 274 | 274 |
| 275 AddPattern(&explicit_hosts, "http://*.google.com/*"); | 275 AddPattern(&explicit_hosts, "http://*.google.com/*"); |
| 276 // The explicit host paths should get set to /*. | 276 // The explicit host paths should get set to /*. |
| 277 AddPattern(&explicit_hosts, "http://www.example.com/a/particular/path/*"); | 277 AddPattern(&explicit_hosts, "http://www.example.com/a/particular/path/*"); |
| 278 | 278 |
| 279 scoped_refptr<const PermissionSet> perm_set = new PermissionSet( | 279 PermissionSet perm_set(apis, manifest_permissions, explicit_hosts, |
| 280 apis, manifest_permissions, explicit_hosts, scriptable_hosts); | 280 scriptable_hosts); |
| 281 ASSERT_TRUE(perm_set->HasExplicitAccessToOrigin( | 281 ASSERT_TRUE( |
| 282 GURL("http://www.google.com/"))); | 282 perm_set.HasExplicitAccessToOrigin(GURL("http://www.google.com/"))); |
| 283 ASSERT_TRUE(perm_set->HasExplicitAccessToOrigin( | 283 ASSERT_TRUE( |
| 284 GURL("http://test.google.com/"))); | 284 perm_set.HasExplicitAccessToOrigin(GURL("http://test.google.com/"))); |
| 285 ASSERT_TRUE(perm_set->HasExplicitAccessToOrigin( | 285 ASSERT_TRUE( |
| 286 GURL("http://www.example.com"))); | 286 perm_set.HasExplicitAccessToOrigin(GURL("http://www.example.com"))); |
| 287 ASSERT_TRUE(perm_set->HasEffectiveAccessToURL( | 287 ASSERT_TRUE(perm_set.HasEffectiveAccessToURL(GURL("http://www.example.com"))); |
| 288 GURL("http://www.example.com"))); | 288 ASSERT_FALSE( |
| 289 ASSERT_FALSE(perm_set->HasExplicitAccessToOrigin( | 289 perm_set.HasExplicitAccessToOrigin(GURL("http://test.example.com"))); |
| 290 GURL("http://test.example.com"))); | |
| 291 } | 290 } |
| 292 | 291 |
| 293 TEST(PermissionsTest, CreateUnion) { | 292 TEST(PermissionsTest, CreateUnion) { |
| 294 APIPermission* permission = NULL; | 293 APIPermission* permission = NULL; |
| 295 | 294 |
| 296 ManifestPermissionSet manifest_permissions; | 295 ManifestPermissionSet manifest_permissions; |
| 297 APIPermissionSet apis1; | 296 APIPermissionSet apis1; |
| 298 APIPermissionSet apis2; | 297 APIPermissionSet apis2; |
| 299 APIPermissionSet expected_apis; | 298 APIPermissionSet expected_apis; |
| 300 | 299 |
| 301 URLPatternSet explicit_hosts1; | 300 URLPatternSet explicit_hosts1; |
| 302 URLPatternSet explicit_hosts2; | 301 URLPatternSet explicit_hosts2; |
| 303 URLPatternSet expected_explicit_hosts; | 302 URLPatternSet expected_explicit_hosts; |
| 304 | 303 |
| 305 URLPatternSet scriptable_hosts1; | 304 URLPatternSet scriptable_hosts1; |
| 306 URLPatternSet scriptable_hosts2; | 305 URLPatternSet scriptable_hosts2; |
| 307 URLPatternSet expected_scriptable_hosts; | 306 URLPatternSet expected_scriptable_hosts; |
| 308 | 307 |
| 309 URLPatternSet effective_hosts; | 308 URLPatternSet effective_hosts; |
| 310 | 309 |
| 311 scoped_refptr<const PermissionSet> set1; | 310 scoped_ptr<const PermissionSet> set1; |
| 312 scoped_refptr<const PermissionSet> set2; | 311 scoped_ptr<const PermissionSet> set2; |
| 313 scoped_refptr<const PermissionSet> union_set; | 312 scoped_ptr<const PermissionSet> union_set; |
| 314 | 313 |
| 315 const APIPermissionInfo* permission_info = | 314 const APIPermissionInfo* permission_info = |
| 316 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 315 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
| 317 permission = permission_info->CreateAPIPermission(); | 316 permission = permission_info->CreateAPIPermission(); |
| 318 { | 317 { |
| 319 scoped_ptr<base::ListValue> value(new base::ListValue()); | 318 scoped_ptr<base::ListValue> value(new base::ListValue()); |
| 320 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 319 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
| 321 value->Append(new base::StringValue("udp-bind::8080")); | 320 value->Append(new base::StringValue("udp-bind::8080")); |
| 322 value->Append(new base::StringValue("udp-send-to::8888")); | 321 value->Append(new base::StringValue("udp-send-to::8888")); |
| 323 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 322 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
| 324 } | 323 } |
| 325 | 324 |
| 326 // Union with an empty set. | 325 // Union with an empty set. |
| 327 apis1.insert(APIPermission::kTab); | 326 apis1.insert(APIPermission::kTab); |
| 328 apis1.insert(APIPermission::kBackground); | 327 apis1.insert(APIPermission::kBackground); |
| 329 apis1.insert(permission->Clone()); | 328 apis1.insert(permission->Clone()); |
| 330 expected_apis.insert(APIPermission::kTab); | 329 expected_apis.insert(APIPermission::kTab); |
| 331 expected_apis.insert(APIPermission::kBackground); | 330 expected_apis.insert(APIPermission::kBackground); |
| 332 expected_apis.insert(permission); | 331 expected_apis.insert(permission); |
| 333 | 332 |
| 334 AddPattern(&explicit_hosts1, "http://*.google.com/*"); | 333 AddPattern(&explicit_hosts1, "http://*.google.com/*"); |
| 335 AddPattern(&expected_explicit_hosts, "http://*.google.com/*"); | 334 AddPattern(&expected_explicit_hosts, "http://*.google.com/*"); |
| 336 AddPattern(&effective_hosts, "http://*.google.com/*"); | 335 AddPattern(&effective_hosts, "http://*.google.com/*"); |
| 337 | 336 |
| 338 set1 = new PermissionSet(apis1, manifest_permissions, | 337 set1.reset(new PermissionSet(apis1, manifest_permissions, explicit_hosts1, |
| 339 explicit_hosts1, scriptable_hosts1); | 338 scriptable_hosts1)); |
| 340 set2 = new PermissionSet(apis2, manifest_permissions, | 339 set2.reset(new PermissionSet(apis2, manifest_permissions, explicit_hosts2, |
| 341 explicit_hosts2, scriptable_hosts2); | 340 scriptable_hosts2)); |
| 342 union_set = PermissionSet::CreateUnion(*set1, *set2); | 341 union_set = PermissionSet::CreateUnion(*set1, *set2); |
| 343 EXPECT_TRUE(set1->Contains(*set2.get())); | 342 EXPECT_TRUE(set1->Contains(*set2.get())); |
| 344 EXPECT_TRUE(set1->Contains(*union_set.get())); | 343 EXPECT_TRUE(set1->Contains(*union_set.get())); |
| 345 EXPECT_FALSE(set2->Contains(*set1.get())); | 344 EXPECT_FALSE(set2->Contains(*set1.get())); |
| 346 EXPECT_FALSE(set2->Contains(*union_set.get())); | 345 EXPECT_FALSE(set2->Contains(*union_set.get())); |
| 347 EXPECT_TRUE(union_set->Contains(*set1.get())); | 346 EXPECT_TRUE(union_set->Contains(*set1.get())); |
| 348 EXPECT_TRUE(union_set->Contains(*set2.get())); | 347 EXPECT_TRUE(union_set->Contains(*set2.get())); |
| 349 | 348 |
| 350 EXPECT_FALSE(union_set->HasEffectiveFullAccess()); | 349 EXPECT_FALSE(union_set->HasEffectiveFullAccess()); |
| 351 EXPECT_EQ(expected_apis, union_set->apis()); | 350 EXPECT_EQ(expected_apis, union_set->apis()); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 expected_apis.insert(permission); | 385 expected_apis.insert(permission); |
| 387 | 386 |
| 388 AddPattern(&explicit_hosts2, "http://*.example.com/*"); | 387 AddPattern(&explicit_hosts2, "http://*.example.com/*"); |
| 389 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); | 388 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); |
| 390 AddPattern(&expected_explicit_hosts, "http://*.example.com/*"); | 389 AddPattern(&expected_explicit_hosts, "http://*.example.com/*"); |
| 391 AddPattern(&expected_scriptable_hosts, "http://*.google.com/*"); | 390 AddPattern(&expected_scriptable_hosts, "http://*.google.com/*"); |
| 392 | 391 |
| 393 effective_hosts = | 392 effective_hosts = |
| 394 URLPatternSet::CreateUnion(explicit_hosts2, scriptable_hosts2); | 393 URLPatternSet::CreateUnion(explicit_hosts2, scriptable_hosts2); |
| 395 | 394 |
| 396 set2 = new PermissionSet(apis2, manifest_permissions, | 395 set2.reset(new PermissionSet(apis2, manifest_permissions, explicit_hosts2, |
| 397 explicit_hosts2, scriptable_hosts2); | 396 scriptable_hosts2)); |
| 398 union_set = PermissionSet::CreateUnion(*set1, *set2); | 397 union_set = PermissionSet::CreateUnion(*set1, *set2); |
| 399 | 398 |
| 400 EXPECT_FALSE(set1->Contains(*set2.get())); | 399 EXPECT_FALSE(set1->Contains(*set2.get())); |
| 401 EXPECT_FALSE(set1->Contains(*union_set.get())); | 400 EXPECT_FALSE(set1->Contains(*union_set.get())); |
| 402 EXPECT_FALSE(set2->Contains(*set1.get())); | 401 EXPECT_FALSE(set2->Contains(*set1.get())); |
| 403 EXPECT_FALSE(set2->Contains(*union_set.get())); | 402 EXPECT_FALSE(set2->Contains(*union_set.get())); |
| 404 EXPECT_TRUE(union_set->Contains(*set1.get())); | 403 EXPECT_TRUE(union_set->Contains(*set1.get())); |
| 405 EXPECT_TRUE(union_set->Contains(*set2.get())); | 404 EXPECT_TRUE(union_set->Contains(*set2.get())); |
| 406 | 405 |
| 407 EXPECT_TRUE(union_set->HasEffectiveFullAccess()); | 406 EXPECT_TRUE(union_set->HasEffectiveFullAccess()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 423 URLPatternSet explicit_hosts1; | 422 URLPatternSet explicit_hosts1; |
| 424 URLPatternSet explicit_hosts2; | 423 URLPatternSet explicit_hosts2; |
| 425 URLPatternSet expected_explicit_hosts; | 424 URLPatternSet expected_explicit_hosts; |
| 426 | 425 |
| 427 URLPatternSet scriptable_hosts1; | 426 URLPatternSet scriptable_hosts1; |
| 428 URLPatternSet scriptable_hosts2; | 427 URLPatternSet scriptable_hosts2; |
| 429 URLPatternSet expected_scriptable_hosts; | 428 URLPatternSet expected_scriptable_hosts; |
| 430 | 429 |
| 431 URLPatternSet effective_hosts; | 430 URLPatternSet effective_hosts; |
| 432 | 431 |
| 433 scoped_refptr<const PermissionSet> set1; | 432 scoped_ptr<const PermissionSet> set1; |
| 434 scoped_refptr<const PermissionSet> set2; | 433 scoped_ptr<const PermissionSet> set2; |
| 435 scoped_refptr<const PermissionSet> new_set; | 434 scoped_ptr<const PermissionSet> new_set; |
| 436 | 435 |
| 437 const APIPermissionInfo* permission_info = | 436 const APIPermissionInfo* permission_info = |
| 438 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 437 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
| 439 | 438 |
| 440 // Intersection with an empty set. | 439 // Intersection with an empty set. |
| 441 apis1.insert(APIPermission::kTab); | 440 apis1.insert(APIPermission::kTab); |
| 442 apis1.insert(APIPermission::kBackground); | 441 apis1.insert(APIPermission::kBackground); |
| 443 permission = permission_info->CreateAPIPermission(); | 442 permission = permission_info->CreateAPIPermission(); |
| 444 { | 443 { |
| 445 scoped_ptr<base::ListValue> value(new base::ListValue()); | 444 scoped_ptr<base::ListValue> value(new base::ListValue()); |
| 446 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 445 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
| 447 value->Append(new base::StringValue("udp-bind::8080")); | 446 value->Append(new base::StringValue("udp-bind::8080")); |
| 448 value->Append(new base::StringValue("udp-send-to::8888")); | 447 value->Append(new base::StringValue("udp-send-to::8888")); |
| 449 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 448 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
| 450 } | 449 } |
| 451 apis1.insert(permission); | 450 apis1.insert(permission); |
| 452 | 451 |
| 453 AddPattern(&explicit_hosts1, "http://*.google.com/*"); | 452 AddPattern(&explicit_hosts1, "http://*.google.com/*"); |
| 454 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*"); | 453 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*"); |
| 455 | 454 |
| 456 set1 = new PermissionSet(apis1, manifest_permissions, | 455 set1.reset(new PermissionSet(apis1, manifest_permissions, explicit_hosts1, |
| 457 explicit_hosts1, scriptable_hosts1); | 456 scriptable_hosts1)); |
| 458 set2 = new PermissionSet(apis2, manifest_permissions, | 457 set2.reset(new PermissionSet(apis2, manifest_permissions, explicit_hosts2, |
| 459 explicit_hosts2, scriptable_hosts2); | 458 scriptable_hosts2)); |
| 460 new_set = PermissionSet::CreateIntersection(*set1, *set2); | 459 new_set = PermissionSet::CreateIntersection(*set1, *set2); |
| 461 EXPECT_TRUE(set1->Contains(*new_set.get())); | 460 EXPECT_TRUE(set1->Contains(*new_set.get())); |
| 462 EXPECT_TRUE(set2->Contains(*new_set.get())); | 461 EXPECT_TRUE(set2->Contains(*new_set.get())); |
| 463 EXPECT_TRUE(set1->Contains(*set2.get())); | 462 EXPECT_TRUE(set1->Contains(*set2.get())); |
| 464 EXPECT_FALSE(set2->Contains(*set1.get())); | 463 EXPECT_FALSE(set2->Contains(*set1.get())); |
| 465 EXPECT_FALSE(new_set->Contains(*set1.get())); | 464 EXPECT_FALSE(new_set->Contains(*set1.get())); |
| 466 EXPECT_TRUE(new_set->Contains(*set2.get())); | 465 EXPECT_TRUE(new_set->Contains(*set2.get())); |
| 467 | 466 |
| 468 EXPECT_TRUE(new_set->IsEmpty()); | 467 EXPECT_TRUE(new_set->IsEmpty()); |
| 469 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); | 468 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 498 expected_apis.insert(permission); | 497 expected_apis.insert(permission); |
| 499 | 498 |
| 500 AddPattern(&explicit_hosts2, "http://*.example.com/*"); | 499 AddPattern(&explicit_hosts2, "http://*.example.com/*"); |
| 501 AddPattern(&explicit_hosts2, "http://*.google.com/*"); | 500 AddPattern(&explicit_hosts2, "http://*.google.com/*"); |
| 502 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); | 501 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); |
| 503 AddPattern(&expected_explicit_hosts, "http://*.google.com/*"); | 502 AddPattern(&expected_explicit_hosts, "http://*.google.com/*"); |
| 504 | 503 |
| 505 effective_hosts.ClearPatterns(); | 504 effective_hosts.ClearPatterns(); |
| 506 AddPattern(&effective_hosts, "http://*.google.com/*"); | 505 AddPattern(&effective_hosts, "http://*.google.com/*"); |
| 507 | 506 |
| 508 set2 = new PermissionSet(apis2, manifest_permissions, | 507 set2.reset(new PermissionSet(apis2, manifest_permissions, explicit_hosts2, |
| 509 explicit_hosts2, scriptable_hosts2); | 508 scriptable_hosts2)); |
| 510 new_set = PermissionSet::CreateIntersection(*set1, *set2); | 509 new_set = PermissionSet::CreateIntersection(*set1, *set2); |
| 511 | 510 |
| 512 EXPECT_TRUE(set1->Contains(*new_set.get())); | 511 EXPECT_TRUE(set1->Contains(*new_set.get())); |
| 513 EXPECT_TRUE(set2->Contains(*new_set.get())); | 512 EXPECT_TRUE(set2->Contains(*new_set.get())); |
| 514 EXPECT_FALSE(set1->Contains(*set2.get())); | 513 EXPECT_FALSE(set1->Contains(*set2.get())); |
| 515 EXPECT_FALSE(set2->Contains(*set1.get())); | 514 EXPECT_FALSE(set2->Contains(*set1.get())); |
| 516 EXPECT_FALSE(new_set->Contains(*set1.get())); | 515 EXPECT_FALSE(new_set->Contains(*set1.get())); |
| 517 EXPECT_FALSE(new_set->Contains(*set2.get())); | 516 EXPECT_FALSE(new_set->Contains(*set2.get())); |
| 518 | 517 |
| 519 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); | 518 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 535 URLPatternSet explicit_hosts1; | 534 URLPatternSet explicit_hosts1; |
| 536 URLPatternSet explicit_hosts2; | 535 URLPatternSet explicit_hosts2; |
| 537 URLPatternSet expected_explicit_hosts; | 536 URLPatternSet expected_explicit_hosts; |
| 538 | 537 |
| 539 URLPatternSet scriptable_hosts1; | 538 URLPatternSet scriptable_hosts1; |
| 540 URLPatternSet scriptable_hosts2; | 539 URLPatternSet scriptable_hosts2; |
| 541 URLPatternSet expected_scriptable_hosts; | 540 URLPatternSet expected_scriptable_hosts; |
| 542 | 541 |
| 543 URLPatternSet effective_hosts; | 542 URLPatternSet effective_hosts; |
| 544 | 543 |
| 545 scoped_refptr<const PermissionSet> set1; | 544 scoped_ptr<const PermissionSet> set1; |
| 546 scoped_refptr<const PermissionSet> set2; | 545 scoped_ptr<const PermissionSet> set2; |
| 547 scoped_refptr<const PermissionSet> new_set; | 546 scoped_ptr<const PermissionSet> new_set; |
| 548 | 547 |
| 549 const APIPermissionInfo* permission_info = | 548 const APIPermissionInfo* permission_info = |
| 550 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 549 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
| 551 | 550 |
| 552 // Difference with an empty set. | 551 // Difference with an empty set. |
| 553 apis1.insert(APIPermission::kTab); | 552 apis1.insert(APIPermission::kTab); |
| 554 apis1.insert(APIPermission::kBackground); | 553 apis1.insert(APIPermission::kBackground); |
| 555 permission = permission_info->CreateAPIPermission(); | 554 permission = permission_info->CreateAPIPermission(); |
| 556 { | 555 { |
| 557 scoped_ptr<base::ListValue> value(new base::ListValue()); | 556 scoped_ptr<base::ListValue> value(new base::ListValue()); |
| 558 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 557 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
| 559 value->Append(new base::StringValue("udp-bind::8080")); | 558 value->Append(new base::StringValue("udp-bind::8080")); |
| 560 value->Append(new base::StringValue("udp-send-to::8888")); | 559 value->Append(new base::StringValue("udp-send-to::8888")); |
| 561 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 560 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
| 562 } | 561 } |
| 563 apis1.insert(permission); | 562 apis1.insert(permission); |
| 564 | 563 |
| 565 AddPattern(&explicit_hosts1, "http://*.google.com/*"); | 564 AddPattern(&explicit_hosts1, "http://*.google.com/*"); |
| 566 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*"); | 565 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*"); |
| 567 | 566 |
| 568 set1 = new PermissionSet(apis1, manifest_permissions, | 567 set1.reset(new PermissionSet(apis1, manifest_permissions, explicit_hosts1, |
| 569 explicit_hosts1, scriptable_hosts1); | 568 scriptable_hosts1)); |
| 570 set2 = new PermissionSet(apis2, manifest_permissions, | 569 set2.reset(new PermissionSet(apis2, manifest_permissions, explicit_hosts2, |
| 571 explicit_hosts2, scriptable_hosts2); | 570 scriptable_hosts2)); |
| 572 new_set = PermissionSet::CreateDifference(*set1, *set2); | 571 new_set = PermissionSet::CreateDifference(*set1, *set2); |
| 573 EXPECT_EQ(*set1.get(), *new_set.get()); | 572 EXPECT_EQ(*set1.get(), *new_set.get()); |
| 574 | 573 |
| 575 // Now use a real second set. | 574 // Now use a real second set. |
| 576 apis2.insert(APIPermission::kTab); | 575 apis2.insert(APIPermission::kTab); |
| 577 apis2.insert(APIPermission::kProxy); | 576 apis2.insert(APIPermission::kProxy); |
| 578 apis2.insert(APIPermission::kClipboardWrite); | 577 apis2.insert(APIPermission::kClipboardWrite); |
| 579 apis2.insert(APIPermission::kPlugin); | 578 apis2.insert(APIPermission::kPlugin); |
| 580 permission = permission_info->CreateAPIPermission(); | 579 permission = permission_info->CreateAPIPermission(); |
| 581 { | 580 { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 597 expected_apis.insert(permission); | 596 expected_apis.insert(permission); |
| 598 | 597 |
| 599 AddPattern(&explicit_hosts2, "http://*.example.com/*"); | 598 AddPattern(&explicit_hosts2, "http://*.example.com/*"); |
| 600 AddPattern(&explicit_hosts2, "http://*.google.com/*"); | 599 AddPattern(&explicit_hosts2, "http://*.google.com/*"); |
| 601 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); | 600 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); |
| 602 AddPattern(&expected_scriptable_hosts, "http://www.reddit.com/*"); | 601 AddPattern(&expected_scriptable_hosts, "http://www.reddit.com/*"); |
| 603 | 602 |
| 604 effective_hosts.ClearPatterns(); | 603 effective_hosts.ClearPatterns(); |
| 605 AddPattern(&effective_hosts, "http://www.reddit.com/*"); | 604 AddPattern(&effective_hosts, "http://www.reddit.com/*"); |
| 606 | 605 |
| 607 set2 = new PermissionSet(apis2, manifest_permissions, | 606 set2.reset(new PermissionSet(apis2, manifest_permissions, explicit_hosts2, |
| 608 explicit_hosts2, scriptable_hosts2); | 607 scriptable_hosts2)); |
| 609 new_set = PermissionSet::CreateDifference(*set1, *set2); | 608 new_set = PermissionSet::CreateDifference(*set1, *set2); |
| 610 | 609 |
| 611 EXPECT_TRUE(set1->Contains(*new_set.get())); | 610 EXPECT_TRUE(set1->Contains(*new_set.get())); |
| 612 EXPECT_FALSE(set2->Contains(*new_set.get())); | 611 EXPECT_FALSE(set2->Contains(*new_set.get())); |
| 613 | 612 |
| 614 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); | 613 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); |
| 615 EXPECT_FALSE(new_set->HasEffectiveAccessToAllHosts()); | 614 EXPECT_FALSE(new_set->HasEffectiveAccessToAllHosts()); |
| 616 EXPECT_EQ(expected_apis, new_set->apis()); | 615 EXPECT_EQ(expected_apis, new_set->apis()); |
| 617 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts()); | 616 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts()); |
| 618 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts()); | 617 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 LoadManifest("allow_silent_upgrade", | 669 LoadManifest("allow_silent_upgrade", |
| 671 std::string(kTests[i].base_name) + "_old.json")); | 670 std::string(kTests[i].base_name) + "_old.json")); |
| 672 scoped_refptr<Extension> new_extension( | 671 scoped_refptr<Extension> new_extension( |
| 673 LoadManifest("allow_silent_upgrade", | 672 LoadManifest("allow_silent_upgrade", |
| 674 std::string(kTests[i].base_name) + "_new.json")); | 673 std::string(kTests[i].base_name) + "_new.json")); |
| 675 | 674 |
| 676 EXPECT_TRUE(new_extension.get()) << kTests[i].base_name << "_new.json"; | 675 EXPECT_TRUE(new_extension.get()) << kTests[i].base_name << "_new.json"; |
| 677 if (!new_extension.get()) | 676 if (!new_extension.get()) |
| 678 continue; | 677 continue; |
| 679 | 678 |
| 680 scoped_refptr<const PermissionSet> old_p( | 679 const PermissionSet* old_p = |
| 681 old_extension->permissions_data()->active_permissions()); | 680 old_extension->permissions_data()->active_permissions(); |
| 682 scoped_refptr<const PermissionSet> new_p( | 681 const PermissionSet* new_p = |
| 683 new_extension->permissions_data()->active_permissions()); | 682 new_extension->permissions_data()->active_permissions(); |
| 684 Manifest::Type extension_type = old_extension->GetType(); | 683 Manifest::Type extension_type = old_extension->GetType(); |
| 685 | 684 |
| 686 bool increased = PermissionMessageProvider::Get()->IsPrivilegeIncrease( | 685 bool increased = PermissionMessageProvider::Get()->IsPrivilegeIncrease( |
| 687 old_p.get(), new_p.get(), extension_type); | 686 old_p, new_p, extension_type); |
| 688 EXPECT_EQ(kTests[i].expect_increase, increased) << kTests[i].base_name; | 687 EXPECT_EQ(kTests[i].expect_increase, increased) << kTests[i].base_name; |
| 689 } | 688 } |
| 690 } | 689 } |
| 691 | 690 |
| 692 TEST(PermissionsTest, PermissionMessages) { | 691 TEST(PermissionsTest, PermissionMessages) { |
| 693 // Ensure that all permissions that needs to show install UI actually have | 692 // Ensure that all permissions that needs to show install UI actually have |
| 694 // strings associated with them. | 693 // strings associated with them. |
| 695 APIPermissionSet skip; | 694 APIPermissionSet skip; |
| 696 | 695 |
| 697 // These are considered "nuisance" or "trivial" permissions that don't need | 696 // These are considered "nuisance" or "trivial" permissions that don't need |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 bool has_message = !provider->GetPermissionMessages(id).empty(); | 856 bool has_message = !provider->GetPermissionMessages(id).empty(); |
| 858 bool should_have_message = !skip.count(i->id()); | 857 bool should_have_message = !skip.count(i->id()); |
| 859 EXPECT_EQ(should_have_message, has_message) << permission_info->name(); | 858 EXPECT_EQ(should_have_message, has_message) << permission_info->name(); |
| 860 } | 859 } |
| 861 } | 860 } |
| 862 | 861 |
| 863 TEST(PermissionsTest, FileSystemPermissionMessages) { | 862 TEST(PermissionsTest, FileSystemPermissionMessages) { |
| 864 APIPermissionSet api_permissions; | 863 APIPermissionSet api_permissions; |
| 865 api_permissions.insert(APIPermission::kFileSystemWrite); | 864 api_permissions.insert(APIPermission::kFileSystemWrite); |
| 866 api_permissions.insert(APIPermission::kFileSystemDirectory); | 865 api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 867 scoped_refptr<const PermissionSet> permissions( | 866 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 868 new PermissionSet(api_permissions, ManifestPermissionSet(), | 867 URLPatternSet(), URLPatternSet()); |
| 869 URLPatternSet(), URLPatternSet())); | 868 EXPECT_TRUE( |
| 870 EXPECT_TRUE(PermissionSetProducesMessage( | 869 PermissionSetProducesMessage(&permissions, Manifest::TYPE_PLATFORM_APP, |
| 871 permissions.get(), Manifest::TYPE_PLATFORM_APP, | 870 MakePermissionIDSet(api_permissions))); |
| 872 MakePermissionIDSet(api_permissions))); | |
| 873 } | 871 } |
| 874 | 872 |
| 875 TEST(PermissionsTest, HiddenFileSystemPermissionMessages) { | 873 TEST(PermissionsTest, HiddenFileSystemPermissionMessages) { |
| 876 APIPermissionSet api_permissions; | 874 APIPermissionSet api_permissions; |
| 877 api_permissions.insert(APIPermission::kFileSystemWrite); | 875 api_permissions.insert(APIPermission::kFileSystemWrite); |
| 878 api_permissions.insert(APIPermission::kFileSystemDirectory); | 876 api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 879 scoped_refptr<const PermissionSet> permissions( | 877 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 880 new PermissionSet(api_permissions, ManifestPermissionSet(), | 878 URLPatternSet(), URLPatternSet()); |
| 881 URLPatternSet(), URLPatternSet())); | 879 EXPECT_TRUE( |
| 882 EXPECT_TRUE(PermissionSetProducesMessage( | 880 PermissionSetProducesMessage(&permissions, Manifest::TYPE_PLATFORM_APP, |
| 883 permissions.get(), Manifest::TYPE_PLATFORM_APP, | 881 MakePermissionIDSet(api_permissions))); |
| 884 MakePermissionIDSet(api_permissions))); | |
| 885 } | 882 } |
| 886 | 883 |
| 887 TEST(PermissionsTest, SuppressedPermissionMessages) { | 884 TEST(PermissionsTest, SuppressedPermissionMessages) { |
| 888 { | 885 { |
| 889 // Tabs warning suppresses favicon warning. | 886 // Tabs warning suppresses favicon warning. |
| 890 APIPermissionSet api_permissions; | 887 APIPermissionSet api_permissions; |
| 891 api_permissions.insert(APIPermission::kTab); | 888 api_permissions.insert(APIPermission::kTab); |
| 892 URLPatternSet hosts; | 889 URLPatternSet hosts; |
| 893 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, | 890 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, |
| 894 "chrome://favicon/")); | 891 "chrome://favicon/")); |
| 895 scoped_refptr<const PermissionSet> permissions(new PermissionSet( | 892 PermissionSet permissions(api_permissions, ManifestPermissionSet(), hosts, |
| 896 api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); | 893 URLPatternSet()); |
| 897 EXPECT_TRUE(PermissionSetProducesMessage( | 894 EXPECT_TRUE(PermissionSetProducesMessage( |
| 898 permissions.get(), Manifest::TYPE_EXTENSION, | 895 &permissions, Manifest::TYPE_EXTENSION, |
| 899 MakePermissionIDSet(APIPermission::kTab, APIPermission::kFavicon))); | 896 MakePermissionIDSet(APIPermission::kTab, APIPermission::kFavicon))); |
| 900 } | 897 } |
| 901 { | 898 { |
| 902 // History warning suppresses favicon warning. | 899 // History warning suppresses favicon warning. |
| 903 APIPermissionSet api_permissions; | 900 APIPermissionSet api_permissions; |
| 904 api_permissions.insert(APIPermission::kHistory); | 901 api_permissions.insert(APIPermission::kHistory); |
| 905 URLPatternSet hosts; | 902 URLPatternSet hosts; |
| 906 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, | 903 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, |
| 907 "chrome://favicon/")); | 904 "chrome://favicon/")); |
| 908 scoped_refptr<const PermissionSet> permissions(new PermissionSet( | 905 PermissionSet permissions(api_permissions, ManifestPermissionSet(), hosts, |
| 909 api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); | 906 URLPatternSet()); |
| 910 EXPECT_TRUE(PermissionSetProducesMessage( | 907 EXPECT_TRUE(PermissionSetProducesMessage( |
| 911 permissions.get(), Manifest::TYPE_EXTENSION, | 908 &permissions, Manifest::TYPE_EXTENSION, |
| 912 MakePermissionIDSet(APIPermission::kHistory, APIPermission::kFavicon))); | 909 MakePermissionIDSet(APIPermission::kHistory, APIPermission::kFavicon))); |
| 913 } | 910 } |
| 914 { | 911 { |
| 915 // All sites warning suppresses tabs warning. | 912 // All sites warning suppresses tabs warning. |
| 916 APIPermissionSet api_permissions; | 913 APIPermissionSet api_permissions; |
| 917 api_permissions.insert(APIPermission::kTab); | 914 api_permissions.insert(APIPermission::kTab); |
| 918 URLPatternSet hosts; | 915 URLPatternSet hosts; |
| 919 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); | 916 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); |
| 920 scoped_refptr<const PermissionSet> permissions(new PermissionSet( | 917 PermissionSet permissions(api_permissions, ManifestPermissionSet(), hosts, |
| 921 api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); | 918 URLPatternSet()); |
| 922 EXPECT_TRUE(PermissionSetProducesMessage( | 919 EXPECT_TRUE(PermissionSetProducesMessage( |
| 923 permissions.get(), Manifest::TYPE_EXTENSION, | 920 &permissions, Manifest::TYPE_EXTENSION, |
| 924 MakePermissionIDSet(APIPermission::kHostsAll, APIPermission::kTab))); | 921 MakePermissionIDSet(APIPermission::kHostsAll, APIPermission::kTab))); |
| 925 } | 922 } |
| 926 { | 923 { |
| 927 // All sites warning suppresses topSites warning. | 924 // All sites warning suppresses topSites warning. |
| 928 APIPermissionSet api_permissions; | 925 APIPermissionSet api_permissions; |
| 929 api_permissions.insert(APIPermission::kTopSites); | 926 api_permissions.insert(APIPermission::kTopSites); |
| 930 URLPatternSet hosts; | 927 URLPatternSet hosts; |
| 931 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); | 928 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); |
| 932 scoped_refptr<const PermissionSet> permissions(new PermissionSet( | 929 PermissionSet permissions(api_permissions, ManifestPermissionSet(), hosts, |
| 933 api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); | 930 URLPatternSet()); |
| 934 EXPECT_TRUE(PermissionSetProducesMessage( | 931 EXPECT_TRUE(PermissionSetProducesMessage( |
| 935 permissions.get(), Manifest::TYPE_EXTENSION, | 932 &permissions, Manifest::TYPE_EXTENSION, |
| 936 MakePermissionIDSet(APIPermission::kHostsAll, | 933 MakePermissionIDSet(APIPermission::kHostsAll, |
| 937 APIPermission::kTopSites))); | 934 APIPermission::kTopSites))); |
| 938 } | 935 } |
| 939 { | 936 { |
| 940 // All sites warning suppresses declarativeWebRequest warning. | 937 // All sites warning suppresses declarativeWebRequest warning. |
| 941 APIPermissionSet api_permissions; | 938 APIPermissionSet api_permissions; |
| 942 api_permissions.insert(APIPermission::kDeclarativeWebRequest); | 939 api_permissions.insert(APIPermission::kDeclarativeWebRequest); |
| 943 URLPatternSet hosts; | 940 URLPatternSet hosts; |
| 944 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); | 941 hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); |
| 945 scoped_refptr<const PermissionSet> permissions(new PermissionSet( | 942 PermissionSet permissions(api_permissions, ManifestPermissionSet(), hosts, |
| 946 api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); | 943 URLPatternSet()); |
| 947 EXPECT_TRUE(PermissionSetProducesMessage( | 944 EXPECT_TRUE(PermissionSetProducesMessage( |
| 948 permissions.get(), Manifest::TYPE_EXTENSION, | 945 &permissions, Manifest::TYPE_EXTENSION, |
| 949 MakePermissionIDSet(APIPermission::kHostsAll))); | 946 MakePermissionIDSet(APIPermission::kHostsAll))); |
| 950 } | 947 } |
| 951 { | 948 { |
| 952 // BrowsingHistory warning suppresses all history read/write warnings. | 949 // BrowsingHistory warning suppresses all history read/write warnings. |
| 953 APIPermissionSet api_permissions; | 950 APIPermissionSet api_permissions; |
| 954 api_permissions.insert(APIPermission::kHistory); | 951 api_permissions.insert(APIPermission::kHistory); |
| 955 api_permissions.insert(APIPermission::kTab); | 952 api_permissions.insert(APIPermission::kTab); |
| 956 api_permissions.insert(APIPermission::kTopSites); | 953 api_permissions.insert(APIPermission::kTopSites); |
| 957 api_permissions.insert(APIPermission::kProcesses); | 954 api_permissions.insert(APIPermission::kProcesses); |
| 958 api_permissions.insert(APIPermission::kWebNavigation); | 955 api_permissions.insert(APIPermission::kWebNavigation); |
| 959 scoped_refptr<const PermissionSet> permissions( | 956 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 960 new PermissionSet(api_permissions, ManifestPermissionSet(), | 957 URLPatternSet(), URLPatternSet()); |
| 961 URLPatternSet(), URLPatternSet())); | 958 EXPECT_TRUE( |
| 962 EXPECT_TRUE(PermissionSetProducesMessage( | 959 PermissionSetProducesMessage(&permissions, Manifest::TYPE_EXTENSION, |
| 963 permissions.get(), Manifest::TYPE_EXTENSION, | 960 MakePermissionIDSet(api_permissions))); |
| 964 MakePermissionIDSet(api_permissions))); | |
| 965 } | 961 } |
| 966 { | 962 { |
| 967 // Tabs warning suppresses all read-only history warnings. | 963 // Tabs warning suppresses all read-only history warnings. |
| 968 APIPermissionSet api_permissions; | 964 APIPermissionSet api_permissions; |
| 969 api_permissions.insert(APIPermission::kTab); | 965 api_permissions.insert(APIPermission::kTab); |
| 970 api_permissions.insert(APIPermission::kTopSites); | 966 api_permissions.insert(APIPermission::kTopSites); |
| 971 api_permissions.insert(APIPermission::kProcesses); | 967 api_permissions.insert(APIPermission::kProcesses); |
| 972 api_permissions.insert(APIPermission::kWebNavigation); | 968 api_permissions.insert(APIPermission::kWebNavigation); |
| 973 scoped_refptr<const PermissionSet> permissions( | 969 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 974 new PermissionSet(api_permissions, ManifestPermissionSet(), | 970 URLPatternSet(), URLPatternSet()); |
| 975 URLPatternSet(), URLPatternSet())); | 971 EXPECT_TRUE( |
| 976 EXPECT_TRUE(PermissionSetProducesMessage( | 972 PermissionSetProducesMessage(&permissions, Manifest::TYPE_EXTENSION, |
| 977 permissions.get(), Manifest::TYPE_EXTENSION, | 973 MakePermissionIDSet(api_permissions))); |
| 978 MakePermissionIDSet(api_permissions))); | |
| 979 } | 974 } |
| 980 } | 975 } |
| 981 | 976 |
| 982 TEST(PermissionsTest, AccessToDevicesMessages) { | 977 TEST(PermissionsTest, AccessToDevicesMessages) { |
| 983 { | 978 { |
| 984 APIPermissionSet api_permissions; | 979 APIPermissionSet api_permissions; |
| 985 api_permissions.insert(APIPermission::kSerial); | 980 api_permissions.insert(APIPermission::kSerial); |
| 986 scoped_refptr<const PermissionSet> permissions( | 981 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 987 new PermissionSet(api_permissions, ManifestPermissionSet(), | 982 URLPatternSet(), URLPatternSet()); |
| 988 URLPatternSet(), URLPatternSet())); | |
| 989 VerifyOnePermissionMessage( | 983 VerifyOnePermissionMessage( |
| 990 permissions.get(), Manifest::TYPE_EXTENSION, | 984 &permissions, Manifest::TYPE_EXTENSION, |
| 991 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL)); | 985 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL)); |
| 992 } | 986 } |
| 993 { | 987 { |
| 994 // Testing that multiple permissions will show the one message. | 988 // Testing that multiple permissions will show the one message. |
| 995 APIPermissionSet api_permissions; | 989 APIPermissionSet api_permissions; |
| 996 api_permissions.insert(APIPermission::kSerial); | 990 api_permissions.insert(APIPermission::kSerial); |
| 997 api_permissions.insert(APIPermission::kSerial); | 991 api_permissions.insert(APIPermission::kSerial); |
| 998 scoped_refptr<const PermissionSet> permissions( | 992 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 999 new PermissionSet(api_permissions, ManifestPermissionSet(), | 993 URLPatternSet(), URLPatternSet()); |
| 1000 URLPatternSet(), URLPatternSet())); | |
| 1001 VerifyOnePermissionMessage( | 994 VerifyOnePermissionMessage( |
| 1002 permissions.get(), Manifest::TYPE_EXTENSION, | 995 &permissions, Manifest::TYPE_EXTENSION, |
| 1003 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL)); | 996 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_SERIAL)); |
| 1004 } | 997 } |
| 1005 { | 998 { |
| 1006 scoped_refptr<Extension> extension = | 999 scoped_refptr<Extension> extension = |
| 1007 LoadManifest("permissions", "access_to_devices_bluetooth.json"); | 1000 LoadManifest("permissions", "access_to_devices_bluetooth.json"); |
| 1008 PermissionSet* set = const_cast<PermissionSet*>( | 1001 PermissionSet* set = const_cast<PermissionSet*>( |
| 1009 extension->permissions_data()->active_permissions().get()); | 1002 extension->permissions_data()->active_permissions()); |
| 1010 VerifyOnePermissionMessage( | 1003 VerifyOnePermissionMessage( |
| 1011 set, extension->GetType(), | 1004 set, extension->GetType(), |
| 1012 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH)); | 1005 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH)); |
| 1013 | 1006 |
| 1014 // Test Bluetooth and Serial | 1007 // Test Bluetooth and Serial |
| 1015 set->apis_.insert(APIPermission::kSerial); | 1008 set->apis_.insert(APIPermission::kSerial); |
| 1016 VerifyOnePermissionMessage( | 1009 VerifyOnePermissionMessage( |
| 1017 set, extension->GetType(), | 1010 set, extension->GetType(), |
| 1018 l10n_util::GetStringUTF16( | 1011 l10n_util::GetStringUTF16( |
| 1019 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL)); | 1012 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL)); |
| 1020 } | 1013 } |
| 1021 } | 1014 } |
| 1022 | 1015 |
| 1023 TEST(PermissionsTest, MergedFileSystemPermissionComparison) { | 1016 TEST(PermissionsTest, MergedFileSystemPermissionComparison) { |
| 1024 APIPermissionSet write_api_permissions; | 1017 APIPermissionSet write_api_permissions; |
| 1025 write_api_permissions.insert(APIPermission::kFileSystemWrite); | 1018 write_api_permissions.insert(APIPermission::kFileSystemWrite); |
| 1026 scoped_refptr<const PermissionSet> write_permissions( | 1019 PermissionSet write_permissions(write_api_permissions, |
| 1027 new PermissionSet(write_api_permissions, ManifestPermissionSet(), | 1020 ManifestPermissionSet(), URLPatternSet(), |
| 1028 URLPatternSet(), URLPatternSet())); | 1021 URLPatternSet()); |
| 1029 | 1022 |
| 1030 APIPermissionSet directory_api_permissions; | 1023 APIPermissionSet directory_api_permissions; |
| 1031 directory_api_permissions.insert(APIPermission::kFileSystemDirectory); | 1024 directory_api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 1032 scoped_refptr<const PermissionSet> directory_permissions( | 1025 PermissionSet directory_permissions(directory_api_permissions, |
| 1033 new PermissionSet(directory_api_permissions, ManifestPermissionSet(), | 1026 ManifestPermissionSet(), URLPatternSet(), |
| 1034 URLPatternSet(), URLPatternSet())); | 1027 URLPatternSet()); |
| 1035 | 1028 |
| 1036 APIPermissionSet write_directory_api_permissions; | 1029 APIPermissionSet write_directory_api_permissions; |
| 1037 write_directory_api_permissions.insert(APIPermission::kFileSystemWrite); | 1030 write_directory_api_permissions.insert(APIPermission::kFileSystemWrite); |
| 1038 write_directory_api_permissions.insert(APIPermission::kFileSystemDirectory); | 1031 write_directory_api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 1039 scoped_refptr<const PermissionSet> write_directory_permissions( | 1032 PermissionSet write_directory_permissions(write_directory_api_permissions, |
| 1040 new PermissionSet(write_directory_api_permissions, | 1033 ManifestPermissionSet(), |
| 1041 ManifestPermissionSet(), URLPatternSet(), | 1034 URLPatternSet(), URLPatternSet()); |
| 1042 URLPatternSet())); | |
| 1043 | 1035 |
| 1044 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); | 1036 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 1045 EXPECT_FALSE(provider->IsPrivilegeIncrease(write_directory_permissions.get(), | 1037 EXPECT_FALSE(provider->IsPrivilegeIncrease(&write_directory_permissions, |
| 1046 write_permissions.get(), | 1038 &write_permissions, |
| 1047 Manifest::TYPE_PLATFORM_APP)); | 1039 Manifest::TYPE_PLATFORM_APP)); |
| 1048 EXPECT_FALSE(provider->IsPrivilegeIncrease(write_directory_permissions.get(), | 1040 EXPECT_FALSE(provider->IsPrivilegeIncrease(&write_directory_permissions, |
| 1049 directory_permissions.get(), | 1041 &directory_permissions, |
| 1050 Manifest::TYPE_PLATFORM_APP)); | 1042 Manifest::TYPE_PLATFORM_APP)); |
| 1051 EXPECT_TRUE(provider->IsPrivilegeIncrease(write_permissions.get(), | 1043 EXPECT_TRUE(provider->IsPrivilegeIncrease( |
| 1052 directory_permissions.get(), | 1044 &write_permissions, &directory_permissions, Manifest::TYPE_PLATFORM_APP)); |
| 1045 EXPECT_TRUE(provider->IsPrivilegeIncrease(&write_permissions, |
| 1046 &write_directory_permissions, |
| 1053 Manifest::TYPE_PLATFORM_APP)); | 1047 Manifest::TYPE_PLATFORM_APP)); |
| 1054 EXPECT_TRUE(provider->IsPrivilegeIncrease(write_permissions.get(), | 1048 EXPECT_FALSE(provider->IsPrivilegeIncrease( |
| 1055 write_directory_permissions.get(), | 1049 &directory_permissions, &write_permissions, Manifest::TYPE_PLATFORM_APP)); |
| 1056 Manifest::TYPE_PLATFORM_APP)); | 1050 EXPECT_TRUE(provider->IsPrivilegeIncrease(&directory_permissions, |
| 1057 EXPECT_FALSE(provider->IsPrivilegeIncrease(directory_permissions.get(), | 1051 &write_directory_permissions, |
| 1058 write_permissions.get(), | |
| 1059 Manifest::TYPE_PLATFORM_APP)); | |
| 1060 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions.get(), | |
| 1061 write_directory_permissions.get(), | |
| 1062 Manifest::TYPE_PLATFORM_APP)); | 1052 Manifest::TYPE_PLATFORM_APP)); |
| 1063 } | 1053 } |
| 1064 | 1054 |
| 1065 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { | 1055 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { |
| 1066 scoped_refptr<Extension> extension; | 1056 scoped_refptr<Extension> extension; |
| 1067 extension = LoadManifest("permissions", "many-hosts.json"); | 1057 extension = LoadManifest("permissions", "many-hosts.json"); |
| 1068 EXPECT_TRUE(VerifyOnePermissionMessage( | 1058 EXPECT_TRUE(VerifyOnePermissionMessage( |
| 1069 extension->permissions_data(), | 1059 extension->permissions_data(), |
| 1070 "Read and change your data on encrypted.google.com and www.google.com")); | 1060 "Read and change your data on encrypted.google.com and www.google.com")); |
| 1071 } | 1061 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1088 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { | 1078 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { |
| 1089 const std::string kAudio("Use your microphone"); | 1079 const std::string kAudio("Use your microphone"); |
| 1090 const std::string kVideo("Use your camera"); | 1080 const std::string kVideo("Use your camera"); |
| 1091 const std::string kBoth("Use your microphone and camera"); | 1081 const std::string kBoth("Use your microphone and camera"); |
| 1092 | 1082 |
| 1093 // Both audio and video present. | 1083 // Both audio and video present. |
| 1094 scoped_refptr<Extension> extension = | 1084 scoped_refptr<Extension> extension = |
| 1095 LoadManifest("permissions", "audio-video.json"); | 1085 LoadManifest("permissions", "audio-video.json"); |
| 1096 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); | 1086 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 1097 PermissionSet* set = const_cast<PermissionSet*>( | 1087 PermissionSet* set = const_cast<PermissionSet*>( |
| 1098 extension->permissions_data()->active_permissions().get()); | 1088 extension->permissions_data()->active_permissions()); |
| 1099 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(), kAudio)); | 1089 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(), kAudio)); |
| 1100 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(), kVideo)); | 1090 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(), kVideo)); |
| 1101 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(), kBoth)); | 1091 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(), kBoth)); |
| 1102 PermissionMessages warnings = provider->GetPermissionMessages( | 1092 PermissionMessages warnings = provider->GetPermissionMessages( |
| 1103 provider->GetAllPermissionIDs(set, extension->GetType())); | 1093 provider->GetAllPermissionIDs(set, extension->GetType())); |
| 1104 size_t combined_index = IndexOf(warnings, kBoth); | 1094 size_t combined_index = IndexOf(warnings, kBoth); |
| 1105 size_t combined_size = warnings.size(); | 1095 size_t combined_size = warnings.size(); |
| 1106 | 1096 |
| 1107 // Just audio present. | 1097 // Just audio present. |
| 1108 set->apis_.erase(APIPermission::kVideoCapture); | 1098 set->apis_.erase(APIPermission::kVideoCapture); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1127 } | 1117 } |
| 1128 | 1118 |
| 1129 TEST(PermissionsTest, GetWarningMessages_CombinedSessions) { | 1119 TEST(PermissionsTest, GetWarningMessages_CombinedSessions) { |
| 1130 { | 1120 { |
| 1131 APIPermissionSet api_permissions; | 1121 APIPermissionSet api_permissions; |
| 1132 api_permissions.insert(APIPermission::kTab); | 1122 api_permissions.insert(APIPermission::kTab); |
| 1133 api_permissions.insert(APIPermission::kTopSites); | 1123 api_permissions.insert(APIPermission::kTopSites); |
| 1134 api_permissions.insert(APIPermission::kProcesses); | 1124 api_permissions.insert(APIPermission::kProcesses); |
| 1135 api_permissions.insert(APIPermission::kWebNavigation); | 1125 api_permissions.insert(APIPermission::kWebNavigation); |
| 1136 api_permissions.insert(APIPermission::kSessions); | 1126 api_permissions.insert(APIPermission::kSessions); |
| 1137 scoped_refptr<const PermissionSet> permissions( | 1127 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 1138 new PermissionSet(api_permissions, ManifestPermissionSet(), | 1128 URLPatternSet(), URLPatternSet()); |
| 1139 URLPatternSet(), URLPatternSet())); | |
| 1140 EXPECT_TRUE(VerifyOnePermissionMessage( | 1129 EXPECT_TRUE(VerifyOnePermissionMessage( |
| 1141 permissions.get(), Manifest::TYPE_EXTENSION, | 1130 &permissions, Manifest::TYPE_EXTENSION, |
| 1142 l10n_util::GetStringUTF16( | 1131 l10n_util::GetStringUTF16( |
| 1143 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS))); | 1132 IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS))); |
| 1144 } | 1133 } |
| 1145 { | 1134 { |
| 1146 APIPermissionSet api_permissions; | 1135 APIPermissionSet api_permissions; |
| 1147 api_permissions.insert(APIPermission::kHistory); | 1136 api_permissions.insert(APIPermission::kHistory); |
| 1148 api_permissions.insert(APIPermission::kTab); | 1137 api_permissions.insert(APIPermission::kTab); |
| 1149 api_permissions.insert(APIPermission::kTopSites); | 1138 api_permissions.insert(APIPermission::kTopSites); |
| 1150 api_permissions.insert(APIPermission::kProcesses); | 1139 api_permissions.insert(APIPermission::kProcesses); |
| 1151 api_permissions.insert(APIPermission::kWebNavigation); | 1140 api_permissions.insert(APIPermission::kWebNavigation); |
| 1152 api_permissions.insert(APIPermission::kSessions); | 1141 api_permissions.insert(APIPermission::kSessions); |
| 1153 scoped_refptr<const PermissionSet> permissions( | 1142 PermissionSet permissions(api_permissions, ManifestPermissionSet(), |
| 1154 new PermissionSet(api_permissions, ManifestPermissionSet(), | 1143 URLPatternSet(), URLPatternSet()); |
| 1155 URLPatternSet(), URLPatternSet())); | |
| 1156 EXPECT_TRUE(VerifyOnePermissionMessage( | 1144 EXPECT_TRUE(VerifyOnePermissionMessage( |
| 1157 permissions.get(), Manifest::TYPE_EXTENSION, | 1145 &permissions, Manifest::TYPE_EXTENSION, |
| 1158 l10n_util::GetStringUTF16( | 1146 l10n_util::GetStringUTF16( |
| 1159 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS))); | 1147 IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS))); |
| 1160 } | 1148 } |
| 1161 } | 1149 } |
| 1162 | 1150 |
| 1163 TEST(PermissionsTest, GetWarningMessages_DeclarativeWebRequest) { | 1151 TEST(PermissionsTest, GetWarningMessages_DeclarativeWebRequest) { |
| 1164 // Test that if the declarativeWebRequest permission is present | 1152 // Test that if the declarativeWebRequest permission is present |
| 1165 // in combination with all hosts permission, then only the warning | 1153 // in combination with all hosts permission, then only the warning |
| 1166 // for host permissions is shown, because that covers the use of | 1154 // for host permissions is shown, because that covers the use of |
| 1167 // declarativeWebRequest. | 1155 // declarativeWebRequest. |
| 1168 | 1156 |
| 1169 // Until Declarative Web Request is in stable, let's make sure it is enabled | 1157 // Until Declarative Web Request is in stable, let's make sure it is enabled |
| 1170 // on the current channel. | 1158 // on the current channel. |
| 1171 ScopedCurrentChannel sc(version_info::Channel::CANARY); | 1159 ScopedCurrentChannel sc(version_info::Channel::CANARY); |
| 1172 | 1160 |
| 1173 // First verify that declarativeWebRequest produces a message when host | 1161 // First verify that declarativeWebRequest produces a message when host |
| 1174 // permissions do not cover all hosts. | 1162 // permissions do not cover all hosts. |
| 1175 scoped_refptr<Extension> extension = | 1163 scoped_refptr<Extension> extension = |
| 1176 LoadManifest("permissions", "web_request_not_all_host_permissions.json"); | 1164 LoadManifest("permissions", "web_request_not_all_host_permissions.json"); |
| 1177 const PermissionSet* set = | 1165 const PermissionSet* set = |
| 1178 extension->permissions_data()->active_permissions().get(); | 1166 extension->permissions_data()->active_permissions(); |
| 1179 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(), | 1167 EXPECT_TRUE(VerifyHasPermissionMessage(set, extension->GetType(), |
| 1180 "Block parts of web pages")); | 1168 "Block parts of web pages")); |
| 1181 EXPECT_FALSE(VerifyHasPermissionMessage( | 1169 EXPECT_FALSE(VerifyHasPermissionMessage( |
| 1182 set, extension->GetType(), | 1170 set, extension->GetType(), |
| 1183 "Read and change all your data on the websites you visit")); | 1171 "Read and change all your data on the websites you visit")); |
| 1184 | 1172 |
| 1185 // Now verify that declarativeWebRequest does not produce a message when host | 1173 // Now verify that declarativeWebRequest does not produce a message when host |
| 1186 // permissions do cover all hosts. | 1174 // permissions do cover all hosts. |
| 1187 extension = | 1175 extension = |
| 1188 LoadManifest("permissions", "web_request_all_host_permissions.json"); | 1176 LoadManifest("permissions", "web_request_all_host_permissions.json"); |
| 1189 set = extension->permissions_data()->active_permissions().get(); | 1177 set = extension->permissions_data()->active_permissions(); |
| 1190 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(), | 1178 EXPECT_FALSE(VerifyHasPermissionMessage(set, extension->GetType(), |
| 1191 "Block parts of web pages")); | 1179 "Block parts of web pages")); |
| 1192 EXPECT_TRUE(VerifyHasPermissionMessage( | 1180 EXPECT_TRUE(VerifyHasPermissionMessage( |
| 1193 set, extension->GetType(), | 1181 set, extension->GetType(), |
| 1194 "Read and change all your data on the websites you visit")); | 1182 "Read and change all your data on the websites you visit")); |
| 1195 } | 1183 } |
| 1196 | 1184 |
| 1197 TEST(PermissionsTest, GetWarningMessages_Serial) { | 1185 TEST(PermissionsTest, GetWarningMessages_Serial) { |
| 1198 scoped_refptr<Extension> extension = | 1186 scoped_refptr<Extension> extension = |
| 1199 LoadManifest("permissions", "serial.json"); | 1187 LoadManifest("permissions", "serial.json"); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1441 expected.clear(); | 1429 expected.clear(); |
| 1442 | 1430 |
| 1443 explicit_hosts.AddPattern( | 1431 explicit_hosts.AddPattern( |
| 1444 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com/*")); | 1432 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com/*")); |
| 1445 scriptable_hosts.AddPattern( | 1433 scriptable_hosts.AddPattern( |
| 1446 URLPattern(URLPattern::SCHEME_HTTP, "http://*.example.com/*")); | 1434 URLPattern(URLPattern::SCHEME_HTTP, "http://*.example.com/*")); |
| 1447 | 1435 |
| 1448 expected.insert("*.google.com"); | 1436 expected.insert("*.google.com"); |
| 1449 expected.insert("*.example.com"); | 1437 expected.insert("*.example.com"); |
| 1450 | 1438 |
| 1451 scoped_refptr<const PermissionSet> perm_set( | 1439 PermissionSet perm_set(empty_perms, ManifestPermissionSet(), explicit_hosts, |
| 1452 new PermissionSet(empty_perms, ManifestPermissionSet(), explicit_hosts, | 1440 scriptable_hosts); |
| 1453 scriptable_hosts)); | 1441 EXPECT_EQ(expected, permission_message_util::GetDistinctHosts( |
| 1454 EXPECT_EQ(expected, | 1442 perm_set.effective_hosts(), true, true)); |
| 1455 permission_message_util::GetDistinctHosts( | |
| 1456 perm_set->effective_hosts(), true, true)); | |
| 1457 } | 1443 } |
| 1458 | 1444 |
| 1459 { | 1445 { |
| 1460 // We don't display warnings for file URLs because they are off by default. | 1446 // We don't display warnings for file URLs because they are off by default. |
| 1461 SCOPED_TRACE("file urls"); | 1447 SCOPED_TRACE("file urls"); |
| 1462 | 1448 |
| 1463 explicit_hosts.ClearPatterns(); | 1449 explicit_hosts.ClearPatterns(); |
| 1464 expected.clear(); | 1450 expected.clear(); |
| 1465 | 1451 |
| 1466 explicit_hosts.AddPattern( | 1452 explicit_hosts.AddPattern( |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1555 } | 1541 } |
| 1556 | 1542 |
| 1557 TEST(PermissionsTest, IsHostPrivilegeIncrease) { | 1543 TEST(PermissionsTest, IsHostPrivilegeIncrease) { |
| 1558 Manifest::Type type = Manifest::TYPE_EXTENSION; | 1544 Manifest::Type type = Manifest::TYPE_EXTENSION; |
| 1559 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); | 1545 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 1560 ManifestPermissionSet empty_manifest_permissions; | 1546 ManifestPermissionSet empty_manifest_permissions; |
| 1561 URLPatternSet elist1; | 1547 URLPatternSet elist1; |
| 1562 URLPatternSet elist2; | 1548 URLPatternSet elist2; |
| 1563 URLPatternSet slist1; | 1549 URLPatternSet slist1; |
| 1564 URLPatternSet slist2; | 1550 URLPatternSet slist2; |
| 1565 scoped_refptr<const PermissionSet> set1; | 1551 scoped_ptr<const PermissionSet> set1; |
| 1566 scoped_refptr<const PermissionSet> set2; | 1552 scoped_ptr<const PermissionSet> set2; |
| 1567 APIPermissionSet empty_perms; | 1553 APIPermissionSet empty_perms; |
| 1568 elist1.AddPattern( | 1554 elist1.AddPattern( |
| 1569 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); | 1555 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); |
| 1570 elist1.AddPattern( | 1556 elist1.AddPattern( |
| 1571 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); | 1557 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); |
| 1572 | 1558 |
| 1573 // Test that the host order does not matter. | 1559 // Test that the host order does not matter. |
| 1574 elist2.AddPattern( | 1560 elist2.AddPattern( |
| 1575 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); | 1561 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); |
| 1576 elist2.AddPattern( | 1562 elist2.AddPattern( |
| 1577 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); | 1563 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); |
| 1578 | 1564 |
| 1579 set1 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1565 set1.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist1, |
| 1580 elist1, slist1); | 1566 slist1)); |
| 1581 set2 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1567 set2.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist2, |
| 1582 elist2, slist2); | 1568 slist2)); |
| 1583 | 1569 |
| 1584 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1570 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1585 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); | 1571 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); |
| 1586 | 1572 |
| 1587 // Test that paths are ignored. | 1573 // Test that paths are ignored. |
| 1588 elist2.ClearPatterns(); | 1574 elist2.ClearPatterns(); |
| 1589 elist2.AddPattern( | 1575 elist2.AddPattern( |
| 1590 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/*")); | 1576 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/*")); |
| 1591 set2 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1577 set2.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist2, |
| 1592 elist2, slist2); | 1578 slist2)); |
| 1593 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1579 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1594 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); | 1580 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); |
| 1595 | 1581 |
| 1596 // Test that RCDs are ignored. | 1582 // Test that RCDs are ignored. |
| 1597 elist2.ClearPatterns(); | 1583 elist2.ClearPatterns(); |
| 1598 elist2.AddPattern( | 1584 elist2.AddPattern( |
| 1599 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/*")); | 1585 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/*")); |
| 1600 set2 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1586 set2.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist2, |
| 1601 elist2, slist2); | 1587 slist2)); |
| 1602 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1588 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1603 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); | 1589 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); |
| 1604 | 1590 |
| 1605 // Test that subdomain wildcards are handled properly. | 1591 // Test that subdomain wildcards are handled properly. |
| 1606 elist2.ClearPatterns(); | 1592 elist2.ClearPatterns(); |
| 1607 elist2.AddPattern( | 1593 elist2.AddPattern( |
| 1608 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com.hk/*")); | 1594 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com.hk/*")); |
| 1609 set2 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1595 set2.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist2, |
| 1610 elist2, slist2); | 1596 slist2)); |
| 1611 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1597 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1612 // TODO(jstritar): Does not match subdomains properly. http://crbug.com/65337 | 1598 // TODO(jstritar): Does not match subdomains properly. http://crbug.com/65337 |
| 1613 // EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); | 1599 // EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1614 | 1600 |
| 1615 // Test that different domains count as different hosts. | 1601 // Test that different domains count as different hosts. |
| 1616 elist2.ClearPatterns(); | 1602 elist2.ClearPatterns(); |
| 1617 elist2.AddPattern( | 1603 elist2.AddPattern( |
| 1618 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); | 1604 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); |
| 1619 elist2.AddPattern( | 1605 elist2.AddPattern( |
| 1620 URLPattern(URLPattern::SCHEME_HTTP, "http://www.example.org/path")); | 1606 URLPattern(URLPattern::SCHEME_HTTP, "http://www.example.org/path")); |
| 1621 set2 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1607 set2.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist2, |
| 1622 elist2, slist2); | 1608 slist2)); |
| 1623 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1609 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1624 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); | 1610 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); |
| 1625 | 1611 |
| 1626 // Test that different subdomains count as different hosts. | 1612 // Test that different subdomains count as different hosts. |
| 1627 elist2.ClearPatterns(); | 1613 elist2.ClearPatterns(); |
| 1628 elist2.AddPattern( | 1614 elist2.AddPattern( |
| 1629 URLPattern(URLPattern::SCHEME_HTTP, "http://mail.google.com/*")); | 1615 URLPattern(URLPattern::SCHEME_HTTP, "http://mail.google.com/*")); |
| 1630 set2 = new PermissionSet(empty_perms, empty_manifest_permissions, | 1616 set2.reset(new PermissionSet(empty_perms, empty_manifest_permissions, elist2, |
| 1631 elist2, slist2); | 1617 slist2)); |
| 1632 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1618 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1633 EXPECT_TRUE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); | 1619 EXPECT_TRUE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); |
| 1634 | 1620 |
| 1635 // Test that platform apps do not have host permissions increases. | 1621 // Test that platform apps do not have host permissions increases. |
| 1636 type = Manifest::TYPE_PLATFORM_APP; | 1622 type = Manifest::TYPE_PLATFORM_APP; |
| 1637 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); | 1623 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1.get(), set2.get(), type)); |
| 1638 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); | 1624 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2.get(), set1.get(), type)); |
| 1639 } | 1625 } |
| 1640 | 1626 |
| 1641 TEST(PermissionsTest, GetAPIsAsStrings) { | 1627 TEST(PermissionsTest, GetAPIsAsStrings) { |
| 1642 APIPermissionSet apis; | 1628 APIPermissionSet apis; |
| 1643 URLPatternSet empty_set; | 1629 URLPatternSet empty_set; |
| 1644 | 1630 |
| 1645 apis.insert(APIPermission::kProxy); | 1631 apis.insert(APIPermission::kProxy); |
| 1646 apis.insert(APIPermission::kBackground); | 1632 apis.insert(APIPermission::kBackground); |
| 1647 apis.insert(APIPermission::kNotifications); | 1633 apis.insert(APIPermission::kNotifications); |
| 1648 apis.insert(APIPermission::kTab); | 1634 apis.insert(APIPermission::kTab); |
| 1649 | 1635 |
| 1650 scoped_refptr<const PermissionSet> perm_set = | 1636 PermissionSet perm_set(apis, ManifestPermissionSet(), empty_set, empty_set); |
| 1651 new PermissionSet(apis, ManifestPermissionSet(), empty_set, empty_set); | 1637 std::set<std::string> api_names = perm_set.GetAPIsAsStrings(); |
| 1652 std::set<std::string> api_names = perm_set->GetAPIsAsStrings(); | |
| 1653 | 1638 |
| 1654 // The result is correct if it has the same number of elements | 1639 // The result is correct if it has the same number of elements |
| 1655 // and we can convert it back to the id set. | 1640 // and we can convert it back to the id set. |
| 1656 EXPECT_EQ(4u, api_names.size()); | 1641 EXPECT_EQ(4u, api_names.size()); |
| 1657 EXPECT_EQ(apis, | 1642 EXPECT_EQ(apis, |
| 1658 PermissionsInfo::GetInstance()->GetAllByName(api_names)); | 1643 PermissionsInfo::GetInstance()->GetAllByName(api_names)); |
| 1659 } | 1644 } |
| 1660 | 1645 |
| 1661 TEST(PermissionsTest, IsEmpty) { | 1646 TEST(PermissionsTest, IsEmpty) { |
| 1662 APIPermissionSet empty_apis; | 1647 APIPermissionSet empty_apis; |
| 1663 URLPatternSet empty_extent; | 1648 URLPatternSet empty_extent; |
| 1664 | 1649 |
| 1665 scoped_refptr<const PermissionSet> empty = new PermissionSet(); | 1650 scoped_ptr<const PermissionSet> empty(new PermissionSet()); |
| 1666 EXPECT_TRUE(empty->IsEmpty()); | 1651 EXPECT_TRUE(empty->IsEmpty()); |
| 1667 scoped_refptr<const PermissionSet> perm_set; | 1652 scoped_ptr<const PermissionSet> perm_set; |
| 1668 | 1653 |
| 1669 perm_set = new PermissionSet(empty_apis, ManifestPermissionSet(), | 1654 perm_set.reset(new PermissionSet(empty_apis, ManifestPermissionSet(), |
| 1670 empty_extent, empty_extent); | 1655 empty_extent, empty_extent)); |
| 1671 EXPECT_TRUE(perm_set->IsEmpty()); | 1656 EXPECT_TRUE(perm_set->IsEmpty()); |
| 1672 | 1657 |
| 1673 APIPermissionSet non_empty_apis; | 1658 APIPermissionSet non_empty_apis; |
| 1674 non_empty_apis.insert(APIPermission::kBackground); | 1659 non_empty_apis.insert(APIPermission::kBackground); |
| 1675 perm_set = new PermissionSet(non_empty_apis, ManifestPermissionSet(), | 1660 perm_set.reset(new PermissionSet(non_empty_apis, ManifestPermissionSet(), |
| 1676 empty_extent, empty_extent); | 1661 empty_extent, empty_extent)); |
| 1677 EXPECT_FALSE(perm_set->IsEmpty()); | 1662 EXPECT_FALSE(perm_set->IsEmpty()); |
| 1678 | 1663 |
| 1679 // Try non standard host | 1664 // Try non standard host |
| 1680 URLPatternSet non_empty_extent; | 1665 URLPatternSet non_empty_extent; |
| 1681 AddPattern(&non_empty_extent, "http://www.google.com/*"); | 1666 AddPattern(&non_empty_extent, "http://www.google.com/*"); |
| 1682 | 1667 |
| 1683 perm_set = new PermissionSet(empty_apis, ManifestPermissionSet(), | 1668 perm_set.reset(new PermissionSet(empty_apis, ManifestPermissionSet(), |
| 1684 non_empty_extent, empty_extent); | 1669 non_empty_extent, empty_extent)); |
| 1685 EXPECT_FALSE(perm_set->IsEmpty()); | 1670 EXPECT_FALSE(perm_set->IsEmpty()); |
| 1686 | 1671 |
| 1687 perm_set = new PermissionSet(empty_apis, ManifestPermissionSet(), | 1672 perm_set.reset(new PermissionSet(empty_apis, ManifestPermissionSet(), |
| 1688 empty_extent, non_empty_extent); | 1673 empty_extent, non_empty_extent)); |
| 1689 EXPECT_FALSE(perm_set->IsEmpty()); | 1674 EXPECT_FALSE(perm_set->IsEmpty()); |
| 1690 } | 1675 } |
| 1691 | 1676 |
| 1692 TEST(PermissionsTest, ImpliedPermissions) { | 1677 TEST(PermissionsTest, ImpliedPermissions) { |
| 1693 URLPatternSet empty_extent; | 1678 URLPatternSet empty_extent; |
| 1694 APIPermissionSet apis; | 1679 APIPermissionSet apis; |
| 1695 apis.insert(APIPermission::kFileBrowserHandler); | 1680 apis.insert(APIPermission::kFileBrowserHandler); |
| 1696 EXPECT_EQ(1U, apis.size()); | 1681 EXPECT_EQ(1U, apis.size()); |
| 1697 | 1682 |
| 1698 scoped_refptr<const PermissionSet> perm_set; | 1683 PermissionSet perm_set(apis, ManifestPermissionSet(), empty_extent, |
| 1699 perm_set = new PermissionSet(apis, ManifestPermissionSet(), | 1684 empty_extent); |
| 1700 empty_extent, empty_extent); | 1685 EXPECT_EQ(2U, perm_set.apis().size()); |
| 1701 EXPECT_EQ(2U, perm_set->apis().size()); | |
| 1702 } | 1686 } |
| 1703 | 1687 |
| 1704 TEST(PermissionsTest, SyncFileSystemPermission) { | 1688 TEST(PermissionsTest, SyncFileSystemPermission) { |
| 1705 scoped_refptr<Extension> extension = LoadManifest( | 1689 scoped_refptr<Extension> extension = LoadManifest( |
| 1706 "permissions", "sync_file_system.json"); | 1690 "permissions", "sync_file_system.json"); |
| 1707 APIPermissionSet apis; | 1691 APIPermissionSet apis; |
| 1708 apis.insert(APIPermission::kSyncFileSystem); | 1692 apis.insert(APIPermission::kSyncFileSystem); |
| 1709 EXPECT_TRUE(extension->is_platform_app()); | 1693 EXPECT_TRUE(extension->is_platform_app()); |
| 1710 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( | 1694 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( |
| 1711 APIPermission::kSyncFileSystem)); | 1695 APIPermission::kSyncFileSystem)); |
| 1712 EXPECT_TRUE( | 1696 EXPECT_TRUE( |
| 1713 VerifyOnePermissionMessage(extension->permissions_data(), | 1697 VerifyOnePermissionMessage(extension->permissions_data(), |
| 1714 "Store data in your Google Drive account")); | 1698 "Store data in your Google Drive account")); |
| 1715 } | 1699 } |
| 1716 | 1700 |
| 1717 // Make sure that we don't crash when we're trying to show the permissions | 1701 // Make sure that we don't crash when we're trying to show the permissions |
| 1718 // even though chrome://thumb (and everything that's not chrome://favicon with | 1702 // even though chrome://thumb (and everything that's not chrome://favicon with |
| 1719 // a chrome:// scheme) is not a valid permission. | 1703 // a chrome:// scheme) is not a valid permission. |
| 1720 // More details here: crbug/246314. | 1704 // More details here: crbug/246314. |
| 1721 TEST(PermissionsTest, ChromeURLs) { | 1705 TEST(PermissionsTest, ChromeURLs) { |
| 1722 URLPatternSet allowed_hosts; | 1706 URLPatternSet allowed_hosts; |
| 1723 allowed_hosts.AddPattern( | 1707 allowed_hosts.AddPattern( |
| 1724 URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/")); | 1708 URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/")); |
| 1725 allowed_hosts.AddPattern( | 1709 allowed_hosts.AddPattern( |
| 1726 URLPattern(URLPattern::SCHEME_ALL, "chrome://favicon/")); | 1710 URLPattern(URLPattern::SCHEME_ALL, "chrome://favicon/")); |
| 1727 allowed_hosts.AddPattern( | 1711 allowed_hosts.AddPattern( |
| 1728 URLPattern(URLPattern::SCHEME_ALL, "chrome://thumb/")); | 1712 URLPattern(URLPattern::SCHEME_ALL, "chrome://thumb/")); |
| 1729 scoped_refptr<const PermissionSet> permissions( | 1713 PermissionSet permissions(APIPermissionSet(), ManifestPermissionSet(), |
| 1730 new PermissionSet(APIPermissionSet(), ManifestPermissionSet(), | 1714 allowed_hosts, URLPatternSet()); |
| 1731 allowed_hosts, URLPatternSet())); | |
| 1732 PermissionMessageProvider::Get()->GetPermissionMessages( | 1715 PermissionMessageProvider::Get()->GetPermissionMessages( |
| 1733 PermissionMessageProvider::Get()->GetAllPermissionIDs( | 1716 PermissionMessageProvider::Get()->GetAllPermissionIDs( |
| 1734 permissions.get(), Manifest::TYPE_EXTENSION)); | 1717 &permissions, Manifest::TYPE_EXTENSION)); |
| 1735 } | 1718 } |
| 1736 | 1719 |
| 1737 TEST(PermissionsTest, IsPrivilegeIncrease_DeclarativeWebRequest) { | 1720 TEST(PermissionsTest, IsPrivilegeIncrease_DeclarativeWebRequest) { |
| 1738 scoped_refptr<Extension> extension( | 1721 scoped_refptr<Extension> extension( |
| 1739 LoadManifest("permissions", "permissions_all_urls.json")); | 1722 LoadManifest("permissions", "permissions_all_urls.json")); |
| 1740 scoped_refptr<const PermissionSet> permissions( | 1723 const PermissionSet* permissions = |
| 1741 extension->permissions_data()->active_permissions()); | 1724 extension->permissions_data()->active_permissions(); |
| 1742 | 1725 |
| 1743 scoped_refptr<Extension> extension_dwr( | 1726 scoped_refptr<Extension> extension_dwr( |
| 1744 LoadManifest("permissions", "web_request_all_host_permissions.json")); | 1727 LoadManifest("permissions", "web_request_all_host_permissions.json")); |
| 1745 scoped_refptr<const PermissionSet> permissions_dwr( | 1728 const PermissionSet* permissions_dwr = |
| 1746 extension_dwr->permissions_data()->active_permissions()); | 1729 extension_dwr->permissions_data()->active_permissions(); |
| 1747 | 1730 |
| 1748 EXPECT_FALSE(PermissionMessageProvider::Get()-> | 1731 EXPECT_FALSE(PermissionMessageProvider::Get()->IsPrivilegeIncrease( |
| 1749 IsPrivilegeIncrease(permissions.get(), | 1732 permissions, permissions_dwr, extension->GetType())); |
| 1750 permissions_dwr.get(), | |
| 1751 extension->GetType())); | |
| 1752 } | 1733 } |
| 1753 | 1734 |
| 1754 } // namespace extensions | 1735 } // namespace extensions |
| OLD | NEW |