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

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

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

Powered by Google App Engine
This is Rietveld 408576698