#include "components/policy/core/common/cloud/device_management_service.h"
#include <utility>
#include "base/functional/bind.h"
#include "base/location.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/escape.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/sequenced_task_runner.h"
#include "build/build_config.h"
#include "components/policy/core/common/policy_logger.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/proxy_chain.h"
#include "net/base/url_util.h"
#include "net/http/http_response_headers.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/simple_url_loader.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "url/gurl.h"
em;
namespace policy {
namespace {
const char kPostContentType[] = …;
static_assert …;
long g_retry_delay_ms = …;
bool IsProxyError(int net_error) { … }
bool IsConnectionError(int net_error) { … }
bool IsProtobufMimeType(const std::string& mime_type) { … }
bool FailedWithProxy(const std::string& mime_type,
int response_code,
int net_error,
bool was_fetched_via_proxy) { … }
std::string ResponseCodeToString(int response_code) { … }
}
const int DeviceManagementService::kSuccess;
const int DeviceManagementService::kInvalidArgument;
const int DeviceManagementService::kInvalidAuthCookieOrDMToken;
const int DeviceManagementService::kMissingLicenses;
const int DeviceManagementService::kDeviceManagementNotAllowed;
const int DeviceManagementService::kInvalidURL;
const int DeviceManagementService::kInvalidSerialNumber;
const int DeviceManagementService::kDomainMismatch;
const int DeviceManagementService::kDeviceIdConflict;
const int DeviceManagementService::kDeviceNotFound;
const int DeviceManagementService::kPendingApproval;
const int DeviceManagementService::kRequestTooLarge;
const int DeviceManagementService::kConsumerAccountWithPackagedLicense;
const int DeviceManagementService::kTooManyRequests;
const int DeviceManagementService::kInternalServerError;
const int DeviceManagementService::kServiceUnavailable;
const int DeviceManagementService::kPolicyNotFound;
const int DeviceManagementService::kDeprovisioned;
const int DeviceManagementService::kArcDisabled;
const int DeviceManagementService::kInvalidDomainlessCustomer;
const int DeviceManagementService::kTosHasNotBeenAccepted;
const int DeviceManagementService::kIllegalAccountForPackagedEDULicense;
const int DeviceManagementService::kInvalidPackagedDeviceForKiosk;
std::string DeviceManagementService::JobConfiguration::GetJobTypeAsString(
JobType type) { … }
JobConfigurationBase::JobConfigurationBase(
JobType type,
DMAuth auth_data,
std::optional<std::string> oauth_token,
scoped_refptr<network::SharedURLLoaderFactory> factory)
: … { … }
JobConfigurationBase::~JobConfigurationBase() = default;
JobConfigurationBase::JobType JobConfigurationBase::GetType() { … }
const JobConfigurationBase::ParameterMap&
JobConfigurationBase::GetQueryParams() { … }
void JobConfigurationBase::AddParameter(const std::string& name,
const std::string& value) { … }
const DMAuth& JobConfigurationBase::GetAuth() const { … }
scoped_refptr<network::SharedURLLoaderFactory>
JobConfigurationBase::GetUrlLoaderFactory() { … }
net::NetworkTrafficAnnotationTag
JobConfigurationBase::GetTrafficAnnotationTag() { … }
std::unique_ptr<network::ResourceRequest>
JobConfigurationBase::GetResourceRequest(bool bypass_proxy, int last_error) { … }
bool JobConfigurationBase::ShouldRecordUma() const { … }
DeviceManagementService::Job::RetryMethod JobConfigurationBase::ShouldRetry(
int response_code,
const std::string& response_body) { … }
std::optional<base::TimeDelta> JobConfigurationBase::GetTimeoutDuration() { … }
class DeviceManagementService::JobImpl : public Job { … };
void DeviceManagementService::JobImpl::CreateUrlLoader() { … }
void DeviceManagementService::JobImpl::OnURLLoaderComplete(
std::unique_ptr<std::string> response_body) { … }
DeviceManagementService::Job::RetryMethod
DeviceManagementService::JobImpl::OnURLLoaderCompleteInternal(
const std::string& response_body,
const std::string& mime_type,
int net_error,
int response_code,
bool was_fetched_via_proxy,
bool is_test) { … }
DeviceManagementService::Job::RetryMethod
DeviceManagementService::JobImpl::HandleResponseData(
const std::string& response_body,
const std::string& mime_type,
int net_error,
int response_code,
bool was_fetched_via_proxy) { … }
DeviceManagementService::Job::RetryMethod
DeviceManagementService::JobImpl::ShouldRetry(const std::string& response_body,
const std::string& mime_type,
int response_code,
int net_error,
bool was_fetched_via_proxy) { … }
int DeviceManagementService::JobImpl::GetRetryDelay(RetryMethod method) { … }
DeviceManagementService::~DeviceManagementService() = default;
DeviceManagementService::JobForTesting::JobForTesting() = default;
DeviceManagementService::JobForTesting::JobForTesting(JobImpl* job_impl)
: … { … }
DeviceManagementService::JobForTesting::JobForTesting(const JobForTesting&) =
default;
DeviceManagementService::JobForTesting::JobForTesting(
JobForTesting&&) noexcept = default;
DeviceManagementService::JobForTesting&
DeviceManagementService::JobForTesting::operator=(const JobForTesting&) =
default;
DeviceManagementService::JobForTesting&
DeviceManagementService::JobForTesting::operator=(JobForTesting&&) noexcept =
default;
DeviceManagementService::JobForTesting::~JobForTesting() = default;
bool DeviceManagementService::JobForTesting::IsActive() const { … }
void DeviceManagementService::JobForTesting::Deactivate() { … }
DeviceManagementService::JobConfiguration*
DeviceManagementService::JobForTesting::GetConfigurationForTesting() const { … }
DeviceManagementService::Job::RetryMethod
DeviceManagementService::JobForTesting::SetResponseForTesting(
int net_error,
int response_code,
const std::string& response_body,
const std::string& mime_type,
bool was_fetched_via_proxy) { … }
std::pair<std::unique_ptr<DeviceManagementService::Job>,
DeviceManagementService::JobForTesting>
DeviceManagementService::CreateJobForTesting(
std::unique_ptr<JobConfiguration> config) { … }
std::unique_ptr<DeviceManagementService::Job>
DeviceManagementService::CreateJob(std::unique_ptr<JobConfiguration> config) { … }
void DeviceManagementService::ScheduleInitialization(
int64_t delay_milliseconds) { … }
void DeviceManagementService::Initialize() { … }
void DeviceManagementService::Shutdown() { … }
DeviceManagementService::DeviceManagementService(
std::unique_ptr<Configuration> configuration)
: … { … }
void DeviceManagementService::JobImpl::Start() { … }
void DeviceManagementService::SetRetryDelayForTesting(long retry_delay_ms) { … }
void DeviceManagementService::AddJob(JobImpl* job) { … }
base::WeakPtr<DeviceManagementService> DeviceManagementService::GetWeakPtr() { … }
void DeviceManagementService::StartQueuedJobs() { … }
}