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 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
// Copyright 2020 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_APP_SERVICE_WEB_APPS_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_APP_SERVICE_WEB_APPS_H_
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/one_shot_event.h"
#include "base/scoped_observation.h"
#include "build/build_config.h"
#include "chrome/browser/apps/app_service/launch_result_type.h"
#include "chrome/browser/apps/app_service/publishers/app_publisher.h"
#include "chrome/browser/web_applications/app_service/web_app_publisher_helper.h"
#include "chrome/browser/web_applications/web_app_command_scheduler.h"
#include "chrome/browser/web_applications/web_app_install_info.h"
#include "components/services/app_service/public/cpp/app_launch_util.h"
#include "components/services/app_service/public/cpp/icon_types.h"
#include "components/services/app_service/public/cpp/intent.h"
#include "components/services/app_service/public/cpp/menu.h"
#include "components/services/app_service/public/cpp/permission.h"
#include "components/webapps/common/web_app_id.h"
#include "ui/base/resource/resource_scale_factor.h"
class Profile;
namespace webapps {
enum class WebappUninstallSource;
} // namespace webapps
#if BUILDFLAG(IS_CHROMEOS)
namespace apps {
class InstanceRegistry;
struct AppLaunchParams;
}
#endif
namespace web_app {
class WebApp;
class WebAppProvider;
// An app publisher (in the App Service sense) of Web Apps.
class WebApps final : public apps::AppPublisher,
public WebAppPublisherHelper::Delegate {
public:
explicit WebApps(apps::AppServiceProxy* proxy);
WebApps(const WebApps&) = delete;
WebApps& operator=(const WebApps&) = delete;
~WebApps() override;
void Shutdown();
protected:
const WebApp* GetWebApp(const webapps::AppId& app_id) const;
Profile* profile() const { return profile_; }
WebAppProvider* provider() const { return provider_; }
WebAppPublisherHelper& publisher_helper() { return publisher_helper_; }
private:
void Initialize();
// apps::AppPublisher overrides.
void LoadIcon(const std::string& app_id,
const apps::IconKey& icon_key,
apps::IconType icon_type,
int32_t size_hint_in_dip,
bool allow_placeholder_icon,
apps::LoadIconCallback callback) override;
#if BUILDFLAG(IS_CHROMEOS)
void GetCompressedIconData(const std::string& app_id,
int32_t size_in_dip,
ui::ResourceScaleFactor scale_factor,
apps::LoadIconCallback callback) override;
#endif
void Launch(const std::string& app_id,
int32_t event_flags,
apps::LaunchSource launch_source,
apps::WindowInfoPtr window_info) override;
void LaunchAppWithFiles(const std::string& app_id,
int32_t event_flags,
apps::LaunchSource launch_source,
std::vector<base::FilePath> file_paths) override;
void LaunchAppWithIntent(const std::string& app_id,
int32_t event_flags,
apps::IntentPtr intent,
apps::LaunchSource launch_source,
apps::WindowInfoPtr window_info,
apps::LaunchCallback callback) override;
void LaunchAppWithParams(apps::AppLaunchParams&& params,
apps::LaunchCallback callback) override;
void SetPermission(const std::string& app_id,
apps::PermissionPtr permission) override;
void Uninstall(const std::string& app_id,
apps::UninstallSource uninstall_source,
bool clear_site_data,
bool report_abuse) override;
#if BUILDFLAG(IS_CHROMEOS)
void GetMenuModel(
const std::string& app_id,
apps::MenuType menu_type,
int64_t display_id,
base::OnceCallback<void(apps::MenuItems)> callback) override;
#endif // BUILDFLAG(IS_CHROMEOS)
void UpdateAppSize(const std::string& app_id) override;
void SetWindowMode(const std::string& app_id,
apps::WindowMode window_mode) override;
void OpenNativeSettings(const std::string& app_id) override;
// WebAppPublisherHelper::Delegate overrides.
void PublishWebApps(std::vector<apps::AppPtr> apps) override;
void PublishWebApp(apps::AppPtr app) override;
void ModifyWebAppCapabilityAccess(
const std::string& app_id,
std::optional<bool> accessing_camera,
std::optional<bool> accessing_microphone) override;
std::vector<apps::AppPtr> CreateWebApps();
void InitWebApps();
#if BUILDFLAG(IS_CHROMEOS)
// apps::AppPublisher overrides.
void PauseApp(const std::string& app_id) override;
void UnpauseApp(const std::string& app_id) override;
void StopApp(const std::string& app_id) override;
// menu_type is stored as |shortcut_id|.
void ExecuteContextMenuCommand(const std::string& app_id,
int command_id,
const std::string& shortcut_id,
int64_t display_id) override;
void GetAppShortcutMenuModel(
const std::string& app_id,
apps::MenuItems menu_items,
base::OnceCallback<void(apps::MenuItems)> callback);
void OnShortcutsMenuIconsRead(
const std::string& app_id,
apps::MenuItems menu_items,
base::OnceCallback<void(apps::MenuItems)> callback,
ShortcutsMenuIconBitmaps shortcuts_menu_icon_bitmaps);
#endif // BUILDFLAG(IS_CHROMEOS)
const raw_ptr<Profile> profile_;
const raw_ptr<WebAppProvider> provider_;
// Specifies whether the web app registry becomes ready.
bool is_ready_ = false;
#if BUILDFLAG(IS_CHROMEOS)
const raw_ptr<apps::InstanceRegistry> instance_registry_;
#endif
WebAppPublisherHelper publisher_helper_;
base::WeakPtrFactory<WebApps> weak_ptr_factory_{this};
};
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_APP_SERVICE_WEB_APPS_H_
|