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

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: Added test to see that changes take effect on ownership. 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..44fa47ed186f00cb5cf0427b677be82ffc965235 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"
@@ -174,7 +174,6 @@ bool CheckManagementModeTransition(policy::ManagementMode current_mode,
NOTREACHED();
return false;
}
-
} // namespace
OwnerSettingsServiceChromeOS::ManagementSettings::ManagementSettings() {
@@ -192,6 +191,7 @@ OwnerSettingsServiceChromeOS::OwnerSettingsServiceChromeOS(
profile_(profile),
waiting_for_profile_creation_(true),
waiting_for_tpm_token_(true),
+ has_pending_fixups_(false),
has_pending_management_settings_(false),
weak_factory_(this),
store_settings_factory_(this) {
@@ -414,7 +414,9 @@ void OwnerSettingsServiceChromeOS::IsOwnerForSafeModeAsync(
scoped_ptr<em::PolicyData> OwnerSettingsServiceChromeOS::AssemblePolicy(
const std::string& user_id,
const em::PolicyData* policy_data,
- const em::ChromeDeviceSettingsProto* settings) {
+ bool apply_pending_management_settings,
+ const ManagementSettings& pending_management_settings,
+ em::ChromeDeviceSettingsProto* settings) {
scoped_ptr<em::PolicyData> policy(new em::PolicyData());
if (policy_data) {
// Preserve management settings.
@@ -429,10 +431,28 @@ scoped_ptr<em::PolicyData> OwnerSettingsServiceChromeOS::AssemblePolicy(
// setting is set. We set the management mode to LOCAL_OWNER initially.
policy->set_management_mode(em::PolicyData::LOCAL_OWNER);
}
+ if (apply_pending_management_settings) {
+ policy::SetManagementMode(*policy,
+ pending_management_settings.management_mode);
+
+ if (pending_management_settings.request_token.empty())
+ policy->clear_request_token();
+ else
+ policy->set_request_token(pending_management_settings.request_token);
+
+ if (pending_management_settings.device_id.empty())
+ policy->clear_device_id();
+ else
+ policy->set_device_id(pending_management_settings.device_id);
+ }
policy->set_policy_type(policy::dm_protocol::kChromeDevicePolicyType);
policy->set_timestamp(
(base::Time::Now() - base::Time::UnixEpoch()).InMilliseconds());
policy->set_username(user_id);
+ if (policy_data->management_mode() == em::PolicyData::LOCAL_OWNER ||
+ policy_data->management_mode() == em::PolicyData::CONSUMER_MANAGED) {
+ FixupLocalOwnerPolicy(user_id, settings);
+ }
if (!settings->SerializeToString(policy->mutable_policy_value()))
return scoped_ptr<em::PolicyData>();
@@ -440,6 +460,21 @@ scoped_ptr<em::PolicyData> OwnerSettingsServiceChromeOS::AssemblePolicy(
}
// static
+void OwnerSettingsServiceChromeOS::FixupLocalOwnerPolicy(
+ const std::string& user_id,
+ enterprise_management::ChromeDeviceSettingsProto* settings) {
+ if (!settings->has_allow_new_users())
+ settings->mutable_allow_new_users()->set_allow_new_users(true);
+
+ em::UserWhitelistProto* whitelist_proto = settings->mutable_user_whitelist();
+ if (whitelist_proto->user_whitelist().end() ==
+ std::find(whitelist_proto->user_whitelist().begin(),
+ whitelist_proto->user_whitelist().end(), user_id)) {
+ whitelist_proto->add_user_whitelist(user_id);
+ }
+}
+
+// static
void OwnerSettingsServiceChromeOS::UpdateDeviceSettings(
const std::string& path,
const base::Value& value,
@@ -674,6 +709,8 @@ 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());
+
+ has_pending_fixups_ = true;
}
void OwnerSettingsServiceChromeOS::ReloadKeypairImpl(const base::Callback<
@@ -716,23 +753,11 @@ void OwnerSettingsServiceChromeOS::StorePendingChanges() {
UpdateDeviceSettings(change.first, *change.second, settings);
pending_changes_.clear();
- scoped_ptr<em::PolicyData> policy = AssemblePolicy(
- user_id_, device_settings_service_->policy_data(), &settings);
-
- if (has_pending_management_settings_) {
- policy::SetManagementMode(*policy,
- pending_management_settings_.management_mode);
-
- if (pending_management_settings_.request_token.empty())
- policy->clear_request_token();
- else
- policy->set_request_token(pending_management_settings_.request_token);
-
- if (pending_management_settings_.device_id.empty())
- policy->clear_device_id();
- else
- policy->set_device_id(pending_management_settings_.device_id);
- }
+ scoped_ptr<em::PolicyData> policy =
+ AssemblePolicy(user_id_, device_settings_service_->policy_data(),
+ has_pending_management_settings_,
+ pending_management_settings_, &settings);
+ has_pending_fixups_ = false;
has_pending_management_settings_ = false;
bool rv = AssembleAndSignPolicyAsync(

Powered by Google App Engine
This is Rietveld 408576698