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

Unified Diff: chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc

Issue 985093002: Fix up Owner settings on first load (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: based off mattias' patch that injects CrosSettings for testing Created 5 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/chromeos/ownership/owner_settings_service_chromeos.cc
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
index 48a81cb418a7dca2df0e0da89efb161a3cb84440..e8abe31e4daa20665d4af78531dc4f93f6785325 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
+#include <algorithm>
#include <string>
#include "base/bind.h"
@@ -15,7 +16,6 @@
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
-#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/settings/device_settings_provider.h"
#include "chrome/browser/chromeos/settings/session_manager_operation.h"
@@ -95,6 +95,7 @@ void LoadPrivateKey(
callback) {
std::vector<uint8> public_key_data;
scoped_refptr<PublicKey> public_key;
+
if (!owner_key_util->ImportPublicKey(&public_key_data)) {
scoped_refptr<PrivateKey> private_key;
BrowserThread::PostTask(BrowserThread::UI,
@@ -104,6 +105,7 @@ void LoadPrivateKey(
}
public_key = new PublicKey();
public_key->data().swap(public_key_data);
+
bool rv = BrowserThread::PostTask(BrowserThread::IO,
FROM_HERE,
base::Bind(&LoadPrivateKeyByPublicKey,
@@ -174,7 +176,6 @@ bool CheckManagementModeTransition(policy::ManagementMode current_mode,
NOTREACHED();
return false;
}
-
} // namespace
OwnerSettingsServiceChromeOS::ManagementSettings::ManagementSettings() {
@@ -185,10 +186,12 @@ OwnerSettingsServiceChromeOS::ManagementSettings::~ManagementSettings() {
OwnerSettingsServiceChromeOS::OwnerSettingsServiceChromeOS(
DeviceSettingsService* device_settings_service,
+ CrosSettings* cros_settings,
Profile* profile,
const scoped_refptr<OwnerKeyUtil>& owner_key_util)
: ownership::OwnerSettingsService(owner_key_util),
device_settings_service_(device_settings_service),
+ cros_settings_(cros_settings),
profile_(profile),
waiting_for_profile_creation_(true),
waiting_for_tpm_token_(true),
@@ -270,8 +273,17 @@ bool OwnerSettingsServiceChromeOS::Set(const std::string& setting,
settings = *device_settings_service_->device_settings();
}
UpdateDeviceSettings(setting, value, settings);
Mattias Nissler (ping if slow) 2015/03/16 08:51:42 nit: blank line here
+ // Perform fixups required to ensure sensical local-owner device policy:
+ // 1) The owner must be in the username field,
+ // 2) user whitelisting must be explicitly allowed or disallowed, and
+ // 3) the owner user must be on the whitelist, if it's enforced.
+ // We can enforce the first two here, but need to check the whitelist before
Mattias Nissler (ping if slow) 2015/03/16 08:51:42 I don't get why we can't update the whitelist here
Chris Masone 2015/03/16 16:45:57 I don't think we're actually assured that we've lo
Mattias Nissler (ping if slow) 2015/03/17 14:05:53 Ah, right, the |settings| may have come from elsew
Chris Masone 2015/03/17 15:00:48 Yeah, the pending_changes_ stuff is why I did this
Mattias Nissler (ping if slow) 2015/03/17 15:15:57 Well, I think it's fair to just force an initial w
+ // modifying it, so that will be taken care of in a separate class.
em::PolicyData policy_data;
policy_data.set_username(user_id_);
+ if (!settings.has_allow_new_users())
+ settings.mutable_allow_new_users()->set_allow_new_users(true);
+
CHECK(settings.SerializeToString(policy_data.mutable_policy_value()));
FOR_EACH_OBSERVER(OwnerSettingsService::Observer, observers_,
OnTentativeChangesInPolicy(policy_data));
@@ -282,7 +294,7 @@ bool OwnerSettingsServiceChromeOS::Set(const std::string& setting,
bool OwnerSettingsServiceChromeOS::AppendToList(const std::string& setting,
const base::Value& value) {
DCHECK(thread_checker_.CalledOnValidThread());
- const base::Value* old_value = CrosSettings::Get()->GetPref(setting);
+ const base::Value* old_value = cros_settings_->GetPref(setting);
if (old_value && !old_value->IsType(base::Value::TYPE_LIST))
return false;
scoped_ptr<base::ListValue> new_value(
@@ -295,7 +307,7 @@ bool OwnerSettingsServiceChromeOS::AppendToList(const std::string& setting,
bool OwnerSettingsServiceChromeOS::RemoveFromList(const std::string& setting,
const base::Value& value) {
DCHECK(thread_checker_.CalledOnValidThread());
- const base::Value* old_value = CrosSettings::Get()->GetPref(setting);
+ const base::Value* old_value = cros_settings_->GetPref(setting);
if (old_value && !old_value->IsType(base::Value::TYPE_LIST))
return false;
scoped_ptr<base::ListValue> new_value(
@@ -674,6 +686,27 @@ void OwnerSettingsServiceChromeOS::OnPostKeypairLoadedActions() {
const bool is_owner = IsOwner() || IsOwnerInTests(user_id_);
if (is_owner && device_settings_service_)
device_settings_service_->InitOwner(user_id_, weak_factory_.GetWeakPtr());
+
+ if (is_owner)
+ FixupLocalOwnerPolicy();
+}
+
+void OwnerSettingsServiceChromeOS::FixupLocalOwnerPolicy() {
+ if (CrosSettingsProvider::TRUSTED != cros_settings_->PrepareTrustedValues(
+ base::Bind(&OwnerSettingsServiceChromeOS::FixupLocalOwnerPolicy,
+ weak_factory_.GetWeakPtr()))) {
+ return;
+ }
+ DCHECK(IsOwner());
+ DCHECK(!user_id_.empty());
+
+ bool wildcard = false;
+ if (!cros_settings_->FindEmailInList(kAccountsPrefUsers, user_id_,
+ &wildcard) ||
+ wildcard) {
+ cros_settings_->AppendToList(kAccountsPrefUsers,
Mattias Nissler (ping if slow) 2015/03/16 08:51:42 This is a bit of a step backwards, as the write pa
Chris Masone 2015/03/16 16:45:57 Ah. How's it supposed to work, then?
Mattias Nissler (ping if slow) 2015/03/17 14:05:53 You could just update the protobuf field, i.e. |se
+ new base::StringValue(user_id_));
+ }
}
void OwnerSettingsServiceChromeOS::ReloadKeypairImpl(const base::Callback<

Powered by Google App Engine
This is Rietveld 408576698