diff options
author | zelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-06 01:50:53 +0000 |
---|---|---|
committer | zelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-06 01:50:53 +0000 |
commit | 68a7264922c4a77b3023e43a47057f4a4c35a22c (patch) | |
tree | 23c6c1b5139bc88c120b7ea8232b2024f3b05a3c | |
parent | a0d2a385a9e3cbfd0ed144a8b8aa22438729baa4 (diff) | |
download | chromium_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
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( |