• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_BROWSER_EXTENSIONS_PERMISSIONS_UPDATER_H__
6 #define CHROME_BROWSER_EXTENSIONS_PERMISSIONS_UPDATER_H__
7 
8 #include <string>
9 
10 #include "base/memory/ref_counted.h"
11 
12 namespace base {
13 class DictionaryValue;
14 }
15 
16 namespace content {
17 class BrowserContext;
18 }
19 
20 namespace extensions {
21 
22 class Extension;
23 class ExtensionPrefs;
24 class PermissionSet;
25 
26 // Updates an Extension's active and granted permissions in persistent storage
27 // and notifies interested parties of the changes.
28 class PermissionsUpdater {
29  public:
30   explicit PermissionsUpdater(content::BrowserContext* browser_context);
31   ~PermissionsUpdater();
32 
33   // Adds the set of |permissions| to the |extension|'s active permission set
34   // and sends the relevant messages and notifications. This method assumes the
35   // user has already been prompted, if necessary, for the extra permissions.
36   void AddPermissions(const Extension* extension,
37                       const PermissionSet* permissions);
38 
39   // Removes the set of |permissions| from the |extension|'s active permission
40   // set and sends the relevant messages and notifications.
41   void RemovePermissions(const Extension* extension,
42                          const PermissionSet* permissions);
43 
44   // Adds all permissions in the |extension|'s active permissions to its
45   // granted permission set.
46   void GrantActivePermissions(const Extension* extension);
47 
48   // Initializes the |extension|'s active permission set to include only
49   // permissions currently requested by the extension and all the permissions
50   // required by the extension.
51   void InitializeActivePermissions(const Extension* extension);
52 
53  private:
54   enum EventType {
55     ADDED,
56     REMOVED,
57   };
58 
59   // Sets the |extension|'s active permissions to |permissions| and records the
60   // change in the prefs.
61   void SetActivePermissions(const Extension* extension,
62                             const PermissionSet* permisssions);
63 
64   // Dispatches specified event to the extension.
65   void DispatchEvent(const std::string& extension_id,
66                      const char* event_name,
67                      const PermissionSet* changed_permissions);
68 
69   // Issues the relevant events, messages and notifications when the
70   // |extension|'s permissions have |changed| (|changed| is the delta).
71   // Specifically, this sends the EXTENSION_PERMISSIONS_UPDATED notification,
72   // the ExtensionMsg_UpdatePermissions IPC message, and fires the
73   // onAdded/onRemoved events in the extension.
74   void NotifyPermissionsUpdated(EventType event_type,
75                                 const Extension* extension,
76                                 const PermissionSet* changed);
77 
78   // The associated BrowserContext.
79   content::BrowserContext* browser_context_;
80 };
81 
82 }  // namespace extensions
83 
84 #endif  // CHROME_BROWSER_EXTENSIONS_PERMISSIONS_UPDATER_H__
85