1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
// 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 CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_INSTALL_PARAMS_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_INSTALL_PARAMS_H_
#include <iosfwd>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/functional/callback_forward.h"
#include "build/build_config.h"
#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
#include "chrome/browser/web_applications/proto/web_app_install_state.pb.h"
#include "chrome/browser/web_applications/web_app_screenshot_fetcher.h"
#include "components/webapps/browser/install_result_code.h"
#include "components/webapps/common/web_app_id.h"
#include "url/gurl.h"
#if BUILDFLAG(IS_CHROMEOS)
#include "ash/webui/system_apps/public/system_web_app_type.h"
#endif
namespace content {
class WebContents;
} // namespace content
namespace web_app {
struct WebAppInstallInfo;
// |app_id| may be empty on failure.
using OnceInstallCallback =
base::OnceCallback<void(const webapps::AppId& app_id,
webapps::InstallResultCode code)>;
using OnceUninstallCallback =
base::OnceCallback<void(const webapps::AppId& app_id, bool uninstalled)>;
// Callback used to indicate whether a user has accepted the installation of a
// web app.
using WebAppInstallationAcceptanceCallback =
base::OnceCallback<void(bool user_accepted,
std::unique_ptr<WebAppInstallInfo>)>;
// Callback to show the WebApp installation confirmation bubble in UI.
// |web_app_info| is the WebAppInstallInfo to be installed.
// If `screenshot_fetcher` exists, then the detailed install dialog is shown.
using WebAppInstallDialogCallback = base::OnceCallback<void(
base::WeakPtr<WebAppScreenshotFetcher> screenshot_fetcher,
content::WebContents* initiator_web_contents,
std::unique_ptr<WebAppInstallInfo> web_app_info,
WebAppInstallationAcceptanceCallback acceptance_callback)>;
// See related ExternalInstallOptions struct and
// ConvertExternalInstallOptionsToParams function.
struct WebAppInstallParams {
WebAppInstallParams();
~WebAppInstallParams();
WebAppInstallParams(const WebAppInstallParams&);
// Whether the app should be reinstalled even if it is already installed.
bool force_reinstall = false;
// See `WebAppInstallTask::ApplyParamsToWebAppInstallInfo`
std::optional<mojom::UserDisplayMode> user_display_mode = std::nullopt;
// URL to be used as start_url if manifest is unavailable.
GURL fallback_start_url;
// App name to be used if manifest is unavailable.
std::optional<std::u16string> fallback_app_name;
proto::InstallState install_state =
proto::InstallState::INSTALLED_WITH_OS_INTEGRATION;
// These are required to be false if `install_state` is not
// proto::INSTALLED_WITH_OS_INTEGRATION.
bool add_to_applications_menu = true;
bool add_to_desktop = true;
bool add_to_quick_launch_bar = true;
// These have no effect outside of Chrome OS.
bool add_to_search = true;
bool add_to_management = true;
bool is_disabled = false;
bool handles_file_open_intents = true;
bool require_manifest = false;
// Used only by ExternallyManagedInstallCommand, to create DIY web apps where
// only limited values from the manifest are used (like theme color) and all
// extra capabilities are not used (like file handlers).
bool install_as_diy = false;
std::vector<std::string> additional_search_terms;
std::optional<std::string> launch_query_params;
#if BUILDFLAG(IS_CHROMEOS)
std::optional<ash::SystemWebAppType> system_app_type;
#endif
bool oem_installed = false;
// The install URL for the app. This does not always need to be
// populated (especially for user installed or sync installed apps)
// in which case the URL will not be written to the web_app DB.
GURL install_url;
// If true, do not validate origin associations as part of the install even if
// app has valid scope_extensions.
bool skip_origin_association_validation = false;
};
// The different UI flows that exist for creating a web app.
enum class WebAppInstallFlow {
// TODO(crbug.com/40184819): This should be removed by adding all known flows
// to this enum.
kUnknown,
#if BUILDFLAG(IS_CHROMEOS)
// Perform the `Create Shortcut` flow on CrOS that creates a DIY app.
kCreateShortcut,
#endif
// The 'Install Site' flow for installing the current site with an app
// experience determined by the site.
kInstallSite,
};
enum class FallbackBehavior {
// Installation will use the crafted manifest, and error if the manifest is
// not installable.
kCraftedManifestOnly,
// Installation will use whatever is available - if the site is installable
// then crafted app UX will be used, and if not then DIY WebApp UX will be
// used. See go/dpwa-universal-install.
kUseFallbackInfoWhenNotInstallable,
// Installation uses the legacy 'create shortcut' flow, which uses the crafted
// manifest if possible, and otherwise fallback information (which has an
// empty
// 'scope()', so IsShortcut() returns true).
kAllowFallbackDataAlways,
};
std::ostream& operator<<(std::ostream& os, FallbackBehavior state);
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_INSTALL_PARAMS_H_
|