blob: 9205ce6fe72d1a2ca7e7abe5051746c929eb11cb [file] [log] [blame]
// 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 <memory>
#include <string>
#include <vector>
#include "base/functional/callback.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
#include "chrome/browser/web_applications/web_app_id.h"
#include "components/webapps/browser/install_result_code.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/gurl.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ash/webui/system_apps/public/system_web_app_type.h"
#endif
struct WebAppInstallInfo;
namespace content {
class WebContents;
} // namespace content
namespace web_app {
// |app_id| may be empty on failure.
using OnceInstallCallback =
base::OnceCallback<void(const AppId& app_id,
webapps::InstallResultCode code)>;
using OnceUninstallCallback =
base::OnceCallback<void(const 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.
using WebAppInstallDialogCallback = base::OnceCallback<void(
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`
absl::optional<mojom::UserDisplayMode> user_display_mode = absl::nullopt;
// URL to be used as start_url if manifest is unavailable.
GURL fallback_start_url;
// Setting this field will force the webapp to have a manifest id, which
// will result in a different AppId than if it isn't set. Currently here
// to support forwards compatibility with future sync entities..
absl::optional<std::string> override_manifest_id;
// App name to be used if manifest is unavailable.
absl::optional<std::u16string> fallback_app_name;
bool locally_installed = true;
// If true, OsIntegrationManager::InstallOsHooks won't be called at all,
// meaning that all other OS Hooks related parameters will be ignored.
bool bypass_os_hooks = false;
// These OS shortcut fields can't be true if |locally_installed| is false.
// They only have an effect when |bypass_os_hooks| is false.
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 bypass_service_worker_check = false;
bool require_manifest = false;
// Used only by ExternallyManagedInstallCommand.
// Has the same meaning as WebAppInstallFlow::kCreateShortcut
bool install_as_shortcut = false;
std::vector<std::string> additional_search_terms;
absl::optional<std::string> launch_query_params;
#if BUILDFLAG(IS_CHROMEOS_ASH)
absl::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;
};
// The different UI flows that exist for creating a web app.
enum class WebAppInstallFlow {
// TODO(crbug.com/1216457): This should be removed by adding all known flows
// to this enum.
kUnknown,
// The 'Create Shortcut' flow for adding the current page as a shortcut app.
kCreateShortcut,
// The 'Install Site' flow for installing the current site with an app
// experience determined by the site.
kInstallSite,
};
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_INSTALL_PARAMS_H_