18bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file.
48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
58bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#ifndef CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#define CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
78bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include <set>
98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/basictypes.h"
118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/gtest_prod_util.h"
128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/strings/string16.h"
138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "extensions/common/permissions/permission_message_provider.h"
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace extensions {
168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ChromePermissionMessageProvider : public PermissionMessageProvider {
188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public:
198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  ChromePermissionMessageProvider();
208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual ~ChromePermissionMessageProvider();
218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // PermissionMessageProvider implementation.
238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual PermissionMessages GetPermissionMessages(
248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* permissions,
258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      Manifest::Type extension_type) const OVERRIDE;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual std::vector<base::string16> GetWarningMessages(
278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* permissions,
288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      Manifest::Type extension_type) const OVERRIDE;
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual std::vector<base::string16> GetWarningMessagesDetails(
308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* permissions,
318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      Manifest::Type extension_type) const OVERRIDE;
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual bool IsPrivilegeIncrease(
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* old_permissions,
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* new_permissions,
358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      Manifest::Type extension_type) const OVERRIDE;
368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private:
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Gets the permission messages for the API permissions.
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  std::set<PermissionMessage> GetAPIPermissionMessages(
408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* permissions) const;
418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Gets the permission messages for the Manifest permissions.
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::set<PermissionMessage> GetManifestPermissionMessages(
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const PermissionSet* permissions) const;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Gets the permission messages for the host permissions.
478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  std::set<PermissionMessage> GetHostPermissionMessages(
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* permissions,
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      Manifest::Type extension_type) const;
508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Returns true if |new_permissions| has an elevated API privilege level
528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // compared to |old_permissions|.
538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool IsAPIPrivilegeIncrease(
548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* old_permissions,
558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* new_permissions) const;
568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Returns true if |new_permissions| has an elevated manifest permission
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // privilege level compared to |old_permissions|.
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool IsManifestPermissionPrivilegeIncrease(
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const PermissionSet* old_permissions,
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const PermissionSet* new_permissions) const;
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Returns true if |new_permissions| has more host permissions compared to
648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // |old_permissions|.
658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool IsHostPrivilegeIncrease(
668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* old_permissions,
678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const PermissionSet* new_permissions,
688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      Manifest::Type extension_type) const;
698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromePermissionMessageProvider);
718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)};
728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}  // namespace extensions
748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // CHROME_COMMON_EXTENSIONS_PERMISSIONS_CHROME_PERMISSION_MESSAGE_PROVIDER_H_
76