Commit d4b3b951 authored by Becca Hughes's avatar Becca Hughes Committed by Commit Bot

Reland "[Audio Focus] Restrict browser group to CrOS"

This is a reland of 858e896d

Original change's description:
> [Audio Focus] Restrict browser group to CrOS
>
> Restrict browser audio focus grouping to Chrome OS.
>
> BUG=915501
>
> Change-Id: I702952cca7a388e78c201531866307797d25b277
> Reviewed-on: https://chromium-review.googlesource.com/c/1379918
> Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
> Commit-Queue: Becca Hughes <beccahughes@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#617800}

Bug: 915501
Change-Id: Ideb9814a6d4ff7e9faedc66efa6d2073adec818d
Reviewed-on: https://chromium-review.googlesource.com/c/1386107Reviewed-by: default avatarAlexey Baskakov <loyso@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#619747}
parent bedc14d1
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "base/macros.h" #include "base/macros.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/browser/extensions/browsertest_util.h" #include "chrome/browser/extensions/browsertest_util.h"
#include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
...@@ -13,6 +14,7 @@ ...@@ -13,6 +14,7 @@
#include "content/public/test/browser_test_utils.h" #include "content/public/test/browser_test_utils.h"
#include "extensions/test/extension_test_message_listener.h" #include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/test_extension_dir.h" #include "extensions/test/test_extension_dir.h"
#include "media/base/media_switches.h"
#include "services/media_session/public/cpp/switches.h" #include "services/media_session/public/cpp/switches.h"
namespace web_app { namespace web_app {
...@@ -34,6 +36,8 @@ class WebAppAudioFocusBrowserTest : public extensions::ExtensionBrowserTest { ...@@ -34,6 +36,8 @@ class WebAppAudioFocusBrowserTest : public extensions::ExtensionBrowserTest {
void SetUpCommandLine(base::CommandLine* command_line) override { void SetUpCommandLine(base::CommandLine* command_line) override {
InProcessBrowserTest::SetUpCommandLine(command_line); InProcessBrowserTest::SetUpCommandLine(command_line);
command_line->AppendSwitch(media_session::switches::kEnableAudioFocus); command_line->AppendSwitch(media_session::switches::kEnableAudioFocus);
scoped_feature_list_.InitAndEnableFeature(
media::kUseGroupedBrowserAudioFocus);
} }
bool IsPaused(content::WebContents* web_contents) { bool IsPaused(content::WebContents* web_contents) {
...@@ -74,6 +78,8 @@ class WebAppAudioFocusBrowserTest : public extensions::ExtensionBrowserTest { ...@@ -74,6 +78,8 @@ class WebAppAudioFocusBrowserTest : public extensions::ExtensionBrowserTest {
} }
private: private:
base::test::ScopedFeatureList scoped_feature_list_;
DISALLOW_COPY_AND_ASSIGN(WebAppAudioFocusBrowserTest); DISALLOW_COPY_AND_ASSIGN(WebAppAudioFocusBrowserTest);
}; };
......
...@@ -6,9 +6,11 @@ ...@@ -6,9 +6,11 @@
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "build/build_config.h"
#include "content/browser/media/session/media_session_impl.h" #include "content/browser/media/session/media_session_impl.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/common/service_manager_connection.h" #include "content/public/common/service_manager_connection.h"
#include "media/base/media_switches.h"
#include "services/media_session/public/cpp/switches.h" #include "services/media_session/public/cpp/switches.h"
#include "services/media_session/public/mojom/audio_focus.mojom.h" #include "services/media_session/public/mojom/audio_focus.mojom.h"
#include "services/media_session/public/mojom/constants.mojom.h" #include "services/media_session/public/mojom/constants.mojom.h"
...@@ -22,10 +24,20 @@ namespace { ...@@ -22,10 +24,20 @@ namespace {
const char kAudioFocusSourceName[] = "web"; const char kAudioFocusSourceName[] = "web";
static const base::UnguessableToken& GetBrowserGroupId() { base::UnguessableToken GetAudioFocusGroupId(MediaSessionImpl* session) {
static const base::NoDestructor<base::UnguessableToken> token( // Allow the media session to override the group id.
base::UnguessableToken::Create()); if (session->audio_focus_group_id() != base::UnguessableToken::Null())
return *token; return session->audio_focus_group_id();
// If it is enabled then use a shared audio focus group id for the whole
// browser. This will mean that tabs will share audio focus.
if (base::FeatureList::IsEnabled(media::kUseGroupedBrowserAudioFocus)) {
static const base::NoDestructor<base::UnguessableToken> token(
base::UnguessableToken::Create());
return *token;
}
return base::UnguessableToken::Create();
} }
// AudioFocusDelegateDefault is the default implementation of // AudioFocusDelegateDefault is the default implementation of
...@@ -102,9 +114,7 @@ AudioFocusDelegateDefault::RequestAudioFocus(AudioFocusType audio_focus_type) { ...@@ -102,9 +114,7 @@ AudioFocusDelegateDefault::RequestAudioFocus(AudioFocusType audio_focus_type) {
audio_focus_ptr_->RequestGroupedAudioFocus( audio_focus_ptr_->RequestGroupedAudioFocus(
mojo::MakeRequest(&request_client_ptr_), std::move(media_session), mojo::MakeRequest(&request_client_ptr_), std::move(media_session),
session_info_.Clone(), audio_focus_type, session_info_.Clone(), audio_focus_type,
media_session_->audio_focus_group_id() == base::UnguessableToken::Null() GetAudioFocusGroupId(media_session_),
? GetBrowserGroupId()
: media_session_->audio_focus_group_id(),
base::BindOnce(&AudioFocusDelegateDefault::FinishAudioFocusRequest, base::BindOnce(&AudioFocusDelegateDefault::FinishAudioFocusRequest,
base::Unretained(this), audio_focus_type)); base::Unretained(this), audio_focus_type));
} }
......
...@@ -4,12 +4,14 @@ ...@@ -4,12 +4,14 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "build/build_config.h"
#include "content/browser/media/session/media_session_impl.h" #include "content/browser/media/session/media_session_impl.h"
#include "content/browser/media/session/mock_media_session_player_observer.h" #include "content/browser/media/session/mock_media_session_player_observer.h"
#include "content/public/common/service_manager_connection.h" #include "content/public/common/service_manager_connection.h"
#include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test.h"
#include "content/shell/browser/shell.h" #include "content/shell/browser/shell.h"
#include "media/base/media_content_type.h" #include "media/base/media_content_type.h"
#include "media/base/media_switches.h"
#include "services/media_session/public/cpp/switches.h" #include "services/media_session/public/cpp/switches.h"
#include "services/media_session/public/cpp/test/audio_focus_test_util.h" #include "services/media_session/public/cpp/test/audio_focus_test_util.h"
#include "services/media_session/public/cpp/test/mock_media_session.h" #include "services/media_session/public/cpp/test/mock_media_session.h"
...@@ -106,7 +108,8 @@ class AudioFocusDelegateDefaultBrowserTest : public ContentBrowserTest { ...@@ -106,7 +108,8 @@ class AudioFocusDelegateDefaultBrowserTest : public ContentBrowserTest {
media_session::test::MockMediaSessionMojoObserver observer( media_session::test::MockMediaSessionMojoObserver observer(
*media_session); *media_session);
observer.WaitForState( observer.WaitForState(
use_separate_group_id use_separate_group_id || !base::FeatureList::IsEnabled(
media::kUseGroupedBrowserAudioFocus)
? media_session::mojom::MediaSessionInfo::SessionState::kSuspended ? media_session::mojom::MediaSessionInfo::SessionState::kSuspended
: media_session::mojom::MediaSessionInfo::SessionState::kActive); : media_session::mojom::MediaSessionInfo::SessionState::kActive);
} }
......
...@@ -500,4 +500,15 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() { ...@@ -500,4 +500,15 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
return false; return false;
} }
// Enable grouped browser audio focus. This means that all browser media
// sessions will share audio focus. This should only be enabled on Chrome OS.
const base::Feature kUseGroupedBrowserAudioFocus {
"UseGroupedBrowserAudioFocus",
#if defined(OS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
};
} // namespace media } // namespace media
...@@ -132,6 +132,7 @@ MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough; ...@@ -132,6 +132,7 @@ MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough;
MEDIA_EXPORT extern const base::Feature kUnifiedAutoplay; MEDIA_EXPORT extern const base::Feature kUnifiedAutoplay;
MEDIA_EXPORT extern const base::Feature kUseAndroidOverlay; MEDIA_EXPORT extern const base::Feature kUseAndroidOverlay;
MEDIA_EXPORT extern const base::Feature kUseAndroidOverlayAggressively; MEDIA_EXPORT extern const base::Feature kUseAndroidOverlayAggressively;
MEDIA_EXPORT extern const base::Feature kUseGroupedBrowserAudioFocus;
MEDIA_EXPORT extern const base::Feature kUseModernMediaControls; MEDIA_EXPORT extern const base::Feature kUseModernMediaControls;
MEDIA_EXPORT extern const base::Feature kUseNewMediaCache; MEDIA_EXPORT extern const base::Feature kUseNewMediaCache;
MEDIA_EXPORT extern const base::Feature kUseR16Texture; MEDIA_EXPORT extern const base::Feature kUseR16Texture;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment