diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble.cc --- a/chrome/browser/ui/views/permissions/permission_prompt_bubble.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble.cc @@ -40,19 +40,16 @@ PermissionPromptBubble::~PermissionPromptBubble() { } void PermissionPromptBubble::ShowBubble() { - FullscreenController* fullscreen_controller = browser() - ->GetFeatures() - .exclusive_access_manager() - ->fullscreen_controller(); - CHECK(fullscreen_controller); - if (fullscreen_controller->IsTabFullscreen()) { - auto blocker = - web_contents()->ForSecurityDropFullscreen(display::kInvalidDisplayId); - if (!blocker) { - return; - } - fullscreen_blocker_ = std::move(*blocker); + // Unconditionally hold a fullscreen blocker for the lifetime of the bubble. + // ForSecurityDropFullscreen() both drops any current tab-fullscreen *and* + // increments fullscreen_blocker_count_ so the tab cannot enter fullscreen + // while the bubble is up (CWE-1021 mitigation). + auto blocker = + web_contents()->ForSecurityDropFullscreen(display::kInvalidDisplayId); + if (!blocker) { + return; } + fullscreen_blocker_ = std::move(*blocker); raw_ptr prompt_bubble = CreatePermissionPromptBubbleView(browser(), delegate()->GetWeakPtr(),