| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/permissions/permissions_api.h" | 5 #include "chrome/browser/extensions/api/permissions/permissions_api.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" | 8 #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" |
| 9 #include "chrome/browser/extensions/extension_prefs.h" | 9 #include "chrome/browser/extensions/extension_prefs.h" |
| 10 #include "chrome/browser/extensions/extension_system.h" | 10 #include "chrome/browser/extensions/extension_system.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 return false; | 103 return false; |
| 104 } | 104 } |
| 105 } | 105 } |
| 106 | 106 |
| 107 // Make sure we don't remove any required pemissions. | 107 // Make sure we don't remove any required pemissions. |
| 108 const PermissionSet* required = extension->required_permission_set(); | 108 const PermissionSet* required = extension->required_permission_set(); |
| 109 scoped_refptr<PermissionSet> intersection( | 109 scoped_refptr<PermissionSet> intersection( |
| 110 PermissionSet::CreateIntersection(permissions.get(), required)); | 110 PermissionSet::CreateIntersection(permissions.get(), required)); |
| 111 if (!intersection->IsEmpty()) { | 111 if (!intersection->IsEmpty()) { |
| 112 error_ = kCantRemoveRequiredPermissionsError; | 112 error_ = kCantRemoveRequiredPermissionsError; |
| 113 results_ = Remove::Results::Create(false); | |
| 114 return false; | 113 return false; |
| 115 } | 114 } |
| 116 | 115 |
| 117 PermissionsUpdater(profile()).RemovePermissions(extension, permissions.get()); | 116 PermissionsUpdater(profile()).RemovePermissions(extension, permissions.get()); |
| 118 results_ = Remove::Results::Create(true); | 117 results_ = Remove::Results::Create(true); |
| 119 return true; | 118 return true; |
| 120 } | 119 } |
| 121 | 120 |
| 122 // static | 121 // static |
| 123 void PermissionsRequestFunction::SetAutoConfirmForTests(bool should_proceed) { | 122 void PermissionsRequestFunction::SetAutoConfirmForTests(bool should_proceed) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 152 | 151 |
| 153 bool PermissionsRequestFunction::RunImpl() { | 152 bool PermissionsRequestFunction::RunImpl() { |
| 154 results_ = Request::Results::Create(false); | 153 results_ = Request::Results::Create(false); |
| 155 | 154 |
| 156 if (!user_gesture() && !ignore_user_gesture_for_tests) { | 155 if (!user_gesture() && !ignore_user_gesture_for_tests) { |
| 157 error_ = kUserGestureRequiredError; | 156 error_ = kUserGestureRequiredError; |
| 158 return false; | 157 return false; |
| 159 } | 158 } |
| 160 | 159 |
| 161 scoped_ptr<Request::Params> params(Request::Params::Create(*args_)); | 160 scoped_ptr<Request::Params> params(Request::Params::Create(*args_)); |
| 162 EXTENSION_FUNCTION_VALIDATE(params.get()); | 161 EXTENSION_FUNCTION_VALIDATE(params); |
| 163 | 162 |
| 164 ExtensionPrefs* prefs = ExtensionSystem::Get(profile_)->extension_prefs(); | 163 ExtensionPrefs* prefs = ExtensionSystem::Get(profile_)->extension_prefs(); |
| 165 | 164 |
| 166 requested_permissions_ = | 165 requested_permissions_ = |
| 167 helpers::UnpackPermissionSet(params->permissions, | 166 helpers::UnpackPermissionSet(params->permissions, |
| 168 prefs->AllowFileAccess(extension_->id()), | 167 prefs->AllowFileAccess(extension_->id()), |
| 169 &error_); | 168 &error_); |
| 170 if (!requested_permissions_.get()) | 169 if (!requested_permissions_.get()) |
| 171 return false; | 170 return false; |
| 172 | 171 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 185 // section of the manifest. | 184 // section of the manifest. |
| 186 scoped_refptr<extensions::PermissionSet> | 185 scoped_refptr<extensions::PermissionSet> |
| 187 manifest_required_requested_permissions = | 186 manifest_required_requested_permissions = |
| 188 PermissionSet::ExcludeNotInManifestPermissions( | 187 PermissionSet::ExcludeNotInManifestPermissions( |
| 189 requested_permissions_.get()); | 188 requested_permissions_.get()); |
| 190 | 189 |
| 191 // The requested permissions must be defined as optional in the manifest. | 190 // The requested permissions must be defined as optional in the manifest. |
| 192 if (!GetExtension()->optional_permission_set()->Contains( | 191 if (!GetExtension()->optional_permission_set()->Contains( |
| 193 *manifest_required_requested_permissions)) { | 192 *manifest_required_requested_permissions)) { |
| 194 error_ = kNotInOptionalPermissionsError; | 193 error_ = kNotInOptionalPermissionsError; |
| 195 results_ = Request::Results::Create(false); | |
| 196 return false; | 194 return false; |
| 197 } | 195 } |
| 198 | 196 |
| 199 // We don't need to prompt the user if the requested permissions are a subset | 197 // We don't need to prompt the user if the requested permissions are a subset |
| 200 // of the granted permissions set. | 198 // of the granted permissions set. |
| 201 scoped_refptr<const PermissionSet> granted = | 199 scoped_refptr<const PermissionSet> granted = |
| 202 prefs->GetGrantedPermissions(GetExtension()->id()); | 200 prefs->GetGrantedPermissions(GetExtension()->id()); |
| 203 if (granted.get() && granted->Contains(*requested_permissions_)) { | 201 if (granted && granted->Contains(*requested_permissions_)) { |
| 204 PermissionsUpdater perms_updater(profile()); | 202 PermissionsUpdater perms_updater(profile()); |
| 205 perms_updater.AddPermissions(GetExtension(), requested_permissions_.get()); | 203 perms_updater.AddPermissions(GetExtension(), requested_permissions_.get()); |
| 206 results_ = Request::Results::Create(true); | 204 results_ = Request::Results::Create(true); |
| 207 SendResponse(true); | 205 SendResponse(true); |
| 208 return true; | 206 return true; |
| 209 } | 207 } |
| 210 | 208 |
| 211 // Filter out the granted permissions so we only prompt for new ones. | 209 // Filter out the granted permissions so we only prompt for new ones. |
| 212 requested_permissions_ = PermissionSet::CreateDifference( | 210 requested_permissions_ = PermissionSet::CreateDifference( |
| 213 requested_permissions_.get(), granted.get()); | 211 requested_permissions_.get(), granted.get()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 226 InstallUIAbort(true); | 224 InstallUIAbort(true); |
| 227 } else { | 225 } else { |
| 228 CHECK_EQ(DO_NOT_SKIP, auto_confirm_for_tests); | 226 CHECK_EQ(DO_NOT_SKIP, auto_confirm_for_tests); |
| 229 install_ui_.reset(new ExtensionInstallPrompt(GetAssociatedWebContents())); | 227 install_ui_.reset(new ExtensionInstallPrompt(GetAssociatedWebContents())); |
| 230 install_ui_->ConfirmPermissions( | 228 install_ui_->ConfirmPermissions( |
| 231 this, GetExtension(), requested_permissions_.get()); | 229 this, GetExtension(), requested_permissions_.get()); |
| 232 } | 230 } |
| 233 | 231 |
| 234 return true; | 232 return true; |
| 235 } | 233 } |
| OLD | NEW |