| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/pickle.h" | 5 #include "base/pickle.h" |
| 6 #include "base/values.h" | 6 #include "base/values.h" |
| 7 #include "extensions/common/extension_messages.h" | 7 #include "extensions/common/extension_messages.h" |
| 8 #include "extensions/common/manifest_handler.h" |
| 8 #include "extensions/common/permissions/manifest_permission.h" | 9 #include "extensions/common/permissions/manifest_permission.h" |
| 9 #include "extensions/common/permissions/manifest_permission_set.h" | 10 #include "extensions/common/permissions/manifest_permission_set.h" |
| 10 #include "ipc/ipc_message.h" | 11 #include "ipc/ipc_message.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 13 |
| 13 namespace extensions { | 14 namespace extensions { |
| 14 | 15 |
| 15 class MockManifestPermission : public ManifestPermission { | 16 class MockManifestPermission : public ManifestPermission { |
| 16 public: | 17 public: |
| 17 MockManifestPermission(const std::string& name) | 18 MockManifestPermission(const std::string& name) |
| 18 : name_(name) { | 19 : name_(name) { |
| 19 } | 20 } |
| 20 | 21 |
| 21 virtual std::string name() const OVERRIDE { | 22 virtual std::string name() const OVERRIDE { |
| 22 return name_; | 23 return name_; |
| 23 } | 24 } |
| 24 | 25 |
| 25 virtual std::string id() const OVERRIDE { | 26 virtual std::string id() const OVERRIDE { |
| 26 return name(); | 27 return name(); |
| 27 } | 28 } |
| 28 | 29 |
| 29 virtual bool HasMessages() const OVERRIDE { | 30 virtual bool HasMessages() const OVERRIDE { |
| 30 return false; | 31 return false; |
| 31 } | 32 } |
| 32 | 33 |
| 33 virtual PermissionMessages GetMessages() const OVERRIDE { | 34 virtual PermissionMessages GetMessages() const OVERRIDE { |
| 34 return PermissionMessages(); | 35 return PermissionMessages(); |
| 35 } | 36 } |
| 36 | 37 |
| 37 virtual bool FromValue(const base::Value* value) OVERRIDE { | 38 virtual bool FromValue(const base::Value* value) OVERRIDE { return true; } |
| 38 return false; | |
| 39 } | |
| 40 | 39 |
| 41 virtual scoped_ptr<base::Value> ToValue() const OVERRIDE { | 40 virtual scoped_ptr<base::Value> ToValue() const OVERRIDE { |
| 42 return scoped_ptr<base::Value>(base::Value::CreateNullValue()); | 41 return make_scoped_ptr(base::Value::CreateNullValue()); |
| 43 } | |
| 44 | |
| 45 virtual ManifestPermission* Clone() const OVERRIDE { | |
| 46 return new MockManifestPermission(name_); | |
| 47 } | 42 } |
| 48 | 43 |
| 49 virtual ManifestPermission* Diff(const ManifestPermission* rhs) | 44 virtual ManifestPermission* Diff(const ManifestPermission* rhs) |
| 50 const OVERRIDE { | 45 const OVERRIDE { |
| 51 const MockManifestPermission* other = | 46 const MockManifestPermission* other = |
| 52 static_cast<const MockManifestPermission*>(rhs); | 47 static_cast<const MockManifestPermission*>(rhs); |
| 53 EXPECT_EQ(name_, other->name_); | 48 EXPECT_EQ(name_, other->name_); |
| 54 return NULL; | 49 return NULL; |
| 55 } | 50 } |
| 56 | 51 |
| 57 virtual ManifestPermission* Union(const ManifestPermission* rhs) | 52 virtual ManifestPermission* Union(const ManifestPermission* rhs) |
| 58 const OVERRIDE { | 53 const OVERRIDE { |
| 59 const MockManifestPermission* other = | 54 const MockManifestPermission* other = |
| 60 static_cast<const MockManifestPermission*>(rhs); | 55 static_cast<const MockManifestPermission*>(rhs); |
| 61 EXPECT_EQ(name_, other->name_); | 56 EXPECT_EQ(name_, other->name_); |
| 62 return new MockManifestPermission(name_); | 57 return new MockManifestPermission(name_); |
| 63 } | 58 } |
| 64 | 59 |
| 65 virtual ManifestPermission* Intersect(const ManifestPermission* rhs) | 60 virtual ManifestPermission* Intersect(const ManifestPermission* rhs) |
| 66 const OVERRIDE { | 61 const OVERRIDE { |
| 67 const MockManifestPermission* other = | 62 const MockManifestPermission* other = |
| 68 static_cast<const MockManifestPermission*>(rhs); | 63 static_cast<const MockManifestPermission*>(rhs); |
| 69 EXPECT_EQ(name_, other->name_); | 64 EXPECT_EQ(name_, other->name_); |
| 70 return new MockManifestPermission(name_); | 65 return new MockManifestPermission(name_); |
| 71 } | 66 } |
| 72 | 67 |
| 73 virtual bool Contains(const ManifestPermission* rhs) const OVERRIDE { | |
| 74 const MockManifestPermission* other = | |
| 75 static_cast<const MockManifestPermission*>(rhs); | |
| 76 EXPECT_EQ(name_, other->name_); | |
| 77 return true; | |
| 78 } | |
| 79 | |
| 80 virtual bool Equal(const ManifestPermission* rhs) const OVERRIDE { | |
| 81 const MockManifestPermission* other = | |
| 82 static_cast<const MockManifestPermission*>(rhs); | |
| 83 EXPECT_EQ(name_, other->name_); | |
| 84 return true; | |
| 85 } | |
| 86 | |
| 87 virtual void Write(IPC::Message* m) const OVERRIDE { | |
| 88 IPC::WriteParam(m, name_); | |
| 89 } | |
| 90 | |
| 91 virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE { | |
| 92 std::string read_name; | |
| 93 bool result = IPC::ReadParam(m, iter, &read_name); | |
| 94 if (!result) | |
| 95 return result; | |
| 96 EXPECT_EQ(read_name, name_); | |
| 97 return true; | |
| 98 } | |
| 99 | |
| 100 virtual void Log(std::string* log) const OVERRIDE { | |
| 101 } | |
| 102 | |
| 103 private: | 68 private: |
| 104 std::string name_; | 69 std::string name_; |
| 105 }; | 70 }; |
| 106 | 71 |
| 107 TEST(ManifestPermissionSetTest, General) { | 72 class MockManifestHandlerRegistry : public ManifestHandlerRegistry { |
| 73 public: |
| 74 MockManifestHandlerRegistry() { |
| 75 old_registry_ = ManifestHandlerRegistry::SetForTesting(this); |
| 76 } |
| 77 |
| 78 ~MockManifestHandlerRegistry() { |
| 79 ManifestHandlerRegistry::SetForTesting(old_registry_); |
| 80 } |
| 81 |
| 82 virtual ManifestPermission* CreatePermission( |
| 83 const std::string& name) OVERRIDE { |
| 84 return new MockManifestPermission(name); |
| 85 } |
| 86 |
| 87 private: |
| 88 ManifestHandlerRegistry* old_registry_; |
| 89 }; |
| 90 |
| 91 class ManifestPermissionSetTest : public testing::Test { |
| 92 public: |
| 93 ManifestPermissionSetTest() {} |
| 94 |
| 95 private: |
| 96 MockManifestHandlerRegistry registry_; |
| 97 }; |
| 98 |
| 99 TEST_F(ManifestPermissionSetTest, General) { |
| 108 ManifestPermissionSet set; | 100 ManifestPermissionSet set; |
| 109 set.insert(new MockManifestPermission("p1")); | 101 set.insert(new MockManifestPermission("p1")); |
| 110 set.insert(new MockManifestPermission("p2")); | 102 set.insert(new MockManifestPermission("p2")); |
| 111 set.insert(new MockManifestPermission("p3")); | 103 set.insert(new MockManifestPermission("p3")); |
| 112 set.insert(new MockManifestPermission("p4")); | 104 set.insert(new MockManifestPermission("p4")); |
| 113 set.insert(new MockManifestPermission("p5")); | 105 set.insert(new MockManifestPermission("p5")); |
| 114 | 106 |
| 115 EXPECT_EQ(set.find("p1")->id(), "p1"); | 107 EXPECT_EQ(set.find("p1")->id(), "p1"); |
| 116 EXPECT_TRUE(set.find("p10") == set.end()); | 108 EXPECT_TRUE(set.find("p10") == set.end()); |
| 117 | 109 |
| 118 EXPECT_EQ(set.size(), 5u); | 110 EXPECT_EQ(set.size(), 5u); |
| 119 | 111 |
| 120 EXPECT_EQ(set.erase("p1"), 1u); | 112 EXPECT_EQ(set.erase("p1"), 1u); |
| 121 EXPECT_EQ(set.size(), 4u); | 113 EXPECT_EQ(set.size(), 4u); |
| 122 | 114 |
| 123 EXPECT_EQ(set.erase("p1"), 0u); | 115 EXPECT_EQ(set.erase("p1"), 0u); |
| 124 EXPECT_EQ(set.size(), 4u); | 116 EXPECT_EQ(set.size(), 4u); |
| 125 } | 117 } |
| 126 | 118 |
| 127 TEST(ManifestPermissionSetTest, CreateUnion) { | 119 TEST_F(ManifestPermissionSetTest, CreateUnion) { |
| 128 ManifestPermissionSet permissions1; | 120 ManifestPermissionSet permissions1; |
| 129 ManifestPermissionSet permissions2; | 121 ManifestPermissionSet permissions2; |
| 130 ManifestPermissionSet expected_permissions; | 122 ManifestPermissionSet expected_permissions; |
| 131 ManifestPermissionSet result; | 123 ManifestPermissionSet result; |
| 132 | 124 |
| 133 ManifestPermission* permission = new MockManifestPermission("p3"); | 125 ManifestPermission* permission = new MockManifestPermission("p3"); |
| 134 | 126 |
| 135 // Union with an empty set. | 127 // Union with an empty set. |
| 136 permissions1.insert(new MockManifestPermission("p1")); | 128 permissions1.insert(new MockManifestPermission("p1")); |
| 137 permissions1.insert(new MockManifestPermission("p2")); | 129 permissions1.insert(new MockManifestPermission("p2")); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 EXPECT_FALSE(permissions1.Contains(permissions2)); | 173 EXPECT_FALSE(permissions1.Contains(permissions2)); |
| 182 EXPECT_FALSE(permissions1.Contains(result)); | 174 EXPECT_FALSE(permissions1.Contains(result)); |
| 183 EXPECT_FALSE(permissions2.Contains(permissions1)); | 175 EXPECT_FALSE(permissions2.Contains(permissions1)); |
| 184 EXPECT_FALSE(permissions2.Contains(result)); | 176 EXPECT_FALSE(permissions2.Contains(result)); |
| 185 EXPECT_TRUE(result.Contains(permissions1)); | 177 EXPECT_TRUE(result.Contains(permissions1)); |
| 186 EXPECT_TRUE(result.Contains(permissions2)); | 178 EXPECT_TRUE(result.Contains(permissions2)); |
| 187 | 179 |
| 188 EXPECT_EQ(expected_permissions, result); | 180 EXPECT_EQ(expected_permissions, result); |
| 189 } | 181 } |
| 190 | 182 |
| 191 TEST(ManifestPermissionSetTest, CreateIntersection) { | 183 TEST_F(ManifestPermissionSetTest, CreateIntersection) { |
| 192 ManifestPermissionSet permissions1; | 184 ManifestPermissionSet permissions1; |
| 193 ManifestPermissionSet permissions2; | 185 ManifestPermissionSet permissions2; |
| 194 ManifestPermissionSet expected_permissions; | 186 ManifestPermissionSet expected_permissions; |
| 195 ManifestPermissionSet result; | 187 ManifestPermissionSet result; |
| 196 | 188 |
| 197 // Intersection with an empty set. | 189 // Intersection with an empty set. |
| 198 permissions1.insert(new MockManifestPermission("p1")); | 190 permissions1.insert(new MockManifestPermission("p1")); |
| 199 permissions1.insert(new MockManifestPermission("p2")); | 191 permissions1.insert(new MockManifestPermission("p2")); |
| 200 permissions1.insert(new MockManifestPermission("p3")); | 192 permissions1.insert(new MockManifestPermission("p3")); |
| 201 | 193 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 224 EXPECT_TRUE(permissions1.Contains(result)); | 216 EXPECT_TRUE(permissions1.Contains(result)); |
| 225 EXPECT_TRUE(permissions2.Contains(result)); | 217 EXPECT_TRUE(permissions2.Contains(result)); |
| 226 EXPECT_FALSE(permissions1.Contains(permissions2)); | 218 EXPECT_FALSE(permissions1.Contains(permissions2)); |
| 227 EXPECT_FALSE(permissions2.Contains(permissions1)); | 219 EXPECT_FALSE(permissions2.Contains(permissions1)); |
| 228 EXPECT_FALSE(result.Contains(permissions1)); | 220 EXPECT_FALSE(result.Contains(permissions1)); |
| 229 EXPECT_FALSE(result.Contains(permissions2)); | 221 EXPECT_FALSE(result.Contains(permissions2)); |
| 230 | 222 |
| 231 EXPECT_EQ(expected_permissions, result); | 223 EXPECT_EQ(expected_permissions, result); |
| 232 } | 224 } |
| 233 | 225 |
| 234 TEST(ManifestPermissionSetTest, CreateDifference) { | 226 TEST_F(ManifestPermissionSetTest, CreateDifference) { |
| 235 ManifestPermissionSet permissions1; | 227 ManifestPermissionSet permissions1; |
| 236 ManifestPermissionSet permissions2; | 228 ManifestPermissionSet permissions2; |
| 237 ManifestPermissionSet expected_permissions; | 229 ManifestPermissionSet expected_permissions; |
| 238 ManifestPermissionSet result; | 230 ManifestPermissionSet result; |
| 239 | 231 |
| 240 // Difference with an empty set. | 232 // Difference with an empty set. |
| 241 permissions1.insert(new MockManifestPermission("p1")); | 233 permissions1.insert(new MockManifestPermission("p1")); |
| 242 permissions1.insert(new MockManifestPermission("p2")); | 234 permissions1.insert(new MockManifestPermission("p2")); |
| 243 permissions1.insert(new MockManifestPermission("p3")); | 235 permissions1.insert(new MockManifestPermission("p3")); |
| 244 | 236 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 263 EXPECT_EQ(expected_permissions, result); | 255 EXPECT_EQ(expected_permissions, result); |
| 264 | 256 |
| 265 // |result| = |permissions1| - |permissions2| --> | 257 // |result| = |permissions1| - |permissions2| --> |
| 266 // |result| intersect |permissions2| == empty_set | 258 // |result| intersect |permissions2| == empty_set |
| 267 ManifestPermissionSet result2; | 259 ManifestPermissionSet result2; |
| 268 ManifestPermissionSet::Intersection(result, permissions2, &result2); | 260 ManifestPermissionSet::Intersection(result, permissions2, &result2); |
| 269 EXPECT_TRUE(result2.empty()); | 261 EXPECT_TRUE(result2.empty()); |
| 270 } | 262 } |
| 271 | 263 |
| 272 } // namespace extensions | 264 } // namespace extensions |
| OLD | NEW |