Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5283)

Unified Diff: chrome/browser/ui/webui/extensions/extension_settings_handler.cc

Issue 13119011: Enable WebContents elevation for managed users. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactor duplicate code into GetScopedElevation function. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/extensions/extension_settings_handler.cc
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
index 79e9c00c8965806eca4e73aa3767d99acf91c44a..21662905839e9e678c369d2f59364235caa39d4e 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
@@ -32,6 +32,7 @@
#include "chrome/browser/extensions/unpacked_installer.h"
#include "chrome/browser/extensions/updater/extension_updater.h"
#include "chrome/browser/google/google_util.h"
+#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h"
#include "chrome/browser/managed_mode/managed_user_service.h"
#include "chrome/browser/managed_mode/managed_user_service_factory.h"
#include "chrome/browser/profiles/profile.h"
@@ -131,7 +132,7 @@ DictionaryValue* ExtensionSettingsHandler::CreateExtensionDetailValue(
extension->GetBasicInfo(enabled, extension_data);
extension_data->SetBoolean("userModifiable",
- management_policy_->UserMayModifySettings(extension, NULL));
+ CheckUserMayModifySettings(extension));
GURL icon =
ExtensionIconSource::GetIconURL(extension,
@@ -554,8 +555,10 @@ void ExtensionSettingsHandler::ReloadUnpackedExtensions() {
void ExtensionSettingsHandler::PassphraseDialogCallback(bool success) {
if (!success)
return;
- Profile* profile = Profile::FromWebUI(web_ui());
- ManagedUserServiceFactory::GetForProfile(profile)->SetElevated(true);
+ ManagedModeNavigationObserver* observer =
+ ManagedModeNavigationObserver::FromWebContents(
+ web_ui()->GetWebContents());
+ observer->set_elevated(true);
HandleRequestExtensionsData(NULL);
}
@@ -570,11 +573,34 @@ void ExtensionSettingsHandler::ManagedUserSetElevated(const ListValue* args) {
base::Bind(&ExtensionSettingsHandler::PassphraseDialogCallback,
base::Unretained(this)));
} else {
- service->SetElevated(false);
+ ManagedModeNavigationObserver* observer =
+ ManagedModeNavigationObserver::FromWebContents(
+ web_ui()->GetWebContents());
+ observer->set_elevated(false);
HandleRequestExtensionsData(NULL);
}
}
+scoped_ptr<ScopedExtensionElevation>
+ ExtensionSettingsHandler::GetScopedElevation(std::string extension_id) {
Bernhard Bauer 2013/04/03 09:00:17 Pass string parameters via const ref.
Adrian Kuegel 2013/04/03 09:42:40 Done.
+ ManagedUserService* service = ManagedUserServiceFactory::GetForProfile(
+ Profile::FromWebUI(web_ui()));
+ scoped_ptr<ScopedExtensionElevation> elevation(
+ new ScopedExtensionElevation(service));
+ if (service->ProfileIsManaged() &&
+ service->IsElevatedForWebContents(web_ui()->GetWebContents())) {
+ elevation->AddExtension(extension_id);
+ }
+ return elevation.Pass();
+}
+
+bool ExtensionSettingsHandler::CheckUserMayModifySettings(
+ const Extension* extension) {
+ scoped_ptr<ScopedExtensionElevation> elevation =
James Hawkins 2013/04/02 16:47:46 |elevation| is unused.
Adrian Kuegel 2013/04/03 08:30:26 It is used indirectly. ScopedExtensionElevation gi
+ GetScopedElevation(extension->id());
+ return management_policy_->UserMayModifySettings(extension, NULL);
+}
+
void ExtensionSettingsHandler::HandleRequestExtensionsData(
const ListValue* args) {
DictionaryValue results;
@@ -624,7 +650,8 @@ void ExtensionSettingsHandler::HandleRequestExtensionsData(
ManagedUserServiceFactory::GetForProfile(profile);
bool is_managed = service->ProfileIsManaged();
- bool is_elevated = service->IsElevated();
+ bool is_elevated =
+ service->IsElevatedForWebContents(web_ui()->GetWebContents());
bool developer_mode =
(!is_managed || is_elevated) &&
profile->GetPrefs()->GetBoolean(prefs::kExtensionsUIDeveloperMode);
@@ -735,8 +762,7 @@ void ExtensionSettingsHandler::HandleEnableMessage(const ListValue* args) {
const Extension* extension =
extension_service_->GetInstalledExtension(extension_id);
- if (!extension ||
- !management_policy_->UserMayModifySettings(extension, NULL)) {
+ if (!extension || !CheckUserMayModifySettings(extension)) {
LOG(ERROR) << "Attempt to enable an extension that is non-usermanagable was"
<< "made. Extension id: " << extension->id();
return;
@@ -766,6 +792,8 @@ void ExtensionSettingsHandler::HandleEnableMessage(const ListValue* args) {
prefs->SetBrowserActionVisibility(extension, true);
}
} else {
+ scoped_ptr<ScopedExtensionElevation> elevation =
James Hawkins 2013/04/02 16:47:46 elevation is unused.
+ GetScopedElevation(extension_id);
extension_service_->DisableExtension(
extension_id, Extension::DISABLE_USER_ACTION);
}
@@ -810,7 +838,7 @@ void ExtensionSettingsHandler::HandleAllowFileAccessMessage(
if (!extension)
return;
- if (!management_policy_->UserMayModifySettings(extension, NULL)) {
+ if (!CheckUserMayModifySettings(extension)) {
LOG(ERROR) << "Attempt to change allow file access of an extension that is "
<< "non-usermanagable was made. Extension id : "
<< extension->id();
@@ -829,7 +857,7 @@ void ExtensionSettingsHandler::HandleUninstallMessage(const ListValue* args) {
if (!extension)
return;
- if (!management_policy_->UserMayModifySettings(extension, NULL)) {
+ if (!CheckUserMayModifySettings(extension)) {
LOG(ERROR) << "Attempt to uninstall an extension that is non-usermanagable "
<< "was made. Extension id : " << extension->id();
return;

Powered by Google App Engine
This is Rietveld 408576698