1 // Copyright 2018 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 "chrome/browser/extensions/permissions_test_util.h"
6
7 #include "base/run_loop.h"
8 #include "chrome/common/webui_url_constants.h"
9 #include "content/public/browser/browser_context.h"
10 #include "extensions/common/extension.h"
11 #include "extensions/common/permissions/permission_set.h"
12
13 namespace extensions {
14 namespace permissions_test_util {
15
GetPatternsAsStrings(const URLPatternSet & patterns)16 std::vector<std::string> GetPatternsAsStrings(const URLPatternSet& patterns) {
17 std::vector<std::string> pattern_strings;
18 pattern_strings.reserve(patterns.size());
19 for (const auto& pattern : patterns) {
20 // chrome://favicon/ is automatically added as a pattern when the extension
21 // requests access to <all_urls>, but isn't really a host pattern (it allows
22 // the extension to retrieve a favicon for a given URL). Just ignore it when
23 // generating host sets.
24 std::string pattern_string = pattern.GetAsString();
25 if (pattern_string != std::string(chrome::kChromeUIFaviconURL) + "*")
26 pattern_strings.push_back(pattern_string);
27 }
28
29 return pattern_strings;
30 }
31
GrantOptionalPermissionsAndWaitForCompletion(content::BrowserContext * browser_context,const Extension & extension,const PermissionSet & permissions)32 void GrantOptionalPermissionsAndWaitForCompletion(
33 content::BrowserContext* browser_context,
34 const Extension& extension,
35 const PermissionSet& permissions) {
36 base::RunLoop run_loop;
37 PermissionsUpdater(browser_context)
38 .GrantOptionalPermissions(extension, permissions, run_loop.QuitClosure());
39 run_loop.Run();
40 }
41
GrantRuntimePermissionsAndWaitForCompletion(content::BrowserContext * browser_context,const Extension & extension,const PermissionSet & permissions)42 void GrantRuntimePermissionsAndWaitForCompletion(
43 content::BrowserContext* browser_context,
44 const Extension& extension,
45 const PermissionSet& permissions) {
46 base::RunLoop run_loop;
47 PermissionsUpdater(browser_context)
48 .GrantRuntimePermissions(extension, permissions, run_loop.QuitClosure());
49 run_loop.Run();
50 }
51
RevokeOptionalPermissionsAndWaitForCompletion(content::BrowserContext * browser_context,const Extension & extension,const PermissionSet & permissions,PermissionsUpdater::RemoveType remove_type)52 void RevokeOptionalPermissionsAndWaitForCompletion(
53 content::BrowserContext* browser_context,
54 const Extension& extension,
55 const PermissionSet& permissions,
56 PermissionsUpdater::RemoveType remove_type) {
57 base::RunLoop run_loop;
58 PermissionsUpdater(browser_context)
59 .RevokeOptionalPermissions(extension, permissions, remove_type,
60 run_loop.QuitClosure());
61 run_loop.Run();
62 }
63
RevokeRuntimePermissionsAndWaitForCompletion(content::BrowserContext * browser_context,const Extension & extension,const PermissionSet & permissions)64 void RevokeRuntimePermissionsAndWaitForCompletion(
65 content::BrowserContext* browser_context,
66 const Extension& extension,
67 const PermissionSet& permissions) {
68 base::RunLoop run_loop;
69 PermissionsUpdater(browser_context)
70 .RevokeRuntimePermissions(extension, permissions, run_loop.QuitClosure());
71 run_loop.Run();
72 }
73
74 } // namespace permissions_test_util
75 } // namespace extensions
76