| 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" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 namespace extensions { | 27 namespace extensions { |
| 28 | 28 |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { | 31 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { |
| 32 int schemes = URLPattern::SCHEME_ALL; | 32 int schemes = URLPattern::SCHEME_ALL; |
| 33 extent->AddPattern(URLPattern(schemes, pattern)); | 33 extent->AddPattern(URLPattern(schemes, pattern)); |
| 34 } | 34 } |
| 35 | 35 |
| 36 size_t IndexOf(const std::vector<string16>& warnings, | 36 size_t IndexOf(const std::vector<base::string16>& warnings, |
| 37 const std::string& warning) { | 37 const std::string& warning) { |
| 38 for (size_t i = 0; i < warnings.size(); ++i) { | 38 for (size_t i = 0; i < warnings.size(); ++i) { |
| 39 if (warnings[i] == ASCIIToUTF16(warning)) | 39 if (warnings[i] == ASCIIToUTF16(warning)) |
| 40 return i; | 40 return i; |
| 41 } | 41 } |
| 42 | 42 |
| 43 return warnings.size(); | 43 return warnings.size(); |
| 44 } | 44 } |
| 45 | 45 |
| 46 bool Contains(const std::vector<string16>& warnings, | 46 bool Contains(const std::vector<base::string16>& warnings, |
| 47 const std::string& warning) { | 47 const std::string& warning) { |
| 48 return IndexOf(warnings, warning) != warnings.size(); | 48 return IndexOf(warnings, warning) != warnings.size(); |
| 49 } | 49 } |
| 50 | 50 |
| 51 } // namespace | 51 } // namespace |
| 52 | 52 |
| 53 // Tests GetByID. | 53 // Tests GetByID. |
| 54 TEST(PermissionsTest, GetByID) { | 54 TEST(PermissionsTest, GetByID) { |
| 55 PermissionsInfo* info = PermissionsInfo::GetInstance(); | 55 PermissionsInfo* info = PermissionsInfo::GetInstance(); |
| 56 APIPermissionSet apis = info->GetAll(); | 56 APIPermissionSet apis = info->GetAll(); |
| (...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 Manifest::TYPE_PLATFORM_APP)); | 868 Manifest::TYPE_PLATFORM_APP)); |
| 869 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions, | 869 EXPECT_TRUE(provider->IsPrivilegeIncrease(directory_permissions, |
| 870 write_directory_permissions, | 870 write_directory_permissions, |
| 871 Manifest::TYPE_PLATFORM_APP)); | 871 Manifest::TYPE_PLATFORM_APP)); |
| 872 } | 872 } |
| 873 | 873 |
| 874 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { | 874 TEST(PermissionsTest, GetWarningMessages_ManyHosts) { |
| 875 scoped_refptr<Extension> extension; | 875 scoped_refptr<Extension> extension; |
| 876 | 876 |
| 877 extension = LoadManifest("permissions", "many-hosts.json"); | 877 extension = LoadManifest("permissions", "many-hosts.json"); |
| 878 std::vector<string16> warnings = | 878 std::vector<base::string16> warnings = |
| 879 PermissionsData::GetPermissionMessageStrings(extension.get()); | 879 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 880 ASSERT_EQ(1u, warnings.size()); | 880 ASSERT_EQ(1u, warnings.size()); |
| 881 EXPECT_EQ("Access your data on encrypted.google.com and www.google.com", | 881 EXPECT_EQ("Access your data on encrypted.google.com and www.google.com", |
| 882 UTF16ToUTF8(warnings[0])); | 882 UTF16ToUTF8(warnings[0])); |
| 883 } | 883 } |
| 884 | 884 |
| 885 TEST(PermissionsTest, GetWarningMessages_Plugins) { | 885 TEST(PermissionsTest, GetWarningMessages_Plugins) { |
| 886 scoped_refptr<Extension> extension; | 886 scoped_refptr<Extension> extension; |
| 887 scoped_refptr<PermissionSet> permissions; | 887 scoped_refptr<PermissionSet> permissions; |
| 888 | 888 |
| 889 extension = LoadManifest("permissions", "plugins.json"); | 889 extension = LoadManifest("permissions", "plugins.json"); |
| 890 std::vector<string16> warnings = | 890 std::vector<base::string16> warnings = |
| 891 PermissionsData::GetPermissionMessageStrings(extension.get()); | 891 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 892 // We don't parse the plugins key on Chrome OS, so it should not ask for any | 892 // We don't parse the plugins key on Chrome OS, so it should not ask for any |
| 893 // permissions. | 893 // permissions. |
| 894 #if defined(OS_CHROMEOS) | 894 #if defined(OS_CHROMEOS) |
| 895 ASSERT_EQ(0u, warnings.size()); | 895 ASSERT_EQ(0u, warnings.size()); |
| 896 #else | 896 #else |
| 897 ASSERT_EQ(1u, warnings.size()); | 897 ASSERT_EQ(1u, warnings.size()); |
| 898 EXPECT_EQ("Access all data on your computer and the websites you visit", | 898 EXPECT_EQ("Access all data on your computer and the websites you visit", |
| 899 UTF16ToUTF8(warnings[0])); | 899 UTF16ToUTF8(warnings[0])); |
| 900 #endif | 900 #endif |
| 901 } | 901 } |
| 902 | 902 |
| 903 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { | 903 TEST(PermissionsTest, GetWarningMessages_AudioVideo) { |
| 904 // Both audio and video present. | 904 // Both audio and video present. |
| 905 scoped_refptr<Extension> extension = | 905 scoped_refptr<Extension> extension = |
| 906 LoadManifest("permissions", "audio-video.json"); | 906 LoadManifest("permissions", "audio-video.json"); |
| 907 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); | 907 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 908 PermissionSet* set = | 908 PermissionSet* set = |
| 909 const_cast<PermissionSet*>( | 909 const_cast<PermissionSet*>( |
| 910 extension->GetActivePermissions().get()); | 910 extension->GetActivePermissions().get()); |
| 911 std::vector<string16> warnings = | 911 std::vector<base::string16> warnings = |
| 912 provider->GetWarningMessages(set, extension->GetType()); | 912 provider->GetWarningMessages(set, extension->GetType()); |
| 913 EXPECT_FALSE(Contains(warnings, "Use your microphone")); | 913 EXPECT_FALSE(Contains(warnings, "Use your microphone")); |
| 914 EXPECT_FALSE(Contains(warnings, "Use your camera")); | 914 EXPECT_FALSE(Contains(warnings, "Use your camera")); |
| 915 EXPECT_TRUE(Contains(warnings, "Use your microphone and camera")); | 915 EXPECT_TRUE(Contains(warnings, "Use your microphone and camera")); |
| 916 size_t combined_index = IndexOf(warnings, "Use your microphone and camera"); | 916 size_t combined_index = IndexOf(warnings, "Use your microphone and camera"); |
| 917 size_t combined_size = warnings.size(); | 917 size_t combined_size = warnings.size(); |
| 918 | 918 |
| 919 // Just audio present. | 919 // Just audio present. |
| 920 set->apis_.erase(APIPermission::kVideoCapture); | 920 set->apis_.erase(APIPermission::kVideoCapture); |
| 921 warnings = provider->GetWarningMessages(set, extension->GetType()); | 921 warnings = provider->GetWarningMessages(set, extension->GetType()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 943 // Until Declarative Web Request is in stable, let's make sure it is enabled | 943 // Until Declarative Web Request is in stable, let's make sure it is enabled |
| 944 // on the current channel. | 944 // on the current channel. |
| 945 ScopedCurrentChannel sc(chrome::VersionInfo::CHANNEL_CANARY); | 945 ScopedCurrentChannel sc(chrome::VersionInfo::CHANNEL_CANARY); |
| 946 | 946 |
| 947 // First verify that declarativeWebRequest produces a message when host | 947 // First verify that declarativeWebRequest produces a message when host |
| 948 // permissions do not cover all hosts. | 948 // permissions do not cover all hosts. |
| 949 scoped_refptr<Extension> extension = | 949 scoped_refptr<Extension> extension = |
| 950 LoadManifest("permissions", "web_request_com_host_permissions.json"); | 950 LoadManifest("permissions", "web_request_com_host_permissions.json"); |
| 951 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); | 951 const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
| 952 const PermissionSet* set = extension->GetActivePermissions().get(); | 952 const PermissionSet* set = extension->GetActivePermissions().get(); |
| 953 std::vector<string16> warnings = | 953 std::vector<base::string16> warnings = |
| 954 provider->GetWarningMessages(set, extension->GetType()); | 954 provider->GetWarningMessages(set, extension->GetType()); |
| 955 EXPECT_TRUE(Contains(warnings, "Block parts of web pages")); | 955 EXPECT_TRUE(Contains(warnings, "Block parts of web pages")); |
| 956 EXPECT_FALSE(Contains(warnings, "Access your data on all websites")); | 956 EXPECT_FALSE(Contains(warnings, "Access your data on all websites")); |
| 957 | 957 |
| 958 // Now verify that declarativeWebRequest does not produce a message when host | 958 // Now verify that declarativeWebRequest does not produce a message when host |
| 959 // permissions do cover all hosts. | 959 // permissions do cover all hosts. |
| 960 extension = | 960 extension = |
| 961 LoadManifest("permissions", "web_request_all_host_permissions.json"); | 961 LoadManifest("permissions", "web_request_all_host_permissions.json"); |
| 962 set = extension->GetActivePermissions().get(); | 962 set = extension->GetActivePermissions().get(); |
| 963 warnings = provider->GetWarningMessages(set, extension->GetType()); | 963 warnings = provider->GetWarningMessages(set, extension->GetType()); |
| 964 EXPECT_FALSE(Contains(warnings, "Block parts of web pages")); | 964 EXPECT_FALSE(Contains(warnings, "Block parts of web pages")); |
| 965 EXPECT_TRUE(Contains(warnings, "Access your data on all websites")); | 965 EXPECT_TRUE(Contains(warnings, "Access your data on all websites")); |
| 966 } | 966 } |
| 967 | 967 |
| 968 TEST(PermissionsTest, GetWarningMessages_Serial) { | 968 TEST(PermissionsTest, GetWarningMessages_Serial) { |
| 969 scoped_refptr<Extension> extension = | 969 scoped_refptr<Extension> extension = |
| 970 LoadManifest("permissions", "serial.json"); | 970 LoadManifest("permissions", "serial.json"); |
| 971 | 971 |
| 972 EXPECT_TRUE(extension->is_platform_app()); | 972 EXPECT_TRUE(extension->is_platform_app()); |
| 973 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSerial)); | 973 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSerial)); |
| 974 std::vector<string16> warnings = | 974 std::vector<base::string16> warnings = |
| 975 PermissionsData::GetPermissionMessageStrings(extension.get()); | 975 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 976 EXPECT_TRUE( | 976 EXPECT_TRUE( |
| 977 Contains(warnings, "Use serial devices attached to your computer")); | 977 Contains(warnings, "Use serial devices attached to your computer")); |
| 978 ASSERT_EQ(1u, warnings.size()); | 978 ASSERT_EQ(1u, warnings.size()); |
| 979 } | 979 } |
| 980 | 980 |
| 981 TEST(PermissionsTest, GetWarningMessages_Socket_AnyHost) { | 981 TEST(PermissionsTest, GetWarningMessages_Socket_AnyHost) { |
| 982 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); | 982 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); |
| 983 | 983 |
| 984 scoped_refptr<Extension> extension = | 984 scoped_refptr<Extension> extension = |
| 985 LoadManifest("permissions", "socket_any_host.json"); | 985 LoadManifest("permissions", "socket_any_host.json"); |
| 986 EXPECT_TRUE(extension->is_platform_app()); | 986 EXPECT_TRUE(extension->is_platform_app()); |
| 987 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); | 987 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); |
| 988 std::vector<string16> warnings = | 988 std::vector<base::string16> warnings = |
| 989 PermissionsData::GetPermissionMessageStrings(extension.get()); | 989 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 990 EXPECT_EQ(1u, warnings.size()); | 990 EXPECT_EQ(1u, warnings.size()); |
| 991 EXPECT_TRUE(Contains(warnings, "Exchange data with any computer " | 991 EXPECT_TRUE(Contains(warnings, "Exchange data with any computer " |
| 992 "on the local network or internet")); | 992 "on the local network or internet")); |
| 993 } | 993 } |
| 994 | 994 |
| 995 TEST(PermissionsTest, GetWarningMessages_Socket_OneDomainTwoHostnames) { | 995 TEST(PermissionsTest, GetWarningMessages_Socket_OneDomainTwoHostnames) { |
| 996 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); | 996 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); |
| 997 | 997 |
| 998 scoped_refptr<Extension> extension = | 998 scoped_refptr<Extension> extension = |
| 999 LoadManifest("permissions", "socket_one_domain_two_hostnames.json"); | 999 LoadManifest("permissions", "socket_one_domain_two_hostnames.json"); |
| 1000 EXPECT_TRUE(extension->is_platform_app()); | 1000 EXPECT_TRUE(extension->is_platform_app()); |
| 1001 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); | 1001 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); |
| 1002 std::vector<string16> warnings = | 1002 std::vector<base::string16> warnings = |
| 1003 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1003 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 1004 | 1004 |
| 1005 // Verify the warnings, including support for unicode characters, the fact | 1005 // Verify the warnings, including support for unicode characters, the fact |
| 1006 // that domain host warnings come before specific host warnings, and the fact | 1006 // that domain host warnings come before specific host warnings, and the fact |
| 1007 // that domains and hostnames are in alphabetical order regardless of the | 1007 // that domains and hostnames are in alphabetical order regardless of the |
| 1008 // order in the manifest file. | 1008 // order in the manifest file. |
| 1009 EXPECT_EQ(2u, warnings.size()); | 1009 EXPECT_EQ(2u, warnings.size()); |
| 1010 if (warnings.size() > 0) | 1010 if (warnings.size() > 0) |
| 1011 EXPECT_EQ(warnings[0], | 1011 EXPECT_EQ(warnings[0], |
| 1012 UTF8ToUTF16("Exchange data with any computer in the domain " | 1012 UTF8ToUTF16("Exchange data with any computer in the domain " |
| 1013 "example.org")); | 1013 "example.org")); |
| 1014 if (warnings.size() > 1) | 1014 if (warnings.size() > 1) |
| 1015 EXPECT_EQ(warnings[1], | 1015 EXPECT_EQ(warnings[1], |
| 1016 UTF8ToUTF16("Exchange data with the computers named: " | 1016 UTF8ToUTF16("Exchange data with the computers named: " |
| 1017 "b\xC3\xA5r.example.com foo.example.com")); | 1017 "b\xC3\xA5r.example.com foo.example.com")); |
| 1018 // "\xC3\xA5" = UTF-8 for lowercase A with ring above | 1018 // "\xC3\xA5" = UTF-8 for lowercase A with ring above |
| 1019 } | 1019 } |
| 1020 | 1020 |
| 1021 TEST(PermissionsTest, GetWarningMessages_Socket_TwoDomainsOneHostname) { | 1021 TEST(PermissionsTest, GetWarningMessages_Socket_TwoDomainsOneHostname) { |
| 1022 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); | 1022 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_DEV); |
| 1023 | 1023 |
| 1024 scoped_refptr<Extension> extension = | 1024 scoped_refptr<Extension> extension = |
| 1025 LoadManifest("permissions", "socket_two_domains_one_hostname.json"); | 1025 LoadManifest("permissions", "socket_two_domains_one_hostname.json"); |
| 1026 EXPECT_TRUE(extension->is_platform_app()); | 1026 EXPECT_TRUE(extension->is_platform_app()); |
| 1027 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); | 1027 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSocket)); |
| 1028 std::vector<string16> warnings = | 1028 std::vector<base::string16> warnings = |
| 1029 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1029 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 1030 | 1030 |
| 1031 // Verify the warnings, including the fact that domain host warnings come | 1031 // Verify the warnings, including the fact that domain host warnings come |
| 1032 // before specific host warnings and the fact that domains and hostnames are | 1032 // before specific host warnings and the fact that domains and hostnames are |
| 1033 // in alphabetical order regardless of the order in the manifest file. | 1033 // in alphabetical order regardless of the order in the manifest file. |
| 1034 EXPECT_EQ(2u, warnings.size()); | 1034 EXPECT_EQ(2u, warnings.size()); |
| 1035 if (warnings.size() > 0) | 1035 if (warnings.size() > 0) |
| 1036 EXPECT_EQ(warnings[0], | 1036 EXPECT_EQ(warnings[0], |
| 1037 UTF8ToUTF16("Exchange data with any computer in the domains: " | 1037 UTF8ToUTF16("Exchange data with any computer in the domains: " |
| 1038 "example.com foo.example.org")); | 1038 "example.com foo.example.org")); |
| 1039 if (warnings.size() > 1) | 1039 if (warnings.size() > 1) |
| 1040 EXPECT_EQ(warnings[1], | 1040 EXPECT_EQ(warnings[1], |
| 1041 UTF8ToUTF16("Exchange data with the computer named " | 1041 UTF8ToUTF16("Exchange data with the computer named " |
| 1042 "bar.example.org")); | 1042 "bar.example.org")); |
| 1043 } | 1043 } |
| 1044 | 1044 |
| 1045 TEST(PermissionsTest, GetWarningMessages_PlatformApppHosts) { | 1045 TEST(PermissionsTest, GetWarningMessages_PlatformApppHosts) { |
| 1046 scoped_refptr<Extension> extension; | 1046 scoped_refptr<Extension> extension; |
| 1047 | 1047 |
| 1048 extension = LoadManifest("permissions", "platform_app_hosts.json"); | 1048 extension = LoadManifest("permissions", "platform_app_hosts.json"); |
| 1049 EXPECT_TRUE(extension->is_platform_app()); | 1049 EXPECT_TRUE(extension->is_platform_app()); |
| 1050 std::vector<string16> warnings = | 1050 std::vector<base::string16> warnings = |
| 1051 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1051 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 1052 ASSERT_EQ(0u, warnings.size()); | 1052 ASSERT_EQ(0u, warnings.size()); |
| 1053 | 1053 |
| 1054 extension = LoadManifest("permissions", "platform_app_all_urls.json"); | 1054 extension = LoadManifest("permissions", "platform_app_all_urls.json"); |
| 1055 EXPECT_TRUE(extension->is_platform_app()); | 1055 EXPECT_TRUE(extension->is_platform_app()); |
| 1056 warnings = PermissionsData::GetPermissionMessageStrings(extension.get()); | 1056 warnings = PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 1057 ASSERT_EQ(0u, warnings.size()); | 1057 ASSERT_EQ(0u, warnings.size()); |
| 1058 } | 1058 } |
| 1059 | 1059 |
| 1060 TEST(PermissionsTest, GetDistinctHosts) { | 1060 TEST(PermissionsTest, GetDistinctHosts) { |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1445 EXPECT_EQ(4U, perm_set->apis().size()); | 1445 EXPECT_EQ(4U, perm_set->apis().size()); |
| 1446 } | 1446 } |
| 1447 | 1447 |
| 1448 TEST(PermissionsTest, SyncFileSystemPermission) { | 1448 TEST(PermissionsTest, SyncFileSystemPermission) { |
| 1449 scoped_refptr<Extension> extension = LoadManifest( | 1449 scoped_refptr<Extension> extension = LoadManifest( |
| 1450 "permissions", "sync_file_system.json"); | 1450 "permissions", "sync_file_system.json"); |
| 1451 APIPermissionSet apis; | 1451 APIPermissionSet apis; |
| 1452 apis.insert(APIPermission::kSyncFileSystem); | 1452 apis.insert(APIPermission::kSyncFileSystem); |
| 1453 EXPECT_TRUE(extension->is_platform_app()); | 1453 EXPECT_TRUE(extension->is_platform_app()); |
| 1454 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSyncFileSystem)); | 1454 EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kSyncFileSystem)); |
| 1455 std::vector<string16> warnings = | 1455 std::vector<base::string16> warnings = |
| 1456 PermissionsData::GetPermissionMessageStrings(extension.get()); | 1456 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 1457 EXPECT_TRUE(Contains(warnings, "Store data in your Google Drive account")); | 1457 EXPECT_TRUE(Contains(warnings, "Store data in your Google Drive account")); |
| 1458 ASSERT_EQ(1u, warnings.size()); | 1458 ASSERT_EQ(1u, warnings.size()); |
| 1459 } | 1459 } |
| 1460 | 1460 |
| 1461 // Make sure that we don't crash when we're trying to show the permissions | 1461 // Make sure that we don't crash when we're trying to show the permissions |
| 1462 // even though chrome://thumb (and everything that's not chrome://favicon with | 1462 // even though chrome://thumb (and everything that's not chrome://favicon with |
| 1463 // a chrome:// scheme) is not a valid permission. | 1463 // a chrome:// scheme) is not a valid permission. |
| 1464 // More details here: crbug/246314. | 1464 // More details here: crbug/246314. |
| 1465 TEST(PermissionsTest, ChromeURLs) { | 1465 TEST(PermissionsTest, ChromeURLs) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1488 scoped_refptr<const PermissionSet> permissions_dwr( | 1488 scoped_refptr<const PermissionSet> permissions_dwr( |
| 1489 extension_dwr->GetActivePermissions()); | 1489 extension_dwr->GetActivePermissions()); |
| 1490 | 1490 |
| 1491 EXPECT_FALSE(PermissionMessageProvider::Get()-> | 1491 EXPECT_FALSE(PermissionMessageProvider::Get()-> |
| 1492 IsPrivilegeIncrease(permissions.get(), | 1492 IsPrivilegeIncrease(permissions.get(), |
| 1493 permissions_dwr.get(), | 1493 permissions_dwr.get(), |
| 1494 extension->GetType())); | 1494 extension->GetType())); |
| 1495 } | 1495 } |
| 1496 | 1496 |
| 1497 } // namespace extensions | 1497 } // namespace extensions |
| OLD | NEW |