blob: d8540e141e920c1166fd33ea312959a2680ab528 [file] [log] [blame]
// Copyright 2018 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.
#ifndef CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_CONSUMER_STATUS_REPORTING_SERVICE_H_
#define CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_CONSUMER_STATUS_REPORTING_SERVICE_H_
#include <memory>
#include "base/macros.h"
#include "base/time/time.h"
#include "components/keyed_service/core/keyed_service.h"
class PrefChangeRegistrar;
namespace content {
class BrowserContext;
}
namespace policy {
class CloudPolicyClient;
class StatusUploader;
class UserCloudPolicyManagerChromeOS;
}
namespace chromeos {
// Controls consumer reporting for child user.
// Child user should be registered with DMServer and periodically upload the
// information about the device usage. The reports are only sent during user's
// session and they do not interfere with enterprise reporting that is
// controlled by DeviceCloudPolicyManagerChromeOS.
class ConsumerStatusReportingService : public KeyedService {
public:
explicit ConsumerStatusReportingService(content::BrowserContext* context);
~ConsumerStatusReportingService() override;
// Returns true if the status report has been scheduled. Otherwise, returns
// false.
virtual bool RequestImmediateStatusReport();
// Get the child's usage time so far today.
base::TimeDelta GetChildScreenTime() const;
private:
// Creates new status uploader if parameters changed.
void CreateStatusUploaderIfNeeded(policy::CloudPolicyClient* client);
// Called when the UsageTimeLimits policy changes.
void OnTimeLimitsPolicyChanged();
// Helper object that controls device status collection/storage and uploads
// gathered reports to the server.
std::unique_ptr<policy::StatusUploader> status_uploader_;
// Preference changes observer.
std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
// Day start/reset time used for aggregating activity data for consumer status
// reporting.
base::TimeDelta day_reset_time_;
content::BrowserContext* const context_;
policy::UserCloudPolicyManagerChromeOS* user_cloud_policy_manager_;
DISALLOW_COPY_AND_ASSIGN(ConsumerStatusReportingService);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_CONSUMER_STATUS_REPORTING_SERVICE_H_