#ifndef CHROME_BROWSER_CHROMEOS_VIDEO_CONFERENCE_VIDEO_CONFERENCE_WEB_APP_H_
#define CHROME_BROWSER_CHROMEOS_VIDEO_CONFERENCE_VIDEO_CONFERENCE_WEB_APP_H_
#include <memory>
#include "base/functional/callback_forward.h"
#include "chrome/browser/chromeos/video_conference/video_conference_manager_client_common.h"
#include "chrome/browser/chromeos/video_conference/video_conference_ukm_helper.h"
#include "chromeos/crosapi/mojom/video_conference.mojom-forward.h"
#include "chromeos/crosapi/mojom/video_conference.mojom.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
namespace base {
class UnguessableToken;
}
namespace content {
class Page;
class RenderWidgetHost;
class WebContents;
}
namespace video_conference {
struct VideoConferencePermissions;
class VideoConferenceWebApp
: public content::WebContentsObserver,
public content::WebContentsUserData<VideoConferenceWebApp> {
public:
VideoConferenceWebApp(const VideoConferenceWebApp&) = delete;
VideoConferenceWebApp& operator=(const VideoConferenceWebApp&) = delete;
~VideoConferenceWebApp() override;
void ActivateApp();
VideoConferencePermissions GetPermissions();
bool IsInactiveExtension();
void OnWebContentsFocused(
content::RenderWidgetHost* render_widget_host) override;
void WebContentsDestroyed() override;
void PrimaryPageChanged(content::Page& page) override;
void TitleWasSet(content::NavigationEntry* entry) override;
void SetCapturingStatus(VideoConferenceMediaType device, bool is_capturing);
VideoConferenceWebAppState& state() { return state_; }
private:
friend class WebContentsUserData<VideoConferenceWebApp>;
VideoConferenceWebApp(
content::WebContents* web_contents,
base::UnguessableToken id,
base::RepeatingCallback<void(const base::UnguessableToken&)>
remove_media_app_callback,
base::RepeatingCallback<
void(crosapi::mojom::VideoConferenceClientUpdatePtr)>
client_update_callback);
base::RepeatingCallback<void(const base::UnguessableToken&)>
remove_media_app_callback_;
base::RepeatingCallback<void(crosapi::mojom::VideoConferenceClientUpdatePtr)>
client_update_callback_;
VideoConferenceWebAppState state_;
std::unique_ptr<VideoConferenceUkmHelper> vc_ukm_helper_;
WEB_CONTENTS_USER_DATA_KEY_DECL();
};
}
#endif