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

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: a fistful of 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/extension_permission_set.h" 8 #include "chrome/common/extensions/extension_permission_set.h"
9 #include "chrome/common/extensions/url_pattern_set.h" 9 #include "chrome/common/extensions/url_pattern_set.h"
10 #include "googleurl/src/gurl.h" 10 #include "googleurl/src/gurl.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 using extensions::permissions_api::PackPermissionsToValue; 13 using extensions::permissions_api::PackPermissionsToValue;
14 using extensions::permissions_api::UnpackPermissionsFromValue; 14 using extensions::permissions_api::UnpackPermissionSet;
15 15
16 namespace { 16 namespace {
17 17
18 static void AddPattern(URLPatternSet* extent, const std::string& pattern) { 18 static void AddPattern(URLPatternSet* extent, const std::string& pattern) {
19 int schemes = URLPattern::SCHEME_ALL; 19 int schemes = URLPattern::SCHEME_ALL;
20 extent->AddPattern(URLPattern(schemes, pattern)); 20 extent->AddPattern(URLPattern(schemes, pattern));
21 } 21 }
22 22
23 } // namespace 23 } // namespace
24 24
(...skipping 29 matching lines...) Expand all
54 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected_origins); ++i) { 54 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected_origins); ++i) {
55 scoped_ptr<Value> value(Value::CreateStringValue(expected_origins[i])); 55 scoped_ptr<Value> value(Value::CreateStringValue(expected_origins[i]));
56 ASSERT_NE(origin_list->end(), origin_list->Find(*value)); 56 ASSERT_NE(origin_list->end(), origin_list->Find(*value));
57 } 57 }
58 58
59 // Unpack the value back to a permission set and make sure its equal to the 59 // Unpack the value back to a permission set and make sure its equal to the
60 // original one. 60 // original one.
61 scoped_refptr<ExtensionPermissionSet> from_value; 61 scoped_refptr<ExtensionPermissionSet> from_value;
62 bool bad_message = false; 62 bool bad_message = false;
63 std::string error; 63 std::string error;
64 ASSERT_TRUE(UnpackPermissionsFromValue( 64 ASSERT_TRUE(UnpackPermissionSet(
Yoyo Zhou 2012/01/19 23:19:11 This file looks like it needs more changes than ju
calamity 2012/01/23 05:14:45 Done.
65 value.get(), &from_value, &bad_message, &error)); 65 value.get(), &from_value, &bad_message, &error));
66 ASSERT_FALSE(bad_message); 66 ASSERT_FALSE(bad_message);
67 ASSERT_TRUE(error.empty()); 67 ASSERT_TRUE(error.empty());
68 68
69 ASSERT_EQ(*permissions, *from_value); 69 ASSERT_EQ(*permissions, *from_value);
70 } 70 }
71 71
72 // Tests various error conditions and edge cases when unpacking values 72 // Tests various error conditions and edge cases when unpacking values
73 // into ExtensionPermissionSets. 73 // into ExtensionPermissionSets.
74 TEST(ExtensionPermissionsAPIHelpers, Unpack) { 74 TEST(ExtensionPermissionsAPIHelpers, Unpack) {
75 scoped_ptr<ListValue> apis(new ListValue()); 75 scoped_ptr<ListValue> apis(new ListValue());
76 apis->Append(Value::CreateStringValue("tabs")); 76 apis->Append(Value::CreateStringValue("tabs"));
77 scoped_ptr<ListValue> origins(new ListValue()); 77 scoped_ptr<ListValue> origins(new ListValue());
78 origins->Append(Value::CreateStringValue("http://a.com/*")); 78 origins->Append(Value::CreateStringValue("http://a.com/*"));
79 79
80 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 80 scoped_ptr<DictionaryValue> value(new DictionaryValue());
81 scoped_refptr<ExtensionPermissionSet> permissions; 81 scoped_refptr<ExtensionPermissionSet> permissions;
82 bool bad_message = false; 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 value->Set("permissions", apis->DeepCopy());
87 ASSERT_TRUE(UnpackPermissionsFromValue( 87 ASSERT_TRUE(UnpackPermissionSet(
88 value.get(), &permissions, &bad_message, &error)); 88 value.get(), &permissions, &bad_message, &error));
89 ASSERT_TRUE(permissions->HasAPIPermission(ExtensionAPIPermission::kTab)); 89 ASSERT_TRUE(permissions->HasAPIPermission(ExtensionAPIPermission::kTab));
90 ASSERT_FALSE(bad_message); 90 ASSERT_FALSE(bad_message);
91 ASSERT_TRUE(error.empty()); 91 ASSERT_TRUE(error.empty());
92 92
93 // The api permissions don't need to be present either. 93 // The api permissions don't need to be present either.
94 value->Clear(); 94 value->Clear();
95 value->Set("origins", origins->DeepCopy()); 95 value->Set("origins", origins->DeepCopy());
96 ASSERT_TRUE(UnpackPermissionsFromValue( 96 ASSERT_TRUE(UnpackPermissionSet(
97 value.get(), &permissions, &bad_message, &error)); 97 value.get(), &permissions, &bad_message, &error));
98 ASSERT_FALSE(bad_message); 98 ASSERT_FALSE(bad_message);
99 ASSERT_TRUE(error.empty()); 99 ASSERT_TRUE(error.empty());
100 ASSERT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); 100 ASSERT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/")));
101 101
102 // Throw errors for non-string API permissions. 102 // Throw errors for non-string API permissions.
103 value->Clear(); 103 value->Clear();
104 scoped_ptr<ListValue> invalid_apis(apis->DeepCopy()); 104 scoped_ptr<ListValue> invalid_apis(apis->DeepCopy());
105 invalid_apis->Append(Value::CreateIntegerValue(3)); 105 invalid_apis->Append(Value::CreateIntegerValue(3));
106 value->Set("permissions", invalid_apis->DeepCopy()); 106 value->Set("permissions", invalid_apis->DeepCopy());
107 ASSERT_FALSE(UnpackPermissionsFromValue( 107 ASSERT_FALSE(UnpackPermissionSet(
108 value.get(), &permissions, &bad_message, &error)); 108 value.get(), &permissions, &bad_message, &error));
109 ASSERT_TRUE(bad_message); 109 ASSERT_TRUE(bad_message);
110 bad_message = false; 110 bad_message = false;
111 111
112 // Throw errors for non-string origins. 112 // Throw errors for non-string origins.
113 value->Clear(); 113 value->Clear();
114 scoped_ptr<ListValue> invalid_origins(origins->DeepCopy()); 114 scoped_ptr<ListValue> invalid_origins(origins->DeepCopy());
115 invalid_origins->Append(Value::CreateIntegerValue(3)); 115 invalid_origins->Append(Value::CreateIntegerValue(3));
116 value->Set("origins", invalid_origins->DeepCopy()); 116 value->Set("origins", invalid_origins->DeepCopy());
117 ASSERT_FALSE(UnpackPermissionsFromValue( 117 ASSERT_FALSE(UnpackPermissionSet(
118 value.get(), &permissions, &bad_message, &error)); 118 value.get(), &permissions, &bad_message, &error));
119 ASSERT_TRUE(bad_message); 119 ASSERT_TRUE(bad_message);
120 bad_message = false; 120 bad_message = false;
121 121
122 // Throw errors when "origins" or "permissions" are not list values. 122 // Throw errors when "origins" or "permissions" are not list values.
123 value->Clear(); 123 value->Clear();
124 value->Set("origins", Value::CreateIntegerValue(2)); 124 value->Set("origins", Value::CreateIntegerValue(2));
125 ASSERT_FALSE(UnpackPermissionsFromValue( 125 ASSERT_FALSE(UnpackPermissionSet(
126 value.get(), &permissions, &bad_message, &error)); 126 value.get(), &permissions, &bad_message, &error));
127 ASSERT_TRUE(bad_message); 127 ASSERT_TRUE(bad_message);
128 bad_message = false; 128 bad_message = false;
129 129
130 value->Clear(); 130 value->Clear();
131 value->Set("permissions", Value::CreateIntegerValue(2)); 131 value->Set("permissions", Value::CreateIntegerValue(2));
132 ASSERT_FALSE(UnpackPermissionsFromValue( 132 ASSERT_FALSE(UnpackPermissionSet(
133 value.get(), &permissions, &bad_message, &error)); 133 value.get(), &permissions, &bad_message, &error));
134 ASSERT_TRUE(bad_message); 134 ASSERT_TRUE(bad_message);
135 bad_message = false; 135 bad_message = false;
136 136
137 // Additional fields should be allowed. 137 // Additional fields should be allowed.
138 value->Clear(); 138 value->Clear();
139 value->Set("origins", origins->DeepCopy()); 139 value->Set("origins", origins->DeepCopy());
140 value->Set("random", Value::CreateIntegerValue(3)); 140 value->Set("random", Value::CreateIntegerValue(3));
141 ASSERT_TRUE(UnpackPermissionsFromValue( 141 ASSERT_TRUE(UnpackPermissionSet(
142 value.get(), &permissions, &bad_message, &error)); 142 value.get(), &permissions, &bad_message, &error));
143 ASSERT_FALSE(bad_message); 143 ASSERT_FALSE(bad_message);
144 ASSERT_TRUE(error.empty()); 144 ASSERT_TRUE(error.empty());
145 ASSERT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); 145 ASSERT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/")));
146 146
147 // Unknown permissions should throw an error but not set the bad_message bit. 147 // Unknown permissions should throw an error but not set the bad_message bit.
148 value->Clear(); 148 value->Clear();
149 invalid_apis.reset(apis->DeepCopy()); 149 invalid_apis.reset(apis->DeepCopy());
150 invalid_apis->Append(Value::CreateStringValue("unknown_permission")); 150 invalid_apis->Append(Value::CreateStringValue("unknown_permission"));
151 value->Set("permissions", invalid_apis->DeepCopy()); 151 value->Set("permissions", invalid_apis->DeepCopy());
152 ASSERT_FALSE(UnpackPermissionsFromValue( 152 ASSERT_FALSE(UnpackPermissionSet(
153 value.get(), &permissions, &bad_message, &error)); 153 value.get(), &permissions, &bad_message, &error));
154 ASSERT_FALSE(bad_message); 154 ASSERT_FALSE(bad_message);
155 ASSERT_FALSE(error.empty()); 155 ASSERT_FALSE(error.empty());
156 ASSERT_EQ(error, "'unknown_permission' is not a recognized permission."); 156 ASSERT_EQ(error, "'unknown_permission' is not a recognized permission.");
157 } 157 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698