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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_PERMISSIONS_UPDATER_H__
6 #define CHROME_BROWSER_EXTENSIONS_PERMISSIONS_UPDATER_H__
10 #include "base/memory/ref_counted.h"
13 class DictionaryValue
;
20 namespace extensions
{
26 // Updates an Extension's active and granted permissions in persistent storage
27 // and notifies interested parties of the changes.
28 class PermissionsUpdater
{
32 INIT_FLAG_TRANSIENT
= 1 << 0,
35 explicit PermissionsUpdater(content::BrowserContext
* browser_context
);
36 PermissionsUpdater(content::BrowserContext
* browser_context
,
38 ~PermissionsUpdater();
40 // Adds the set of |permissions| to the |extension|'s active permission set
41 // and sends the relevant messages and notifications. This method assumes the
42 // user has already been prompted, if necessary, for the extra permissions.
43 void AddPermissions(const Extension
* extension
,
44 const PermissionSet
* permissions
);
46 // Removes the set of |permissions| from the |extension|'s active permission
47 // set and sends the relevant messages and notifications.
48 void RemovePermissions(const Extension
* extension
,
49 const PermissionSet
* permissions
);
51 // Adds all permissions in the |extension|'s active permissions to its
52 // granted permission set.
53 void GrantActivePermissions(const Extension
* extension
);
55 // Initializes the |extension|'s active permission set to include only
56 // permissions currently requested by the extension and all the permissions
57 // required by the extension.
58 void InitializePermissions(const Extension
* extension
);
60 // Grants any withheld all-hosts (or all-hosts-like) permissions.
61 void GrantWithheldImpliedAllHosts(const Extension
* extension
);
63 // Revokes any requests all-hosts (or all-hosts-like) permissions.
64 void WithholdImpliedAllHosts(const Extension
* extension
);
72 // Sets the |extension|'s active permissions to |active| and records the
73 // change in the prefs. If |withheld| is non-null, also sets the extension's
74 // withheld permissions to |withheld|. Otherwise, |withheld| permissions are
76 void SetPermissions(const Extension
* extension
,
77 const scoped_refptr
<const PermissionSet
>& active
,
78 scoped_refptr
<const PermissionSet
> withheld
);
80 // Dispatches specified event to the extension.
81 void DispatchEvent(const std::string
& extension_id
,
82 const char* event_name
,
83 const PermissionSet
* changed_permissions
);
85 // Issues the relevant events, messages and notifications when the
86 // |extension|'s permissions have |changed| (|changed| is the delta).
87 // Specifically, this sends the EXTENSION_PERMISSIONS_UPDATED notification,
88 // the ExtensionMsg_UpdatePermissions IPC message, and fires the
89 // onAdded/onRemoved events in the extension.
90 void NotifyPermissionsUpdated(EventType event_type
,
91 const Extension
* extension
,
92 const PermissionSet
* changed
);
94 // The associated BrowserContext.
95 content::BrowserContext
* browser_context_
;
97 // Initialization flag that determines whether prefs is consulted about the
98 // extension. Transient extensions should not have entries in prefs.
102 } // namespace extensions
104 #endif // CHROME_BROWSER_EXTENSIONS_PERMISSIONS_UPDATER_H__