1659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org// Copyright (c) 2011 The Chromium Authors. All rights reserved. 29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Use of this source code is governed by a BSD-style license that can be 39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// found in the LICENSE file. 49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "chrome/browser/chromeos/policy/user_policy_token_loader.h" 69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "base/bind.h" 89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "base/files/file_util.h" 99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "base/location.h" 109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "base/message_loop/message_loop_proxy.h" 119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "base/metrics/histogram.h" 129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "base/sequenced_task_runner.h" 139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "components/policy/core/common/cloud/enterprise_metrics.h" 149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include "policy/proto/device_management_local.pb.h" 159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comnamespace policy { 179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comnamespace em = enterprise_management; 199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comUserPolicyTokenLoader::Delegate::~Delegate() {} 219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comUserPolicyTokenLoader::UserPolicyTokenLoader( 239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com const base::WeakPtr<Delegate>& delegate, 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com const base::FilePath& cache_file, 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com scoped_refptr<base::SequencedTaskRunner> background_task_runner) 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com : delegate_(delegate), 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com cache_file_(cache_file), 289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com origin_task_runner_(base::MessageLoopProxy::current()), 299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com background_task_runner_(background_task_runner) {} 30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 319a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvoid UserPolicyTokenLoader::Load() { 32196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org DCHECK(origin_task_runner_->RunsTasksOnCurrentThread()); 33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org background_task_runner_->PostTask( 34196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org FROM_HERE, 35196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org base::Bind(&UserPolicyTokenLoader::LoadOnBackgroundThread, this)); 36196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 37196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 38196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgUserPolicyTokenLoader::~UserPolicyTokenLoader() { 39196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 40196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 41196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid UserPolicyTokenLoader::LoadOnBackgroundThread() { 429a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); 43b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org std::string device_token; 443d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org std::string device_id; 453d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org 463d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org if (base::PathExists(cache_file_)) { 473d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org std::string data; 48b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org em::DeviceCredentials device_credentials; 499a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (base::ReadFileToString(cache_file_, &data) && 509a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com device_credentials.ParseFromArray(data.c_str(), data.size())) { 519a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com device_token = device_credentials.device_token(); 529a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com device_id = device_credentials.device_id(); 535a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org UMA_HISTOGRAM_ENUMERATION(policy::kMetricToken, 549a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com kMetricTokenLoadSucceeded, 559a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com policy::kMetricTokenSize); 569a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } else { 573a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org UMA_HISTOGRAM_ENUMERATION(policy::kMetricToken, 583a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org kMetricTokenLoadFailed, 59639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org policy::kMetricTokenSize); 609a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } 619a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } 629a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 639a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com origin_task_runner_->PostTask( 6465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org FROM_HERE, 65c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org base::Bind(&UserPolicyTokenLoader::NotifyOnOriginThread, 669a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com this, 679a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com device_token, 689a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com device_id)); 699a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com} 709a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 719a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvoid UserPolicyTokenLoader::NotifyOnOriginThread(const std::string& token, 729a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com const std::string& device_id) { 739a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com DCHECK(origin_task_runner_->RunsTasksOnCurrentThread()); 749a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (delegate_.get()) 759a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com delegate_->OnTokenLoaded(token, device_id); 769a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com} 779a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 789a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com} // namespace policy 799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com