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
|
// Copyright 2022 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_OS_INTEGRATION_OS_INTEGRATION_SUB_MANAGER_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_OS_INTEGRATION_OS_INTEGRATION_SUB_MANAGER_H_
#include <optional>
#include "base/functional/callback_forward.h"
#include "chrome/browser/web_applications/os_integration/shortcut_creation_reason.h"
#include "components/webapps/common/web_app_id.h"
namespace web_app {
namespace proto::os_state {
class WebAppOsIntegration;
} // namespace proto::os_state
struct SynchronizeOsOptions {
// This option will always unregister all os integration, despite what may be
// in the database. All other options will be ignored.
bool force_unregister_os_integration = false;
// Adds a shortcut to the desktop IFF this call to synchronize creates
// shortcuts fresh for the given app (it's not an update).
bool add_shortcut_to_desktop = false;
// Adds a shortcut to the quick launch bar IFF this call to synchronize
// creates shortcuts fresh for the given app (it's not an update).
bool add_to_quick_launch_bar = false;
// This ensures that shortcuts are always recreated if they were removed. This
// requires the desired OS integration states to be non-empty during the
// Configure() phase, at least for the sub manager responsible for creating
// shortcuts, otherwise there will not be any effect of this flag.
bool force_create_shortcuts = false;
// When set to true, this allows shortcuts to always be updated, even when
// there is no change in between the current and desired OS integration states
// for a web app. If the user has deleted the created shortcuts manually,
// setting this flag will not recreate them.
bool force_update_shortcuts = false;
// The reason synchronize is called, used to possibly show the location of the
// shortcut to the user (this happen on Mac).
ShortcutCreationReason reason = SHORTCUT_CREATION_AUTOMATED;
};
class OsIntegrationSubManager {
public:
OsIntegrationSubManager() = default;
virtual ~OsIntegrationSubManager() = default;
// desired_state can still be empty after the configure_done has completed
// running.
virtual void Configure(const webapps::AppId& app_id,
proto::os_state::WebAppOsIntegration& desired_state,
base::OnceClosure configure_done) = 0;
virtual void Execute(
const webapps::AppId& app_id,
const std::optional<SynchronizeOsOptions>& synchronize_options,
const proto::os_state::WebAppOsIntegration& desired_state,
const proto::os_state::WebAppOsIntegration& current_state,
base::OnceClosure callback) = 0;
// Only invoked if the app is not in the database and the caller set
// force_unregister_os_integration to true. Intended to clean up stale OS
// state that was left over from an unsuccessful uninstall or stale OS data.
virtual void ForceUnregister(const webapps::AppId& app_id,
base::OnceClosure callback) = 0;
};
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_OS_INTEGRATION_OS_INTEGRATION_SUB_MANAGER_H_
|