12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// These tests make sure MediaGalleriesPermission values are parsed correctly.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/api_permission.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/media_galleries_permission.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/media_galleries_permission_data.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/permissions_info.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::SocketPermissionRequest;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using extensions::SocketPermissionData;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid CheckFromValue(APIPermission* permission, base::ListValue* value,
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                    bool success_expected) {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string error;
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  std::vector<std::string> unhandled;
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(success_expected, permission->FromValue(value, &error, &unhandled));
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(success_expected, error.empty());
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_TRUE(unhandled.empty());
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(MediaGalleriesPermissionTest, GoodValues) {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const APIPermissionInfo* permission_info =
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<APIPermission> permission(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      permission_info->CreateAPIPermission());
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // access_type + all_detected
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> value(new base::ListValue());
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value.reset(new base::ListValue());
44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value->AppendString(MediaGalleriesPermission::kReadPermission);
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // all_detected
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value.reset(new base::ListValue());
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // access_type
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value.reset(new base::ListValue());
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value.reset(new base::ListValue());
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value.reset(new base::ListValue());
66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value->AppendString(MediaGalleriesPermission::kReadPermission);
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Repeats do not make a difference.
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value.reset(new base::ListValue());
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
77558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value.reset(new base::ListValue());
788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), true);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(MediaGalleriesPermissionTest, BadValues) {
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const APIPermissionInfo* permission_info =
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
91558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  scoped_ptr<APIPermission> permission(permission_info->CreateAPIPermission());
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Empty
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> value(new base::ListValue());
95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // copyTo and delete without read
988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value.reset(new base::ListValue());
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // copyTo without delete
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value.reset(new base::ListValue());
1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
1158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
1188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Repeats do not make a difference.
1208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
1218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
1228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
1248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
1268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
1278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
1288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  CheckFromValue(permission.get(), value.get(), false);
132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(MediaGalleriesPermissionTest, UnknownValues) {
135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  std::string error;
136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  std::vector<std::string> unhandled;
137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  const APIPermissionInfo* permission_info =
138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_ptr<APIPermission> permission(permission_info->CreateAPIPermission());
141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // A good one and an unknown one.
143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_ptr<base::ListValue> value(new base::ListValue());
144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  value->AppendString(MediaGalleriesPermission::kReadPermission);
145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  value->AppendString("Unknown");
146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_TRUE(permission->FromValue(value.get(), &error, &unhandled));
147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_TRUE(error.empty());
148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(1U, unhandled.size());
149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  error.clear();
150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  unhandled.clear();
151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Multiple unknown permissions.
153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  value.reset(new base::ListValue());
154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  value->AppendString("Unknown1");
155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  value->AppendString("Unknown2");
156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_TRUE(permission->FromValue(value.get(), &error, &unhandled));
157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_TRUE(error.empty());
158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(2U, unhandled.size());
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  error.clear();
160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  unhandled.clear();
161a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
162a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Unnknown with a NULL argument.
163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  value.reset(new base::ListValue());
164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  value->AppendString("Unknown1");
165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_FALSE(permission->FromValue(value.get(), &error, NULL));
166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_FALSE(error.empty());
167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  error.clear();
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(MediaGalleriesPermissionTest, Equal) {
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const APIPermissionInfo* permission_info =
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<APIPermission> permission1(
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      permission_info->CreateAPIPermission());
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<APIPermission> permission2(
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      permission_info->CreateAPIPermission());
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> value(new base::ListValue());
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value.reset(new base::ListValue());
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(permission1->Equal(permission2.get()));
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value.reset(new base::ListValue());
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(permission1->Equal(permission2.get()));
1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
1988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value.reset(new base::ListValue());
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(permission1->Equal(permission2.get()));
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value.reset(new base::ListValue());
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
2108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
2168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
2178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
2198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_TRUE(permission1->Equal(permission2.get()));
2208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
2218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST(MediaGalleriesPermissionTest, NotEqual) {
2238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  const APIPermissionInfo* permission_info =
2248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
2258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  scoped_ptr<APIPermission> permission1(
2278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      permission_info->CreateAPIPermission());
2288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  scoped_ptr<APIPermission> permission2(
2298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      permission_info->CreateAPIPermission());
2308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  scoped_ptr<base::ListValue> value(new base::ListValue());
2328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
2338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
2358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value.reset(new base::ListValue());
2378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
2388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
2408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL));
2428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_FALSE(permission1->Equal(permission2.get()));
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(MediaGalleriesPermissionTest, ToFromValue) {
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const APIPermissionInfo* permission_info =
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries);
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<APIPermission> permission1(
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      permission_info->CreateAPIPermission());
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<APIPermission> permission2(
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      permission_info->CreateAPIPermission());
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> value(new base::ListValue());
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission);
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> vtmp(permission1->ToValue());
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(vtmp);
261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL));
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(permission1->Equal(permission2.get()));
263558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
264558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value.reset(new base::ListValue());
2658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
267558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  value->AppendString(MediaGalleriesPermission::kCopyToPermission);
268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
269558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
270558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  vtmp = permission1->ToValue();
271558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ASSERT_TRUE(vtmp);
272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL));
273558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  EXPECT_TRUE(permission1->Equal(permission2.get()));
274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value.reset(new base::ListValue());
276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kReadPermission);
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  value->AppendString(MediaGalleriesPermission::kDeletePermission);
278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL));
279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  vtmp = permission1->ToValue();
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(vtmp);
282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL));
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(permission1->Equal(permission2.get()));
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
289