blob: cf43c75db6bfe6c4323a16f94b8cf9a34b123306 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/public/common/manifest/manifest_util.h"
#include "base/no_destructor.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "services/network/public/cpp/permissions_policy/permissions_policy.h"
#include "third_party/blink/public/common/manifest/manifest.h"
#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
#include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
namespace blink {
bool IsEmptyManifest(const mojom::Manifest& manifest) {
static base::NoDestructor<mojom::ManifestPtr> empty_manifest_ptr_storage;
mojom::ManifestPtr& empty_manifest = *empty_manifest_ptr_storage;
if (!empty_manifest)
empty_manifest = mojom::Manifest::New();
return manifest == *empty_manifest;
}
bool IsEmptyManifest(const mojom::ManifestPtr& manifest) {
return !manifest || IsEmptyManifest(*manifest);
}
bool IsDefaultManifest(const mojom::Manifest& manifest,
const GURL& document_url) {
blink::mojom::ManifestPtr expected_manifest = blink::mojom::Manifest::New();
expected_manifest->start_url = document_url;
expected_manifest->id = document_url.GetWithoutRef();
expected_manifest->scope = document_url.GetWithoutFilename();
return manifest == *expected_manifest;
}
bool IsDefaultManifest(const mojom::ManifestPtr& manifest,
const GURL& document_url) {
return manifest && IsDefaultManifest(*manifest, document_url);
}
std::optional<blink::mojom::Manifest_TextDirection> TextDirectionFromString(
const std::string& dir) {
using TextDirection = blink::mojom::Manifest_TextDirection;
if (base::EqualsCaseInsensitiveASCII(dir, "auto")) {
return TextDirection::kAuto;
}
if (base::EqualsCaseInsensitiveASCII(dir, "ltr")) {
return TextDirection::kLTR;
}
if (base::EqualsCaseInsensitiveASCII(dir, "rtl")) {
return TextDirection::kRTL;
}
return std::nullopt;
}
std::string DisplayModeToString(blink::mojom::DisplayMode display) {
switch (display) {
case blink::mojom::DisplayMode::kUndefined:
return "";
case blink::mojom::DisplayMode::kBrowser:
return "browser";
case blink::mojom::DisplayMode::kMinimalUi:
return "minimal-ui";
case blink::mojom::DisplayMode::kStandalone:
return "standalone";
case blink::mojom::DisplayMode::kFullscreen:
return "fullscreen";
case blink::mojom::DisplayMode::kWindowControlsOverlay:
return "window-controls-overlay";
case blink::mojom::DisplayMode::kTabbed:
return "tabbed";
case blink::mojom::DisplayMode::kBorderless:
return "borderless";
case blink::mojom::DisplayMode::kPictureInPicture:
return "picture-in-picture";
}
return "";
}
blink::mojom::DisplayMode DisplayModeFromString(const std::string& display) {
if (base::EqualsCaseInsensitiveASCII(display, "browser"))
return blink::mojom::DisplayMode::kBrowser;
if (base::EqualsCaseInsensitiveASCII(display, "minimal-ui"))
return blink::mojom::DisplayMode::kMinimalUi;
if (base::EqualsCaseInsensitiveASCII(display, "standalone"))
return blink::mojom::DisplayMode::kStandalone;
if (base::EqualsCaseInsensitiveASCII(display, "fullscreen"))
return blink::mojom::DisplayMode::kFullscreen;
if (base::EqualsCaseInsensitiveASCII(display, "window-controls-overlay"))
return blink::mojom::DisplayMode::kWindowControlsOverlay;
if (base::EqualsCaseInsensitiveASCII(display, "tabbed"))
return blink::mojom::DisplayMode::kTabbed;
if (base::EqualsCaseInsensitiveASCII(display, "borderless"))
return blink::mojom::DisplayMode::kBorderless;
if (base::EqualsCaseInsensitiveASCII(display, "picture-in-picture")) {
return blink::mojom::DisplayMode::kPictureInPicture;
}
return blink::mojom::DisplayMode::kUndefined;
}
bool IsBasicDisplayMode(blink::mojom::DisplayMode display) {
if (display == blink::mojom::DisplayMode::kBrowser ||
display == blink::mojom::DisplayMode::kMinimalUi ||
display == blink::mojom::DisplayMode::kStandalone ||
display == blink::mojom::DisplayMode::kFullscreen) {
return true;
}
return false;
}
std::string WebScreenOrientationLockTypeToString(
device::mojom::ScreenOrientationLockType orientation) {
switch (orientation) {
case device::mojom::ScreenOrientationLockType::DEFAULT:
return "";
case device::mojom::ScreenOrientationLockType::PORTRAIT_PRIMARY:
return "portrait-primary";
case device::mojom::ScreenOrientationLockType::PORTRAIT_SECONDARY:
return "portrait-secondary";
case device::mojom::ScreenOrientationLockType::LANDSCAPE_PRIMARY:
return "landscape-primary";
case device::mojom::ScreenOrientationLockType::LANDSCAPE_SECONDARY:
return "landscape-secondary";
case device::mojom::ScreenOrientationLockType::ANY:
return "any";
case device::mojom::ScreenOrientationLockType::LANDSCAPE:
return "landscape";
case device::mojom::ScreenOrientationLockType::PORTRAIT:
return "portrait";
case device::mojom::ScreenOrientationLockType::NATURAL:
return "natural";
}
return "";
}
device::mojom::ScreenOrientationLockType WebScreenOrientationLockTypeFromString(
const std::string& orientation) {
if (base::EqualsCaseInsensitiveASCII(orientation, "portrait-primary"))
return device::mojom::ScreenOrientationLockType::PORTRAIT_PRIMARY;
if (base::EqualsCaseInsensitiveASCII(orientation, "portrait-secondary"))
return device::mojom::ScreenOrientationLockType::PORTRAIT_SECONDARY;
if (base::EqualsCaseInsensitiveASCII(orientation, "landscape-primary"))
return device::mojom::ScreenOrientationLockType::LANDSCAPE_PRIMARY;
if (base::EqualsCaseInsensitiveASCII(orientation, "landscape-secondary"))
return device::mojom::ScreenOrientationLockType::LANDSCAPE_SECONDARY;
if (base::EqualsCaseInsensitiveASCII(orientation, "any"))
return device::mojom::ScreenOrientationLockType::ANY;
if (base::EqualsCaseInsensitiveASCII(orientation, "landscape"))
return device::mojom::ScreenOrientationLockType::LANDSCAPE;
if (base::EqualsCaseInsensitiveASCII(orientation, "portrait"))
return device::mojom::ScreenOrientationLockType::PORTRAIT;
if (base::EqualsCaseInsensitiveASCII(orientation, "natural"))
return device::mojom::ScreenOrientationLockType::NATURAL;
return device::mojom::ScreenOrientationLockType::DEFAULT;
}
std::optional<mojom::ManifestLaunchHandler::ClientMode> ClientModeFromString(
const std::string& client_mode) {
using ClientMode = Manifest::LaunchHandler::ClientMode;
if (base::EqualsCaseInsensitiveASCII(client_mode, "auto"))
return ClientMode::kAuto;
if (base::EqualsCaseInsensitiveASCII(client_mode, "navigate-new"))
return ClientMode::kNavigateNew;
if (base::EqualsCaseInsensitiveASCII(client_mode, "navigate-existing"))
return ClientMode::kNavigateExisting;
if (base::EqualsCaseInsensitiveASCII(client_mode, "focus-existing"))
return ClientMode::kFocusExisting;
return std::nullopt;
}
} // namespace blink