Chromium Code Reviews| Index: content/browser/media/session/media_session_integration_browsertest_base.cc |
| diff --git a/content/browser/media/session/media_session_integration_browsertest_base.cc b/content/browser/media/session/media_session_integration_browsertest_base.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..edcb4a2f72573e778212545d0c25c49f4f1cbbf6 |
| --- /dev/null |
| +++ b/content/browser/media/session/media_session_integration_browsertest_base.cc |
| @@ -0,0 +1,122 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/browser/media/session/media_session_integration_browsertest_base.h" |
| + |
| +#include "base/command_line.h" |
| +#include "base/timer/elapsed_timer.h" |
| +#include "content/browser/media/session/media_session.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/common/content_switches.h" |
| +#include "content/public/test/content_browser_test_utils.h" |
| +#include "content/public/test/test_navigation_observer.h" |
| +#include "content/shell/browser/shell.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace { |
| +static const char kStartPlayerScript[] = |
| + "document.getElementById('long-video').play()"; |
| +static const char kPausePlayerScript[] = |
| + "document.getElementById('long-video').pause()"; |
| +} |
| + |
| +using content::MediaSessionIntegrationBrowserTestBase; |
| + |
| +void MediaSessionIntegrationBrowserTestBase::SetUpOnMainThread() { |
| + ContentBrowserTest::SetUpOnMainThread(); |
| + web_contents_ = shell()->web_contents(); |
| + media_session_ = MediaSession::Get(web_contents_); |
| +} |
| + |
| +void MediaSessionIntegrationBrowserTestBase::SetUpCommandLine( |
| + base::CommandLine* command_line) { |
| + command_line->AppendSwitch( |
| + switches::kDisableGestureRequirementForMediaPlayback); |
| +} |
| + |
| +void MediaSessionIntegrationBrowserTestBase::LoadTestPage() { |
| + TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| + shell()->LoadURL(GetTestUrl("android/media", "media-session.html")); |
|
mlamouri (slow - plz ping)
2016/03/23 15:10:16
Maybe you could move this file in a follow-up? Med
Zhiqiang Zhang (Slow)
2016/03/24 18:16:49
Sure, will do.
|
| + navigation_observer.Wait(); |
| +} |
| + |
| +void MediaSessionIntegrationBrowserTestBase::RunScript(std::string script) { |
| + content::ExecuteScriptAndGetValue( |
| + web_contents_->GetMainFrame(), script); |
| +} |
| + |
| +// TODO(zqzhang): This method is shared with |
| +// MediaIntegrationTests. Move it into a general place. |
| +bool MediaSessionIntegrationBrowserTestBase::ConditionalWait( |
| + base::TimeDelta timeout, |
| + base::TimeDelta interval, |
| + const base::Callback<bool(void)>& callback) { |
| + base::ElapsedTimer timer; |
| + do { |
| + if (callback.Run()) |
| + return true; |
| + |
| + base::RunLoop run_loop; |
| + base::MessageLoop::current()->PostDelayedTask( |
| + FROM_HERE, run_loop.QuitClosure(), interval); |
| + run_loop.Run(); |
| + } while (timer.Elapsed() < timeout); |
| + |
| + return false; |
| +} |
| + |
| +bool MediaSessionIntegrationBrowserTestBase::IsMediaSessionActive() { |
| + return media_session_->audio_focus_state_for_test() == |
| + MediaSession::State::ACTIVE; |
| +} |
| + |
| +bool MediaSessionIntegrationBrowserTestBase::IsMediaSessionSuspended() { |
| + return media_session_->audio_focus_state_for_test() == |
| + MediaSession::State::SUSPENDED; |
| +} |
| + |
| +bool MediaSessionIntegrationBrowserTestBase::IsMediaSessionInactive() { |
| + return media_session_->audio_focus_state_for_test() == |
| + MediaSession::State::INACTIVE; |
| +} |
| + |
| +void MediaSessionIntegrationBrowserTestBase |
| +::TestSessionInactiveWhenHiddenAfterContentPause() { |
| + LoadTestPage(); |
| + RunScript(kStartPlayerScript); |
| + ASSERT_TRUE(ConditionalWait( |
| + base::TimeDelta::FromSeconds(5), base::TimeDelta::FromMilliseconds(50), |
|
mlamouri (slow - plz ping)
2016/03/23 15:10:16
I'm not sure if there is a better way but you poin
DaleCurtis
2016/03/24 18:22:41
there are some testing::Timeout values that you sh
|
| + base::Bind( |
| + &MediaSessionIntegrationBrowserTestBase::IsMediaSessionActive, |
| + base::Unretained(this)))); |
| + RunScript(kPausePlayerScript); |
| + ASSERT_TRUE(ConditionalWait( |
| + base::TimeDelta::FromSeconds(5), base::TimeDelta::FromMilliseconds(50), |
| + base::Bind( |
| + &MediaSessionIntegrationBrowserTestBase::IsMediaSessionSuspended, |
| + base::Unretained(this)))); |
| + web_contents_->WasHidden(); |
| + ASSERT_TRUE(ConditionalWait( |
| + base::TimeDelta::FromSeconds(5), base::TimeDelta::FromMilliseconds(50), |
| + base::Bind( |
| + &MediaSessionIntegrationBrowserTestBase::IsMediaSessionInactive, |
| + base::Unretained(this)))); |
|
mlamouri (slow - plz ping)
2016/03/23 15:10:15
Could you improve the readability here? Maybe some
Zhiqiang Zhang (Slow)
2016/03/24 18:16:49
Done.
|
| +} |
| + |
| +void MediaSessionIntegrationBrowserTestBase |
| +::TestSessionInactiveWhenHiddenWhilePlaying() { |
| + LoadTestPage(); |
| + RunScript(kStartPlayerScript); |
| + ASSERT_TRUE(ConditionalWait( |
| + base::TimeDelta::FromSeconds(5), base::TimeDelta::FromMilliseconds(50), |
| + base::Bind( |
| + &MediaSessionIntegrationBrowserTestBase::IsMediaSessionActive, |
| + base::Unretained(this)))); |
| + web_contents_->WasHidden(); |
| + ASSERT_TRUE(ConditionalWait( |
| + base::TimeDelta::FromSeconds(5), base::TimeDelta::FromMilliseconds(50), |
| + base::Bind( |
| + &MediaSessionIntegrationBrowserTestBase::IsMediaSessionInactive, |
| + base::Unretained(this)))); |
| +} |
|
mlamouri (slow - plz ping)
2016/03/23 15:10:16
Could you have these tests with kEnableMediaSuspen
Zhiqiang Zhang (Slow)
2016/03/24 18:16:49
Done.
|