// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_MEDIA_AUDIO_STREAM_MONITOR_H_ #define CONTENT_BROWSER_MEDIA_AUDIO_STREAM_MONITOR_H_ #include "base/containers/flat_map.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr_exclusion.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "build/build_config.h" #include "content/common/content_export.h" #include "content/public/browser/global_routing_id.h" #include "content/public/browser/web_contents_observer.h" namespace content { class WebContents; // Keeps track of the audible state of audio output streams and uses it to // maintain a "was recently audible" binary state for the audio indicators in // the tab UI. The logic is to: 1) Turn on immediately when sound is audible; // and 2) Hold on for X amount of time after sound has gone silent, then turn // off if no longer audible. Said another way, we don't want tab indicators to // turn on/off repeatedly and annoy the user. AudioStreamMonitor sends UI // update notifications only when needed, but may be queried at any time. // // When monitoring is not available, audibility is approximated with having // active audio streams. // // Each WebContentsImpl owns an AudioStreamMonitor. class CONTENT_EXPORT AudioStreamMonitor : public WebContentsObserver { … }; } // namespace content #endif // CONTENT_BROWSER_MEDIA_AUDIO_STREAM_MONITOR_H_