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

Unified Diff: chrome/browser/policy/device_token_fetcher.cc

Issue 11946017: Remove old cloud policy code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address nits. Created 7 years, 11 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/policy/device_token_fetcher.cc
diff --git a/chrome/browser/policy/device_token_fetcher.cc b/chrome/browser/policy/device_token_fetcher.cc
deleted file mode 100644
index 2427df64f76220d6d720cb0934a7d075a71ebd35..0000000000000000000000000000000000000000
--- a/chrome/browser/policy/device_token_fetcher.cc
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/policy/device_token_fetcher.h"
-
-#include <algorithm>
-
-#include "base/bind.h"
-#include "base/metrics/histogram.h"
-#include "base/time.h"
-#include "chrome/browser/policy/cloud_policy_cache_base.h"
-#include "chrome/browser/policy/cloud_policy_constants.h"
-#include "chrome/browser/policy/cloud_policy_data_store.h"
-#include "chrome/browser/policy/delayed_work_scheduler.h"
-#include "chrome/browser/policy/device_management_service.h"
-#include "chrome/browser/policy/enterprise_metrics.h"
-#include "chrome/browser/policy/policy_notifier.h"
-#include "chrome/browser/policy/proto/device_management_local.pb.h"
-
-namespace em = enterprise_management;
-
-namespace policy {
-
-namespace {
-
-// Retry after 5 minutes (with exponential backoff) after token fetch errors.
-const int64 kTokenFetchErrorDelayMilliseconds = 5 * 60 * 1000;
-// Retry after max 3 hours after token fetch errors.
-const int64 kTokenFetchErrorMaxDelayMilliseconds = 3 * 60 * 60 * 1000;
-// For unmanaged devices, check once per day whether they're still unmanaged.
-const int64 kUnmanagedDeviceRefreshRateMilliseconds = 24 * 60 * 60 * 1000;
-
-// Records the UMA metric corresponding to |status|, if it represents an error.
-// Also records that a fetch response was received.
-void SampleErrorStatus(DeviceManagementStatus status) {
- UMA_HISTOGRAM_ENUMERATION(kMetricToken, kMetricTokenFetchResponseReceived,
- kMetricTokenSize);
- int sample = -1;
- switch (status) {
- case DM_STATUS_SUCCESS:
- return;
- case DM_STATUS_REQUEST_FAILED:
- case DM_STATUS_REQUEST_INVALID:
- case DM_STATUS_SERVICE_MANAGEMENT_TOKEN_INVALID:
- sample = kMetricTokenFetchRequestFailed;
- break;
- case DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED:
- sample = kMetricTokenFetchManagementNotSupported;
- break;
- case DM_STATUS_SERVICE_DEVICE_NOT_FOUND:
- sample = kMetricTokenFetchDeviceNotFound;
- break;
- case DM_STATUS_SERVICE_DEVICE_ID_CONFLICT:
- sample = kMetricTokenFetchDeviceIdConflict;
- break;
- case DM_STATUS_SERVICE_INVALID_SERIAL_NUMBER:
- sample = kMetricTokenFetchInvalidSerialNumber;
- break;
- case DM_STATUS_RESPONSE_DECODING_ERROR:
- sample = kMetricTokenFetchBadResponse;
- break;
- case DM_STATUS_SERVICE_MISSING_LICENSES:
- sample = kMetricMissingLicenses;
- break;
- case DM_STATUS_TEMPORARY_UNAVAILABLE:
- case DM_STATUS_SERVICE_ACTIVATION_PENDING:
- case DM_STATUS_SERVICE_POLICY_NOT_FOUND:
- case DM_STATUS_HTTP_STATUS_ERROR:
- sample = kMetricTokenFetchServerFailed;
- break;
- }
- if (sample != -1)
- UMA_HISTOGRAM_ENUMERATION(kMetricToken, sample, kMetricTokenSize);
- else
- NOTREACHED();
-}
-
-// Translates the DeviceRegisterResponse::DeviceMode |mode| to the enum used
-// internally to represent different device modes.
-DeviceMode TranslateProtobufDeviceMode(
- em::DeviceRegisterResponse::DeviceMode mode) {
- switch (mode) {
- case em::DeviceRegisterResponse::ENTERPRISE:
- return DEVICE_MODE_ENTERPRISE;
- case em::DeviceRegisterResponse::RETAIL:
- return DEVICE_MODE_KIOSK;
- }
- LOG(ERROR) << "Unknown enrollment mode in registration response: " << mode;
- return DEVICE_MODE_PENDING;
-}
-
-} // namespace
-
-DeviceTokenFetcher::DeviceTokenFetcher(
- DeviceManagementService* service,
- CloudPolicyCacheBase* cache,
- CloudPolicyDataStore* data_store,
- PolicyNotifier* notifier)
- : effective_token_fetch_error_delay_ms_(
- kTokenFetchErrorDelayMilliseconds) {
- Initialize(service,
- cache,
- data_store,
- notifier,
- new DelayedWorkScheduler);
-}
-
-DeviceTokenFetcher::DeviceTokenFetcher(
- DeviceManagementService* service,
- CloudPolicyCacheBase* cache,
- CloudPolicyDataStore* data_store,
- PolicyNotifier* notifier,
- DelayedWorkScheduler* scheduler)
- : effective_token_fetch_error_delay_ms_(
- kTokenFetchErrorDelayMilliseconds) {
- Initialize(service, cache, data_store, notifier, scheduler);
-}
-
-DeviceTokenFetcher::~DeviceTokenFetcher() {
- scheduler_->CancelDelayedWork();
-}
-
-void DeviceTokenFetcher::FetchToken() {
- SetState(STATE_INACTIVE);
- FetchTokenInternal();
-}
-
-void DeviceTokenFetcher::SetUnmanagedState() {
- // The call to |cache_->SetUnmanaged()| has to happen first because it sets
- // the timestamp that |SetState()| needs to determine the correct refresh
- // time.
- cache_->SetUnmanaged();
- SetState(STATE_UNMANAGED);
-}
-
-void DeviceTokenFetcher::SetSerialNumberInvalidState() {
- SetState(STATE_BAD_SERIAL);
-}
-
-void DeviceTokenFetcher::SetMissingLicensesState() {
- SetState(STATE_MISSING_LICENSES);
-}
-
-void DeviceTokenFetcher::Reset() {
- SetState(STATE_INACTIVE);
-}
-
-void DeviceTokenFetcher::Initialize(DeviceManagementService* service,
- CloudPolicyCacheBase* cache,
- CloudPolicyDataStore* data_store,
- PolicyNotifier* notifier,
- DelayedWorkScheduler* scheduler) {
- service_ = service;
- cache_ = cache;
- notifier_ = notifier;
- data_store_ = data_store;
- effective_token_fetch_error_delay_ms_ = kTokenFetchErrorDelayMilliseconds;
- state_ = STATE_INACTIVE;
- scheduler_.reset(scheduler);
-
- if (cache_->is_unmanaged())
- SetState(STATE_UNMANAGED);
-}
-
-void DeviceTokenFetcher::FetchTokenInternal() {
- DCHECK(state_ != STATE_TOKEN_AVAILABLE);
- if (!data_store_->has_auth_token() || data_store_->device_id().empty()) {
- // Maybe this device is unmanaged, just exit. The CloudPolicyController
- // will call FetchToken() again if something changes.
- return;
- }
- // Reinitialize |request_job_|, discarding any previous requests.
- request_job_.reset(
- service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION));
- request_job_->SetGaiaToken(data_store_->gaia_token());
- request_job_->SetOAuthToken(data_store_->oauth_token());
- request_job_->SetClientID(data_store_->device_id());
- em::DeviceRegisterRequest* request =
- request_job_->GetRequest()->mutable_register_request();
- request->set_type(data_store_->policy_register_type());
- if (!data_store_->machine_id().empty())
- request->set_machine_id(data_store_->machine_id());
- if (!data_store_->machine_model().empty())
- request->set_machine_model(data_store_->machine_model());
- if (data_store_->known_machine_id())
- request->set_auto_enrolled(true);
- if (data_store_->reregister())
- request->set_reregister(true);
- request_job_->Start(base::Bind(&DeviceTokenFetcher::OnTokenFetchCompleted,
- base::Unretained(this)));
- UMA_HISTOGRAM_ENUMERATION(kMetricToken, kMetricTokenFetchRequested,
- kMetricTokenSize);
-}
-
-void DeviceTokenFetcher::OnTokenFetchCompleted(
- DeviceManagementStatus status,
- const em::DeviceManagementResponse& response) {
- if (status == DM_STATUS_SUCCESS && !response.has_register_response()) {
- // Handled below.
- status = DM_STATUS_RESPONSE_DECODING_ERROR;
- }
-
- LOG_IF(ERROR, status != DM_STATUS_SUCCESS) << "DMServer returned error code: "
- << status;
- SampleErrorStatus(status);
-
- switch (status) {
- case DM_STATUS_SUCCESS: {
- const em::DeviceRegisterResponse& register_response =
- response.register_response();
- if (register_response.has_device_management_token()) {
- UMA_HISTOGRAM_ENUMERATION(kMetricToken, kMetricTokenFetchOK,
- kMetricTokenSize);
-
- if (data_store_->policy_register_type() ==
- em::DeviceRegisterRequest::DEVICE) {
- DeviceMode mode = DEVICE_MODE_ENTERPRISE;
- if (register_response.has_enrollment_type()) {
- mode = TranslateProtobufDeviceMode(
- register_response.enrollment_type());
- }
- if (mode == DEVICE_MODE_PENDING) {
- LOG(ERROR) << "Enrollment mode missing or unknown!";
- SetState(STATE_BAD_ENROLLMENT_MODE);
- return;
- }
- data_store_->set_device_mode(mode);
- }
- data_store_->SetDeviceToken(register_response.device_management_token(),
- false);
- SetState(STATE_TOKEN_AVAILABLE);
- } else {
- NOTREACHED();
- UMA_HISTOGRAM_ENUMERATION(kMetricToken, kMetricTokenFetchBadResponse,
- kMetricTokenSize);
- SetState(STATE_ERROR);
- }
- return;
- }
- case DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED:
- SetUnmanagedState();
- return;
- case DM_STATUS_REQUEST_FAILED:
- case DM_STATUS_TEMPORARY_UNAVAILABLE:
- case DM_STATUS_SERVICE_DEVICE_NOT_FOUND:
- case DM_STATUS_SERVICE_DEVICE_ID_CONFLICT:
- SetState(STATE_TEMPORARY_ERROR);
- return;
- case DM_STATUS_SERVICE_MANAGEMENT_TOKEN_INVALID:
- // Most probably the GAIA auth cookie has expired. We can not do anything
- // until the user logs-in again.
- SetState(STATE_BAD_AUTH);
- return;
- case DM_STATUS_SERVICE_INVALID_SERIAL_NUMBER:
- SetSerialNumberInvalidState();
- return;
- case DM_STATUS_SERVICE_MISSING_LICENSES:
- SetMissingLicensesState();
- return;
- case DM_STATUS_REQUEST_INVALID:
- case DM_STATUS_HTTP_STATUS_ERROR:
- case DM_STATUS_RESPONSE_DECODING_ERROR:
- case DM_STATUS_SERVICE_ACTIVATION_PENDING:
- case DM_STATUS_SERVICE_POLICY_NOT_FOUND:
- SetState(STATE_ERROR);
- return;
- }
- NOTREACHED();
- SetState(STATE_ERROR);
-}
-
-void DeviceTokenFetcher::SetState(FetcherState state) {
- state_ = state;
- if (state_ != STATE_TEMPORARY_ERROR)
- effective_token_fetch_error_delay_ms_ = kTokenFetchErrorDelayMilliseconds;
-
- request_job_.reset(); // Stop any pending requests.
-
- base::Time delayed_work_at;
- switch (state_) {
- case STATE_INACTIVE:
- notifier_->Inform(CloudPolicySubsystem::UNENROLLED,
- CloudPolicySubsystem::NO_DETAILS,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_TOKEN_AVAILABLE:
- notifier_->Inform(CloudPolicySubsystem::SUCCESS,
- CloudPolicySubsystem::NO_DETAILS,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_BAD_SERIAL:
- notifier_->Inform(CloudPolicySubsystem::UNENROLLED,
- CloudPolicySubsystem::BAD_SERIAL_NUMBER,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_BAD_ENROLLMENT_MODE:
- notifier_->Inform(CloudPolicySubsystem::UNENROLLED,
- CloudPolicySubsystem::BAD_ENROLLMENT_MODE,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_MISSING_LICENSES:
- notifier_->Inform(CloudPolicySubsystem::UNENROLLED,
- CloudPolicySubsystem::MISSING_LICENSES,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_UNMANAGED:
- delayed_work_at = cache_->last_policy_refresh_time() +
- base::TimeDelta::FromMilliseconds(
- kUnmanagedDeviceRefreshRateMilliseconds);
- notifier_->Inform(CloudPolicySubsystem::UNMANAGED,
- CloudPolicySubsystem::NO_DETAILS,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_TEMPORARY_ERROR:
- delayed_work_at = base::Time::Now() +
- base::TimeDelta::FromMilliseconds(
- effective_token_fetch_error_delay_ms_);
- effective_token_fetch_error_delay_ms_ =
- std::min(effective_token_fetch_error_delay_ms_ * 2,
- kTokenFetchErrorMaxDelayMilliseconds);
- notifier_->Inform(CloudPolicySubsystem::NETWORK_ERROR,
- CloudPolicySubsystem::DMTOKEN_NETWORK_ERROR,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_ERROR:
- effective_token_fetch_error_delay_ms_ =
- kTokenFetchErrorMaxDelayMilliseconds;
- delayed_work_at = base::Time::Now() +
- base::TimeDelta::FromMilliseconds(
- effective_token_fetch_error_delay_ms_);
- notifier_->Inform(CloudPolicySubsystem::NETWORK_ERROR,
- CloudPolicySubsystem::DMTOKEN_NETWORK_ERROR,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- case STATE_BAD_AUTH:
- // Can't do anything, need to wait for new credentials.
- notifier_->Inform(CloudPolicySubsystem::BAD_GAIA_TOKEN,
- CloudPolicySubsystem::NO_DETAILS,
- PolicyNotifier::TOKEN_FETCHER);
- break;
- }
-
- scheduler_->CancelDelayedWork();
- if (!delayed_work_at.is_null()) {
- base::Time now(base::Time::Now());
- int64 delay = std::max<int64>((delayed_work_at - now).InMilliseconds(), 0);
- scheduler_->PostDelayedWork(
- base::Bind(&DeviceTokenFetcher::DoWork, base::Unretained(this)), delay);
- }
-
- // Inform the cache if a token fetch attempt has failed.
- if (state_ != STATE_INACTIVE && state_ != STATE_TOKEN_AVAILABLE)
- cache_->SetFetchingDone();
-}
-
-void DeviceTokenFetcher::DoWork() {
- switch (state_) {
- case STATE_INACTIVE:
- case STATE_TOKEN_AVAILABLE:
- case STATE_BAD_SERIAL:
- case STATE_BAD_ENROLLMENT_MODE:
- case STATE_MISSING_LICENSES:
- break;
- case STATE_UNMANAGED:
- case STATE_ERROR:
- case STATE_TEMPORARY_ERROR:
- case STATE_BAD_AUTH:
- FetchTokenInternal();
- break;
- }
-}
-
-} // namespace policy
« no previous file with comments | « chrome/browser/policy/device_token_fetcher.h ('k') | chrome/browser/policy/device_token_fetcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698