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

Side by Side Diff: chrome/browser/policy/device_cloud_policy_manager_chromeos.cc

Issue 12189011: Split up chrome/browser/policy subdirectory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, add chrome/browser/chromeos/policy/OWNERS Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "chrome/browser/chromeos/system/statistics_provider.h"
10 #include "chrome/browser/policy/cloud_policy_constants.h"
11 #include "chrome/browser/policy/cloud_policy_store.h"
12 #include "chrome/browser/policy/device_cloud_policy_store_chromeos.h"
13 #include "chrome/browser/policy/device_management_service.h"
14 #include "chrome/browser/policy/enrollment_handler_chromeos.h"
15 #include "chrome/browser/policy/enterprise_install_attributes.h"
16 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
17 #include "chrome/common/pref_names.h"
18
19 namespace em = enterprise_management;
20
21 namespace policy {
22
23 namespace {
24
25 // MachineInfo key names.
26 const char kMachineInfoSystemHwqual[] = "hardware_class";
27
28 // These are the machine serial number keys that we check in order until we
29 // find a non-empty serial number. The VPD spec says the serial number should be
30 // in the "serial_number" key for v2+ VPDs. However, legacy devices used a
31 // different keys to report their serial number, which we fall back to if
32 // "serial_number" is not present.
33 //
34 // Product_S/N is still special-cased due to inconsistencies with serial
35 // numbers on Lumpy devices: On these devices, serial_number is identical to
36 // Product_S/N with an appended checksum. Unfortunately, the sticker on the
37 // packaging doesn't include that checksum either (the sticker on the device
38 // does though!). The former sticker is the source of the serial number used by
39 // device management service, so we prefer Product_S/N over serial number to
40 // match the server.
41 //
42 // TODO(mnissler): Move serial_number back to the top once the server side uses
43 // the correct serial number.
44 const char* kMachineInfoSerialNumberKeys[] = {
45 "Product_S/N", // Lumpy/Alex devices
46 "serial_number", // VPD v2+ devices
47 "Product_SN", // Mario
48 "sn", // old ZGB devices (more recent ones use serial_number)
49 };
50
51 } // namespace
52
53 DeviceCloudPolicyManagerChromeOS::DeviceCloudPolicyManagerChromeOS(
54 scoped_ptr<DeviceCloudPolicyStoreChromeOS> store,
55 EnterpriseInstallAttributes* install_attributes)
56 : CloudPolicyManager(
57 PolicyNamespaceKey(dm_protocol::kChromeDevicePolicyType,
58 std::string()),
59 store.get()),
60 device_store_(store.Pass()),
61 install_attributes_(install_attributes),
62 device_management_service_(NULL),
63 local_state_(NULL) {}
64
65 DeviceCloudPolicyManagerChromeOS::~DeviceCloudPolicyManagerChromeOS() {}
66
67 void DeviceCloudPolicyManagerChromeOS::Connect(
68 PrefService* local_state,
69 DeviceManagementService* device_management_service,
70 scoped_ptr<CloudPolicyClient::StatusProvider> device_status_provider) {
71 CHECK(!device_management_service_);
72 CHECK(device_management_service);
73 CHECK(local_state);
74
75 local_state_ = local_state;
76 device_management_service_ = device_management_service;
77 device_status_provider_ = device_status_provider.Pass();
78
79 StartIfManaged();
80 }
81
82 void DeviceCloudPolicyManagerChromeOS::StartEnrollment(
83 const std::string& auth_token,
84 bool is_auto_enrollment,
85 const AllowedDeviceModes& allowed_device_modes,
86 const EnrollmentCallback& callback) {
87 CHECK(device_management_service_);
88 core()->Disconnect();
89
90 enrollment_handler_.reset(
91 new EnrollmentHandlerChromeOS(
92 device_store_.get(), install_attributes_, CreateClient(), auth_token,
93 install_attributes_->GetDeviceId(), is_auto_enrollment,
94 allowed_device_modes,
95 base::Bind(&DeviceCloudPolicyManagerChromeOS::EnrollmentCompleted,
96 base::Unretained(this), callback)));
97 enrollment_handler_->StartEnrollment();
98 }
99
100 void DeviceCloudPolicyManagerChromeOS::CancelEnrollment() {
101 if (enrollment_handler_.get()) {
102 enrollment_handler_.reset();
103 StartIfManaged();
104 }
105 }
106
107 void DeviceCloudPolicyManagerChromeOS::OnStoreLoaded(CloudPolicyStore* store) {
108 CloudPolicyManager::OnStoreLoaded(store);
109
110 if (!enrollment_handler_.get())
111 StartIfManaged();
112 }
113
114 // static
115 std::string DeviceCloudPolicyManagerChromeOS::GetMachineID() {
116 std::string machine_id;
117 chromeos::system::StatisticsProvider* provider =
118 chromeos::system::StatisticsProvider::GetInstance();
119 for (size_t i = 0; i < arraysize(kMachineInfoSerialNumberKeys); i++) {
120 if (provider->GetMachineStatistic(kMachineInfoSerialNumberKeys[i],
121 &machine_id) &&
122 !machine_id.empty()) {
123 break;
124 }
125 }
126
127 if (machine_id.empty())
128 LOG(WARNING) << "Failed to get machine id.";
129
130 return machine_id;
131 }
132
133 // static
134 std::string DeviceCloudPolicyManagerChromeOS::GetMachineModel() {
135 std::string machine_model;
136 chromeos::system::StatisticsProvider* provider =
137 chromeos::system::StatisticsProvider::GetInstance();
138 if (!provider->GetMachineStatistic(kMachineInfoSystemHwqual, &machine_model))
139 LOG(WARNING) << "Failed to get machine model.";
140
141 return machine_model;
142 }
143
144 scoped_ptr<CloudPolicyClient> DeviceCloudPolicyManagerChromeOS::CreateClient() {
145 return make_scoped_ptr(
146 new CloudPolicyClient(GetMachineID(), GetMachineModel(),
147 USER_AFFILIATION_NONE,
148 device_status_provider_.get(),
149 device_management_service_));
150 }
151
152 void DeviceCloudPolicyManagerChromeOS::EnrollmentCompleted(
153 const EnrollmentCallback& callback,
154 EnrollmentStatus status) {
155 if (status.status() == EnrollmentStatus::STATUS_SUCCESS) {
156 core()->Connect(enrollment_handler_->ReleaseClient());
157 core()->StartRefreshScheduler();
158 core()->TrackRefreshDelayPref(local_state_,
159 prefs::kDevicePolicyRefreshRate);
160 } else {
161 StartIfManaged();
162 }
163
164 enrollment_handler_.reset();
165 if (!callback.is_null())
166 callback.Run(status);
167 }
168
169 void DeviceCloudPolicyManagerChromeOS::StartIfManaged() {
170 if (device_management_service_ &&
171 local_state_ &&
172 store()->is_initialized() &&
173 store()->is_managed() &&
174 !service()) {
175 core()->Connect(CreateClient());
176 core()->StartRefreshScheduler();
177 core()->TrackRefreshDelayPref(local_state_,
178 prefs::kDevicePolicyRefreshRate);
179 }
180 }
181
182 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698