diff --git a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_untrusted_page_handler.cc b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_untrusted_page_handler.cc index 48171adf0f59c..0fc422a10c318 100644 --- a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_untrusted_page_handler.cc +++ b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_untrusted_page_handler.cc @@ -958,6 +958,15 @@ void ReadAnythingUntrustedPageHandler::OnReadAloudAudioStateChange( : main_observer_->web_contents(); if (contents) { if (playing) { + // The renderer is chrome-untrusted; do not trust its assertion that + // audio is playing. Read Aloud is implemented via window.speechSynthesis + // so the browser-side TtsController is authoritative. Only register the + // target tab as audible if speech is actually active. (Mirrors the + // AudibilityBypassAuthorization gate added for the + // MediaPlayerObserverHostImpl path.) + if (!content::TtsController::GetInstance()->IsSpeaking()) { + return; + } audible_closure_ = contents->MarkAudible(); } else { audible_closure_.RunAndReset();