Commit 6144057e authored by kalman@chromium.org's avatar kalman@chromium.org

Fix memory leak in ActiveTabPermissionManager.


Review URL: https://chromiumcodereview.appspot.com/10824149

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149665 0039d316-1c4b-4281-b951-d872f2087c98
parent b30c0b41
......@@ -53,9 +53,10 @@ void ActiveTabPermissionManager::GrantIfRequested(const Extension* extension) {
new_apis.insert(APIPermission::kTab);
URLPatternSet new_hosts;
new_hosts.AddPattern(pattern);
scoped_refptr<const PermissionSet> new_permissions =
new PermissionSet(new_apis, new_hosts, URLPatternSet());
extension->UpdateTabSpecificPermissions(
tab_id_, new PermissionSet(new_apis, new_hosts, URLPatternSet()));
extension->UpdateTabSpecificPermissions(tab_id_, new_permissions);
granted_extensions_.Insert(extension);
Send(new ExtensionMsg_UpdateTabSpecificPermissions(GetPageID(),
tab_id_,
......
......@@ -3829,7 +3829,7 @@ scoped_refptr<const PermissionSet> Extension::GetTabSpecificPermissions(
void Extension::UpdateTabSpecificPermissions(
int tab_id,
const PermissionSet* permissions) const {
scoped_refptr<const PermissionSet> permissions) const {
base::AutoLock auto_lock(runtime_data_lock_);
runtime_data_.UpdateTabSpecificPermissions(tab_id, permissions);
}
......@@ -3887,12 +3887,12 @@ scoped_refptr<const PermissionSet>
void Extension::RuntimeData::UpdateTabSpecificPermissions(
int tab_id,
const PermissionSet* permissions) {
scoped_refptr<const PermissionSet> permissions) {
CHECK_GE(tab_id, 0);
if (tab_specific_permissions_.count(tab_id)) {
tab_specific_permissions_[tab_id] = PermissionSet::CreateUnion(
tab_specific_permissions_[tab_id],
permissions);
permissions.get());
} else {
tab_specific_permissions_[tab_id] = permissions;
}
......
......@@ -571,8 +571,9 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// Updates the tab-specific permissions of |tab_id| to include those from
// |permissions|.
void UpdateTabSpecificPermissions(int tab_id,
const PermissionSet* permissions) const;
void UpdateTabSpecificPermissions(
int tab_id,
scoped_refptr<const PermissionSet> permissions) const;
// Clears the tab-specific permissions of |tab_id|.
void ClearTabSpecificPermissions(int tab_id) const;
......@@ -728,8 +729,9 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
scoped_refptr<const PermissionSet> GetTabSpecificPermissions(int tab_id)
const;
void UpdateTabSpecificPermissions(int tab_id,
const PermissionSet* permissions);
void UpdateTabSpecificPermissions(
int tab_id,
scoped_refptr<const PermissionSet> permissions);
void ClearTabSpecificPermissions(int tab_id);
private:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment