| Index: chrome/browser/policy/cloud_policy_controller.cc
|
| diff --git a/chrome/browser/policy/cloud_policy_controller.cc b/chrome/browser/policy/cloud_policy_controller.cc
|
| index 7ace4061ce7f9bc715157a11fd8e13f551b7e5ee..e9b61f0ec18b941a9e1abbd0d143bccc0778ea44 100644
|
| --- a/chrome/browser/policy/cloud_policy_controller.cc
|
| +++ b/chrome/browser/policy/cloud_policy_controller.cc
|
| @@ -93,17 +93,18 @@ void CloudPolicyController::HandlePolicyResponse(
|
| if (state_ == STATE_TOKEN_UNAVAILABLE)
|
| return;
|
|
|
| - cache_->SetDevicePolicy(response);
|
| - SetState(STATE_POLICY_VALID);
|
| -}
|
| -
|
| -void CloudPolicyController::HandleCloudPolicyResponse(
|
| - const em::CloudPolicyResponse& response) {
|
| - if (state_ == STATE_TOKEN_UNAVAILABLE)
|
| - return;
|
| -
|
| - cache_->SetPolicy(response);
|
| - SetState(STATE_POLICY_VALID);
|
| + if (response.response_size() > 0) {
|
| + if (response.response_size() > 1) {
|
| + LOG(WARNING) << "More than one policy in the response of the device "
|
| + << "management server, discarding.";
|
| + }
|
| + // Use the new version of the protocol
|
| + cache_->SetPolicy(response.response(0));
|
| + SetState(STATE_POLICY_VALID);
|
| + } else {
|
| + cache_->SetDevicePolicy(response);
|
| + SetState(STATE_POLICY_VALID);
|
| + }
|
| }
|
|
|
| void CloudPolicyController::OnError(DeviceManagementBackend::ErrorCode code) {
|
| @@ -119,17 +120,7 @@ void CloudPolicyController::OnError(DeviceManagementBackend::ErrorCode code) {
|
| DeviceManagementBackend::kErrorServiceManagementNotSupported) {
|
| VLOG(1) << "The device is no longer managed, resetting device token.";
|
| SetState(STATE_TOKEN_UNAVAILABLE);
|
| - } else if (!fallback_to_old_protocol_ &&
|
| - code == DeviceManagementBackend::kErrorRequestInvalid) {
|
| - LOG(WARNING) << "Device manager doesn't understand new protocol, falling "
|
| - << "back to old request.";
|
| - fallback_to_old_protocol_ = true;
|
| - SetState(STATE_TOKEN_VALID); // Triggers SendPolicyRequest() immediately.
|
| } else {
|
| - LOG(WARNING) << "Could not provide policy from the device manager (error = "
|
| - << code << "), will retry in "
|
| - << (effective_policy_refresh_error_delay_ms_ / 1000)
|
| - << " seconds.";
|
| SetState(STATE_POLICY_ERROR);
|
| }
|
| }
|
| @@ -185,7 +176,6 @@ void CloudPolicyController::Initialize(
|
| token_fetcher_ = token_fetcher;
|
| identity_strategy_ = identity_strategy;
|
| state_ = STATE_TOKEN_UNAVAILABLE;
|
| - fallback_to_old_protocol_ = false;
|
| delayed_work_task_ = NULL;
|
| policy_refresh_rate_ms_ = policy_refresh_rate_ms;
|
| policy_refresh_deviation_factor_percent_ =
|
| @@ -206,31 +196,39 @@ void CloudPolicyController::FetchToken() {
|
| std::string username;
|
| std::string auth_token;
|
| std::string device_id = identity_strategy_->GetDeviceID();
|
| + std::string machine_id = identity_strategy_->GetMachineID();
|
| + em::DeviceRegisterRequest_Type policy_type =
|
| + identity_strategy_->GetPolicyRegisterType();
|
| if (identity_strategy_->GetCredentials(&username, &auth_token) &&
|
| CanBeInManagedDomain(username)) {
|
| - token_fetcher_->FetchToken(auth_token, device_id);
|
| + token_fetcher_->FetchToken(auth_token, device_id, policy_type, machine_id);
|
| }
|
| }
|
|
|
| void CloudPolicyController::SendPolicyRequest() {
|
| DCHECK(!identity_strategy_->GetDeviceToken().empty());
|
| - if (!fallback_to_old_protocol_) {
|
| - em::CloudPolicyRequest policy_request;
|
| - policy_request.set_policy_scope(kChromePolicyScope);
|
| - backend_->ProcessCloudPolicyRequest(identity_strategy_->GetDeviceToken(),
|
| - identity_strategy_->GetDeviceID(),
|
| - policy_request, this);
|
| - } else {
|
| - em::DevicePolicyRequest policy_request;
|
| - policy_request.set_policy_scope(kChromePolicyScope);
|
| - em::DevicePolicySettingRequest* setting =
|
| - policy_request.add_setting_request();
|
| - setting->set_key(kChromeDevicePolicySettingKey);
|
| - setting->set_watermark("");
|
| - backend_->ProcessPolicyRequest(identity_strategy_->GetDeviceToken(),
|
| - identity_strategy_->GetDeviceID(),
|
| - policy_request, this);
|
| + em::DevicePolicyRequest policy_request;
|
| + em::PolicyFetchRequest* fetch_request = policy_request.add_request();
|
| + fetch_request->set_signature_type(em::PolicyFetchRequest::X509);
|
| + fetch_request->set_policy_type(identity_strategy_->GetPolicyType());
|
| + if (!cache_->is_unmanaged() &&
|
| + !cache_->last_policy_refresh_time().is_null()) {
|
| + base::TimeDelta timestamp =
|
| + cache_->last_policy_refresh_time() - base::Time::UnixEpoch();
|
| + fetch_request->set_timestamp(timestamp.InMilliseconds());
|
| }
|
| +
|
| + // TODO(gfeher): Remove the following block when the server is migrated.
|
| + // Set fields for the old protocol.
|
| + policy_request.set_policy_scope(kChromePolicyScope);
|
| + em::DevicePolicySettingRequest* setting =
|
| + policy_request.add_setting_request();
|
| + setting->set_key(kChromeDevicePolicySettingKey);
|
| + setting->set_watermark("");
|
| +
|
| + backend_->ProcessPolicyRequest(identity_strategy_->GetDeviceToken(),
|
| + identity_strategy_->GetDeviceID(),
|
| + policy_request, this);
|
| }
|
|
|
| void CloudPolicyController::DoDelayedWork() {
|
|
|