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