| Index: chrome/common/extensions/extension_permission_set_unittest.cc
|
| diff --git a/chrome/common/extensions/extension_permission_set_unittest.cc b/chrome/common/extensions/extension_permission_set_unittest.cc
|
| index ebfb419a2efb676e3e88aa8941eea2394f9810d9..3b3ea248be6655a609717e719de10ed592a5c25f 100644
|
| --- a/chrome/common/extensions/extension_permission_set_unittest.cc
|
| +++ b/chrome/common/extensions/extension_permission_set_unittest.cc
|
| @@ -152,6 +152,7 @@ TEST(ExtensionAPIPermissionTest, HostedAppPermissions) {
|
| hosted_perms.insert(ExtensionAPIPermission::kNotification);
|
| hosted_perms.insert(ExtensionAPIPermission::kUnlimitedStorage);
|
| hosted_perms.insert(ExtensionAPIPermission::kWebstorePrivate);
|
| + hosted_perms.insert(ExtensionAPIPermission::kPermissions);
|
|
|
| ExtensionAPIPermissionSet perms = info->GetAll();
|
| size_t count = 0;
|
| @@ -161,8 +162,8 @@ TEST(ExtensionAPIPermissionTest, HostedAppPermissions) {
|
| EXPECT_EQ(hosted_perms.count(*i) > 0, info->GetByID(*i)->is_hosted_app());
|
| }
|
|
|
| - EXPECT_EQ(10u, count);
|
| - EXPECT_EQ(10u, info->get_hosted_app_permission_count());
|
| + EXPECT_EQ(hosted_perms.size(), count);
|
| + EXPECT_EQ(hosted_perms.size(), info->get_hosted_app_permission_count());
|
| }
|
|
|
| TEST(ExtensionAPIPermissionTest, ComponentOnlyPermissions) {
|
| @@ -188,17 +189,17 @@ TEST(ExtensionAPIPermissionTest, ComponentOnlyPermissions) {
|
|
|
| TEST(ExtensionPermissionSetTest, EffectiveHostPermissions) {
|
| scoped_refptr<Extension> extension;
|
| - const ExtensionPermissionSet* permissions = NULL;
|
| + scoped_refptr<const ExtensionPermissionSet> permissions;
|
|
|
| extension = LoadManifest("effective_host_permissions", "empty.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_EQ(0u, extension->GetEffectiveHostPermissions().patterns().size());
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToURL(
|
| GURL("http://www.google.com")));
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts());
|
|
|
| extension = LoadManifest("effective_host_permissions", "one_host.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(
|
| GURL("http://www.google.com")));
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToURL(
|
| @@ -207,14 +208,14 @@ TEST(ExtensionPermissionSetTest, EffectiveHostPermissions) {
|
|
|
| extension = LoadManifest("effective_host_permissions",
|
| "one_host_wildcard.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("http://google.com")));
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(
|
| GURL("http://foo.google.com")));
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts());
|
|
|
| extension = LoadManifest("effective_host_permissions", "two_hosts.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(
|
| GURL("http://www.google.com")));
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(
|
| @@ -223,14 +224,14 @@ TEST(ExtensionPermissionSetTest, EffectiveHostPermissions) {
|
|
|
| extension = LoadManifest("effective_host_permissions",
|
| "https_not_considered.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("http://google.com")));
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("https://google.com")));
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts());
|
|
|
| extension = LoadManifest("effective_host_permissions",
|
| "two_content_scripts.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("http://google.com")));
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(
|
| GURL("http://www.reddit.com")));
|
| @@ -239,7 +240,7 @@ TEST(ExtensionPermissionSetTest, EffectiveHostPermissions) {
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToAllHosts());
|
|
|
| extension = LoadManifest("effective_host_permissions", "all_hosts.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("http://test/")));
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToURL(GURL("https://test/")));
|
| EXPECT_TRUE(
|
| @@ -247,14 +248,14 @@ TEST(ExtensionPermissionSetTest, EffectiveHostPermissions) {
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts());
|
|
|
| extension = LoadManifest("effective_host_permissions", "all_hosts2.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("http://test/")));
|
| EXPECT_TRUE(
|
| permissions->HasEffectiveAccessToURL(GURL("http://www.google.com")));
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts());
|
|
|
| extension = LoadManifest("effective_host_permissions", "all_hosts3.json");
|
| - permissions = extension->permission_set();
|
| + permissions = extension->GetActivePermissions();
|
| EXPECT_FALSE(permissions->HasEffectiveAccessToURL(GURL("http://test/")));
|
| EXPECT_TRUE(permissions->HasEffectiveAccessToURL(GURL("https://test/")));
|
| EXPECT_TRUE(
|
| @@ -318,6 +319,12 @@ TEST(ExtensionPermissionSetTest, CreateUnion) {
|
| set2.reset(new ExtensionPermissionSet(
|
| apis2, explicit_hosts2, scriptable_hosts2));
|
| union_set.reset(ExtensionPermissionSet::CreateUnion(set1.get(), set2.get()));
|
| + EXPECT_TRUE(set1->Contains(*set2));
|
| + EXPECT_TRUE(set1->Contains(*union_set));
|
| + EXPECT_FALSE(set2->Contains(*set1));
|
| + EXPECT_FALSE(set2->Contains(*union_set));
|
| + EXPECT_TRUE(union_set->Contains(*set1));
|
| + EXPECT_TRUE(union_set->Contains(*set2));
|
|
|
| EXPECT_FALSE(union_set->HasEffectiveFullAccess());
|
| EXPECT_EQ(expected_apis, union_set->apis());
|
| @@ -346,6 +353,14 @@ TEST(ExtensionPermissionSetTest, CreateUnion) {
|
| set2.reset(new ExtensionPermissionSet(
|
| apis2, explicit_hosts2, scriptable_hosts2));
|
| union_set.reset(ExtensionPermissionSet::CreateUnion(set1.get(), set2.get()));
|
| +
|
| + EXPECT_FALSE(set1->Contains(*set2));
|
| + EXPECT_FALSE(set1->Contains(*union_set));
|
| + EXPECT_FALSE(set2->Contains(*set1));
|
| + EXPECT_FALSE(set2->Contains(*union_set));
|
| + EXPECT_TRUE(union_set->Contains(*set1));
|
| + EXPECT_TRUE(union_set->Contains(*set2));
|
| +
|
| EXPECT_TRUE(union_set->HasEffectiveFullAccess());
|
| EXPECT_TRUE(union_set->HasEffectiveAccessToAllHosts());
|
| EXPECT_EQ(expected_apis, union_set->apis());
|
| @@ -354,6 +369,157 @@ TEST(ExtensionPermissionSetTest, CreateUnion) {
|
| EXPECT_EQ(effective_hosts, union_set->effective_hosts());
|
| }
|
|
|
| +TEST(ExtensionPermissionSetTest, CreateIntersection) {
|
| + ExtensionAPIPermissionSet apis1;
|
| + ExtensionAPIPermissionSet apis2;
|
| + ExtensionAPIPermissionSet expected_apis;
|
| +
|
| + URLPatternSet explicit_hosts1;
|
| + URLPatternSet explicit_hosts2;
|
| + URLPatternSet expected_explicit_hosts;
|
| +
|
| + URLPatternSet scriptable_hosts1;
|
| + URLPatternSet scriptable_hosts2;
|
| + URLPatternSet expected_scriptable_hosts;
|
| +
|
| + URLPatternSet effective_hosts;
|
| +
|
| + scoped_ptr<ExtensionPermissionSet> set1;
|
| + scoped_ptr<ExtensionPermissionSet> set2;
|
| + scoped_ptr<ExtensionPermissionSet> new_set;
|
| +
|
| + // Intersection with an empty set.
|
| + apis1.insert(ExtensionAPIPermission::kTab);
|
| + apis1.insert(ExtensionAPIPermission::kBackground);
|
| +
|
| + AddPattern(&explicit_hosts1, "http://*.google.com/*");
|
| + AddPattern(&scriptable_hosts1, "http://www.reddit.com/*");
|
| +
|
| + set1.reset(new ExtensionPermissionSet(
|
| + apis1, explicit_hosts1, scriptable_hosts1));
|
| + set2.reset(new ExtensionPermissionSet(
|
| + apis2, explicit_hosts2, scriptable_hosts2));
|
| + new_set.reset(
|
| + ExtensionPermissionSet::CreateIntersection(set1.get(), set2.get()));
|
| + EXPECT_TRUE(set1->Contains(*new_set));
|
| + EXPECT_TRUE(set2->Contains(*new_set));
|
| + EXPECT_TRUE(set1->Contains(*set2));
|
| + EXPECT_FALSE(set2->Contains(*set1));
|
| + EXPECT_FALSE(new_set->Contains(*set1));
|
| + EXPECT_TRUE(new_set->Contains(*set2));
|
| +
|
| + EXPECT_TRUE(new_set->IsEmpty());
|
| + EXPECT_FALSE(new_set->HasEffectiveFullAccess());
|
| + EXPECT_EQ(expected_apis, new_set->apis());
|
| + EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts());
|
| + EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts());
|
| + EXPECT_EQ(expected_explicit_hosts, new_set->effective_hosts());
|
| +
|
| + // Now use a real second set.
|
| + apis2.insert(ExtensionAPIPermission::kTab);
|
| + apis2.insert(ExtensionAPIPermission::kProxy);
|
| + apis2.insert(ExtensionAPIPermission::kClipboardWrite);
|
| + apis2.insert(ExtensionAPIPermission::kPlugin);
|
| + expected_apis.insert(ExtensionAPIPermission::kTab);
|
| +
|
| + AddPattern(&explicit_hosts2, "http://*.example.com/*");
|
| + AddPattern(&explicit_hosts2, "http://*.google.com/*");
|
| + AddPattern(&scriptable_hosts2, "http://*.google.com/*");
|
| + AddPattern(&expected_explicit_hosts, "http://*.google.com/*");
|
| +
|
| + effective_hosts.ClearPatterns();
|
| + AddPattern(&effective_hosts, "http://*.google.com/*");
|
| +
|
| + set2.reset(new ExtensionPermissionSet(
|
| + apis2, explicit_hosts2, scriptable_hosts2));
|
| + new_set.reset(
|
| + ExtensionPermissionSet::CreateIntersection(set1.get(), set2.get()));
|
| +
|
| + EXPECT_TRUE(set1->Contains(*new_set));
|
| + EXPECT_TRUE(set2->Contains(*new_set));
|
| + EXPECT_FALSE(set1->Contains(*set2));
|
| + EXPECT_FALSE(set2->Contains(*set1));
|
| + EXPECT_FALSE(new_set->Contains(*set1));
|
| + EXPECT_FALSE(new_set->Contains(*set2));
|
| +
|
| + EXPECT_FALSE(new_set->HasEffectiveFullAccess());
|
| + EXPECT_FALSE(new_set->HasEffectiveAccessToAllHosts());
|
| + EXPECT_EQ(expected_apis, new_set->apis());
|
| + EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts());
|
| + EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts());
|
| + EXPECT_EQ(effective_hosts, new_set->effective_hosts());
|
| +}
|
| +
|
| +TEST(ExtensionPermissionSetTest, CreateDifference) {
|
| + ExtensionAPIPermissionSet apis1;
|
| + ExtensionAPIPermissionSet apis2;
|
| + ExtensionAPIPermissionSet expected_apis;
|
| +
|
| + URLPatternSet explicit_hosts1;
|
| + URLPatternSet explicit_hosts2;
|
| + URLPatternSet expected_explicit_hosts;
|
| +
|
| + URLPatternSet scriptable_hosts1;
|
| + URLPatternSet scriptable_hosts2;
|
| + URLPatternSet expected_scriptable_hosts;
|
| +
|
| + URLPatternSet effective_hosts;
|
| +
|
| + scoped_ptr<ExtensionPermissionSet> set1;
|
| + scoped_ptr<ExtensionPermissionSet> set2;
|
| + scoped_ptr<ExtensionPermissionSet> new_set;
|
| +
|
| + // Difference with an empty set.
|
| + apis1.insert(ExtensionAPIPermission::kTab);
|
| + apis1.insert(ExtensionAPIPermission::kBackground);
|
| +
|
| + AddPattern(&explicit_hosts1, "http://*.google.com/*");
|
| + AddPattern(&scriptable_hosts1, "http://www.reddit.com/*");
|
| +
|
| + set1.reset(new ExtensionPermissionSet(
|
| + apis1, explicit_hosts1, scriptable_hosts1));
|
| + set2.reset(new ExtensionPermissionSet(
|
| + apis2, explicit_hosts2, scriptable_hosts2));
|
| + new_set.reset(
|
| + ExtensionPermissionSet::CreateDifference(set1.get(), set2.get()));
|
| + EXPECT_EQ(*set1, *new_set);
|
| +
|
| + // Now use a real second set.
|
| + apis2.insert(ExtensionAPIPermission::kTab);
|
| + apis2.insert(ExtensionAPIPermission::kProxy);
|
| + apis2.insert(ExtensionAPIPermission::kClipboardWrite);
|
| + apis2.insert(ExtensionAPIPermission::kPlugin);
|
| + expected_apis.insert(ExtensionAPIPermission::kBackground);
|
| +
|
| + AddPattern(&explicit_hosts2, "http://*.example.com/*");
|
| + AddPattern(&explicit_hosts2, "http://*.google.com/*");
|
| + AddPattern(&scriptable_hosts2, "http://*.google.com/*");
|
| + AddPattern(&expected_scriptable_hosts, "http://www.reddit.com/*");
|
| +
|
| + effective_hosts.ClearPatterns();
|
| + AddPattern(&effective_hosts, "http://www.reddit.com/*");
|
| +
|
| + set2.reset(new ExtensionPermissionSet(
|
| + apis2, explicit_hosts2, scriptable_hosts2));
|
| + new_set.reset(
|
| + ExtensionPermissionSet::CreateDifference(set1.get(), set2.get()));
|
| +
|
| + EXPECT_TRUE(set1->Contains(*new_set));
|
| + EXPECT_FALSE(set2->Contains(*new_set));
|
| +
|
| + EXPECT_FALSE(new_set->HasEffectiveFullAccess());
|
| + EXPECT_FALSE(new_set->HasEffectiveAccessToAllHosts());
|
| + EXPECT_EQ(expected_apis, new_set->apis());
|
| + EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts());
|
| + EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts());
|
| + EXPECT_EQ(effective_hosts, new_set->effective_hosts());
|
| +
|
| + // |set3| = |set1| - |set2| --> |set3| intersect |set2| == empty_set
|
| + set1.reset(
|
| + ExtensionPermissionSet::CreateIntersection(new_set.get(), set2.get()));
|
| + EXPECT_TRUE(set1->IsEmpty());
|
| +}
|
| +
|
| TEST(ExtensionPermissionSetTest, HasLessPrivilegesThan) {
|
| const struct {
|
| const char* base_name;
|
| @@ -435,8 +601,10 @@ TEST(ExtensionPermissionSetTest, HasLessPrivilegesThan) {
|
| if (!new_extension.get())
|
| continue;
|
|
|
| - const ExtensionPermissionSet* old_p = old_extension->permission_set();
|
| - const ExtensionPermissionSet* new_p = new_extension->permission_set();
|
| + const ExtensionPermissionSet* old_p =
|
| + old_extension->GetActivePermissions();
|
| + const ExtensionPermissionSet* new_p =
|
| + new_extension->GetActivePermissions();
|
|
|
| EXPECT_EQ(kTests[i].expect_increase, old_p->HasLessPrivilegesThan(new_p))
|
| << kTests[i].base_name;
|
| @@ -490,6 +658,10 @@ TEST(ExtensionPermissionSetTest, PermissionMessages) {
|
|
|
| // Warned as part of host permissions.
|
| skip.insert(ExtensionAPIPermission::kDevtools);
|
| +
|
| + // This will warn users later, when they request new permissions.
|
| + skip.insert(ExtensionAPIPermission::kPermissions);
|
| +
|
| ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
|
| ExtensionAPIPermissionSet permissions = info->GetAll();
|
| for (ExtensionAPIPermissionSet::const_iterator i = permissions.begin();
|
| @@ -549,7 +721,7 @@ TEST(ExtensionPermissionSetTest, GetWarningMessages_ManyHosts) {
|
|
|
| extension = LoadManifest("permissions", "many-hosts.json");
|
| std::vector<string16> warnings =
|
| - extension->permission_set()->GetWarningMessages();
|
| + extension->GetActivePermissions()->GetWarningMessages();
|
| ASSERT_EQ(1u, warnings.size());
|
| EXPECT_EQ("Your data on encrypted.google.com and www.google.com",
|
| UTF16ToUTF8(warnings[0]));
|
| @@ -561,7 +733,7 @@ TEST(ExtensionPermissionSetTest, GetWarningMessages_Plugins) {
|
|
|
| extension = LoadManifest("permissions", "plugins.json");
|
| std::vector<string16> warnings =
|
| - extension->permission_set()->GetWarningMessages();
|
| + extension->GetActivePermissions()->GetWarningMessages();
|
| // We don't parse the plugins key on Chrome OS, so it should not ask for any
|
| // permissions.
|
| #if defined(OS_CHROMEOS)
|
| @@ -902,27 +1074,29 @@ TEST(ExtensionPermissionSetTest, IsEmpty) {
|
| ExtensionAPIPermissionSet empty_apis;
|
| URLPatternSet empty_extent;
|
|
|
| - ExtensionPermissionSet perm_set;
|
| - EXPECT_TRUE(perm_set.IsEmpty());
|
| + ExtensionPermissionSet empty_set;
|
| + EXPECT_TRUE(empty_set.IsEmpty());
|
| + scoped_ptr<ExtensionPermissionSet> perm_set;
|
|
|
| - perm_set = ExtensionPermissionSet(empty_apis, empty_extent, empty_extent);
|
| - EXPECT_TRUE(perm_set.IsEmpty());
|
| + perm_set.reset(new ExtensionPermissionSet(
|
| + empty_apis, empty_extent, empty_extent));
|
| + EXPECT_TRUE(perm_set->IsEmpty());
|
|
|
| ExtensionAPIPermissionSet non_empty_apis;
|
| non_empty_apis.insert(ExtensionAPIPermission::kBackground);
|
| - perm_set = ExtensionPermissionSet(
|
| - non_empty_apis, empty_extent, empty_extent);
|
| - EXPECT_FALSE(perm_set.IsEmpty());
|
| + perm_set.reset(new ExtensionPermissionSet(
|
| + non_empty_apis, empty_extent, empty_extent));
|
| + EXPECT_FALSE(perm_set->IsEmpty());
|
|
|
| // Try non standard host
|
| URLPatternSet non_empty_extent;
|
| AddPattern(&non_empty_extent, "http://www.google.com/*");
|
|
|
| - perm_set = ExtensionPermissionSet(
|
| - empty_apis, non_empty_extent, empty_extent);
|
| - EXPECT_FALSE(perm_set.IsEmpty());
|
| + perm_set.reset(new ExtensionPermissionSet(
|
| + empty_apis, non_empty_extent, empty_extent));
|
| + EXPECT_FALSE(perm_set->IsEmpty());
|
|
|
| - perm_set = ExtensionPermissionSet(
|
| - empty_apis, empty_extent, non_empty_extent);
|
| - EXPECT_FALSE(perm_set.IsEmpty());
|
| + perm_set.reset(new ExtensionPermissionSet(
|
| + empty_apis, empty_extent, non_empty_extent));
|
| + EXPECT_FALSE(perm_set->IsEmpty());
|
| }
|
|
|