blob: 936afb75c5eadf9f73b5f833c47878a311439983 [file] [log] [blame]
// Copyright 2019 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_ENTERPRISE_REPORTING_REPORT_REQUEST_QUEUE_GENERATOR_H_
#define CHROME_BROWSER_ENTERPRISE_REPORTING_REPORT_REQUEST_QUEUE_GENERATOR_H_
#include <memory>
#include <queue>
#include "base/callback_forward.h"
#include "base/macros.h"
#include "build/build_config.h"
#include "components/enterprise/browser/reporting/profile_report_generator.h"
#include "components/enterprise/browser/reporting/report_request_definition.h"
#include "components/policy/proto/device_management_backend.pb.h"
namespace enterprise_reporting {
// Generate a report request queue that contains full profile information. The
// request number in the queue is decided by the maximum report size setting.
class ReportRequestQueueGenerator {
using ReportRequest = definition::ReportRequest;
using ReportRequests = std::queue<std::unique_ptr<ReportRequest>>;
public:
ReportRequestQueueGenerator();
ReportRequestQueueGenerator(const ReportRequestQueueGenerator&) = delete;
ReportRequestQueueGenerator& operator=(const ReportRequestQueueGenerator&) =
delete;
~ReportRequestQueueGenerator();
// Get the maximum report size.
size_t GetMaximumReportSizeForTesting() const;
// Set the maximum report size. The full profile info will be skipped or moved
// to another new request if its size exceeds the limit.
void SetMaximumReportSizeForTesting(size_t maximum_report_size);
// Generate a queue of requests including full profile info based on given
// basic request.
ReportRequests Generate(const ReportRequest& basic_request);
private:
// Generate request with full profile info at |profile_index| according to
// |basic_request|, then store it into |requests|.
void GenerateProfileReportWithIndex(const ReportRequest& basic_request,
int profile_index,
ReportRequests* requests);
private:
size_t maximum_report_size_;
ProfileReportGenerator profile_report_generator_;
};
} // namespace enterprise_reporting
#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_REPORT_REQUEST_QUEUE_GENERATOR_H_