summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-06 01:50:53 +0000
committerzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-06 01:50:53 +0000
commit68a7264922c4a77b3023e43a47057f4a4c35a22c (patch)
tree23c6c1b5139bc88c120b7ea8232b2024f3b05a3c
parenta0d2a385a9e3cbfd0ed144a8b8aa22438729baa4 (diff)
downloadchromium_src-68a7264922c4a77b3023e43a47057f4a4c35a22c.zip
chromium_src-68a7264922c4a77b3023e43a47057f4a4c35a22c.tar.gz
chromium_src-68a7264922c4a77b3023e43a47057f4a4c35a22c.tar.bz2
Merge 254685 "Fixed handling of 'oem_device_requisition' VPD value."
> Fixed handling of 'oem_device_requisition' VPD value. > > BUG=348238 > TEST=manual > > Review URL: https://codereview.chromium.org/183923008 TBR=zelidrag@chromium.org Review URL: https://codereview.chromium.org/188243003 git-svn-id: svn://svn.chromium.org/chrome/branches/1847/src@255211 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc57
-rw-r--r--chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h3
-rw-r--r--chrome/browser/resources/chromeos/login/display_manager.js7
-rw-r--r--chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc7
4 files changed, 63 insertions, 11 deletions
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc
index aa86001..1669e63 100644
--- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc
@@ -34,6 +34,12 @@ namespace policy {
namespace {
+// Overridden no requisition value.
+const char kNoRequisition[] = "none";
+
+// Overridden no requisition value.
+const char kRemoraRequisition[] = "remora";
+
// MachineInfo key names.
const char kMachineInfoSystemHwqual[] = "hardware_class";
@@ -118,6 +124,7 @@ void DeviceCloudPolicyManagerChromeOS::Connect(
device_management_service_ = device_management_service;
device_status_provider_ = device_status_provider.Pass();
+ InitalizeRequisition();
StartIfManaged();
}
@@ -151,13 +158,11 @@ std::string DeviceCloudPolicyManagerChromeOS::GetDeviceRequisition() const {
std::string requisition;
const PrefService::Preference* pref = local_state_->FindPreference(
prefs::kDeviceEnrollmentRequisition);
- if (pref->IsDefaultValue() && !chromeos::StartupUtils::IsOobeCompleted()) {
- // OEM statistics are only loaded when OOBE is not completed.
- requisition =
- GetMachineStatistic(chromeos::system::kOemDeviceRequisitionKey);
- } else {
+ if (!pref->IsDefaultValue())
pref->GetValue()->GetAsString(&requisition);
- }
+
+ if (requisition == kNoRequisition)
+ requisition.clear();
return requisition;
}
@@ -171,8 +176,13 @@ void DeviceCloudPolicyManagerChromeOS::SetDeviceRequisition(
local_state_->ClearPref(prefs::kDeviceEnrollmentCanExit);
} else {
local_state_->SetString(prefs::kDeviceEnrollmentRequisition, requisition);
- local_state_->SetBoolean(prefs::kDeviceEnrollmentAutoStart, true);
- local_state_->SetBoolean(prefs::kDeviceEnrollmentCanExit, false);
+ if (requisition == kNoRequisition) {
+ local_state_->ClearPref(prefs::kDeviceEnrollmentAutoStart);
+ local_state_->ClearPref(prefs::kDeviceEnrollmentCanExit);
+ } else {
+ local_state_->SetBoolean(prefs::kDeviceEnrollmentAutoStart, true);
+ local_state_->SetBoolean(prefs::kDeviceEnrollmentCanExit, false);
+ }
}
}
}
@@ -292,4 +302,35 @@ void DeviceCloudPolicyManagerChromeOS::StartIfManaged() {
}
}
+void DeviceCloudPolicyManagerChromeOS::InitalizeRequisition() {
+ // OEM statistics are only loaded when OOBE is not completed.
+ if (chromeos::StartupUtils::IsOobeCompleted())
+ return;
+
+ const PrefService::Preference* pref = local_state_->FindPreference(
+ prefs::kDeviceEnrollmentRequisition);
+ if (pref->IsDefaultValue()) {
+ std::string requisition =
+ GetMachineStatistic(chromeos::system::kOemDeviceRequisitionKey);
+
+ if (!requisition.empty()) {
+ local_state_->SetString(prefs::kDeviceEnrollmentRequisition,
+ requisition);
+ if (requisition == kRemoraRequisition) {
+ local_state_->SetBoolean(prefs::kDeviceEnrollmentAutoStart, true);
+ local_state_->SetBoolean(prefs::kDeviceEnrollmentCanExit, false);
+ } else {
+ local_state_->SetBoolean(
+ prefs::kDeviceEnrollmentAutoStart,
+ GetMachineFlag(chromeos::system::kOemIsEnterpriseManagedKey,
+ false));
+ local_state_->SetBoolean(
+ prefs::kDeviceEnrollmentCanExit,
+ GetMachineFlag(chromeos::system::kOemCanExitEnterpriseEnrollmentKey,
+ false));
+ }
+ }
+ }
+}
+
} // namespace policy
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h
index ec1fc04..f5f36ed 100644
--- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h
@@ -115,6 +115,9 @@ class DeviceCloudPolicyManagerChromeOS : public CloudPolicyManager {
void EnrollmentCompleted(const EnrollmentCallback& callback,
EnrollmentStatus status);
+ // Initializes requisition settings at OOBE with values from VPD.
+ void InitalizeRequisition();
+
// Points to the same object as the base CloudPolicyManager::store(), but with
// actual device policy specific type.
scoped_ptr<DeviceCloudPolicyStoreChromeOS> device_store_;
diff --git a/chrome/browser/resources/chromeos/login/display_manager.js b/chrome/browser/resources/chromeos/login/display_manager.js
index 27f0adc7..f9f4f77 100644
--- a/chrome/browser/resources/chromeos/login/display_manager.js
+++ b/chrome/browser/resources/chromeos/login/display_manager.js
@@ -596,7 +596,7 @@ cr.define('cr.ui.login', function() {
*/
onConfirmDeviceRequisitionPrompt_: function(value) {
this.deviceRequisition_ = value;
- chrome.send('setDeviceRequisition', [value]);
+ chrome.send('setDeviceRequisition', [value == '' ? 'none' : value]);
},
/**
@@ -633,8 +633,11 @@ cr.define('cr.ui.login', function() {
}
this.deviceRequisitionRemoraDialog_.show(
loadTimeData.getString('deviceRequisitionRemoraPromptText'),
- function() {
+ function() { // onShow
chrome.send('setDeviceRequisition', ['remora']);
+ },
+ function() { // onCancel
+ chrome.send('setDeviceRequisition', ['none']);
});
},
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
index 8db3e8b..eca5eac 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -247,9 +247,14 @@ void CoreOobeHandler::HandleSetDeviceRequisition(
const std::string& requisition) {
policy::BrowserPolicyConnectorChromeOS* connector =
g_browser_process->platform_part()->browser_policy_connector_chromeos();
+ std::string initial_requisition =
+ connector->GetDeviceCloudPolicyManager()->GetDeviceRequisition();
connector->GetDeviceCloudPolicyManager()->SetDeviceRequisition(requisition);
// Exit Chrome to force the restart as soon as a new requisition is set.
- chrome::AttemptRestart();
+ if (initial_requisition !=
+ connector->GetDeviceCloudPolicyManager()->GetDeviceRequisition()) {
+ chrome::AttemptRestart();
+ }
}
void CoreOobeHandler::HandleScreenAssetsLoaded(