blob: 3385940367396ced1e52900f24ed19f821439e6f [file] [log] [blame]
// 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_SERVICES_APP_SERVICE_PUBLIC_CPP_ICON_INFO_H_
#define COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_ICON_INFO_H_
#include "base/values.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/gurl.h"
namespace apps {
// This struct holds info about an icon, but not the actual SkBitmap. It's
// roughly a flattened version of `blink::mojom::ManifestImageResource`, as
// there is one instance for each combination of URL, size and purpose, rather
// than one instance per URL that holds vectors of sizes and purposes.
struct IconInfo {
using SquareSizePx = int;
// Equivalent to `blink::mojom::ManifestImageResource_Purpose`.
enum class Purpose {
kAny = 0,
kMonochrome = 1,
kMaskable = 2,
};
IconInfo();
IconInfo(const GURL& url, SquareSizePx size);
IconInfo(const IconInfo&);
IconInfo(IconInfo&&) noexcept;
~IconInfo();
IconInfo& operator=(const IconInfo&);
IconInfo& operator=(IconInfo&&) noexcept;
base::Value AsDebugValue() const;
bool operator==(const apps::IconInfo& other) const;
// The source URL of the icon. Note that multiple icons can share a single
// source URL, as some image formats can contain multiple sizes.
GURL url;
// The nominal size of the icon. Depending on context, this might have come
// from the manifest or be a record of the size icon that was served at `url`.
absl::optional<SquareSizePx> square_size_px;
// The purpose of this icon.
Purpose purpose = Purpose::kAny;
};
} // namespace apps
#endif // COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_ICON_INFO_H_