File: chrome_permission_message_provider.h

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (94 lines) | stat: -rw-r--r-- 4,003 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
#define CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_

#include <set>
#include <vector>

#include "chrome/common/extensions/permissions/chrome_permission_message_rules.h"
#include "extensions/common/permissions/permission_message_provider.h"

namespace extensions {

// Tested in two places:
// 1. chrome_permission_message_provider_unittest.cc, which is a regular unit
//    test for this class
// 2. chrome/browser/extensions/permission_messages_unittest.cc, which is an
//    integration test that ensures messages are correctly generated for
//    extensions created through the extension system.
class ChromePermissionMessageProvider : public PermissionMessageProvider {
 public:
  ChromePermissionMessageProvider();

  ChromePermissionMessageProvider(const ChromePermissionMessageProvider&) =
      delete;
  ChromePermissionMessageProvider& operator=(
      const ChromePermissionMessageProvider&) = delete;

  ~ChromePermissionMessageProvider() override;

  // PermissionMessageProvider implementation.
  PermissionMessages GetPermissionMessages(
      const PermissionIDSet& permissions) const override;
  bool IsPrivilegeIncrease(const PermissionSet& granted_permissions,
                           const PermissionSet& requested_permissions,
                           Manifest::Type extension_type) const override;
  PermissionIDSet GetAllPermissionIDs(
      const PermissionSet& permissions,
      Manifest::Type extension_type) const override;

  // Returns the permissions IDs which should trigger a warning for the user in
  // chrome://management page.
  PermissionIDSet GetManagementUIPermissionIDs(
      const PermissionSet& permissions,
      Manifest::Type extension_type) const override;

 private:
  // Adds any permission IDs from API permissions to |permission_ids|.
  void AddAPIPermissions(const PermissionSet& permissions,
                         PermissionIDSet* permission_ids) const;

  // Adds any permission IDs from manifest permissions to |permission_ids|.
  void AddManifestPermissions(const PermissionSet& permissions,
                              PermissionIDSet* permission_ids) const;

  // Adds any permission IDs from host permissions to |permission_ids|.
  void AddHostPermissions(const PermissionSet& permissions,
                          PermissionIDSet* permission_ids,
                          Manifest::Type extension_type) const;

  // Adds the IDs of API permissions which should trigger a warning in
  // chrome://management.
  void AddAPIPermissionsForManagementUIWarning(
      const PermissionSet& permissions,
      PermissionIDSet* permission_ids) const;

  // Adds the IDs of manifest permissions which should trigger a warning in
  // chrome://management.
  void AddManifestPermissionsForManagementUIWarning(
      const PermissionSet& permissions,
      PermissionIDSet* permission_ids) const;

  // Returns true if |requested_permissions| has an elevated API or manifest
  // privilege level compared to |granted_permissions|.
  bool IsAPIOrManifestPrivilegeIncrease(
      const PermissionSet& granted_permissions,
      const PermissionSet& requested_permissions) const;

  // Returns true if |requested_permissions| has more host permissions compared
  // to |granted_permissions|.
  bool IsHostPrivilegeIncrease(const PermissionSet& granted_permissions,
                               const PermissionSet& requested_permissions,
                               Manifest::Type extension_type) const;

  PermissionMessages GetPermissionMessagesHelper(
      const PermissionIDSet& permissions,
      const std::vector<ChromePermissionMessageRule>& rules) const;
};

}  // namespace extensions

#endif  // CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_