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

Side by Side Diff: chrome/browser/policy/device_status_collector.h

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 #ifndef CHROME_BROWSER_POLICY_DEVICE_STATUS_COLLECTOR_H_
6 #define CHROME_BROWSER_POLICY_DEVICE_STATUS_COLLECTOR_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/time.h"
14 #include "base/timer.h"
15 #include "chrome/browser/chromeos/version_loader.h"
16 #include "chrome/browser/idle.h"
17 #include "chrome/browser/policy/cloud_policy_client.h"
18 #include "chrome/common/cancelable_task_tracker.h"
19 #include "content/public/browser/geolocation.h"
20 #include "content/public/browser/notification_observer.h"
21 #include "content/public/common/geoposition.h"
22
23 namespace chromeos {
24 class CrosSettings;
25 namespace system {
26 class StatisticsProvider;
27 }
28 }
29
30 namespace content {
31 class NotificationDetails;
32 class NotificationSource;
33 }
34
35 namespace enterprise_management {
36 class DeviceStatusReportRequest;
37 }
38
39 class PrefService;
40 class PrefRegistrySimple;
41
42 namespace policy {
43
44 // Collects and summarizes the status of an enterprised-managed ChromeOS device.
45 class DeviceStatusCollector : public CloudPolicyClient::StatusProvider,
46 public content::NotificationObserver {
47 public:
48 // TODO(bartfab): Remove this once crbug.com/125931 is addressed and a proper
49 // way to mock geolocation exists.
50 typedef void(*LocationUpdateRequester)(
51 const content::GeolocationUpdateCallback& callback);
52
53 DeviceStatusCollector(PrefService* local_state,
54 chromeos::system::StatisticsProvider* provider,
55 LocationUpdateRequester location_update_requester);
56 virtual ~DeviceStatusCollector();
57
58 void GetStatus(enterprise_management::DeviceStatusReportRequest* request);
59
60 // CloudPolicyClient::StatusProvider:
61 virtual bool GetDeviceStatus(
62 enterprise_management::DeviceStatusReportRequest* status) OVERRIDE;
63 virtual bool GetSessionStatus(
64 enterprise_management::SessionStatusReportRequest* status) OVERRIDE;
65 virtual void OnSubmittedSuccessfully() OVERRIDE;
66
67 static void RegisterPrefs(PrefRegistrySimple* registry);
68
69 // How often, in seconds, to poll to see if the user is idle.
70 static const unsigned int kIdlePollIntervalSeconds = 30;
71
72 protected:
73 // Check whether the user has been idle for a certain period of time.
74 virtual void CheckIdleState();
75
76 // Used instead of base::Time::Now(), to make testing possible.
77 virtual base::Time GetCurrentTime();
78
79 // Callback which receives the results of the idle state check.
80 void IdleStateCallback(IdleState state);
81
82 // The number of days in the past to store device activity.
83 // This is kept in case device status uploads fail for a number of days.
84 unsigned int max_stored_past_activity_days_;
85
86 // The number of days in the future to store device activity.
87 // When changing the system time and/or timezones, it's possible to record
88 // activity time that is slightly in the future.
89 unsigned int max_stored_future_activity_days_;
90
91 private:
92 // Prevents the local store of activity periods from growing too large by
93 // removing entries that are outside the reporting window.
94 void PruneStoredActivityPeriods(base::Time base_time);
95
96 // Trims the store activity periods to only retain data within the
97 // [|min_day_key|, |max_day_key|). The record for |min_day_key| will be
98 // adjusted by subtracting |min_day_trim_duration|.
99 void TrimStoredActivityPeriods(int64 min_day_key,
100 int min_day_trim_duration,
101 int64 max_day_key);
102
103 void AddActivePeriod(base::Time start, base::Time end);
104
105 // Callbacks from chromeos::VersionLoader.
106 void OnOSVersion(const std::string& version);
107 void OnOSFirmware(const std::string& version);
108
109 // Helpers for the various portions of the status.
110 void GetActivityTimes(
111 enterprise_management::DeviceStatusReportRequest* request);
112 void GetVersionInfo(
113 enterprise_management::DeviceStatusReportRequest* request);
114 void GetBootMode(
115 enterprise_management::DeviceStatusReportRequest* request);
116 void GetLocation(
117 enterprise_management::DeviceStatusReportRequest* request);
118
119 // Update the cached values of the reporting settings.
120 void UpdateReportingSettings();
121
122 // content::NotificationObserver interface.
123 virtual void Observe(
124 int type,
125 const content::NotificationSource& source,
126 const content::NotificationDetails& details) OVERRIDE;
127
128 void ScheduleGeolocationUpdateRequest();
129
130 // content::GeolocationUpdateCallback implementation.
131 void ReceiveGeolocationUpdate(const content::Geoposition&);
132
133 // How often to poll to see if the user is idle.
134 int poll_interval_seconds_;
135
136 PrefService* local_state_;
137
138 // The last time an idle state check was performed.
139 base::Time last_idle_check_;
140
141 // The maximum key that went into the last report generated by
142 // GetDeviceStatus(), and the duration for it. This is used to trim the
143 // stored data in OnSubmittedSuccessfully(). Trimming is delayed so
144 // unsuccessful uploads don't result in dropped data.
145 int64 last_reported_day_;
146 int duration_for_last_reported_day_;
147
148 // Whether a geolocation update is currently in progress.
149 bool geolocation_update_in_progress_;
150
151 base::RepeatingTimer<DeviceStatusCollector> idle_poll_timer_;
152 base::OneShotTimer<DeviceStatusCollector> geolocation_update_timer_;
153
154 chromeos::VersionLoader version_loader_;
155 CancelableTaskTracker tracker_;
156
157 std::string os_version_;
158 std::string firmware_version_;
159
160 content::Geoposition position_;
161
162 chromeos::system::StatisticsProvider* statistics_provider_;
163
164 chromeos::CrosSettings* cros_settings_;
165
166 base::WeakPtrFactory<DeviceStatusCollector> weak_factory_;
167
168 // TODO(bartfab): Remove this once crbug.com/125931 is addressed and a proper
169 // way to mock geolocation exists.
170 LocationUpdateRequester location_update_requester_;
171
172 // Cached values of the reporting settings from the device policy.
173 bool report_version_info_;
174 bool report_activity_times_;
175 bool report_boot_mode_;
176 bool report_location_;
177
178 DISALLOW_COPY_AND_ASSIGN(DeviceStatusCollector);
179 };
180
181 } // namespace policy
182
183 #endif // CHROME_BROWSER_POLICY_DEVICE_STATUS_COLLECTOR_H_
OLDNEW
« no previous file with comments | « chrome/browser/policy/device_policy_decoder_chromeos.cc ('k') | chrome/browser/policy/device_status_collector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698