media_galleries_permission_unittest.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// These tests make sure MediaGalleriesPermission values are parsed correctly.
6
7#include "base/values.h"
8#include "extensions/common/permissions/api_permission.h"
9#include "extensions/common/permissions/media_galleries_permission.h"
10#include "extensions/common/permissions/media_galleries_permission_data.h"
11#include "extensions/common/permissions/permissions_info.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14using content::SocketPermissionRequest;
15using extensions::SocketPermissionData;
16
17namespace extensions {
18
19namespace {
20
21void CheckFromValue(APIPermission* permission, base::ListValue* value,
22                    bool success_expected) {
23  std::string error;
24  std::vector<std::string> unhandled;
25  EXPECT_EQ(success_expected, permission->FromValue(value, &error, &unhandled));
26  EXPECT_EQ(success_expected, error.empty());
27  EXPECT_TRUE(unhandled.empty());
28}
29
30TEST(MediaGalleriesPermissionTest, GoodValues) {
31  const APIPermissionInfo* permission_info =
32    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
33
34  scoped_ptr<APIPermission> permission(
35      permission_info->CreateAPIPermission());
36
37  // access_type + all_detected
38  scoped_ptr<base::ListValue> value(new base::ListValue());
39  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
40  value->AppendString(MediaGalleriesPermission::kReadPermission);
41  CheckFromValue(permission.get(), value.get(), true);
42
43  value.reset(new base::ListValue());
44  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
45  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
46  value->AppendString(MediaGalleriesPermission::kReadPermission);
47  value->AppendString(MediaGalleriesPermission::kDeletePermission);
48  CheckFromValue(permission.get(), value.get(), true);
49
50  // all_detected
51  value.reset(new base::ListValue());
52  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
53  CheckFromValue(permission.get(), value.get(), true);
54
55  // access_type
56  value.reset(new base::ListValue());
57  value->AppendString(MediaGalleriesPermission::kReadPermission);
58  CheckFromValue(permission.get(), value.get(), true);
59
60  value.reset(new base::ListValue());
61  value->AppendString(MediaGalleriesPermission::kDeletePermission);
62  value->AppendString(MediaGalleriesPermission::kReadPermission);
63  CheckFromValue(permission.get(), value.get(), true);
64
65  value.reset(new base::ListValue());
66  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
67  value->AppendString(MediaGalleriesPermission::kDeletePermission);
68  value->AppendString(MediaGalleriesPermission::kReadPermission);
69  CheckFromValue(permission.get(), value.get(), true);
70
71  // Repeats do not make a difference.
72  value.reset(new base::ListValue());
73  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
74  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
75  CheckFromValue(permission.get(), value.get(), true);
76
77  value.reset(new base::ListValue());
78  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
79  value->AppendString(MediaGalleriesPermission::kReadPermission);
80  value->AppendString(MediaGalleriesPermission::kReadPermission);
81  value->AppendString(MediaGalleriesPermission::kDeletePermission);
82  value->AppendString(MediaGalleriesPermission::kDeletePermission);
83  value->AppendString(MediaGalleriesPermission::kDeletePermission);
84  CheckFromValue(permission.get(), value.get(), true);
85}
86
87TEST(MediaGalleriesPermissionTest, BadValues) {
88  const APIPermissionInfo* permission_info =
89    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
90
91  scoped_ptr<APIPermission> permission(permission_info->CreateAPIPermission());
92
93  // Empty
94  scoped_ptr<base::ListValue> value(new base::ListValue());
95  CheckFromValue(permission.get(), value.get(), false);
96
97  // copyTo and delete without read
98  value.reset(new base::ListValue());
99  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
100  CheckFromValue(permission.get(), value.get(), false);
101
102  value.reset(new base::ListValue());
103  value->AppendString(MediaGalleriesPermission::kDeletePermission);
104  CheckFromValue(permission.get(), value.get(), false);
105
106  value.reset(new base::ListValue());
107  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
108  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
109  value->AppendString(MediaGalleriesPermission::kDeletePermission);
110  CheckFromValue(permission.get(), value.get(), false);
111
112  // copyTo without delete
113  value.reset(new base::ListValue());
114  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
115  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
116  value->AppendString(MediaGalleriesPermission::kReadPermission);
117  CheckFromValue(permission.get(), value.get(), false);
118
119  // Repeats do not make a difference.
120  value.reset(new base::ListValue());
121  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
122  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
123  CheckFromValue(permission.get(), value.get(), false);
124
125  value.reset(new base::ListValue());
126  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
127  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
128  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
129  value->AppendString(MediaGalleriesPermission::kDeletePermission);
130  value->AppendString(MediaGalleriesPermission::kDeletePermission);
131  CheckFromValue(permission.get(), value.get(), false);
132}
133
134TEST(MediaGalleriesPermissionTest, UnknownValues) {
135  std::string error;
136  std::vector<std::string> unhandled;
137  const APIPermissionInfo* permission_info =
138      PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
139
140  scoped_ptr<APIPermission> permission(permission_info->CreateAPIPermission());
141
142  // A good one and an unknown one.
143  scoped_ptr<base::ListValue> value(new base::ListValue());
144  value->AppendString(MediaGalleriesPermission::kReadPermission);
145  value->AppendString("Unknown");
146  EXPECT_TRUE(permission->FromValue(value.get(), &error, &unhandled));
147  EXPECT_TRUE(error.empty());
148  EXPECT_EQ(1U, unhandled.size());
149  error.clear();
150  unhandled.clear();
151
152  // Multiple unknown permissions.
153  value.reset(new base::ListValue());
154  value->AppendString("Unknown1");
155  value->AppendString("Unknown2");
156  EXPECT_TRUE(permission->FromValue(value.get(), &error, &unhandled));
157  EXPECT_TRUE(error.empty());
158  EXPECT_EQ(2U, unhandled.size());
159  error.clear();
160  unhandled.clear();
161}
162
163TEST(MediaGalleriesPermissionTest, Equal) {
164  const APIPermissionInfo* permission_info =
165    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
166
167  scoped_ptr<APIPermission> permission1(
168      permission_info->CreateAPIPermission());
169  scoped_ptr<APIPermission> permission2(
170      permission_info->CreateAPIPermission());
171
172  scoped_ptr<base::ListValue> value(new base::ListValue());
173  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
174  value->AppendString(MediaGalleriesPermission::kReadPermission);
175  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
176
177  value.reset(new base::ListValue());
178  value->AppendString(MediaGalleriesPermission::kReadPermission);
179  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
180  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
181  EXPECT_TRUE(permission1->Equal(permission2.get()));
182
183  value.reset(new base::ListValue());
184  value->AppendString(MediaGalleriesPermission::kReadPermission);
185  value->AppendString(MediaGalleriesPermission::kReadPermission);
186  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
187  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
188  EXPECT_TRUE(permission1->Equal(permission2.get()));
189
190  value.reset(new base::ListValue());
191  value->AppendString(MediaGalleriesPermission::kReadPermission);
192  value->AppendString(MediaGalleriesPermission::kDeletePermission);
193  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
194
195  value.reset(new base::ListValue());
196  value->AppendString(MediaGalleriesPermission::kDeletePermission);
197  value->AppendString(MediaGalleriesPermission::kReadPermission);
198  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
199  EXPECT_TRUE(permission1->Equal(permission2.get()));
200
201  value.reset(new base::ListValue());
202  value->AppendString(MediaGalleriesPermission::kReadPermission);
203  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
204  value->AppendString(MediaGalleriesPermission::kDeletePermission);
205  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
206
207  value.reset(new base::ListValue());
208  value->AppendString(MediaGalleriesPermission::kDeletePermission);
209  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
210  value->AppendString(MediaGalleriesPermission::kReadPermission);
211  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
212  EXPECT_TRUE(permission1->Equal(permission2.get()));
213}
214
215TEST(MediaGalleriesPermissionTest, NotEqual) {
216  const APIPermissionInfo* permission_info =
217    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
218
219  scoped_ptr<APIPermission> permission1(
220      permission_info->CreateAPIPermission());
221  scoped_ptr<APIPermission> permission2(
222      permission_info->CreateAPIPermission());
223
224  scoped_ptr<base::ListValue> value(new base::ListValue());
225  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
226  value->AppendString(MediaGalleriesPermission::kReadPermission);
227  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
228
229  value.reset(new base::ListValue());
230  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
231  value->AppendString(MediaGalleriesPermission::kReadPermission);
232  value->AppendString(MediaGalleriesPermission::kDeletePermission);
233  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
234  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
235  EXPECT_FALSE(permission1->Equal(permission2.get()));
236}
237
238TEST(MediaGalleriesPermissionTest, ToFromValue) {
239  const APIPermissionInfo* permission_info =
240    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
241
242  scoped_ptr<APIPermission> permission1(
243      permission_info->CreateAPIPermission());
244  scoped_ptr<APIPermission> permission2(
245      permission_info->CreateAPIPermission());
246
247  scoped_ptr<base::ListValue> value(new base::ListValue());
248  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
249  value->AppendString(MediaGalleriesPermission::kReadPermission);
250  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
251
252  scoped_ptr<base::Value> vtmp(permission1->ToValue());
253  ASSERT_TRUE(vtmp);
254  ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL));
255  EXPECT_TRUE(permission1->Equal(permission2.get()));
256
257  value.reset(new base::ListValue());
258  value->AppendString(MediaGalleriesPermission::kReadPermission);
259  value->AppendString(MediaGalleriesPermission::kDeletePermission);
260  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
261  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
262
263  vtmp = permission1->ToValue();
264  ASSERT_TRUE(vtmp);
265  ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL));
266  EXPECT_TRUE(permission1->Equal(permission2.get()));
267
268  value.reset(new base::ListValue());
269  value->AppendString(MediaGalleriesPermission::kReadPermission);
270  value->AppendString(MediaGalleriesPermission::kDeletePermission);
271  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
272
273  vtmp = permission1->ToValue();
274  ASSERT_TRUE(vtmp);
275  ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL));
276  EXPECT_TRUE(permission1->Equal(permission2.get()));
277}
278
279}  // namespace
280
281}  // namespace extensions
282