| 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 "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" | 5 #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> |
| 10 | 11 |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ptr_util.h" |
| 12 #include "base/values.h" | 14 #include "base/values.h" |
| 13 #include "chrome/common/extensions/api/permissions.h" | 15 #include "chrome/common/extensions/api/permissions.h" |
| 14 #include "extensions/common/permissions/permission_set.h" | 16 #include "extensions/common/permissions/permission_set.h" |
| 15 #include "extensions/common/url_pattern_set.h" | 17 #include "extensions/common/url_pattern_set.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "url/gurl.h" | 19 #include "url/gurl.h" |
| 18 | 20 |
| 19 using extensions::api::permissions::Permissions; | 21 using extensions::api::permissions::Permissions; |
| 20 using extensions::permissions_api_helpers::PackPermissionSet; | 22 using extensions::permissions_api_helpers::PackPermissionSet; |
| 21 using extensions::permissions_api_helpers::UnpackPermissionSet; | 23 using extensions::permissions_api_helpers::UnpackPermissionSet; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 std::unique_ptr<base::ListValue> origins(new base::ListValue()); | 90 std::unique_ptr<base::ListValue> origins(new base::ListValue()); |
| 89 origins->AppendString("http://a.com/*"); | 91 origins->AppendString("http://a.com/*"); |
| 90 | 92 |
| 91 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 93 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 92 std::unique_ptr<const PermissionSet> permissions; | 94 std::unique_ptr<const PermissionSet> permissions; |
| 93 std::string error; | 95 std::string error; |
| 94 | 96 |
| 95 // Origins shouldn't have to be present. | 97 // Origins shouldn't have to be present. |
| 96 { | 98 { |
| 97 Permissions permissions_object; | 99 Permissions permissions_object; |
| 98 value->Set("permissions", apis->DeepCopy()); | 100 value->Set("permissions", apis->CreateDeepCopy()); |
| 99 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 101 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
| 100 permissions = UnpackPermissionSet(permissions_object, true, &error); | 102 permissions = UnpackPermissionSet(permissions_object, true, &error); |
| 101 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kTab)); | 103 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kTab)); |
| 102 EXPECT_TRUE(permissions.get()); | 104 EXPECT_TRUE(permissions.get()); |
| 103 EXPECT_TRUE(error.empty()); | 105 EXPECT_TRUE(error.empty()); |
| 104 } | 106 } |
| 105 | 107 |
| 106 // The api permissions don't need to be present either. | 108 // The api permissions don't need to be present either. |
| 107 { | 109 { |
| 108 Permissions permissions_object; | 110 Permissions permissions_object; |
| 109 value->Clear(); | 111 value->Clear(); |
| 110 value->Set("origins", origins->DeepCopy()); | 112 value->Set("origins", origins->CreateDeepCopy()); |
| 111 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 113 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
| 112 permissions = UnpackPermissionSet(permissions_object, true, &error); | 114 permissions = UnpackPermissionSet(permissions_object, true, &error); |
| 113 EXPECT_TRUE(permissions.get()); | 115 EXPECT_TRUE(permissions.get()); |
| 114 EXPECT_TRUE(error.empty()); | 116 EXPECT_TRUE(error.empty()); |
| 115 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); | 117 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); |
| 116 } | 118 } |
| 117 | 119 |
| 118 // Throw errors for non-string API permissions. | 120 // Throw errors for non-string API permissions. |
| 119 { | 121 { |
| 120 Permissions permissions_object; | 122 Permissions permissions_object; |
| 121 value->Clear(); | 123 value->Clear(); |
| 122 std::unique_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); | 124 std::unique_ptr<base::ListValue> invalid_apis = apis->CreateDeepCopy(); |
| 123 invalid_apis->AppendInteger(3); | 125 invalid_apis->AppendInteger(3); |
| 124 value->Set("permissions", invalid_apis->DeepCopy()); | 126 value->Set("permissions", std::move(invalid_apis)); |
| 125 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 127 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
| 126 } | 128 } |
| 127 | 129 |
| 128 // Throw errors for non-string origins. | 130 // Throw errors for non-string origins. |
| 129 { | 131 { |
| 130 Permissions permissions_object; | 132 Permissions permissions_object; |
| 131 value->Clear(); | 133 value->Clear(); |
| 132 std::unique_ptr<base::ListValue> invalid_origins(origins->DeepCopy()); | 134 std::unique_ptr<base::ListValue> invalid_origins = |
| 135 origins->CreateDeepCopy(); |
| 133 invalid_origins->AppendInteger(3); | 136 invalid_origins->AppendInteger(3); |
| 134 value->Set("origins", invalid_origins->DeepCopy()); | 137 value->Set("origins", std::move(invalid_origins)); |
| 135 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 138 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
| 136 } | 139 } |
| 137 | 140 |
| 138 // Throw errors when "origins" or "permissions" are not list values. | 141 // Throw errors when "origins" or "permissions" are not list values. |
| 139 { | 142 { |
| 140 Permissions permissions_object; | 143 Permissions permissions_object; |
| 141 value->Clear(); | 144 value->Clear(); |
| 142 value->Set("origins", new base::Value(2)); | 145 value->Set("origins", base::MakeUnique<base::Value>(2)); |
| 143 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 146 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
| 144 } | 147 } |
| 145 | 148 |
| 146 { | 149 { |
| 147 Permissions permissions_object; | 150 Permissions permissions_object; |
| 148 value->Clear(); | 151 value->Clear(); |
| 149 value->Set("permissions", new base::Value(2)); | 152 value->Set("permissions", base::MakeUnique<base::Value>(2)); |
| 150 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 153 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
| 151 } | 154 } |
| 152 | 155 |
| 153 // Additional fields should be allowed. | 156 // Additional fields should be allowed. |
| 154 { | 157 { |
| 155 Permissions permissions_object; | 158 Permissions permissions_object; |
| 156 value->Clear(); | 159 value->Clear(); |
| 157 value->Set("origins", origins->DeepCopy()); | 160 value->Set("origins", origins->CreateDeepCopy()); |
| 158 value->Set("random", new base::Value(3)); | 161 value->Set("random", base::MakeUnique<base::Value>(3)); |
| 159 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 162 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
| 160 permissions = UnpackPermissionSet(permissions_object, true, &error); | 163 permissions = UnpackPermissionSet(permissions_object, true, &error); |
| 161 EXPECT_TRUE(permissions.get()); | 164 EXPECT_TRUE(permissions.get()); |
| 162 EXPECT_TRUE(error.empty()); | 165 EXPECT_TRUE(error.empty()); |
| 163 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); | 166 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); |
| 164 } | 167 } |
| 165 | 168 |
| 166 // Unknown permissions should throw an error. | 169 // Unknown permissions should throw an error. |
| 167 { | 170 { |
| 168 Permissions permissions_object; | 171 Permissions permissions_object; |
| 169 value->Clear(); | 172 value->Clear(); |
| 170 std::unique_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); | 173 std::unique_ptr<base::ListValue> invalid_apis = apis->CreateDeepCopy(); |
| 171 invalid_apis->AppendString("unknown_permission"); | 174 invalid_apis->AppendString("unknown_permission"); |
| 172 value->Set("permissions", invalid_apis->DeepCopy()); | 175 value->Set("permissions", std::move(invalid_apis)); |
| 173 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 176 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
| 174 permissions = UnpackPermissionSet(permissions_object, true, &error); | 177 permissions = UnpackPermissionSet(permissions_object, true, &error); |
| 175 EXPECT_FALSE(permissions.get()); | 178 EXPECT_FALSE(permissions.get()); |
| 176 EXPECT_FALSE(error.empty()); | 179 EXPECT_FALSE(error.empty()); |
| 177 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission."); | 180 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission."); |
| 178 } | 181 } |
| 179 } | 182 } |
| 180 | 183 |
| 181 } // namespace extensions | 184 } // namespace extensions |
| OLD | NEW |