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 |