Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Side by Side Diff: chrome/browser/extensions/extension_permissions_api_helpers_unittest.cc

Issue 9114036: Code generation for extensions api (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: switched namespaces, various rework Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/values.h" 6 #include "base/values.h"
7 #include "chrome/browser/extensions/extension_permissions_api_helpers.h" 7 #include "chrome/browser/extensions/extension_permissions_api_helpers.h"
8 #include "chrome/common/extensions/api/permissions.h"
8 #include "chrome/common/extensions/extension_permission_set.h" 9 #include "chrome/common/extensions/extension_permission_set.h"
9 #include "chrome/common/extensions/url_pattern_set.h" 10 #include "chrome/common/extensions/url_pattern_set.h"
10 #include "googleurl/src/gurl.h" 11 #include "googleurl/src/gurl.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
13 using extensions::permissions_api::PackPermissionsToValue; 14 using extensions::permissions_api_helpers::PackPermissionsToValue;
14 using extensions::permissions_api::UnpackPermissionsFromValue; 15 using extensions::permissions_api_helpers::UnpackPermissionSet;
16 using extensions::api::permissions::Permissions;
15 17
16 namespace { 18 namespace {
17 19
18 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { 20 static void AddPattern(URLPatternSet* extent, const std::string& pattern) {
19 int schemes = URLPattern::SCHEME_ALL; 21 int schemes = URLPattern::SCHEME_ALL;
20 extent->AddPattern(URLPattern(schemes, pattern)); 22 extent->AddPattern(URLPattern(schemes, pattern));
21 } 23 }
22 24
23 } // namespace 25 } // namespace
24 26
25 // Tests that we can convert ExtensionPermissionSets to and from values. 27 // Tests that we can convert ExtensionPermissionSets to and from values.
26 TEST(ExtensionPermissionsAPIHelpers, Pack) { 28 TEST(ExtensionPermissionsAPIHelpers, Pack) {
27 ExtensionAPIPermissionSet apis; 29 ExtensionAPIPermissionSet apis;
28 apis.insert(ExtensionAPIPermission::kTab); 30 apis.insert(ExtensionAPIPermission::kTab);
29 apis.insert(ExtensionAPIPermission::kWebRequest); 31 apis.insert(ExtensionAPIPermission::kWebRequest);
30 URLPatternSet hosts; 32 URLPatternSet hosts;
31 AddPattern(&hosts, "http://a.com/*"); 33 AddPattern(&hosts, "http://a.com/*");
32 AddPattern(&hosts, "http://b.com/*"); 34 AddPattern(&hosts, "http://b.com/*");
33 35
34 scoped_refptr<ExtensionPermissionSet> permissions = 36 scoped_refptr<ExtensionPermissionSet> permissions =
35 new ExtensionPermissionSet(apis, hosts, URLPatternSet()); 37 new ExtensionPermissionSet(apis, hosts, URLPatternSet());
36 38
37 // Pack the permission set to value and verify its contents. 39 // Pack the permission set to value and verify its contents.
38 scoped_ptr<DictionaryValue> value(PackPermissionsToValue(permissions)); 40 scoped_ptr<DictionaryValue> value(PackPermissionsToValue(permissions));
39 ListValue* api_list = NULL; 41 ListValue* api_list = NULL;
40 ListValue* origin_list = NULL; 42 ListValue* origin_list = NULL;
41 ASSERT_TRUE(value->GetList("permissions", &api_list)); 43 EXPECT_TRUE(value->GetList("permissions", &api_list));
42 ASSERT_TRUE(value->GetList("origins", &origin_list)); 44 EXPECT_TRUE(value->GetList("origins", &origin_list));
43 45
44 ASSERT_EQ(2u, api_list->GetSize()); 46 EXPECT_EQ(2u, api_list->GetSize());
45 ASSERT_EQ(2u, origin_list->GetSize()); 47 EXPECT_EQ(2u, origin_list->GetSize());
46 48
47 std::string expected_apis[] = { "tabs", "webRequest" }; 49 std::string expected_apis[] = { "tabs", "webRequest" };
48 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected_apis); ++i) { 50 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected_apis); ++i) {
49 scoped_ptr<Value> value(Value::CreateStringValue(expected_apis[i])); 51 scoped_ptr<Value> value(Value::CreateStringValue(expected_apis[i]));
50 ASSERT_NE(api_list->end(), api_list->Find(*value)); 52 EXPECT_NE(api_list->end(), api_list->Find(*value));
51 } 53 }
52 54
53 std::string expected_origins[] = { "http://a.com/*", "http://b.com/*" }; 55 std::string expected_origins[] = { "http://a.com/*", "http://b.com/*" };
54 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected_origins); ++i) { 56 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected_origins); ++i) {
55 scoped_ptr<Value> value(Value::CreateStringValue(expected_origins[i])); 57 scoped_ptr<Value> value(Value::CreateStringValue(expected_origins[i]));
56 ASSERT_NE(origin_list->end(), origin_list->Find(*value)); 58 EXPECT_NE(origin_list->end(), origin_list->Find(*value));
57 } 59 }
58 60
59 // Unpack the value back to a permission set and make sure its equal to the 61 // Unpack the value back to a permission set and make sure its equal to the
60 // original one. 62 // original one.
61 scoped_refptr<ExtensionPermissionSet> from_value; 63 scoped_refptr<ExtensionPermissionSet> from_value;
62 bool bad_message = false;
63 std::string error; 64 std::string error;
64 ASSERT_TRUE(UnpackPermissionsFromValue( 65 Permissions permissions_object;
65 value.get(), &from_value, &bad_message, &error)); 66 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object));
66 ASSERT_FALSE(bad_message); 67 from_value = UnpackPermissionSet(permissions_object, &error);
67 ASSERT_TRUE(error.empty()); 68 EXPECT_TRUE(error.empty());
68 69
69 ASSERT_EQ(*permissions, *from_value); 70 EXPECT_EQ(*permissions, *from_value);
70 } 71 }
71 72
72 // Tests various error conditions and edge cases when unpacking values 73 // Tests various error conditions and edge cases when unpacking values
73 // into ExtensionPermissionSets. 74 // into ExtensionPermissionSets.
74 TEST(ExtensionPermissionsAPIHelpers, Unpack) { 75 TEST(ExtensionPermissionsAPIHelpers, Unpack) {
75 scoped_ptr<ListValue> apis(new ListValue()); 76 scoped_ptr<ListValue> apis(new ListValue());
76 apis->Append(Value::CreateStringValue("tabs")); 77 apis->Append(Value::CreateStringValue("tabs"));
77 scoped_ptr<ListValue> origins(new ListValue()); 78 scoped_ptr<ListValue> origins(new ListValue());
78 origins->Append(Value::CreateStringValue("http://a.com/*")); 79 origins->Append(Value::CreateStringValue("http://a.com/*"));
79 80
80 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 81 scoped_ptr<DictionaryValue> value(new DictionaryValue());
81 scoped_refptr<ExtensionPermissionSet> permissions; 82 scoped_refptr<ExtensionPermissionSet> permissions;
82 bool bad_message = false;
83 std::string error; 83 std::string error;
84 84
85 // Origins shouldn't have to be present. 85 // Origins shouldn't have to be present.
86 value->Set("permissions", apis->DeepCopy()); 86 {
87 ASSERT_TRUE(UnpackPermissionsFromValue( 87 Permissions permissions_object;
88 value.get(), &permissions, &bad_message, &error)); 88 value->Set("permissions", apis->DeepCopy());
89 ASSERT_TRUE(permissions->HasAPIPermission(ExtensionAPIPermission::kTab)); 89 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object));
90 ASSERT_FALSE(bad_message); 90 permissions = UnpackPermissionSet(permissions_object, &error);
91 ASSERT_TRUE(error.empty()); 91 EXPECT_TRUE(permissions->HasAPIPermission(ExtensionAPIPermission::kTab));
92 EXPECT_TRUE(permissions);
93 EXPECT_TRUE(error.empty());
94 }
92 95
93 // The api permissions don't need to be present either. 96 // The api permissions don't need to be present either.
94 value->Clear(); 97 {
95 value->Set("origins", origins->DeepCopy()); 98 Permissions permissions_object;
96 ASSERT_TRUE(UnpackPermissionsFromValue( 99 value->Clear();
97 value.get(), &permissions, &bad_message, &error)); 100 value->Set("origins", origins->DeepCopy());
98 ASSERT_FALSE(bad_message); 101 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object));
99 ASSERT_TRUE(error.empty()); 102 permissions = UnpackPermissionSet(permissions_object, &error);
100 ASSERT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); 103 EXPECT_TRUE(permissions);
104 EXPECT_TRUE(error.empty());
105 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/")));
106 }
101 107
102 // Throw errors for non-string API permissions. 108 // Throw errors for non-string API permissions.
103 value->Clear(); 109 {
104 scoped_ptr<ListValue> invalid_apis(apis->DeepCopy()); 110 Permissions permissions_object;
105 invalid_apis->Append(Value::CreateIntegerValue(3)); 111 value->Clear();
106 value->Set("permissions", invalid_apis->DeepCopy()); 112 scoped_ptr<ListValue> invalid_apis(apis->DeepCopy());
107 ASSERT_FALSE(UnpackPermissionsFromValue( 113 invalid_apis->Append(Value::CreateIntegerValue(3));
108 value.get(), &permissions, &bad_message, &error)); 114 value->Set("permissions", invalid_apis->DeepCopy());
109 ASSERT_TRUE(bad_message); 115 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object));
110 bad_message = false; 116 }
111 117
112 // Throw errors for non-string origins. 118 // Throw errors for non-string origins.
113 value->Clear(); 119 {
114 scoped_ptr<ListValue> invalid_origins(origins->DeepCopy()); 120 Permissions permissions_object;
115 invalid_origins->Append(Value::CreateIntegerValue(3)); 121 value->Clear();
116 value->Set("origins", invalid_origins->DeepCopy()); 122 scoped_ptr<ListValue> invalid_origins(origins->DeepCopy());
117 ASSERT_FALSE(UnpackPermissionsFromValue( 123 invalid_origins->Append(Value::CreateIntegerValue(3));
118 value.get(), &permissions, &bad_message, &error)); 124 value->Set("origins", invalid_origins->DeepCopy());
119 ASSERT_TRUE(bad_message); 125 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object));
120 bad_message = false; 126 }
121 127
122 // Throw errors when "origins" or "permissions" are not list values. 128 // Throw errors when "origins" or "permissions" are not list values.
123 value->Clear(); 129 {
124 value->Set("origins", Value::CreateIntegerValue(2)); 130 Permissions permissions_object;
125 ASSERT_FALSE(UnpackPermissionsFromValue( 131 value->Clear();
126 value.get(), &permissions, &bad_message, &error)); 132 value->Set("origins", Value::CreateIntegerValue(2));
127 ASSERT_TRUE(bad_message); 133 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object));
128 bad_message = false; 134 }
129 135
130 value->Clear(); 136 {
131 value->Set("permissions", Value::CreateIntegerValue(2)); 137 Permissions permissions_object;
132 ASSERT_FALSE(UnpackPermissionsFromValue( 138 value->Clear();
133 value.get(), &permissions, &bad_message, &error)); 139 value->Set("permissions", Value::CreateIntegerValue(2));
134 ASSERT_TRUE(bad_message); 140 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object));
135 bad_message = false; 141 }
136 142
137 // Additional fields should be allowed. 143 // Additional fields should be allowed.
138 value->Clear(); 144 {
139 value->Set("origins", origins->DeepCopy()); 145 Permissions permissions_object;
140 value->Set("random", Value::CreateIntegerValue(3)); 146 value->Clear();
141 ASSERT_TRUE(UnpackPermissionsFromValue( 147 value->Set("origins", origins->DeepCopy());
142 value.get(), &permissions, &bad_message, &error)); 148 value->Set("random", Value::CreateIntegerValue(3));
143 ASSERT_FALSE(bad_message); 149 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object));
144 ASSERT_TRUE(error.empty()); 150 permissions = UnpackPermissionSet(permissions_object, &error);
145 ASSERT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); 151 EXPECT_TRUE(permissions);
152 EXPECT_TRUE(error.empty());
153 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/")));
154 }
146 155
147 // Unknown permissions should throw an error but not set the bad_message bit. 156 // Unknown permissions should throw an error.
148 value->Clear(); 157 {
149 invalid_apis.reset(apis->DeepCopy()); 158 Permissions permissions_object;
150 invalid_apis->Append(Value::CreateStringValue("unknown_permission")); 159 value->Clear();
151 value->Set("permissions", invalid_apis->DeepCopy()); 160 scoped_ptr<ListValue> invalid_apis(apis->DeepCopy());
152 ASSERT_FALSE(UnpackPermissionsFromValue( 161 invalid_apis->Append(Value::CreateStringValue("unknown_permission"));
153 value.get(), &permissions, &bad_message, &error)); 162 value->Set("permissions", invalid_apis->DeepCopy());
154 ASSERT_FALSE(bad_message); 163 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object));
155 ASSERT_FALSE(error.empty()); 164 permissions = UnpackPermissionSet(permissions_object, &error);
156 ASSERT_EQ(error, "'unknown_permission' is not a recognized permission."); 165 EXPECT_FALSE(permissions);
166 EXPECT_FALSE(error.empty());
167 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission.");
168 }
157 } 169 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698