| 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/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/common/chrome_paths.h" | 10 #include "chrome/common/chrome_paths.h" |
| 11 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
| 12 #include "chrome/common/extensions/extension.h" | 12 #include "chrome/common/extensions/extension.h" |
| 13 #include "chrome/common/extensions/extension_test_util.h" | 13 #include "chrome/common/extensions/extension_test_util.h" |
| 14 #include "chrome/common/extensions/features/feature_channel.h" | 14 #include "chrome/common/extensions/features/feature_channel.h" |
| 15 #include "chrome/common/extensions/permissions/chrome_permission_message_provide
r.h" |
| 16 #include "chrome/common/extensions/permissions/permission_message_util.h" |
| 15 #include "chrome/common/extensions/permissions/permission_set.h" | 17 #include "chrome/common/extensions/permissions/permission_set.h" |
| 16 #include "chrome/common/extensions/permissions/permissions_data.h" | 18 #include "chrome/common/extensions/permissions/permissions_data.h" |
| 17 #include "chrome/common/extensions/permissions/socket_permission.h" | 19 #include "chrome/common/extensions/permissions/socket_permission.h" |
| 18 #include "extensions/common/error_utils.h" | 20 #include "extensions/common/error_utils.h" |
| 21 #include "extensions/common/permissions/permission_message_provider.h" |
| 19 #include "extensions/common/permissions/permissions_info.h" | 22 #include "extensions/common/permissions/permissions_info.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 21 | 24 |
| 22 using extension_test_util::LoadManifest; | 25 using extension_test_util::LoadManifest; |
| 23 | 26 |
| 24 namespace extensions { | 27 namespace extensions { |
| 25 | 28 |
| 26 namespace { | 29 namespace { |
| 27 | 30 |
| 28 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { | 31 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 EXPECT_EQ(expected_apis, new_set->apis()); | 561 EXPECT_EQ(expected_apis, new_set->apis()); |
| 559 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts()); | 562 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts()); |
| 560 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts()); | 563 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts()); |
| 561 EXPECT_EQ(effective_hosts, new_set->effective_hosts()); | 564 EXPECT_EQ(effective_hosts, new_set->effective_hosts()); |
| 562 | 565 |
| 563 // |set3| = |set1| - |set2| --> |set3| intersect |set2| == empty_set | 566 // |set3| = |set1| - |set2| --> |set3| intersect |set2| == empty_set |
| 564 set1 = PermissionSet::CreateIntersection(new_set.get(), set2.get()); | 567 set1 = PermissionSet::CreateIntersection(new_set.get(), set2.get()); |
| 565 EXPECT_TRUE(set1->IsEmpty()); | 568 EXPECT_TRUE(set1->IsEmpty()); |
| 566 } | 569 } |
| 567 | 570 |
| 568 TEST(PermissionsTest, HasLessPrivilegesThan) { | 571 TEST(PermissionsTest, IsPrivilegeIncrease) { |
| 569 const struct { | 572 const struct { |
| 570 const char* base_name; | 573 const char* base_name; |
| 571 bool expect_increase; | 574 bool expect_increase; |
| 572 } kTests[] = { | 575 } kTests[] = { |
| 573 { "allhosts1", false }, // all -> all | 576 { "allhosts1", false }, // all -> all |
| 574 { "allhosts2", false }, // all -> one | 577 { "allhosts2", false }, // all -> one |
| 575 { "allhosts3", true }, // one -> all | 578 { "allhosts3", true }, // one -> all |
| 576 { "hosts1", false }, // http://a,http://b -> http://a,http://b | 579 { "hosts1", false }, // http://a,http://b -> http://a,http://b |
| 577 { "hosts2", true }, // http://a,http://b -> https://a,http://*.b | 580 { "hosts2", true }, // http://a,http://b -> https://a,http://*.b |
| 578 { "hosts3", false }, // http://a,http://b -> http://a | 581 { "hosts3", false }, // http://a,http://b -> http://a |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 if (!new_extension.get()) | 617 if (!new_extension.get()) |
| 615 continue; | 618 continue; |
| 616 | 619 |
| 617 scoped_refptr<const PermissionSet> old_p( | 620 scoped_refptr<const PermissionSet> old_p( |
| 618 old_extension->GetActivePermissions()); | 621 old_extension->GetActivePermissions()); |
| 619 scoped_refptr<const PermissionSet> new_p( | 622 scoped_refptr<const PermissionSet> new_p( |
| 620 new_extension->GetActivePermissions()); | 623 new_extension->GetActivePermissions()); |
| 621 Manifest::Type extension_type = old_extension->GetType(); | 624 Manifest::Type extension_type = old_extension->GetType(); |
| 622 | 625 |
| 623 EXPECT_EQ(kTests[i].expect_increase, | 626 EXPECT_EQ(kTests[i].expect_increase, |
| 624 old_p->HasLessPrivilegesThan(new_p.get(), extension_type)) | 627 PermissionMessageProvider::Get()->IsPrivilegeIncrease( |
| 628 old_p.get(), new_p.get(), extension_type)) |
| 625 << kTests[i].base_name; | 629 << kTests[i].base_name; |
| 626 } | 630 } |
| 627 } | 631 } |
| 628 | 632 |
| 629 TEST(PermissionsTest, PermissionMessages) { | 633 TEST(PermissionsTest, PermissionMessages) { |
| 630 // Ensure that all permissions that needs to show install UI actually have | 634 // Ensure that all permissions that needs to show install UI actually have |
| 631 // strings associated with them. | 635 // strings associated with them. |
| 632 APIPermissionSet skip; | 636 APIPermissionSet skip; |
| 633 | 637 |
| 634 // These are considered "nuisance" or "trivial" permissions that don't need | 638 // These are considered "nuisance" or "trivial" permissions that don't need |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 } | 766 } |
| 763 } | 767 } |
| 764 | 768 |
| 765 TEST(PermissionsTest, FileSystemPermissionMessages) { | 769 TEST(PermissionsTest, FileSystemPermissionMessages) { |
| 766 APIPermissionSet api_permissions; | 770 APIPermissionSet api_permissions; |
| 767 api_permissions.insert(APIPermission::kFileSystemWrite); | 771 api_permissions.insert(APIPermission::kFileSystemWrite); |
| 768 api_permissions.insert(APIPermission::kFileSystemDirectory); | 772 api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 769 scoped_refptr<PermissionSet> permissions( | 773 scoped_refptr<PermissionSet> permissions( |
| 770 new PermissionSet(api_permissions, URLPatternSet(), URLPatternSet())); | 774 new PermissionSet(api_permissions, URLPatternSet(), URLPatternSet())); |
| 771 PermissionMessages messages = | 775 PermissionMessages messages = |
| 772 permissions->GetPermissionMessages(Manifest::TYPE_PLATFORM_APP); | 776 PermissionMessageProvider::Get()->GetPermissionMessages( |
| 777 permissions, Manifest::TYPE_PLATFORM_APP); |
| 773 ASSERT_EQ(2u, messages.size()); | 778 ASSERT_EQ(2u, messages.size()); |
| 774 std::sort(messages.begin(), messages.end()); | 779 std::sort(messages.begin(), messages.end()); |
| 775 std::set<PermissionMessage::ID> ids; | 780 std::set<PermissionMessage::ID> ids; |
| 776 for (PermissionMessages::const_iterator it = messages.begin(); | 781 for (PermissionMessages::const_iterator it = messages.begin(); |
| 777 it != messages.end(); ++it) { | 782 it != messages.end(); ++it) { |
| 778 ids.insert(it->id()); | 783 ids.insert(it->id()); |
| 779 } | 784 } |
| 780 EXPECT_TRUE(ContainsKey(ids, PermissionMessage::kFileSystemDirectory)); | 785 EXPECT_TRUE(ContainsKey(ids, PermissionMessage::kFileSystemDirectory)); |
| 781 EXPECT_TRUE(ContainsKey(ids, PermissionMessage::kFileSystemWrite)); | 786 EXPECT_TRUE(ContainsKey(ids, PermissionMessage::kFileSystemWrite)); |
| 782 } | 787 } |
| 783 | 788 |
| 784 TEST(PermissionsTest, HiddenFileSystemPermissionMessages) { | 789 TEST(PermissionsTest, HiddenFileSystemPermissionMessages) { |
| 785 APIPermissionSet api_permissions; | 790 APIPermissionSet api_permissions; |
| 786 api_permissions.insert(APIPermission::kFileSystemWrite); | 791 api_permissions.insert(APIPermission::kFileSystemWrite); |
| 787 api_permissions.insert(APIPermission::kFileSystemDirectory); | 792 api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 788 api_permissions.insert(APIPermission::kFileSystemWriteDirectory); | 793 api_permissions.insert(APIPermission::kFileSystemWriteDirectory); |
| 789 scoped_refptr<PermissionSet> permissions( | 794 scoped_refptr<PermissionSet> permissions( |
| 790 new PermissionSet(api_permissions, URLPatternSet(), URLPatternSet())); | 795 new PermissionSet(api_permissions, URLPatternSet(), URLPatternSet())); |
| 791 PermissionMessages messages = | 796 PermissionMessages messages = |
| 792 permissions->GetPermissionMessages(Manifest::TYPE_PLATFORM_APP); | 797 PermissionMessageProvider::Get()->GetPermissionMessages( |
| 798 permissions, Manifest::TYPE_PLATFORM_APP); |
| 793 ASSERT_EQ(1u, messages.size()); | 799 ASSERT_EQ(1u, messages.size()); |
| 794 EXPECT_EQ(PermissionMessage::kFileSystemWriteDirectory, messages[0].id()); | 800 EXPECT_EQ(PermissionMessage::kFileSystemWriteDirectory, messages[0].id()); |
| 795 } | 801 } |
| 796 | 802 |
| 797 TEST(PermissionsTest, MergedFileSystemPermissionComparison) { | 803 TEST(PermissionsTest, MergedFileSystemPermissionComparison) { |
| 798 APIPermissionSet write_api_permissions; | 804 APIPermissionSet write_api_permissions; |
| 799 write_api_permissions.insert(APIPermission::kFileSystemWrite); | 805 write_api_permissions.insert(APIPermission::kFileSystemWrite); |
| 800 scoped_refptr<PermissionSet> write_permissions(new PermissionSet( | 806 scoped_refptr<PermissionSet> write_permissions(new PermissionSet( |
| 801 write_api_permissions, URLPatternSet(), URLPatternSet())); | 807 write_api_permissions, URLPatternSet(), URLPatternSet())); |
| 802 | 808 |
| 803 APIPermissionSet directory_api_permissions; | 809 APIPermissionSet directory_api_permissions; |
| 804 directory_api_permissions.insert(APIPermission::kFileSystemDirectory); | 810 directory_api_permissions.insert(APIPermission::kFileSystemDirectory); |
| 805 scoped_refptr<PermissionSet> directory_permissions(new PermissionSet( | 811 scoped_refptr<PermissionSet> directory_permissions(new PermissionSet( |
| 806 directory_api_permissions, URLPatternSet(), URLPatternSet())); | 812 directory_api_permissions, URLPatternSet(), URLPatternSet())); |
| 807 | 813 |
| 808 APIPermissionSet write_directory_api_permissions; | 814 APIPermissionSet write_directory_api_permissions; |
| 809 write_directory_api_permissions.insert( | 815 write_directory_api_permissions.insert( |
| 810 APIPermission::kFileSystemWriteDirectory); | 816 APIPermission::kFileSystemWriteDirectory); |
| 811 scoped_refptr<PermissionSet> write_directory_permissions(new PermissionSet( | 817 scoped_refptr<PermissionSet> write_directory_permissions(new PermissionSet( |
| 812 write_directory_api_permissions, URLPatternSet(), URLPatternSet())); | 818 write_directory_api_permissions, URLPatternSet(), URLPatternSet())); |
| 813 | 819 |
| 814 EXPECT_FALSE(write_directory_permissions->HasLessPrivilegesThan( | 820 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 815 write_permissions, Manifest::TYPE_PLATFORM_APP)); | 821 EXPECT_FALSE(provider->IsPrivilegeIncrease(write_directory_permissions, |
| 816 EXPECT_FALSE(write_directory_permissions->HasLessPrivilegesThan( | 822 write_permissions, |
| 817 directory_permissions, Manifest::TYPE_PLATFORM_APP)); | 823 Manifest::TYPE_PLATFORM_APP)); |
| 818 EXPECT_TRUE(write_permissions->HasLessPrivilegesThan( | 824 EXPECT_FALSE(provider->IsPrivilegeIncrease(write_directory_permissions, |
| 819 directory_permissions, Manifest::TYPE_PLATFORM_APP)); | 825 directory_permissions, |
| 820 EXPECT_TRUE(write_permissions->HasLessPrivilegesThan( | 826 Manifest::TYPE_PLATFORM_APP)); |
| 821 write_directory_permissions, Manifest::TYPE_PLATFORM_APP)); | 827 EXPECT_TRUE(provider->IsPrivilegeIncrease(write_permissions, |
| 822 EXPECT_TRUE(directory_permissions->HasLessPrivilegesThan( | 828 directory_permissions, |
| 823 write_permissions, Manifest::TYPE_PLATFORM_APP)); | 829 Manifest::TYPE_PLATFORM_APP)); |
| 824 EXPECT_TRUE(directory_permissions->HasLessPrivilegesThan( | 830 EXPECT_TRUE(provider->IsPrivilegeIncrease(write_permissions, |
| 825 write_directory_permissions, Manifest::TYPE_PLATFORM_APP)); | 831 write_directory_permissions, |
| 832 Manifest::TYPE_PLATFORM_APP)); |
| 833 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions, |
| 834 write_permissions, |
| 835 Manifest::TYPE_PLATFORM_APP)); |
| 836 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions, |
| 837 write_directory_permissions, |
| 838 Manifest::TYPE_PLATFORM_APP)); |
| 826 } | 839 } |
| 827 | 840 |
| 828 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { | 841 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { |
| 829 scoped_refptr<Extension> extension; | 842 scoped_refptr<Extension> extension; |
| 830 | 843 |
| 831 extension = LoadManifest("permissions", "many-hosts.json"); | 844 extension = LoadManifest("permissions", "many-hosts.json"); |
| 832 std::vector<string16> warnings = | 845 std::vector<string16> warnings = |
| 833 PermissionsData::GetPermissionMessageStrings(extension.get()); | 846 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 834 ASSERT_EQ(1u, warnings.size()); | 847 ASSERT_EQ(1u, warnings.size()); |
| 835 EXPECT_EQ("Access your data on encrypted.google.com and www.google.com", | 848 EXPECT_EQ("Access your data on encrypted.google.com and www.google.com", |
| (...skipping 15 matching lines...) Expand all Loading... |
| 851 ASSERT_EQ(1u, warnings.size()); | 864 ASSERT_EQ(1u, warnings.size()); |
| 852 EXPECT_EQ("Access all data on your computer and the websites you visit", | 865 EXPECT_EQ("Access all data on your computer and the websites you visit", |
| 853 UTF16ToUTF8(warnings[0])); | 866 UTF16ToUTF8(warnings[0])); |
| 854 #endif | 867 #endif |
| 855 } | 868 } |
| 856 | 869 |
| 857 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { | 870 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { |
| 858 // Both audio and video present. | 871 // Both audio and video present. |
| 859 scoped_refptr<Extension> extension = | 872 scoped_refptr<Extension> extension = |
| 860 LoadManifest("permissions", "audio-video.json"); | 873 LoadManifest("permissions", "audio-video.json"); |
| 874 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 861 PermissionSet* set = | 875 PermissionSet* set = |
| 862 const_cast<PermissionSet*>( | 876 const_cast<PermissionSet*>( |
| 863 extension->GetActivePermissions().get()); | 877 extension->GetActivePermissions().get()); |
| 864 std::vector<string16> warnings = | 878 std::vector<string16> warnings = |
| 865 set->GetWarningMessages(extension->GetType()); | 879 provider->GetWarningMessages(set, extension->GetType()); |
| 866 EXPECT_FALSE(Contains(warnings, "Use your microphone")); | 880 EXPECT_FALSE(Contains(warnings, "Use your microphone")); |
| 867 EXPECT_FALSE(Contains(warnings, "Use your camera")); | 881 EXPECT_FALSE(Contains(warnings, "Use your camera")); |
| 868 EXPECT_TRUE(Contains(warnings, "Use your microphone and camera")); | 882 EXPECT_TRUE(Contains(warnings, "Use your microphone and camera")); |
| 869 size_t combined_index = IndexOf(warnings, "Use your microphone and camera"); | 883 size_t combined_index = IndexOf(warnings, "Use your microphone and camera"); |
| 870 size_t combined_size = warnings.size(); | 884 size_t combined_size = warnings.size(); |
| 871 | 885 |
| 872 // Just audio present. | 886 // Just audio present. |
| 873 set->apis_.erase(APIPermission::kVideoCapture); | 887 set->apis_.erase(APIPermission::kVideoCapture); |
| 874 warnings = set->GetWarningMessages(extension->GetType()); | 888 warnings = provider->GetWarningMessages(set, extension->GetType()); |
| 875 EXPECT_EQ(combined_size, warnings.size()); | 889 EXPECT_EQ(combined_size, warnings.size()); |
| 876 EXPECT_EQ(combined_index, IndexOf(warnings, "Use your microphone")); | 890 EXPECT_EQ(combined_index, IndexOf(warnings, "Use your microphone")); |
| 877 EXPECT_FALSE(Contains(warnings, "Use your camera")); | 891 EXPECT_FALSE(Contains(warnings, "Use your camera")); |
| 878 EXPECT_FALSE(Contains(warnings, "Use your microphone and camera")); | 892 EXPECT_FALSE(Contains(warnings, "Use your microphone and camera")); |
| 879 | 893 |
| 880 // Just video present. | 894 // Just video present. |
| 881 set->apis_.erase(APIPermission::kAudioCapture); | 895 set->apis_.erase(APIPermission::kAudioCapture); |
| 882 set->apis_.insert(APIPermission::kVideoCapture); | 896 set->apis_.insert(APIPermission::kVideoCapture); |
| 883 warnings = set->GetWarningMessages(extension->GetType()); | 897 warnings = provider->GetWarningMessages(set, extension->GetType()); |
| 884 EXPECT_EQ(combined_size, warnings.size()); | 898 EXPECT_EQ(combined_size, warnings.size()); |
| 885 EXPECT_FALSE(Contains(warnings, "Use your microphone")); | 899 EXPECT_FALSE(Contains(warnings, "Use your microphone")); |
| 886 EXPECT_FALSE(Contains(warnings, "Use your microphone and camera")); | 900 EXPECT_FALSE(Contains(warnings, "Use your microphone and camera")); |
| 887 EXPECT_TRUE(Contains(warnings, "Use your camera")); | 901 EXPECT_TRUE(Contains(warnings, "Use your camera")); |
| 888 } | 902 } |
| 889 | 903 |
| 890 TEST(PermissionsTest, GetWarningMessages_DeclarativeWebRequest) { | 904 TEST(PermissionsTest, GetWarningMessages_DeclarativeWebRequest) { |
| 891 // Test that if the declarativeWebRequest permission is present | 905 // Test that if the declarativeWebRequest permission is present |
| 892 // in combination with all hosts permission, then only the warning | 906 // in combination with all hosts permission, then only the warning |
| 893 // for host permissions is shown, because that covers the use of | 907 // for host permissions is shown, because that covers the use of |
| 894 // declarativeWebRequest. | 908 // declarativeWebRequest. |
| 895 | 909 |
| 896 // Until Declarative Web Request is in stable, let's make sure it is enabled | 910 // Until Declarative Web Request is in stable, let's make sure it is enabled |
| 897 // on the current channel. | 911 // on the current channel. |
| 898 ScopedCurrentChannel sc(chrome::VersionInfo::CHANNEL_CANARY); | 912 ScopedCurrentChannel sc(chrome::VersionInfo::CHANNEL_CANARY); |
| 899 | 913 |
| 900 // First verify that declarativeWebRequest produces a message when host | 914 // First verify that declarativeWebRequest produces a message when host |
| 901 // permissions do not cover all hosts. | 915 // permissions do not cover all hosts. |
| 902 scoped_refptr<Extension> extension = | 916 scoped_refptr<Extension> extension = |
| 903 LoadManifest("permissions", "web_request_com_host_permissions.json"); | 917 LoadManifest("permissions", "web_request_com_host_permissions.json"); |
| 918 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 904 const PermissionSet* set = extension->GetActivePermissions().get(); | 919 const PermissionSet* set = extension->GetActivePermissions().get(); |
| 905 std::vector<string16> warnings = | 920 std::vector<string16> warnings = |
| 906 set->GetWarningMessages(extension->GetType()); | 921 provider->GetWarningMessages(set, extension->GetType()); |
| 907 EXPECT_TRUE(Contains(warnings, "Block parts of web pages")); | 922 EXPECT_TRUE(Contains(warnings, "Block parts of web pages")); |
| 908 EXPECT_FALSE(Contains(warnings, "Access your data on all websites")); | 923 EXPECT_FALSE(Contains(warnings, "Access your data on all websites")); |
| 909 | 924 |
| 910 // Now verify that declarativeWebRequest does not produce a message when host | 925 // Now verify that declarativeWebRequest does not produce a message when host |
| 911 // permissions do cover all hosts. | 926 // permissions do cover all hosts. |
| 912 extension = | 927 extension = |
| 913 LoadManifest("permissions", "web_request_all_host_permissions.json"); | 928 LoadManifest("permissions", "web_request_all_host_permissions.json"); |
| 914 set = extension->GetActivePermissions().get(); | 929 set = extension->GetActivePermissions().get(); |
| 915 warnings = set->GetWarningMessages(extension->GetType()); | 930 warnings = provider->GetWarningMessages(set, extension->GetType()); |
| 916 EXPECT_FALSE(Contains(warnings, "Block parts of web pages")); | 931 EXPECT_FALSE(Contains(warnings, "Block parts of web pages")); |
| 917 EXPECT_TRUE(Contains(warnings, "Access your data on all websites")); | 932 EXPECT_TRUE(Contains(warnings, "Access your data on all websites")); |
| 918 } | 933 } |
| 919 | 934 |
| 920 TEST(PermissionsTest, GetWarningMessages_Serial) { | 935 TEST(PermissionsTest, GetWarningMessages_Serial) { |
| 921 scoped_refptr<Extension> extension = | 936 scoped_refptr<Extension> extension = |
| 922 LoadManifest("permissions", "serial.json"); | 937 LoadManifest("permissions", "serial.json"); |
| 923 | 938 |
| 924 EXPECT_TRUE(extension->is_platform_app()); | 939 EXPECT_TRUE(extension->is_platform_app()); |
| 925 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSerial)); | 940 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSerial)); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1020 SCOPED_TRACE("no dupes"); | 1035 SCOPED_TRACE("no dupes"); |
| 1021 | 1036 |
| 1022 // Simple list with no dupes. | 1037 // Simple list with no dupes. |
| 1023 explicit_hosts.AddPattern( | 1038 explicit_hosts.AddPattern( |
| 1024 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); | 1039 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); |
| 1025 explicit_hosts.AddPattern( | 1040 explicit_hosts.AddPattern( |
| 1026 URLPattern(URLPattern::SCHEME_HTTP, "http://www.bar.com/path")); | 1041 URLPattern(URLPattern::SCHEME_HTTP, "http://www.bar.com/path")); |
| 1027 explicit_hosts.AddPattern( | 1042 explicit_hosts.AddPattern( |
| 1028 URLPattern(URLPattern::SCHEME_HTTP, "http://www.baz.com/path")); | 1043 URLPattern(URLPattern::SCHEME_HTTP, "http://www.baz.com/path")); |
| 1029 EXPECT_EQ(expected, | 1044 EXPECT_EQ(expected, |
| 1030 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1045 permission_message_util::GetDistinctHosts( |
| 1046 explicit_hosts, true, true)); |
| 1031 } | 1047 } |
| 1032 | 1048 |
| 1033 { | 1049 { |
| 1034 SCOPED_TRACE("two dupes"); | 1050 SCOPED_TRACE("two dupes"); |
| 1035 | 1051 |
| 1036 // Add some dupes. | 1052 // Add some dupes. |
| 1037 explicit_hosts.AddPattern( | 1053 explicit_hosts.AddPattern( |
| 1038 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); | 1054 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); |
| 1039 explicit_hosts.AddPattern( | 1055 explicit_hosts.AddPattern( |
| 1040 URLPattern(URLPattern::SCHEME_HTTP, "http://www.baz.com/path")); | 1056 URLPattern(URLPattern::SCHEME_HTTP, "http://www.baz.com/path")); |
| 1041 EXPECT_EQ(expected, | 1057 EXPECT_EQ(expected, |
| 1042 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1058 permission_message_util::GetDistinctHosts( |
| 1059 explicit_hosts, true, true)); |
| 1043 } | 1060 } |
| 1044 | 1061 |
| 1045 { | 1062 { |
| 1046 SCOPED_TRACE("schemes differ"); | 1063 SCOPED_TRACE("schemes differ"); |
| 1047 | 1064 |
| 1048 // Add a pattern that differs only by scheme. This should be filtered out. | 1065 // Add a pattern that differs only by scheme. This should be filtered out. |
| 1049 explicit_hosts.AddPattern( | 1066 explicit_hosts.AddPattern( |
| 1050 URLPattern(URLPattern::SCHEME_HTTPS, "https://www.bar.com/path")); | 1067 URLPattern(URLPattern::SCHEME_HTTPS, "https://www.bar.com/path")); |
| 1051 EXPECT_EQ(expected, | 1068 EXPECT_EQ(expected, |
| 1052 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1069 permission_message_util::GetDistinctHosts( |
| 1070 explicit_hosts, true, true)); |
| 1053 } | 1071 } |
| 1054 | 1072 |
| 1055 { | 1073 { |
| 1056 SCOPED_TRACE("paths differ"); | 1074 SCOPED_TRACE("paths differ"); |
| 1057 | 1075 |
| 1058 // Add some dupes by path. | 1076 // Add some dupes by path. |
| 1059 explicit_hosts.AddPattern( | 1077 explicit_hosts.AddPattern( |
| 1060 URLPattern(URLPattern::SCHEME_HTTP, "http://www.bar.com/pathypath")); | 1078 URLPattern(URLPattern::SCHEME_HTTP, "http://www.bar.com/pathypath")); |
| 1061 EXPECT_EQ(expected, | 1079 EXPECT_EQ(expected, |
| 1062 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1080 permission_message_util::GetDistinctHosts( |
| 1081 explicit_hosts, true, true)); |
| 1063 } | 1082 } |
| 1064 | 1083 |
| 1065 { | 1084 { |
| 1066 SCOPED_TRACE("subdomains differ"); | 1085 SCOPED_TRACE("subdomains differ"); |
| 1067 | 1086 |
| 1068 // We don't do anything special for subdomains. | 1087 // We don't do anything special for subdomains. |
| 1069 explicit_hosts.AddPattern( | 1088 explicit_hosts.AddPattern( |
| 1070 URLPattern(URLPattern::SCHEME_HTTP, "http://monkey.www.bar.com/path")); | 1089 URLPattern(URLPattern::SCHEME_HTTP, "http://monkey.www.bar.com/path")); |
| 1071 explicit_hosts.AddPattern( | 1090 explicit_hosts.AddPattern( |
| 1072 URLPattern(URLPattern::SCHEME_HTTP, "http://bar.com/path")); | 1091 URLPattern(URLPattern::SCHEME_HTTP, "http://bar.com/path")); |
| 1073 | 1092 |
| 1074 expected.insert("monkey.www.bar.com"); | 1093 expected.insert("monkey.www.bar.com"); |
| 1075 expected.insert("bar.com"); | 1094 expected.insert("bar.com"); |
| 1076 | 1095 |
| 1077 EXPECT_EQ(expected, | 1096 EXPECT_EQ(expected, |
| 1078 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1097 permission_message_util::GetDistinctHosts( |
| 1098 explicit_hosts, true, true)); |
| 1079 } | 1099 } |
| 1080 | 1100 |
| 1081 { | 1101 { |
| 1082 SCOPED_TRACE("RCDs differ"); | 1102 SCOPED_TRACE("RCDs differ"); |
| 1083 | 1103 |
| 1084 // Now test for RCD uniquing. | 1104 // Now test for RCD uniquing. |
| 1085 explicit_hosts.AddPattern( | 1105 explicit_hosts.AddPattern( |
| 1086 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); | 1106 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); |
| 1087 explicit_hosts.AddPattern( | 1107 explicit_hosts.AddPattern( |
| 1088 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); | 1108 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); |
| 1089 explicit_hosts.AddPattern( | 1109 explicit_hosts.AddPattern( |
| 1090 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.de/path")); | 1110 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.de/path")); |
| 1091 explicit_hosts.AddPattern( | 1111 explicit_hosts.AddPattern( |
| 1092 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca.us/path")); | 1112 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca.us/path")); |
| 1093 explicit_hosts.AddPattern( | 1113 explicit_hosts.AddPattern( |
| 1094 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.net/path")); | 1114 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.net/path")); |
| 1095 explicit_hosts.AddPattern( | 1115 explicit_hosts.AddPattern( |
| 1096 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com.my/path")); | 1116 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com.my/path")); |
| 1097 | 1117 |
| 1098 // This is an unknown RCD, which shouldn't be uniqued out. | 1118 // This is an unknown RCD, which shouldn't be uniqued out. |
| 1099 explicit_hosts.AddPattern( | 1119 explicit_hosts.AddPattern( |
| 1100 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.xyzzy/path")); | 1120 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.xyzzy/path")); |
| 1101 // But it should only occur once. | 1121 // But it should only occur once. |
| 1102 explicit_hosts.AddPattern( | 1122 explicit_hosts.AddPattern( |
| 1103 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.xyzzy/path")); | 1123 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.xyzzy/path")); |
| 1104 | 1124 |
| 1105 expected.insert("www.foo.xyzzy"); | 1125 expected.insert("www.foo.xyzzy"); |
| 1106 | 1126 |
| 1107 EXPECT_EQ(expected, | 1127 EXPECT_EQ(expected, |
| 1108 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1128 permission_message_util::GetDistinctHosts( |
| 1129 explicit_hosts, true, true)); |
| 1109 } | 1130 } |
| 1110 | 1131 |
| 1111 { | 1132 { |
| 1112 SCOPED_TRACE("wildcards"); | 1133 SCOPED_TRACE("wildcards"); |
| 1113 | 1134 |
| 1114 explicit_hosts.AddPattern( | 1135 explicit_hosts.AddPattern( |
| 1115 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com/*")); | 1136 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com/*")); |
| 1116 | 1137 |
| 1117 expected.insert("*.google.com"); | 1138 expected.insert("*.google.com"); |
| 1118 | 1139 |
| 1119 EXPECT_EQ(expected, | 1140 EXPECT_EQ(expected, |
| 1120 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1141 permission_message_util::GetDistinctHosts( |
| 1142 explicit_hosts, true, true)); |
| 1121 } | 1143 } |
| 1122 | 1144 |
| 1123 { | 1145 { |
| 1124 SCOPED_TRACE("scriptable hosts"); | 1146 SCOPED_TRACE("scriptable hosts"); |
| 1125 | 1147 |
| 1126 APIPermissionSet empty_perms; | 1148 APIPermissionSet empty_perms; |
| 1127 explicit_hosts.ClearPatterns(); | 1149 explicit_hosts.ClearPatterns(); |
| 1128 URLPatternSet scriptable_hosts; | 1150 URLPatternSet scriptable_hosts; |
| 1129 expected.clear(); | 1151 expected.clear(); |
| 1130 | 1152 |
| 1131 explicit_hosts.AddPattern( | 1153 explicit_hosts.AddPattern( |
| 1132 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com/*")); | 1154 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com/*")); |
| 1133 scriptable_hosts.AddPattern( | 1155 scriptable_hosts.AddPattern( |
| 1134 URLPattern(URLPattern::SCHEME_HTTP, "http://*.example.com/*")); | 1156 URLPattern(URLPattern::SCHEME_HTTP, "http://*.example.com/*")); |
| 1135 | 1157 |
| 1136 expected.insert("*.google.com"); | 1158 expected.insert("*.google.com"); |
| 1137 expected.insert("*.example.com"); | 1159 expected.insert("*.example.com"); |
| 1138 | 1160 |
| 1139 scoped_refptr<PermissionSet> perm_set(new PermissionSet( | 1161 scoped_refptr<PermissionSet> perm_set(new PermissionSet( |
| 1140 empty_perms, explicit_hosts, scriptable_hosts)); | 1162 empty_perms, explicit_hosts, scriptable_hosts)); |
| 1141 EXPECT_EQ(expected, | 1163 EXPECT_EQ(expected, |
| 1142 PermissionSet::GetDistinctHosts(perm_set->effective_hosts(), | 1164 permission_message_util::GetDistinctHosts( |
| 1143 true, true)); | 1165 perm_set->effective_hosts(), true, true)); |
| 1144 } | 1166 } |
| 1145 | 1167 |
| 1146 { | 1168 { |
| 1147 // We don't display warnings for file URLs because they are off by default. | 1169 // We don't display warnings for file URLs because they are off by default. |
| 1148 SCOPED_TRACE("file urls"); | 1170 SCOPED_TRACE("file urls"); |
| 1149 | 1171 |
| 1150 explicit_hosts.ClearPatterns(); | 1172 explicit_hosts.ClearPatterns(); |
| 1151 expected.clear(); | 1173 expected.clear(); |
| 1152 | 1174 |
| 1153 explicit_hosts.AddPattern( | 1175 explicit_hosts.AddPattern( |
| 1154 URLPattern(URLPattern::SCHEME_FILE, "file:///*")); | 1176 URLPattern(URLPattern::SCHEME_FILE, "file:///*")); |
| 1155 | 1177 |
| 1156 EXPECT_EQ(expected, | 1178 EXPECT_EQ(expected, |
| 1157 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1179 permission_message_util::GetDistinctHosts( |
| 1180 explicit_hosts, true, true)); |
| 1158 } | 1181 } |
| 1159 } | 1182 } |
| 1160 | 1183 |
| 1161 TEST(PermissionsTest, GetDistinctHosts_ComIsBestRcd) { | 1184 TEST(PermissionsTest, GetDistinctHosts_ComIsBestRcd) { |
| 1162 URLPatternSet explicit_hosts; | 1185 URLPatternSet explicit_hosts; |
| 1163 explicit_hosts.AddPattern( | 1186 explicit_hosts.AddPattern( |
| 1164 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); | 1187 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); |
| 1165 explicit_hosts.AddPattern( | 1188 explicit_hosts.AddPattern( |
| 1166 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.org/path")); | 1189 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.org/path")); |
| 1167 explicit_hosts.AddPattern( | 1190 explicit_hosts.AddPattern( |
| 1168 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); | 1191 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); |
| 1169 explicit_hosts.AddPattern( | 1192 explicit_hosts.AddPattern( |
| 1170 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.net/path")); | 1193 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.net/path")); |
| 1171 explicit_hosts.AddPattern( | 1194 explicit_hosts.AddPattern( |
| 1172 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); | 1195 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); |
| 1173 explicit_hosts.AddPattern( | 1196 explicit_hosts.AddPattern( |
| 1174 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); | 1197 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.com/path")); |
| 1175 | 1198 |
| 1176 std::set<std::string> expected; | 1199 std::set<std::string> expected; |
| 1177 expected.insert("www.foo.com"); | 1200 expected.insert("www.foo.com"); |
| 1178 EXPECT_EQ(expected, | 1201 EXPECT_EQ(expected, |
| 1179 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1202 permission_message_util::GetDistinctHosts( |
| 1203 explicit_hosts, true, true)); |
| 1180 } | 1204 } |
| 1181 | 1205 |
| 1182 TEST(PermissionsTest, GetDistinctHosts_NetIs2ndBestRcd) { | 1206 TEST(PermissionsTest, GetDistinctHosts_NetIs2ndBestRcd) { |
| 1183 URLPatternSet explicit_hosts; | 1207 URLPatternSet explicit_hosts; |
| 1184 explicit_hosts.AddPattern( | 1208 explicit_hosts.AddPattern( |
| 1185 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); | 1209 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); |
| 1186 explicit_hosts.AddPattern( | 1210 explicit_hosts.AddPattern( |
| 1187 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.org/path")); | 1211 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.org/path")); |
| 1188 explicit_hosts.AddPattern( | 1212 explicit_hosts.AddPattern( |
| 1189 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); | 1213 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); |
| 1190 explicit_hosts.AddPattern( | 1214 explicit_hosts.AddPattern( |
| 1191 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.net/path")); | 1215 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.net/path")); |
| 1192 explicit_hosts.AddPattern( | 1216 explicit_hosts.AddPattern( |
| 1193 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); | 1217 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); |
| 1194 // No http://www.foo.com/path | 1218 // No http://www.foo.com/path |
| 1195 | 1219 |
| 1196 std::set<std::string> expected; | 1220 std::set<std::string> expected; |
| 1197 expected.insert("www.foo.net"); | 1221 expected.insert("www.foo.net"); |
| 1198 EXPECT_EQ(expected, | 1222 EXPECT_EQ(expected, |
| 1199 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1223 permission_message_util::GetDistinctHosts( |
| 1224 explicit_hosts, true, true)); |
| 1200 } | 1225 } |
| 1201 | 1226 |
| 1202 TEST(PermissionsTest, GetDistinctHosts_OrgIs3rdBestRcd) { | 1227 TEST(PermissionsTest, GetDistinctHosts_OrgIs3rdBestRcd) { |
| 1203 URLPatternSet explicit_hosts; | 1228 URLPatternSet explicit_hosts; |
| 1204 explicit_hosts.AddPattern( | 1229 explicit_hosts.AddPattern( |
| 1205 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); | 1230 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); |
| 1206 explicit_hosts.AddPattern( | 1231 explicit_hosts.AddPattern( |
| 1207 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.org/path")); | 1232 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.org/path")); |
| 1208 explicit_hosts.AddPattern( | 1233 explicit_hosts.AddPattern( |
| 1209 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); | 1234 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); |
| 1210 // No http://www.foo.net/path | 1235 // No http://www.foo.net/path |
| 1211 explicit_hosts.AddPattern( | 1236 explicit_hosts.AddPattern( |
| 1212 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); | 1237 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); |
| 1213 // No http://www.foo.com/path | 1238 // No http://www.foo.com/path |
| 1214 | 1239 |
| 1215 std::set<std::string> expected; | 1240 std::set<std::string> expected; |
| 1216 expected.insert("www.foo.org"); | 1241 expected.insert("www.foo.org"); |
| 1217 EXPECT_EQ(expected, | 1242 EXPECT_EQ(expected, |
| 1218 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1243 permission_message_util::GetDistinctHosts( |
| 1244 explicit_hosts, true, true)); |
| 1219 } | 1245 } |
| 1220 | 1246 |
| 1221 TEST(PermissionsTest, GetDistinctHosts_FirstInListIs4thBestRcd) { | 1247 TEST(PermissionsTest, GetDistinctHosts_FirstInListIs4thBestRcd) { |
| 1222 URLPatternSet explicit_hosts; | 1248 URLPatternSet explicit_hosts; |
| 1223 explicit_hosts.AddPattern( | 1249 explicit_hosts.AddPattern( |
| 1224 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); | 1250 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.ca/path")); |
| 1225 // No http://www.foo.org/path | 1251 // No http://www.foo.org/path |
| 1226 explicit_hosts.AddPattern( | 1252 explicit_hosts.AddPattern( |
| 1227 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); | 1253 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.co.uk/path")); |
| 1228 // No http://www.foo.net/path | 1254 // No http://www.foo.net/path |
| 1229 explicit_hosts.AddPattern( | 1255 explicit_hosts.AddPattern( |
| 1230 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); | 1256 URLPattern(URLPattern::SCHEME_HTTP, "http://www.foo.jp/path")); |
| 1231 // No http://www.foo.com/path | 1257 // No http://www.foo.com/path |
| 1232 | 1258 |
| 1233 std::set<std::string> expected; | 1259 std::set<std::string> expected; |
| 1234 expected.insert("www.foo.ca"); | 1260 expected.insert("www.foo.ca"); |
| 1235 EXPECT_EQ(expected, | 1261 EXPECT_EQ(expected, |
| 1236 PermissionSet::GetDistinctHosts(explicit_hosts, true, true)); | 1262 permission_message_util::GetDistinctHosts( |
| 1263 explicit_hosts, true, true)); |
| 1237 } | 1264 } |
| 1238 | 1265 |
| 1239 TEST(PermissionsTest, HasLessHostPrivilegesThan) { | 1266 TEST(PermissionsTest, IsHostPrivilegeIncrease) { |
| 1240 Manifest::Type extension_type = Manifest::TYPE_EXTENSION; | 1267 Manifest::Type type = Manifest::TYPE_EXTENSION; |
| 1268 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 1241 URLPatternSet elist1; | 1269 URLPatternSet elist1; |
| 1242 URLPatternSet elist2; | 1270 URLPatternSet elist2; |
| 1243 URLPatternSet slist1; | 1271 URLPatternSet slist1; |
| 1244 URLPatternSet slist2; | 1272 URLPatternSet slist2; |
| 1245 scoped_refptr<PermissionSet> set1; | 1273 scoped_refptr<PermissionSet> set1; |
| 1246 scoped_refptr<PermissionSet> set2; | 1274 scoped_refptr<PermissionSet> set2; |
| 1247 APIPermissionSet empty_perms; | 1275 APIPermissionSet empty_perms; |
| 1248 elist1.AddPattern( | 1276 elist1.AddPattern( |
| 1249 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); | 1277 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); |
| 1250 elist1.AddPattern( | 1278 elist1.AddPattern( |
| 1251 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); | 1279 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); |
| 1252 | 1280 |
| 1253 // Test that the host order does not matter. | 1281 // Test that the host order does not matter. |
| 1254 elist2.AddPattern( | 1282 elist2.AddPattern( |
| 1255 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); | 1283 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); |
| 1256 elist2.AddPattern( | 1284 elist2.AddPattern( |
| 1257 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); | 1285 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/path")); |
| 1258 | 1286 |
| 1259 set1 = new PermissionSet(empty_perms, elist1, slist1); | 1287 set1 = new PermissionSet(empty_perms, elist1, slist1); |
| 1260 set2 = new PermissionSet(empty_perms, elist2, slist2); | 1288 set2 = new PermissionSet(empty_perms, elist2, slist2); |
| 1261 | 1289 |
| 1262 EXPECT_FALSE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1290 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1263 EXPECT_FALSE(set2->HasLessHostPrivilegesThan(set1.get(), extension_type)); | 1291 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1264 | 1292 |
| 1265 // Test that paths are ignored. | 1293 // Test that paths are ignored. |
| 1266 elist2.ClearPatterns(); | 1294 elist2.ClearPatterns(); |
| 1267 elist2.AddPattern( | 1295 elist2.AddPattern( |
| 1268 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/*")); | 1296 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/*")); |
| 1269 set2 = new PermissionSet(empty_perms, elist2, slist2); | 1297 set2 = new PermissionSet(empty_perms, elist2, slist2); |
| 1270 EXPECT_FALSE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1298 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1271 EXPECT_FALSE(set2->HasLessHostPrivilegesThan(set1.get(), extension_type)); | 1299 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1272 | 1300 |
| 1273 // Test that RCDs are ignored. | 1301 // Test that RCDs are ignored. |
| 1274 elist2.ClearPatterns(); | 1302 elist2.ClearPatterns(); |
| 1275 elist2.AddPattern( | 1303 elist2.AddPattern( |
| 1276 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/*")); | 1304 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com.hk/*")); |
| 1277 set2 = new PermissionSet(empty_perms, elist2, slist2); | 1305 set2 = new PermissionSet(empty_perms, elist2, slist2); |
| 1278 EXPECT_FALSE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1306 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1279 EXPECT_FALSE(set2->HasLessHostPrivilegesThan(set1.get(), extension_type)); | 1307 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1280 | 1308 |
| 1281 // Test that subdomain wildcards are handled properly. | 1309 // Test that subdomain wildcards are handled properly. |
| 1282 elist2.ClearPatterns(); | 1310 elist2.ClearPatterns(); |
| 1283 elist2.AddPattern( | 1311 elist2.AddPattern( |
| 1284 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com.hk/*")); | 1312 URLPattern(URLPattern::SCHEME_HTTP, "http://*.google.com.hk/*")); |
| 1285 set2 = new PermissionSet(empty_perms, elist2, slist2); | 1313 set2 = new PermissionSet(empty_perms, elist2, slist2); |
| 1286 EXPECT_TRUE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1314 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1287 // TODO(jstritar): Does not match subdomains properly. http://crbug.com/65337 | 1315 // TODO(jstritar): Does not match subdomains properly. http://crbug.com/65337 |
| 1288 // EXPECT_FALSE(set2->HasLessHostPrivilegesThan(set1.get())); | 1316 // EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1289 | 1317 |
| 1290 // Test that different domains count as different hosts. | 1318 // Test that different domains count as different hosts. |
| 1291 elist2.ClearPatterns(); | 1319 elist2.ClearPatterns(); |
| 1292 elist2.AddPattern( | 1320 elist2.AddPattern( |
| 1293 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); | 1321 URLPattern(URLPattern::SCHEME_HTTP, "http://www.google.com/path")); |
| 1294 elist2.AddPattern( | 1322 elist2.AddPattern( |
| 1295 URLPattern(URLPattern::SCHEME_HTTP, "http://www.example.org/path")); | 1323 URLPattern(URLPattern::SCHEME_HTTP, "http://www.example.org/path")); |
| 1296 set2 = new PermissionSet(empty_perms, elist2, slist2); | 1324 set2 = new PermissionSet(empty_perms, elist2, slist2); |
| 1297 EXPECT_TRUE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1325 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1298 EXPECT_FALSE(set2->HasLessHostPrivilegesThan(set1.get(), extension_type)); | 1326 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1299 | 1327 |
| 1300 // Test that different subdomains count as different hosts. | 1328 // Test that different subdomains count as different hosts. |
| 1301 elist2.ClearPatterns(); | 1329 elist2.ClearPatterns(); |
| 1302 elist2.AddPattern( | 1330 elist2.AddPattern( |
| 1303 URLPattern(URLPattern::SCHEME_HTTP, "http://mail.google.com/*")); | 1331 URLPattern(URLPattern::SCHEME_HTTP, "http://mail.google.com/*")); |
| 1304 set2 = new PermissionSet(empty_perms, elist2, slist2); | 1332 set2 = new PermissionSet(empty_perms, elist2, slist2); |
| 1305 EXPECT_TRUE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1333 EXPECT_TRUE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1306 EXPECT_TRUE(set2->HasLessHostPrivilegesThan(set1.get(), extension_type)); | 1334 EXPECT_TRUE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1307 | 1335 |
| 1308 // Test that platform apps do not have host permissions increases. | 1336 // Test that platform apps do not have host permissions increases. |
| 1309 extension_type = Manifest::TYPE_PLATFORM_APP; | 1337 type = Manifest::TYPE_PLATFORM_APP; |
| 1310 EXPECT_FALSE(set1->HasLessHostPrivilegesThan(set2.get(), extension_type)); | 1338 EXPECT_FALSE(provider->IsPrivilegeIncrease(set1, set2, type)); |
| 1311 EXPECT_FALSE(set2->HasLessHostPrivilegesThan(set1.get(), extension_type)); | 1339 EXPECT_FALSE(provider->IsPrivilegeIncrease(set2, set1, type)); |
| 1312 } | 1340 } |
| 1313 | 1341 |
| 1314 TEST(PermissionsTest, GetAPIsAsStrings) { | 1342 TEST(PermissionsTest, GetAPIsAsStrings) { |
| 1315 APIPermissionSet apis; | 1343 APIPermissionSet apis; |
| 1316 URLPatternSet empty_set; | 1344 URLPatternSet empty_set; |
| 1317 | 1345 |
| 1318 apis.insert(APIPermission::kProxy); | 1346 apis.insert(APIPermission::kProxy); |
| 1319 apis.insert(APIPermission::kBackground); | 1347 apis.insert(APIPermission::kBackground); |
| 1320 apis.insert(APIPermission::kNotification); | 1348 apis.insert(APIPermission::kNotification); |
| 1321 apis.insert(APIPermission::kTab); | 1349 apis.insert(APIPermission::kTab); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1393 TEST(PermissionsTest, ChromeURLs) { | 1421 TEST(PermissionsTest, ChromeURLs) { |
| 1394 URLPatternSet allowed_hosts; | 1422 URLPatternSet allowed_hosts; |
| 1395 allowed_hosts.AddPattern( | 1423 allowed_hosts.AddPattern( |
| 1396 URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/")); | 1424 URLPattern(URLPattern::SCHEME_ALL, "http://www.google.com/")); |
| 1397 allowed_hosts.AddPattern( | 1425 allowed_hosts.AddPattern( |
| 1398 URLPattern(URLPattern::SCHEME_ALL, "chrome://favicon/")); | 1426 URLPattern(URLPattern::SCHEME_ALL, "chrome://favicon/")); |
| 1399 allowed_hosts.AddPattern( | 1427 allowed_hosts.AddPattern( |
| 1400 URLPattern(URLPattern::SCHEME_ALL, "chrome://thumb/")); | 1428 URLPattern(URLPattern::SCHEME_ALL, "chrome://thumb/")); |
| 1401 scoped_refptr<PermissionSet> permissions( | 1429 scoped_refptr<PermissionSet> permissions( |
| 1402 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); | 1430 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); |
| 1403 permissions->GetPermissionMessages(Manifest::TYPE_EXTENSION); | 1431 PermissionMessageProvider::Get()-> |
| 1432 GetPermissionMessages(permissions, Manifest::TYPE_EXTENSION); |
| 1404 } | 1433 } |
| 1405 | 1434 |
| 1406 TEST(PermissionsTest, HasLessPrivilegesThan_DeclarativeWebRequest) { | 1435 TEST(PermissionsTest, IsPrivilegeIncrease_DeclarativeWebRequest) { |
| 1407 scoped_refptr<Extension> extension( | 1436 scoped_refptr<Extension> extension( |
| 1408 LoadManifest("permissions", "permissions_all_urls.json")); | 1437 LoadManifest("permissions", "permissions_all_urls.json")); |
| 1409 scoped_refptr<const PermissionSet> permissions( | 1438 scoped_refptr<const PermissionSet> permissions( |
| 1410 extension->GetActivePermissions()); | 1439 extension->GetActivePermissions()); |
| 1411 | 1440 |
| 1412 scoped_refptr<Extension> extension_dwr( | 1441 scoped_refptr<Extension> extension_dwr( |
| 1413 LoadManifest("permissions", "web_request_all_host_permissions.json")); | 1442 LoadManifest("permissions", "web_request_all_host_permissions.json")); |
| 1414 scoped_refptr<const PermissionSet> permissions_dwr( | 1443 scoped_refptr<const PermissionSet> permissions_dwr( |
| 1415 extension_dwr->GetActivePermissions()); | 1444 extension_dwr->GetActivePermissions()); |
| 1416 | 1445 |
| 1417 EXPECT_FALSE(permissions->HasLessPrivilegesThan(permissions_dwr.get(), | 1446 EXPECT_FALSE(PermissionMessageProvider::Get()-> |
| 1418 extension->GetType())); | 1447 IsPrivilegeIncrease(permissions.get(), |
| 1448 permissions_dwr.get(), |
| 1449 extension->GetType())); |
| 1419 } | 1450 } |
| 1451 |
| 1420 } // namespace extensions | 1452 } // namespace extensions |
| OLD | NEW |