Chromium Code Reviews| Index: chrome/browser/extensions/permissions_updater.cc |
| diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc |
| index de087840efd592336e1771cb7c743609341afe00..68aa83b473744d11ec86d9033cb794e0e3f43ed4 100644 |
| --- a/chrome/browser/extensions/permissions_updater.cc |
| +++ b/chrome/browser/extensions/permissions_updater.cc |
| @@ -12,11 +12,14 @@ |
| #include "chrome/browser/extensions/extension_prefs.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/signin/token_service.h" |
| +#include "chrome/browser/signin/token_service_factory.h" |
| #include "chrome/common/extensions/api/permissions.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/extensions/extension.h" |
| #include "chrome/common/extensions/extension_messages.h" |
| #include "chrome/common/extensions/extension_permission_set.h" |
| +#include "chrome/common/net/gaia/oauth2_mint_token_flow.h" |
| #include "content/public/browser/notification_service.h" |
| #include "content/public/browser/render_process_host.h" |
| @@ -49,7 +52,7 @@ void PermissionsUpdater::AddPermissions( |
| UpdateActivePermissions(extension, total.get()); |
| // Update the granted permissions so we don't auto-disable the extension. |
| - GrantActivePermissions(extension); |
| + GrantActivePermissions(extension, false); |
| NotifyPermissionsUpdated(ADDED, extension, added.get()); |
| } |
| @@ -71,7 +74,8 @@ void PermissionsUpdater::RemovePermissions( |
| NotifyPermissionsUpdated(REMOVED, extension, removed.get()); |
| } |
| -void PermissionsUpdater::GrantActivePermissions(const Extension* extension) { |
| +void PermissionsUpdater::GrantActivePermissions(const Extension* extension, |
| + bool record_oauth2_grant) { |
| CHECK(extension); |
| // We only maintain the granted permissions prefs for INTERNAL and LOAD |
| @@ -80,8 +84,17 @@ void PermissionsUpdater::GrantActivePermissions(const Extension* extension) { |
| extension->location() != Extension::INTERNAL) |
| return; |
| - GetExtensionPrefs()->AddGrantedPermissions( |
| - extension->id(), extension->GetActivePermissions()); |
| + scoped_refptr<const ExtensionPermissionSet> permissions = |
| + extension->GetActivePermissions(); |
|
jstritar
2012/06/25 15:10:35
I guess this section is kind of awkward since GetA
Evan Stade
2012/06/25 20:31:42
yes, as I understand it "active" means something l
|
| + if (record_oauth2_grant) { |
| + RecordOAuth2Grant(extension); |
| + } else { |
| + scoped_refptr<ExtensionPermissionSet> scopes = |
| + new ExtensionPermissionSet(permissions->scopes()); |
| + permissions = ExtensionPermissionSet::CreateDifference(permissions, scopes); |
| + } |
| + |
| + GetExtensionPrefs()->AddGrantedPermissions(extension->id(), permissions); |
| } |
| void PermissionsUpdater::UpdateActivePermissions( |
| @@ -90,6 +103,18 @@ void PermissionsUpdater::UpdateActivePermissions( |
| extension->SetActivePermissions(permissions); |
| } |
| +void PermissionsUpdater::RecordOAuth2Grant(const Extension* extension) { |
| + TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); |
| + scoped_refptr<OAuth2MintTokenFlow> flow(new OAuth2MintTokenFlow( |
| + profile_->GetRequestContext(), NULL, OAuth2MintTokenFlow::Parameters( |
| + token_service->GetOAuth2LoginRefreshToken(), |
| + extension->id(), |
| + extension->oauth2_info().client_id, |
| + extension->oauth2_info().scopes, |
| + OAuth2MintTokenFlow::MODE_RECORD_GRANT))); |
| + flow->Start(); |
| +} |
| + |
| void PermissionsUpdater::DispatchEvent( |
| const std::string& extension_id, |
| const char* event_name, |