blob: 54d3e57ec0848c73269b1408767c962f94abf031 [file] [log] [blame]
// Copyright 2024 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_DEVTOOLS_PROTOCOL_PWA_HANDLER_H_
#define CHROME_BROWSER_DEVTOOLS_PROTOCOL_PWA_HANDLER_H_
#include <memory>
#include <string>
#include "base/memory/weak_ptr.h"
#include "chrome/browser/devtools/protocol/pwa.h"
class Profile;
namespace content {
class WebContents;
} // namespace content
namespace web_app {
class WebAppCommandScheduler;
struct WebAppInstallInfo;
} // namespace web_app
class PWAHandler final : public protocol::PWA::Backend {
public:
explicit PWAHandler(protocol::UberDispatcher* dispatcher,
const std::string& target_id);
PWAHandler(const PWAHandler&) = delete;
PWAHandler& operator=(const PWAHandler&) = delete;
~PWAHandler() override;
private:
/// Overridden PWA::Backend APIs ///
void GetOsAppState(const std::string& in_manifest_id,
std::unique_ptr<GetOsAppStateCallback> callback) override;
void Install(const std::string& in_manifest_id,
std::optional<std::string> in_install_url_or_bundle_url,
std::unique_ptr<InstallCallback> callback) override;
void Uninstall(const std::string& in_manifest_id,
std::unique_ptr<UninstallCallback> callback) override;
void Launch(const std::string& in_manifest_id,
std::optional<std::string> in_url,
std::unique_ptr<LaunchCallback> callback) override;
void LaunchFilesInApp(
const std::string& in_manifest_id,
std::unique_ptr<protocol::Array<std::string>> in_files,
std::unique_ptr<LaunchFilesInAppCallback> callback) override;
protocol::Response OpenCurrentPageInApp(
const std::string& in_manifest_id) override;
void ChangeAppUserSettings(
const std::string& in_manifest_id,
std::optional<bool> in_link_capturing,
std::optional<protocol::PWA::DisplayMode> in_display_mode,
std::unique_ptr<ChangeAppUserSettingsCallback> callback) override;
/// Implementation details ///
// Installs from only the manifest id; requires a WebContents.
void InstallFromManifestId(const std::string& in_manifest_id,
std::unique_ptr<InstallCallback> callback);
// Installs from the url; requires the manifest_id from the url to match the
// input in_manifest_id.
void InstallFromUrl(const std::string& in_manifest_id,
const std::string& in_install_url_or_bundle_url,
std::unique_ptr<InstallCallback> callback);
// Is called by InstallFromUrl only.
void InstallFromInstallInfo(
const std::string& in_manifest_id,
const std::string& in_install_url_or_bundle_url,
std::unique_ptr<InstallCallback> callback,
std::unique_ptr<web_app::WebAppInstallInfo> web_app_info);
// Returns the profile of the devtools session, never be nullptr.
// TODO(crbug.com/331214986): Consider changing to references after the coding
// style being widely adopted.
Profile* GetProfile() const;
// Returns the WebAppCommandScheduler associated with this session, may be
// nullptr. This is a shortcut of getting web_app::WebAppProvider::scheduler()
// from GetProfile().
web_app::WebAppCommandScheduler* GetScheduler() const;
// Returns the associated WebContents in the devtools session, may be nullptr.
content::WebContents* GetWebContents() const;
const std::string target_id_;
base::WeakPtrFactory<PWAHandler> weak_ptr_factory_{this};
};
#endif // CHROME_BROWSER_DEVTOOLS_PROTOCOL_PWA_HANDLER_H_