[go: up one dir, main page]

blob: 6a42915d392ea0ad0a79f359c68165cbed6395fd [file] [log] [blame]
// Copyright 2019 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/web_app_constants.h"
#include <ostream>
#include "base/compiler_specific.h"
#include "chrome/common/chrome_features.h"
#include "components/services/app_service/public/mojom/types.mojom.h"
#include "content/public/common/content_features.h"
namespace web_app {
const char kRunOnOsLoginModeWindowed[] = "windowed";
namespace {
// Note: This can never return kBrowser. This is because the user has
// specified that the web app should be displayed in a window, and thus
// the lowest fallback that we can go to is kMinimalUi.
DisplayMode ResolveAppDisplayModeForStandaloneLaunchContainer(
DisplayMode app_display_mode) {
switch (app_display_mode) {
case DisplayMode::kBrowser:
case DisplayMode::kMinimalUi:
return DisplayMode::kMinimalUi;
case DisplayMode::kUndefined:
NOTREACHED();
FALLTHROUGH;
case DisplayMode::kStandalone:
case DisplayMode::kFullscreen:
return DisplayMode::kStandalone;
case DisplayMode::kWindowControlsOverlay:
return DisplayMode::kWindowControlsOverlay;
case DisplayMode::kTabbed:
if (base::FeatureList::IsEnabled(features::kDesktopPWAsTabStrip))
return DisplayMode::kTabbed;
else
return DisplayMode::kStandalone;
}
}
} // namespace
static_assert(Source::kMinValue == 0, "Source enum should be zero based");
std::ostream& operator<<(std::ostream& os, Source::Type type) {
switch (type) {
case Source::Type::kSystem:
return os << "System";
case Source::Type::kPolicy:
return os << "Policy";
case Source::Type::kSubApp:
return os << "SubApp";
case Source::Type::kWebAppStore:
return os << "WebAppStore";
case Source::Type::kSync:
return os << "Sync";
case Source::Type::kDefault:
return os << "Default";
}
}
static_assert(OsHookType::kShortcuts == 0,
"OsHookType enum should be zero based");
bool IsSuccess(InstallResultCode code) {
switch (code) {
case InstallResultCode::kSuccessNewInstall:
case InstallResultCode::kSuccessAlreadyInstalled:
case InstallResultCode::kSuccessOfflineOnlyInstall:
case InstallResultCode::kSuccessOfflineFallbackInstall:
return true;
default:
return false;
}
}
bool IsNewInstall(InstallResultCode code) {
return IsSuccess(code) && code != InstallResultCode::kSuccessAlreadyInstalled;
}
std::ostream& operator<<(std::ostream& os, InstallResultCode code) {
switch (code) {
case InstallResultCode::kSuccessNewInstall:
return os << "kSuccessNewInstall";
case InstallResultCode::kSuccessAlreadyInstalled:
return os << "kSuccessAlreadyInstalled";
case InstallResultCode::kGetWebApplicationInfoFailed:
return os << "kGetWebApplicationInfoFailed";
case InstallResultCode::kPreviouslyUninstalled:
return os << "kPreviouslyUninstalled";
case InstallResultCode::kWebContentsDestroyed:
return os << "kWebContentsDestroyed";
case InstallResultCode::kInstallTaskDestroyed:
return os << "kInstallTaskDestroyed";
case InstallResultCode::kWriteDataFailed:
return os << "kWriteDataFailed";
case InstallResultCode::kUserInstallDeclined:
return os << "kUserInstallDeclined";
case InstallResultCode::kNotValidManifestForWebApp:
return os << "kNotValidManifestForWebApp";
case InstallResultCode::kIntentToPlayStore:
return os << "kIntentToPlayStore";
case InstallResultCode::kWebAppDisabled:
return os << "kWebAppDisabled";
case InstallResultCode::kInstallURLRedirected:
return os << "kInstallURLRedirected";
case InstallResultCode::kInstallURLLoadFailed:
return os << "kInstallURLLoadFailed";
case InstallResultCode::kExpectedAppIdCheckFailed:
return os << "kExpectedAppIdCheckFailed";
case InstallResultCode::kInstallURLLoadTimeOut:
return os << "kInstallURLLoadTimeOut";
case InstallResultCode::kFailedPlaceholderUninstall:
return os << "kFailedPlaceholderUninstall";
case InstallResultCode::kNotInstallable:
return os << "kNotInstallable";
case InstallResultCode::kApkWebAppInstallFailed:
return os << "kApkWebAppInstallFailed";
case InstallResultCode::kCancelledOnWebAppProviderShuttingDown:
return os << "kCancelledOnWebAppProviderShuttingDown";
case InstallResultCode::kWebAppProviderNotReady:
return os << "kWebAppProviderNotReady";
case InstallResultCode::kSuccessOfflineOnlyInstall:
return os << "kSuccessOfflineOnlyInstall";
case InstallResultCode::kSuccessOfflineFallbackInstall:
return os << "kSuccessOfflineFallbackInstall";
}
}
DisplayMode ResolveEffectiveDisplayMode(
DisplayMode app_display_mode,
const std::vector<DisplayMode>& app_display_mode_overrides,
DisplayMode user_display_mode) {
switch (user_display_mode) {
case DisplayMode::kBrowser:
return user_display_mode;
case DisplayMode::kUndefined:
case DisplayMode::kMinimalUi:
case DisplayMode::kFullscreen:
case DisplayMode::kWindowControlsOverlay:
NOTREACHED();
FALLTHROUGH;
case DisplayMode::kTabbed:
if (base::FeatureList::IsEnabled(features::kDesktopPWAsTabStripSettings))
return user_display_mode;
// Treat as standalone.
FALLTHROUGH;
case DisplayMode::kStandalone:
break;
}
for (const DisplayMode& app_display_mode_override :
app_display_mode_overrides) {
DisplayMode resolved_display_mode =
ResolveAppDisplayModeForStandaloneLaunchContainer(
app_display_mode_override);
if (resolved_display_mode == app_display_mode_override)
return resolved_display_mode;
}
return ResolveAppDisplayModeForStandaloneLaunchContainer(app_display_mode);
}
apps::mojom::LaunchContainer ConvertDisplayModeToAppLaunchContainer(
DisplayMode display_mode) {
switch (display_mode) {
case DisplayMode::kBrowser:
return apps::mojom::LaunchContainer::kLaunchContainerTab;
case DisplayMode::kMinimalUi:
case DisplayMode::kStandalone:
case DisplayMode::kFullscreen:
case DisplayMode::kWindowControlsOverlay:
case DisplayMode::kTabbed:
return apps::mojom::LaunchContainer::kLaunchContainerWindow;
case DisplayMode::kUndefined:
return apps::mojom::LaunchContainer::kLaunchContainerNone;
}
}
std::string RunOnOsLoginModeToString(RunOnOsLoginMode mode) {
switch (mode) {
case RunOnOsLoginMode::kWindowed:
return "windowed";
case RunOnOsLoginMode::kMinimized:
return "minimized";
case RunOnOsLoginMode::kNotRun:
return "not run";
}
}
} // namespace web_app