chromium/components/policy/core/browser/webui/json_generation.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_POLICY_CORE_BROWSER_WEBUI_JSON_GENERATION_H_
#define COMPONENTS_POLICY_CORE_BROWSER_WEBUI_JSON_GENERATION_H_

#include <memory>
#include <optional>
#include <string>

#include "base/values.h"
#include "components/policy/policy_export.h"

namespace base {
class Value;
}

namespace policy {

POLICY_EXPORT extern const char kChromeMetadataVersionKey[];
POLICY_EXPORT extern const char kChromeMetadataOSKey[];
POLICY_EXPORT extern const char kChromeMetadataPlatformKey[];
POLICY_EXPORT extern const char kChromeMetadataRevisionKey[];

// Simple object containing parameters used to generate a string of JSON from
// a set of policies.
struct POLICY_EXPORT JsonGenerationParams {};

// Generates a string of JSON containing |policy_values| along
// with additional metadata about the current device/build, based both on what
// is stored in |params| and also information that is statically available.
// Expects |policy_values| in the format PolicyValueProvider returns. Expects
// |status| in the format policy::PolicyStatusProvider returns.
POLICY_EXPORT std::string GenerateJson(base::Value::Dict policy_values,
                                       base::Value::Dict status,
                                       const JsonGenerationParams& params);

// Returns metadata about the current device/build, based both on what
// is stored in |params| and also information that is statically available.
POLICY_EXPORT base::Value::Dict GetChromeMetadataValue(
    const JsonGenerationParams& params);

}  // namespace policy

#endif  // COMPONENTS_POLICY_CORE_BROWSER_WEBUI_JSON_GENERATION_H_