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

Side by Side Diff: extensions/common/permissions/permissions_data_unittest.cc

Issue 293003008: Make ActiveScriptController use Active Tab-style permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Latest master for CQ Created 6 years, 7 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
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 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 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 <vector> 5 #include <vector>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/common/chrome_version_info.h" 11 #include "chrome/common/chrome_version_info.h"
12 #include "chrome/common/extensions/extension_test_util.h" 12 #include "chrome/common/extensions/extension_test_util.h"
13 #include "chrome/common/extensions/features/feature_channel.h" 13 #include "chrome/common/extensions/features/feature_channel.h"
14 #include "content/public/common/socket_permission_request.h" 14 #include "content/public/common/socket_permission_request.h"
15 #include "extensions/common/error_utils.h" 15 #include "extensions/common/error_utils.h"
16 #include "extensions/common/extension.h" 16 #include "extensions/common/extension.h"
17 #include "extensions/common/extension_builder.h"
17 #include "extensions/common/id_util.h" 18 #include "extensions/common/id_util.h"
19 #include "extensions/common/manifest.h"
18 #include "extensions/common/manifest_constants.h" 20 #include "extensions/common/manifest_constants.h"
19 #include "extensions/common/permissions/api_permission.h" 21 #include "extensions/common/permissions/api_permission.h"
20 #include "extensions/common/permissions/permission_set.h" 22 #include "extensions/common/permissions/permission_set.h"
21 #include "extensions/common/permissions/permissions_data.h" 23 #include "extensions/common/permissions/permissions_data.h"
22 #include "extensions/common/permissions/socket_permission.h" 24 #include "extensions/common/permissions/socket_permission.h"
23 #include "extensions/common/switches.h" 25 #include "extensions/common/switches.h"
24 #include "extensions/common/url_pattern_set.h" 26 #include "extensions/common/url_pattern_set.h"
27 #include "extensions/common/value_builder.h"
25 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
29 #include "url/gurl.h"
26 30
27 using base::UTF16ToUTF8; 31 using base::UTF16ToUTF8;
28 using content::SocketPermissionRequest; 32 using content::SocketPermissionRequest;
29 using extension_test_util::LoadManifest; 33 using extension_test_util::LoadManifest;
30 using extension_test_util::LoadManifestUnchecked; 34 using extension_test_util::LoadManifestUnchecked;
31 using extension_test_util::LoadManifestStrict; 35 using extension_test_util::LoadManifestStrict;
32 36
33 namespace extensions { 37 namespace extensions {
34 38
35 namespace { 39 namespace {
36 40
41 const char kAllHostsPermission[] = "*://*/*";
42
37 bool CheckSocketPermission( 43 bool CheckSocketPermission(
38 scoped_refptr<Extension> extension, 44 scoped_refptr<Extension> extension,
39 SocketPermissionRequest::OperationType type, 45 SocketPermissionRequest::OperationType type,
40 const char* host, 46 const char* host,
41 int port) { 47 int port) {
42 SocketPermission::CheckParam param(type, host, port); 48 SocketPermission::CheckParam param(type, host, port);
43 return PermissionsData::CheckAPIPermissionWithParam( 49 return PermissionsData::CheckAPIPermissionWithParam(
44 extension.get(), APIPermission::kSocket, &param); 50 extension.get(), APIPermission::kSocket, &param);
45 } 51 }
46 52
53 // Creates and returns an extension with the given |id|, |host_permissions|, and
54 // manifest |location|.
55 scoped_refptr<const Extension> GetExtensionWithHostPermission(
56 const std::string& id,
57 const std::string& host_permissions,
58 Manifest::Location location) {
59 ListBuilder permissions;
60 if (!host_permissions.empty())
61 permissions.Append(host_permissions);
62
63 return ExtensionBuilder()
64 .SetManifest(
65 DictionaryBuilder()
66 .Set("name", id)
67 .Set("description", "an extension")
68 .Set("manifest_version", 2)
69 .Set("version", "1.0.0")
70 .Set("permissions", permissions.Pass())
71 .Build())
72 .SetLocation(location)
73 .SetID(id)
74 .Build();
75 }
76
77 bool RequiresActionForScriptExecution(const std::string& extension_id,
78 const std::string& host_permissions,
79 Manifest::Location location) {
80 scoped_refptr<const Extension> extension =
81 GetExtensionWithHostPermission(extension_id,
82 host_permissions,
83 location);
84 return PermissionsData::RequiresActionForScriptExecution(
85 extension,
86 -1, // Ignore tab id for these.
87 GURL::EmptyGURL());
88 }
89
47 } // namespace 90 } // namespace
48 91
49 TEST(ExtensionPermissionsTest, EffectiveHostPermissions) { 92 TEST(ExtensionPermissionsTest, EffectiveHostPermissions) {
50 scoped_refptr<Extension> extension; 93 scoped_refptr<Extension> extension;
51 URLPatternSet hosts; 94 URLPatternSet hosts;
52 95
53 extension = LoadManifest("effective_host_permissions", "empty.json"); 96 extension = LoadManifest("effective_host_permissions", "empty.json");
54 EXPECT_EQ(0u, 97 EXPECT_EQ(0u,
55 PermissionsData::GetEffectiveHostPermissions(extension.get()) 98 PermissionsData::GetEffectiveHostPermissions(extension.get())
56 .patterns().size()); 99 .patterns().size());
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 extension, SocketPermissionRequest::UDP_BIND, "", 8888)); 189 extension, SocketPermissionRequest::UDP_BIND, "", 8888));
147 190
148 EXPECT_FALSE(CheckSocketPermission( 191 EXPECT_FALSE(CheckSocketPermission(
149 extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900)); 192 extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900));
150 EXPECT_TRUE(CheckSocketPermission( 193 EXPECT_TRUE(CheckSocketPermission(
151 extension, 194 extension,
152 SocketPermissionRequest::UDP_SEND_TO, 195 SocketPermissionRequest::UDP_SEND_TO,
153 "239.255.255.250", 1900)); 196 "239.255.255.250", 1900));
154 } 197 }
155 198
199 TEST(ExtensionPermissionsTest, RequiresActionForScriptExecution) {
200 // Extensions with all_hosts should require action.
201 EXPECT_TRUE(RequiresActionForScriptExecution(
202 "all_hosts_permissions", kAllHostsPermission, Manifest::INTERNAL));
203 // Extensions with nearly all hosts are treated the same way.
204 EXPECT_TRUE(RequiresActionForScriptExecution(
205 "pseudo_all_hosts_permissions", "*://*.com/*", Manifest::INTERNAL));
206 // Extensions with explicit permissions shouldn't require action.
207 EXPECT_FALSE(RequiresActionForScriptExecution(
208 "explicit_permissions", "https://www.google.com/*", Manifest::INTERNAL));
209 // Policy extensions are exempt...
210 EXPECT_FALSE(RequiresActionForScriptExecution(
211 "policy", kAllHostsPermission, Manifest::EXTERNAL_POLICY));
212 // ... as are component extensions.
213 EXPECT_FALSE(RequiresActionForScriptExecution(
214 "component", kAllHostsPermission, Manifest::COMPONENT));
215 // Throw in an external pref extension to make sure that it's not just working
216 // for everything non-internal.
217 EXPECT_TRUE(RequiresActionForScriptExecution(
218 "external_pref", kAllHostsPermission, Manifest::EXTERNAL_PREF));
219
220 // If we grant an extension tab permissions, then it should no longer require
221 // action.
222 scoped_refptr<const Extension> extension =
223 GetExtensionWithHostPermission("all_hosts_permissions",
224 kAllHostsPermission,
225 Manifest::INTERNAL);
226 URLPatternSet allowed_hosts;
227 allowed_hosts.AddPattern(
228 URLPattern(URLPattern::SCHEME_HTTPS, "https://www.google.com/*"));
229 scoped_refptr<PermissionSet> tab_permissions(
230 new PermissionSet(APIPermissionSet(),
231 ManifestPermissionSet(),
232 allowed_hosts,
233 URLPatternSet()));
234 PermissionsData::UpdateTabSpecificPermissions(extension, 0, tab_permissions);
235 EXPECT_FALSE(PermissionsData::RequiresActionForScriptExecution(
236 extension, 0, GURL("https://www.google.com/")));
237 }
238
156 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyAPIPermissions) { 239 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyAPIPermissions) {
157 scoped_refptr<Extension> extension; 240 scoped_refptr<Extension> extension;
158 extension = LoadManifest("permissions", "many-apis.json"); 241 extension = LoadManifest("permissions", "many-apis.json");
159 std::vector<base::string16> warnings = 242 std::vector<base::string16> warnings =
160 PermissionsData::GetPermissionMessageStrings(extension.get()); 243 PermissionsData::GetPermissionMessageStrings(extension.get());
161 // Warning for "tabs" is suppressed by "history" permission. 244 // Warning for "tabs" is suppressed by "history" permission.
162 ASSERT_EQ(5u, warnings.size()); 245 ASSERT_EQ(5u, warnings.size());
163 EXPECT_EQ("Access your data on api.flickr.com", 246 EXPECT_EQ("Access your data on api.flickr.com",
164 UTF16ToUTF8(warnings[0])); 247 UTF16ToUTF8(warnings[0]));
165 EXPECT_EQ("Read and modify your bookmarks", UTF16ToUTF8(warnings[1])); 248 EXPECT_EQ("Read and modify your bookmarks", UTF16ToUTF8(warnings[1]));
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 PermissionsData::ClearTabSpecificPermissions(extension.get(), 1); 715 PermissionsData::ClearTabSpecificPermissions(extension.get(), 1);
633 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) 716 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1)
634 .get()); 717 .get());
635 718
636 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); 719 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0));
637 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); 720 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1));
638 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); 721 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2));
639 } 722 }
640 723
641 } // namespace extensions 724 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/permissions/permissions_data.cc ('k') | extensions/renderer/user_script_slave.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698