blob: b7fa0c2515fed11c61bdabc103b12138ab3c4010 [file] [log] [blame]
// Copyright (c) 2013 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.
#include "chrome/browser/web_applications/components/web_application_info.h"
#include "components/webapps/common/web_page_metadata.mojom.h"
#include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
// IconBitmaps
IconBitmaps::IconBitmaps() = default;
IconBitmaps::~IconBitmaps() = default;
IconBitmaps::IconBitmaps(const IconBitmaps&) = default;
IconBitmaps::IconBitmaps(IconBitmaps&&) = default;
IconBitmaps& IconBitmaps::operator=(const IconBitmaps&) = default;
IconBitmaps& IconBitmaps::operator=(IconBitmaps&&) = default;
const std::map<SquareSizePx, SkBitmap>& IconBitmaps::GetBitmapsForPurpose(
IconPurpose purpose) const {
switch (purpose) {
case IconPurpose::MONOCHROME:
// TODO (crbug.com/1114638): Monochrome support.
NOTREACHED();
FALLTHROUGH;
case IconPurpose::ANY:
return any;
case IconPurpose::MASKABLE:
return maskable;
}
}
void IconBitmaps::SetBitmapsForPurpose(
IconPurpose purpose,
std::map<SquareSizePx, SkBitmap> bitmaps) {
switch (purpose) {
case IconPurpose::ANY:
any = std::move(bitmaps);
return;
case IconPurpose::MONOCHROME:
// TODO (crbug.com/1114638): Monochrome support.
NOTREACHED();
return;
case IconPurpose::MASKABLE:
maskable = std::move(bitmaps);
return;
}
}
bool IconBitmaps::empty() const {
// TODO (crbug.com/1114638): Check Monochrome if supported.
return any.empty() && maskable.empty();
}
// IconSizes
IconSizes::IconSizes() = default;
IconSizes::~IconSizes() = default;
IconSizes::IconSizes(const IconSizes&) = default;
IconSizes::IconSizes(IconSizes&&) = default;
IconSizes& IconSizes::operator=(const IconSizes&) = default;
IconSizes& IconSizes::operator=(IconSizes&&) = default;
const std::vector<SquareSizePx>& IconSizes::GetSizesForPurpose(
IconPurpose purpose) const {
switch (purpose) {
case IconPurpose::MONOCHROME:
// TODO (crbug.com/1114638): Monochrome support.
NOTREACHED();
FALLTHROUGH;
case IconPurpose::ANY:
return any;
case IconPurpose::MASKABLE:
return maskable;
}
}
void IconSizes::SetSizesForPurpose(IconPurpose purpose,
std::vector<SquareSizePx> sizes) {
switch (purpose) {
case IconPurpose::ANY:
any = std::move(sizes);
return;
case IconPurpose::MONOCHROME:
// TODO (crbug.com/1114638): Monochrome support.
NOTREACHED();
return;
case IconPurpose::MASKABLE:
maskable = std::move(sizes);
return;
}
}
bool IconSizes::empty() const {
// TODO (crbug.com/1114638): Check Monochrome if supported.
return any.empty() && maskable.empty();
}
// WebApplicationIconInfo
WebApplicationIconInfo::WebApplicationIconInfo() = default;
WebApplicationIconInfo::WebApplicationIconInfo(const GURL& url,
SquareSizePx size)
: url(url), square_size_px(size) {}
WebApplicationIconInfo::WebApplicationIconInfo(const WebApplicationIconInfo&) =
default;
WebApplicationIconInfo::WebApplicationIconInfo(WebApplicationIconInfo&&) =
default;
WebApplicationIconInfo::~WebApplicationIconInfo() = default;
WebApplicationIconInfo& WebApplicationIconInfo::operator=(
const WebApplicationIconInfo&) = default;
WebApplicationIconInfo& WebApplicationIconInfo::operator=(
WebApplicationIconInfo&&) = default;
// WebApplicationShortcutsMenuItemInfo::Icon
WebApplicationShortcutsMenuItemInfo::Icon::Icon() = default;
WebApplicationShortcutsMenuItemInfo::Icon::Icon(
const WebApplicationShortcutsMenuItemInfo::Icon&) = default;
WebApplicationShortcutsMenuItemInfo::Icon::Icon(
WebApplicationShortcutsMenuItemInfo::Icon&&) = default;
WebApplicationShortcutsMenuItemInfo::Icon::~Icon() = default;
WebApplicationShortcutsMenuItemInfo::Icon&
WebApplicationShortcutsMenuItemInfo::Icon::operator=(
const WebApplicationShortcutsMenuItemInfo::Icon&) = default;
WebApplicationShortcutsMenuItemInfo::Icon&
WebApplicationShortcutsMenuItemInfo::Icon::operator=(
WebApplicationShortcutsMenuItemInfo::Icon&&) = default;
// WebApplicationShortcutsMenuItemInfo
WebApplicationShortcutsMenuItemInfo::WebApplicationShortcutsMenuItemInfo() =
default;
WebApplicationShortcutsMenuItemInfo::WebApplicationShortcutsMenuItemInfo(
const WebApplicationShortcutsMenuItemInfo& other) = default;
WebApplicationShortcutsMenuItemInfo::WebApplicationShortcutsMenuItemInfo(
WebApplicationShortcutsMenuItemInfo&&) noexcept = default;
WebApplicationShortcutsMenuItemInfo::~WebApplicationShortcutsMenuItemInfo() =
default;
WebApplicationShortcutsMenuItemInfo&
WebApplicationShortcutsMenuItemInfo::operator=(
const WebApplicationShortcutsMenuItemInfo&) = default;
WebApplicationShortcutsMenuItemInfo&
WebApplicationShortcutsMenuItemInfo::operator=(
WebApplicationShortcutsMenuItemInfo&&) noexcept = default;
const std::vector<WebApplicationShortcutsMenuItemInfo::Icon>&
WebApplicationShortcutsMenuItemInfo::GetShortcutIconInfosForPurpose(
IconPurpose purpose) const {
switch (purpose) {
case IconPurpose::MONOCHROME:
// TODO (crbug.com/1114638): Monochrome support.
NOTREACHED();
FALLTHROUGH;
case IconPurpose::ANY:
return any;
case IconPurpose::MASKABLE:
return maskable;
}
}
void WebApplicationShortcutsMenuItemInfo::SetShortcutIconInfosForPurpose(
IconPurpose purpose,
std::vector<WebApplicationShortcutsMenuItemInfo::Icon>
shortcut_icon_infos) {
switch (purpose) {
case IconPurpose::ANY:
any = std::move(shortcut_icon_infos);
return;
case IconPurpose::MONOCHROME:
// TODO (crbug.com/1114638): Monochrome support.
NOTREACHED();
return;
case IconPurpose::MASKABLE:
maskable = std::move(shortcut_icon_infos);
return;
}
}
// WebApplicationInfo
WebApplicationInfo::WebApplicationInfo() = default;
WebApplicationInfo::WebApplicationInfo(const WebApplicationInfo& other) =
default;
WebApplicationInfo::WebApplicationInfo(
const webapps::mojom::WebPageMetadata& metadata)
: title(metadata.application_name),
description(metadata.description),
start_url(metadata.application_url) {
for (const auto& icon : metadata.icons) {
WebApplicationIconInfo icon_info;
icon_info.url = icon->url;
if (icon->square_size_px > 0)
icon_info.square_size_px = icon->square_size_px;
icon_infos.push_back(icon_info);
}
switch (metadata.mobile_capable) {
case webapps::mojom::WebPageMobileCapable::UNSPECIFIED:
mobile_capable = MOBILE_CAPABLE_UNSPECIFIED;
break;
case webapps::mojom::WebPageMobileCapable::ENABLED:
mobile_capable = MOBILE_CAPABLE;
break;
case webapps::mojom::WebPageMobileCapable::ENABLED_APPLE:
mobile_capable = MOBILE_CAPABLE_APPLE;
break;
}
}
WebApplicationInfo::~WebApplicationInfo() = default;
bool operator==(const WebApplicationIconInfo& icon_info1,
const WebApplicationIconInfo& icon_info2) {
return std::tie(icon_info1.url, icon_info1.square_size_px,
icon_info1.purpose) == std::tie(icon_info2.url,
icon_info2.square_size_px,
icon_info2.purpose);
}
std::ostream& operator<<(std::ostream& out,
const WebApplicationIconInfo& icon_info) {
out << "url: " << icon_info.url << std::endl;
out << " square_size_px: ";
if (icon_info.square_size_px)
out << *icon_info.square_size_px << std::endl;
else
out << "none" << std::endl;
out << " purpose: " << icon_info.purpose << std::endl;
return out;
}
bool operator==(const IconSizes& icon_sizes1, const IconSizes& icon_sizes2) {
// TODO (crbug.com/1114638): Add Monochrome support.
return std::tie(icon_sizes1.any, icon_sizes1.maskable) ==
std::tie(icon_sizes2.any, icon_sizes2.maskable);
}
bool operator==(const WebApplicationShortcutsMenuItemInfo::Icon& icon1,
const WebApplicationShortcutsMenuItemInfo::Icon& icon2) {
return std::tie(icon1.url, icon1.square_size_px) ==
std::tie(icon2.url, icon2.square_size_px);
}
bool operator==(const WebApplicationShortcutsMenuItemInfo& shortcut_info1,
const WebApplicationShortcutsMenuItemInfo& shortcut_info2) {
// TODO (crbug.com/1114638): Add Monochrome support.
return std::tie(shortcut_info1.name, shortcut_info1.url, shortcut_info1.any,
shortcut_info1.maskable) ==
std::tie(shortcut_info2.name, shortcut_info2.url, shortcut_info2.any,
shortcut_info2.maskable);
}
std::ostream& operator<<(std::ostream& out,
const WebApplicationShortcutsMenuItemInfo& info) {
out << "name: " << info.name << std::endl;
out << " url: " << info.url << std::endl;
out << " icons:" << std::endl;
out << " any:" << std::endl;
for (WebApplicationShortcutsMenuItemInfo::Icon icon : info.any) {
out << " url: " << icon.url << std::endl;
out << " square_size_px: " << icon.square_size_px << std::endl;
}
out << " maskable:" << std::endl;
for (WebApplicationShortcutsMenuItemInfo::Icon icon : info.maskable) {
out << " url: " << icon.url << std::endl;
out << " square_size_px: " << icon.square_size_px << std::endl;
}
// TODO (crbug.com/1114638): Add Monochrome support.
return out;
}