Index: chrome/common/extensions/permissions/permission_set_unittest.cc |
diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc |
index 7c2002f243b533e096edb9425962b3b5b76bb0cd..581855cba6be733f45a32bab6b7130f3e2287c95 100644 |
--- a/chrome/common/extensions/permissions/permission_set_unittest.cc |
+++ b/chrome/common/extensions/permissions/permission_set_unittest.cc |
@@ -5,6 +5,8 @@ |
#include "base/command_line.h" |
#include "base/json/json_file_value_serializer.h" |
#include "base/logging.h" |
+#include "base/strings/string_number_conversions.h" |
+#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
@@ -48,6 +50,77 @@ size_t IndexOf(const PermissionMessageStrings& warnings, |
return warnings.size(); |
} |
+PermissionIDSet MakePermissionIDSet(APIPermission::ID id1, |
+ APIPermission::ID id2) { |
+ PermissionIDSet set; |
+ set.insert(id1); |
+ set.insert(id2); |
+ return set; |
+} |
+ |
+PermissionIDSet MakePermissionIDSet(const APIPermissionSet& permissions) { |
+ PermissionIDSet set; |
+ for (const APIPermission* permission : permissions) |
+ set.insert(permission->id()); |
+ return set; |
+} |
+ |
+std::string LegacyPermissionIDsToString(const PermissionMessageIDs& ids) { |
+ std::vector<std::string> strs; |
+ for (const PermissionMessage::ID& id : ids) |
+ strs.push_back(base::IntToString(id)); |
+ return base::StringPrintf("[ %s ]", JoinString(strs, ", ").c_str()); |
+} |
+ |
+std::string PermissionIDsToString(const PermissionIDSet& ids) { |
+ std::vector<std::string> strs; |
+ for (const PermissionID& id : ids) |
+ strs.push_back(base::IntToString(id.id())); |
+ return base::StringPrintf("[ %s ]", JoinString(strs, ", ").c_str()); |
+} |
+ |
+std::string CoalescedPermissionIDsToString( |
+ const CoalescedPermissionMessages& msgs) { |
+ std::vector<std::string> strs; |
+ for (const CoalescedPermissionMessage& msg : msgs) |
+ strs.push_back(PermissionIDsToString(msg.permissions())); |
+ return JoinString(strs, " "); |
+} |
+ |
+// Check that the given |permissions| produce a single warning message, |
+// identified by |expected_legacy_id| in the old system, and by the set of |
+// |expected_ids| in the new system. |
+testing::AssertionResult PermissionSetProducesMessage( |
+ const PermissionSet* permissions, |
+ Manifest::Type extension_type, |
+ PermissionMessage::ID expected_legacy_id, |
+ const PermissionIDSet& expected_ids) { |
+ const PermissionMessageProvider* provider = PermissionMessageProvider::Get(); |
+ PermissionMessageIDs legacy_ids = |
+ provider->GetLegacyPermissionMessageIDs(permissions, extension_type); |
+ if (legacy_ids.size() != 1 || expected_legacy_id != legacy_ids[0]) { |
+ return testing::AssertionFailure() |
+ << "Expected single legacy permission ID " << expected_legacy_id |
+ << " but got " << LegacyPermissionIDsToString(legacy_ids); |
+ } |
+ |
+ CoalescedPermissionMessages msgs = provider->GetCoalescedPermissionMessages( |
+ provider->GetAllPermissionIDs(permissions, extension_type)); |
+ if (msgs.size() != 1) { |
+ return testing::AssertionFailure() |
+ << "Expected single permission message with IDs " |
+ << PermissionIDsToString(expected_ids) << " but got " << msgs.size() |
+ << " messages: " << CoalescedPermissionIDsToString(msgs); |
+ } |
+ if (!msgs.front().permissions().Equals(expected_ids)) { |
+ return testing::AssertionFailure() |
+ << "Expected permission IDs " << PermissionIDsToString(expected_ids) |
+ << " but got " << PermissionIDsToString(msgs.front().permissions()); |
+ } |
+ |
+ return testing::AssertionSuccess(); |
+} |
+ |
} // namespace |
// Tests GetByID. |
@@ -799,11 +872,10 @@ TEST(PermissionsTest, FileSystemPermissionMessages) { |
scoped_refptr<PermissionSet> permissions( |
new PermissionSet(api_permissions, ManifestPermissionSet(), |
URLPatternSet(), URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_PLATFORM_APP); |
- ASSERT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kFileSystemDirectory, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_PLATFORM_APP, |
+ PermissionMessage::kFileSystemDirectory, |
+ MakePermissionIDSet(api_permissions))); |
} |
// The file system permissions have a special-case hack to show a warning for |
@@ -846,11 +918,10 @@ TEST(PermissionsTest, HiddenFileSystemPermissionMessages) { |
scoped_refptr<PermissionSet> permissions( |
new PermissionSet(api_permissions, ManifestPermissionSet(), |
URLPatternSet(), URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_PLATFORM_APP); |
- ASSERT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kFileSystemWriteDirectory, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_PLATFORM_APP, |
+ PermissionMessage::kFileSystemWriteDirectory, |
+ MakePermissionIDSet(api_permissions))); |
} |
TEST(PermissionsTest, SuppressedPermissionMessages) { |
@@ -864,11 +935,9 @@ TEST(PermissionsTest, SuppressedPermissionMessages) { |
scoped_refptr<PermissionSet> permissions( |
new PermissionSet(api_permissions, ManifestPermissionSet(), |
hosts, URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kTabs, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, PermissionMessage::kTabs, |
+ MakePermissionIDSet(APIPermission::kTab, APIPermission::kFavicon))); |
} |
{ |
// History warning suppresses favicon warning. |
@@ -880,53 +949,51 @@ TEST(PermissionsTest, SuppressedPermissionMessages) { |
scoped_refptr<PermissionSet> permissions( |
new PermissionSet(api_permissions, ManifestPermissionSet(), |
hosts, URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kBrowsingHistory, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, |
+ PermissionMessage::kBrowsingHistory, |
+ MakePermissionIDSet(APIPermission::kHistory, APIPermission::kFavicon))); |
} |
{ |
// All sites warning suppresses tabs warning. |
APIPermissionSet api_permissions; |
+ api_permissions.insert(APIPermission::kTab); |
URLPatternSet hosts; |
hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); |
- api_permissions.insert(APIPermission::kTab); |
scoped_refptr<PermissionSet> permissions(new PermissionSet( |
api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kHostsAll, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, |
+ PermissionMessage::kHostsAll, |
+ MakePermissionIDSet(APIPermission::kHostsAll, APIPermission::kTab))); |
} |
{ |
// All sites warning suppresses topSites warning. |
APIPermissionSet api_permissions; |
+ api_permissions.insert(APIPermission::kTopSites); |
URLPatternSet hosts; |
hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); |
- api_permissions.insert(APIPermission::kTopSites); |
scoped_refptr<PermissionSet> permissions(new PermissionSet( |
api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kHostsAll, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, |
+ PermissionMessage::kHostsAll, |
+ MakePermissionIDSet(APIPermission::kHostsAll, |
+ APIPermission::kTopSites))); |
} |
{ |
// All sites warning suppresses declarativeWebRequest warning. |
APIPermissionSet api_permissions; |
+ api_permissions.insert(APIPermission::kDeclarativeWebRequest); |
URLPatternSet hosts; |
hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI, "*://*/*")); |
- api_permissions.insert(APIPermission::kDeclarativeWebRequest); |
scoped_refptr<PermissionSet> permissions(new PermissionSet( |
api_permissions, ManifestPermissionSet(), hosts, URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kHostsAll, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, |
+ PermissionMessage::kHostsAll, |
+ MakePermissionIDSet(APIPermission::kHostsAll, |
+ APIPermission::kDeclarativeWebRequest))); |
} |
{ |
// BrowsingHistory warning suppresses all history read/write warnings. |
@@ -939,11 +1006,10 @@ TEST(PermissionsTest, SuppressedPermissionMessages) { |
scoped_refptr<PermissionSet> permissions( |
new PermissionSet(api_permissions, ManifestPermissionSet(), |
URLPatternSet(), URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kBrowsingHistory, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, |
+ PermissionMessage::kBrowsingHistory, |
+ MakePermissionIDSet(api_permissions))); |
} |
{ |
// Tabs warning suppresses all read-only history warnings. |
@@ -955,11 +1021,9 @@ TEST(PermissionsTest, SuppressedPermissionMessages) { |
scoped_refptr<PermissionSet> permissions( |
new PermissionSet(api_permissions, ManifestPermissionSet(), |
URLPatternSet(), URLPatternSet())); |
- PermissionMessageIDs ids = |
- PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
- permissions.get(), Manifest::TYPE_EXTENSION); |
- EXPECT_EQ(1u, ids.size()); |
- EXPECT_EQ(PermissionMessage::kTabs, ids[0]); |
+ EXPECT_TRUE(PermissionSetProducesMessage( |
+ permissions.get(), Manifest::TYPE_EXTENSION, PermissionMessage::kTabs, |
+ MakePermissionIDSet(api_permissions))); |
} |
} |
@@ -1722,6 +1786,9 @@ TEST(PermissionsTest, ChromeURLs) { |
allowed_hosts, URLPatternSet())); |
PermissionMessageProvider::Get()->GetLegacyPermissionMessageIDs( |
permissions.get(), Manifest::TYPE_EXTENSION); |
+ PermissionMessageProvider::Get()->GetCoalescedPermissionMessages( |
+ PermissionMessageProvider::Get()->GetAllPermissionIDs( |
+ permissions.get(), Manifest::TYPE_EXTENSION)); |
} |
TEST(PermissionsTest, IsPrivilegeIncrease_DeclarativeWebRequest) { |