| // 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 |