chromium/chrome/browser/ash/crosapi/crosapi_util.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 CHROME_BROWSER_ASH_CROSAPI_CROSAPI_UTIL_H_
#define CHROME_BROWSER_ASH_CROSAPI_CROSAPI_UTIL_H_

#include <string_view>
#include <vector>

#include "base/containers/flat_map.h"
#include "base/containers/span.h"
#include "base/files/platform_file.h"
#include "base/files/scoped_file.h"
#include "base/token.h"
#include "chrome/browser/ash/crosapi/browser_util.h"
#include "chromeos/ash/components/standalone_browser/lacros_selection.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "components/policy/core/common/cloud/cloud_policy_core.h"
#include "components/policy/core/common/cloud/component_cloud_policy_service.h"
#include "components/user_manager/user.h"
#include "url/gurl.h"

class Profile;

// These methods are used by ash-chrome.
namespace crosapi {
namespace browser_util {

// Checks for the given profile if the user is affiliated or belongs to the
// sign-in profile.
bool IsSigninProfileOrBelongsToAffiliatedUser(Profile* profile);

// Returns the UUID and version for all tracked interfaces. Exposed for testing.
const base::flat_map<base::Token, uint32_t>& GetInterfaceVersions();

// Represents how to launch Lacros Chrome.
struct InitialBrowserAction {
  explicit InitialBrowserAction(crosapi::mojom::InitialBrowserAction action);
  InitialBrowserAction(InitialBrowserAction&&);
  InitialBrowserAction& operator=(InitialBrowserAction&&);
  ~InitialBrowserAction();

  // Mode how to launch Lacros chrome.
  crosapi::mojom::InitialBrowserAction action;

  // If action is kOpenWindowWithUrls, URLs here is passed to Lacros Chrome,
  // and they will be opened.
  std::vector<GURL> urls;

  // Where this request comes from.
  crosapi::mojom::OpenUrlFrom from = crosapi::mojom::OpenUrlFrom::kUnspecified;
};

// Returns the initial parameter to be passed to Crosapi client,
// such as lacros-chrome.
// If |include_post_login_params| is true, it fills the structure
// with all the parameters, including the ones that are only
// available after login.
mojom::BrowserInitParamsPtr GetBrowserInitParams(
    InitialBrowserAction initial_browser_action,
    bool is_keep_alive_enabled,
    std::optional<ash::standalone_browser::LacrosSelection> lacros_selection,
    bool include_post_login_params = true);

// Creates a memory backed file containing the serialized |params|,
// and returns its FD.
// If |include_post_login_params| is true, it creates a file
// with all the parameters, including the ones that are only
// available after login.
base::ScopedFD CreateStartupData(
    InitialBrowserAction initial_browser_action,
    bool is_keep_alive_enabled,
    std::optional<ash::standalone_browser::LacrosSelection> lacros_selection,
    bool include_post_login_params = true);

// Serializes and writes post-login parameters into the given FD.
bool WritePostLoginData(base::PlatformFile fd,
                        InitialBrowserAction initial_browser_action);

// Returns the device settings needed for Lacros.
mojom::DeviceSettingsPtr GetDeviceSettings();

// Returns the CloudPolicyCore for the given user.
policy::CloudPolicyCore* GetCloudPolicyCoreForUser(
    const user_manager::User& user);

// Returns the ComponentCloudPolicyService for the given user.
policy::ComponentCloudPolicyService* GetComponentCloudPolicyServiceForUser(
    const user_manager::User& user);

// Returns the list of Ash capabilities to publish to Lacros.
base::span<const std::string_view> GetAshCapabilities();

}  // namespace browser_util
}  // namespace crosapi

#endif  // CHROME_BROWSER_ASH_CROSAPI_CROSAPI_UTIL_H_