Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: content/browser/media/session/media_session_visibility_browsertest_base.cc

Issue 1819113002: [MediaSession, Android] Adding visibility tests for MediaSession (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixing tests Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/media/session/media_session_visibility_browsertest_bas e.h"
6
7 #include "base/command_line.h"
8 #include "base/timer/elapsed_timer.h"
9 #include "content/browser/media/session/media_session.h"
10 #include "content/public/browser/web_contents.h"
11 #include "content/public/common/content_switches.h"
12 #include "content/public/test/content_browser_test_utils.h"
13 #include "content/public/test/test_navigation_observer.h"
14 #include "content/shell/browser/shell.h"
15 #include "media/base/media_switches.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace {
19 static const char kStartPlayerScript[] =
20 "document.getElementById('long-video').play()";
21 static const char kPausePlayerScript[] =
22 "document.getElementById('long-video').pause()";
23
24 static const int kWaitTimeSeconds = 5;
25 static const int kWaitIntervalMilliseconds = 50;
26 }
27
28 using content::MediaSessionVisibilityBrowserTestBase;
29
30 void MediaSessionVisibilityBrowserTestBase::SetUpOnMainThread() {
31 ContentBrowserTest::SetUpOnMainThread();
32 web_contents_ = shell()->web_contents();
33 media_session_ = MediaSession::Get(web_contents_);
34 }
35
36 void MediaSessionVisibilityBrowserTestBase::SetUpCommandLine(
37 base::CommandLine* command_line) {
38 command_line->AppendSwitch(
39 switches::kDisableGestureRequirementForMediaPlayback);
40 #if !defined(OS_ANDROID)
41 command_line->AppendSwitch(
42 switches::kEnableDefaultMediaSession);
43 #endif // !defined(OS_ANDROID)
44 }
45
46 void MediaSessionVisibilityBrowserTestBase::LoadTestPage() {
47 TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
48 shell()->LoadURL(GetTestUrl("android/media", "media-session.html"));
49 navigation_observer.Wait();
50 }
51
52 void MediaSessionVisibilityBrowserTestBase::RunScript(std::string script) {
53 content::ExecuteScriptAndGetValue(
54 web_contents_->GetMainFrame(), script);
55 }
56
57 // TODO(zqzhang): This method is shared with
58 // MediaVisibilityTests. Move it into a general place.
59 bool MediaSessionVisibilityBrowserTestBase::ConditionalWait(
DaleCurtis 2016/03/24 20:21:25 You shouldn't need to manually handle timeouts, th
Zhiqiang Zhang (Slow) 2016/03/31 13:00:19 Done.
60 base::TimeDelta timeout,
61 base::TimeDelta interval,
62 const base::Callback<bool(void)>& callback) {
63 base::ElapsedTimer timer;
64 do {
65 if (callback.Run())
66 return true;
67
68 base::RunLoop run_loop;
69 base::MessageLoop::current()->PostDelayedTask(
70 FROM_HERE, run_loop.QuitClosure(), interval);
71 run_loop.Run();
72 } while (timer.Elapsed() < timeout);
73
74 return false;
75 }
76
77 void MediaSessionVisibilityBrowserTestBase::Wait(base::TimeDelta timeout) {
78 base::RunLoop run_loop;
79 base::MessageLoop::current()->PostDelayedTask(
80 FROM_HERE, run_loop.QuitClosure(), timeout);
81 run_loop.Run();
82 }
83
84 bool MediaSessionVisibilityBrowserTestBase::IsMediaSessionActive() {
85 return media_session_->audio_focus_state_ == MediaSession::State::ACTIVE;
86 }
87
88 bool MediaSessionVisibilityBrowserTestBase::IsMediaSessionSuspended() {
89 return media_session_->audio_focus_state_ == MediaSession::State::SUSPENDED;
90 }
91
92 bool MediaSessionVisibilityBrowserTestBase::IsMediaSessionInactive() {
93 return media_session_->audio_focus_state_ == MediaSession::State::INACTIVE;
94 }
95
96 bool MediaSessionVisibilityBrowserTestBase::WaitForMediaSessionActive() {
97 return ConditionalWait(
98 base::TimeDelta::FromSeconds(kWaitTimeSeconds),
99 base::TimeDelta::FromMilliseconds(kWaitIntervalMilliseconds),
100 base::Bind(
101 &MediaSessionVisibilityBrowserTestBase::IsMediaSessionActive,
102 base::Unretained(this)));
103 }
104
105 bool MediaSessionVisibilityBrowserTestBase::WaitForMediaSessionSuspended() {
106 return ConditionalWait(
107 base::TimeDelta::FromSeconds(kWaitTimeSeconds),
108 base::TimeDelta::FromMilliseconds(kWaitIntervalMilliseconds),
109 base::Bind(
110 &MediaSessionVisibilityBrowserTestBase::IsMediaSessionSuspended,
111 base::Unretained(this)));
112 }
113
114 bool MediaSessionVisibilityBrowserTestBase::WaitForMediaSessionInactive() {
115 return ConditionalWait(
116 base::TimeDelta::FromSeconds(kWaitTimeSeconds),
117 base::TimeDelta::FromMilliseconds(kWaitIntervalMilliseconds),
118 base::Bind(
119 &MediaSessionVisibilityBrowserTestBase::IsMediaSessionInactive,
120 base::Unretained(this)));
121 }
122
123 void MediaSessionVisibilityBrowserTestBase
124 ::TestSessionInactiveWhenHiddenAfterContentPause() {
125 LoadTestPage();
126
127 RunScript(kStartPlayerScript);
128 ASSERT_TRUE(WaitForMediaSessionActive());
129
130 RunScript(kPausePlayerScript);
131 ASSERT_TRUE(WaitForMediaSessionSuspended());
132
133 web_contents_->WasHidden();
134 ASSERT_TRUE(WaitForMediaSessionInactive());
135 }
136
137 void MediaSessionVisibilityBrowserTestBase
138 ::TestSessionInactiveWhenHiddenWhilePlaying() {
139 LoadTestPage();
140
141 RunScript(kStartPlayerScript);
142 ASSERT_TRUE(WaitForMediaSessionActive());
143
144 web_contents_->WasHidden();
145 ASSERT_TRUE(WaitForMediaSessionInactive());
146 }
147
148 void MediaSessionVisibilityBrowserTestBase
149 ::TestSessionSuspendedWhenHiddenAfterContentPause() {
150 LoadTestPage();
151
152 RunScript(kStartPlayerScript);
153 ASSERT_TRUE(WaitForMediaSessionActive());
154
155 RunScript(kPausePlayerScript);
156 ASSERT_TRUE(WaitForMediaSessionSuspended());
157
158 // Wait for 1 second and check the MediaSession state.
159 // No better solution till now.
160 web_contents_->WasHidden();
161 Wait(base::TimeDelta::FromSeconds(1));
162 ASSERT_TRUE(IsMediaSessionSuspended());
163 }
164
165 void MediaSessionVisibilityBrowserTestBase
166 ::TestSessionActiveWhenHiddenWhilePlaying() {
167 LoadTestPage();
168
169 RunScript(kStartPlayerScript);
170 ASSERT_TRUE(WaitForMediaSessionActive());
171
172 // Wait for 1 second and check the MediaSession state.
173 // No better solution till now.
174 web_contents_->WasHidden();
175 Wait(base::TimeDelta::FromSeconds(1));
176 ASSERT_TRUE(IsMediaSessionActive());
177 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698