1// Copyright 2013 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#ifndef CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
6#define CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
7
8#include <set>
9
10#include "base/basictypes.h"
11#include "base/gtest_prod_util.h"
12#include "base/strings/string16.h"
13#include "extensions/common/permissions/permission_message_provider.h"
14
15namespace extensions {
16
17class ChromePermissionMessageProvider : public PermissionMessageProvider {
18 public:
19  ChromePermissionMessageProvider();
20  virtual ~ChromePermissionMessageProvider();
21
22  // PermissionMessageProvider implementation.
23  virtual PermissionMessages GetPermissionMessages(
24      const PermissionSet* permissions,
25      Manifest::Type extension_type) const OVERRIDE;
26  virtual std::vector<base::string16> GetWarningMessages(
27      const PermissionSet* permissions,
28      Manifest::Type extension_type) const OVERRIDE;
29  virtual std::vector<base::string16> GetWarningMessagesDetails(
30      const PermissionSet* permissions,
31      Manifest::Type extension_type) const OVERRIDE;
32  virtual bool IsPrivilegeIncrease(
33      const PermissionSet* old_permissions,
34      const PermissionSet* new_permissions,
35      Manifest::Type extension_type) const OVERRIDE;
36
37 private:
38  // Gets the permission messages for the API permissions.
39  std::set<PermissionMessage> GetAPIPermissionMessages(
40      const PermissionSet* permissions) const;
41
42  // Gets the permission messages for the Manifest permissions.
43  std::set<PermissionMessage> GetManifestPermissionMessages(
44      const PermissionSet* permissions) const;
45
46  // Gets the permission messages for the host permissions.
47  std::set<PermissionMessage> GetHostPermissionMessages(
48      const PermissionSet* permissions,
49      Manifest::Type extension_type) const;
50
51  // Returns true if |new_permissions| has an elevated API privilege level
52  // compared to |old_permissions|.
53  bool IsAPIPrivilegeIncrease(
54      const PermissionSet* old_permissions,
55      const PermissionSet* new_permissions) const;
56
57  // Returns true if |new_permissions| has an elevated manifest permission
58  // privilege level compared to |old_permissions|.
59  bool IsManifestPermissionPrivilegeIncrease(
60      const PermissionSet* old_permissions,
61      const PermissionSet* new_permissions) const;
62
63  // Returns true if |new_permissions| has more host permissions compared to
64  // |old_permissions|.
65  bool IsHostPrivilegeIncrease(
66      const PermissionSet* old_permissions,
67      const PermissionSet* new_permissions,
68      Manifest::Type extension_type) const;
69
70  DISALLOW_COPY_AND_ASSIGN(ChromePermissionMessageProvider);
71};
72
73}  // namespace extensions
74
75#endif  // CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
76