1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/pickle.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/values.h" 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/manifest_permission.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/manifest_permission_set.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ipc/ipc_message.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace extensions { 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MockManifestPermission : public ManifestPermission { 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MockManifestPermission(const std::string& name) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : name_(name) { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual std::string name() const OVERRIDE { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return name_; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual std::string id() const OVERRIDE { 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return name(); 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool HasMessages() const OVERRIDE { 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual PermissionMessages GetMessages() const OVERRIDE { 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PermissionMessages(); 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool FromValue(const base::Value* value) OVERRIDE { return true; } 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual scoped_ptr<base::Value> ToValue() const OVERRIDE { 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return make_scoped_ptr(base::Value::CreateNullValue()); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ManifestPermission* Diff(const ManifestPermission* rhs) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OVERRIDE { 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const MockManifestPermission* other = 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<const MockManifestPermission*>(rhs); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(name_, other->name_); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return NULL; 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ManifestPermission* Union(const ManifestPermission* rhs) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OVERRIDE { 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const MockManifestPermission* other = 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<const MockManifestPermission*>(rhs); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(name_, other->name_); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return new MockManifestPermission(name_); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ManifestPermission* Intersect(const ManifestPermission* rhs) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OVERRIDE { 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const MockManifestPermission* other = 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<const MockManifestPermission*>(rhs); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(name_, other->name_); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return new MockManifestPermission(name_); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string name_; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(ManifestPermissionSetTest, General) { 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet set; 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set.insert(new MockManifestPermission("p1")); 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set.insert(new MockManifestPermission("p2")); 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set.insert(new MockManifestPermission("p3")); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set.insert(new MockManifestPermission("p4")); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set.insert(new MockManifestPermission("p5")); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(set.find("p1")->id(), "p1"); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(set.find("p10") == set.end()); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(set.size(), 5u); 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(set.erase("p1"), 1u); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(set.size(), 4u); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(set.erase("p1"), 0u); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(set.size(), 4u); 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(ManifestPermissionSetTest, CreateUnion) { 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet permissions1; 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet permissions2; 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet expected_permissions; 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet result; 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermission* permission = new MockManifestPermission("p3"); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Union with an empty set. 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p1")); 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p2")); 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(permission->Clone()); 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p1")); 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p2")); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(permission); 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Union(permissions1, permissions2, &result); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions1.Contains(permissions2)); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions1.Contains(result)); 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(permissions1)); 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(result)); 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result.Contains(permissions1)); 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result.Contains(permissions2)); 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(expected_permissions, result); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Now use a real second set. 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p1")); 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p2")); 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p33")); 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p4")); 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p5")); 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p1")); 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p2")); 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p3")); 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p4")); 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p5")); 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p33")); 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Union(permissions1, permissions2, &result); 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet set1; 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set1.insert(new MockManifestPermission("p1")); 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set1.insert(new MockManifestPermission("p2")); 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet set2; 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set2.insert(new MockManifestPermission("p3")); 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(set1.Contains(set2)); 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(set2.Contains(set1)); 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions1.Contains(permissions2)); 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions1.Contains(result)); 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(permissions1)); 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(result)); 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result.Contains(permissions1)); 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result.Contains(permissions2)); 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(expected_permissions, result); 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(ManifestPermissionSetTest, CreateIntersection) { 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet permissions1; 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet permissions2; 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet expected_permissions; 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet result; 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Intersection with an empty set. 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p1")); 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p2")); 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p3")); 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Intersection(permissions1, permissions2, &result); 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions1.Contains(result)); 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions2.Contains(result)); 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions1.Contains(permissions2)); 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(permissions1)); 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(result.Contains(permissions1)); 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result.Contains(permissions2)); 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result.empty()); 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(expected_permissions, result); 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Now use a real second set. 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p1")); 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p3")); 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p4")); 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p5")); 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p1")); 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p3")); 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Intersection(permissions1, permissions2, &result); 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions1.Contains(result)); 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions2.Contains(result)); 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions1.Contains(permissions2)); 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(permissions1)); 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(result.Contains(permissions1)); 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(result.Contains(permissions2)); 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(expected_permissions, result); 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(ManifestPermissionSetTest, CreateDifference) { 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet permissions1; 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet permissions2; 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet expected_permissions; 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet result; 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Difference with an empty set. 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p1")); 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p2")); 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions1.insert(new MockManifestPermission("p3")); 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Difference(permissions1, permissions2, &result); 209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(permissions1, result); 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Now use a real second set. 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p1")); 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p2")); 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p4")); 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p5")); 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) permissions2.insert(new MockManifestPermission("p6")); 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_permissions.insert(new MockManifestPermission("p3")); 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Difference(permissions1, permissions2, &result); 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(permissions1.Contains(result)); 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(permissions2.Contains(result)); 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(expected_permissions, result); 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // |result| = |permissions1| - |permissions2| --> 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // |result| intersect |permissions2| == empty_set 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet result2; 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManifestPermissionSet::Intersection(result, permissions2, &result2); 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(result2.empty()); 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace extensions 236