#ifndef CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_MANAGER_H_
#define CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_MANAGER_H_
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/exclusive_access/exclusive_access_bubble_type.h"
#include "chrome/browser/ui/exclusive_access/exclusive_access_permission_manager.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
#include "chrome/browser/ui/exclusive_access/keyboard_lock_controller.h"
#include "chrome/browser/ui/exclusive_access/pointer_lock_controller.h"
#include "components/input/native_web_keyboard_event.h"
#include "url/origin.h"
class ExclusiveAccessContext;
namespace content {
class WebContents;
}
class ExclusiveAccessManager {
public:
explicit ExclusiveAccessManager(
ExclusiveAccessContext* exclusive_access_context);
ExclusiveAccessManager(const ExclusiveAccessManager&) = delete;
ExclusiveAccessManager& operator=(const ExclusiveAccessManager&) = delete;
~ExclusiveAccessManager();
FullscreenController* fullscreen_controller() {
return &fullscreen_controller_;
}
KeyboardLockController* keyboard_lock_controller() {
return &keyboard_lock_controller_;
}
PointerLockController* pointer_lock_controller() {
return &pointer_lock_controller_;
}
ExclusiveAccessContext* context() const { return exclusive_access_context_; }
ExclusiveAccessBubbleType GetExclusiveAccessExitBubbleType() const;
void UpdateBubble(ExclusiveAccessBubbleHideCallback first_hide_callback,
bool force_update = false);
url::Origin GetExclusiveAccessBubbleOrigin() const;
void OnTabDeactivated(content::WebContents* web_contents);
void OnTabDetachedFromView(content::WebContents* web_contents);
void OnTabClosing(content::WebContents* web_contents);
bool HandleUserKeyEvent(const input::NativeWebKeyboardEvent& event);
void OnUserInput();
void ExitExclusiveAccess();
base::flat_set<raw_ptr<ExclusiveAccessControllerBase>>&
exclusive_access_controllers_for_test() {
return exclusive_access_controllers_;
}
ExclusiveAccessPermissionManager& permission_manager() {
return permission_manager_;
}
const base::OneShotTimer& esc_key_hold_timer_for_test() {
return esc_key_hold_timer_;
}
private:
void HandleUserHeldEscape();
base::OneShotTimer esc_key_hold_timer_;
base::OneShotTimer show_exit_bubble_timer_;
const raw_ptr<ExclusiveAccessContext> exclusive_access_context_;
FullscreenController fullscreen_controller_;
KeyboardLockController keyboard_lock_controller_;
PointerLockController pointer_lock_controller_;
base::flat_set<raw_ptr<ExclusiveAccessControllerBase>>
exclusive_access_controllers_;
ExclusiveAccessPermissionManager permission_manager_;
};
#endif