OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/webaudio/BaseAudioContext.h" | 5 #include "modules/webaudio/BaseAudioContext.h" |
6 | 6 |
7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" |
8 #include "core/dom/DocumentUserGestureToken.h" | 8 #include "core/dom/DocumentUserGestureToken.h" |
9 #include "core/frame/FrameOwner.h" | 9 #include "core/frame/FrameOwner.h" |
10 #include "core/frame/FrameTypes.h" | 10 #include "core/frame/FrameTypes.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 | 116 |
117 void recordAutoplayStatus(BaseAudioContext* audioContext) { | 117 void recordAutoplayStatus(BaseAudioContext* audioContext) { |
118 audioContext->recordAutoplayStatus(); | 118 audioContext->recordAutoplayStatus(); |
119 } | 119 } |
120 | 120 |
121 private: | 121 private: |
122 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 122 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
123 Persistent<DummyFrameOwner> m_dummyFrameOwner; | 123 Persistent<DummyFrameOwner> m_dummyFrameOwner; |
124 | 124 |
125 Persistent<LocalFrame> m_childFrame; | 125 Persistent<LocalFrame> m_childFrame; |
126 | |
127 BaseAudioContextTestPlatform m_testPlatform; | |
128 }; | 126 }; |
129 | 127 |
130 TEST_F(BaseAudioContextTest, AutoplayMetrics_NoRestriction) { | 128 TEST_F(BaseAudioContextTest, AutoplayMetrics_NoRestriction) { |
| 129 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
131 HistogramTester histogramTester; | 130 HistogramTester histogramTester; |
132 | 131 |
133 BaseAudioContext* audioContext = | 132 BaseAudioContext* audioContext = |
134 BaseAudioContext::create(document(), ASSERT_NO_EXCEPTION); | 133 BaseAudioContext::create(document(), ASSERT_NO_EXCEPTION); |
135 recordAutoplayStatus(audioContext); | 134 recordAutoplayStatus(audioContext); |
136 | 135 |
137 histogramTester.expectTotalCount(kCrossOriginMetric, 0); | 136 histogramTester.expectTotalCount(kCrossOriginMetric, 0); |
138 } | 137 } |
139 | 138 |
140 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateNoGesture) { | 139 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateNoGesture) { |
| 140 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
141 HistogramTester histogramTester; | 141 HistogramTester histogramTester; |
142 createChildFrame(); | 142 createChildFrame(); |
143 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 143 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
144 | 144 |
145 BaseAudioContext* audioContext = | 145 BaseAudioContext* audioContext = |
146 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 146 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
147 recordAutoplayStatus(audioContext); | 147 recordAutoplayStatus(audioContext); |
148 | 148 |
149 histogramTester.expectBucketCount(kCrossOriginMetric, | 149 histogramTester.expectBucketCount(kCrossOriginMetric, |
150 AutoplayStatus::AutoplayStatusFailed, 1); | 150 AutoplayStatus::AutoplayStatusFailed, 1); |
151 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 151 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
152 } | 152 } |
153 | 153 |
154 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeNoGesture) { | 154 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeNoGesture) { |
| 155 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
155 HistogramTester histogramTester; | 156 HistogramTester histogramTester; |
156 createChildFrame(); | 157 createChildFrame(); |
157 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 158 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
158 | 159 |
159 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 160 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
160 | 161 |
161 BaseAudioContext* audioContext = | 162 BaseAudioContext* audioContext = |
162 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 163 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
163 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 164 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
164 rejectPendingResolvers(audioContext); | 165 rejectPendingResolvers(audioContext); |
165 recordAutoplayStatus(audioContext); | 166 recordAutoplayStatus(audioContext); |
166 | 167 |
167 histogramTester.expectBucketCount(kCrossOriginMetric, | 168 histogramTester.expectBucketCount(kCrossOriginMetric, |
168 AutoplayStatus::AutoplayStatusFailed, 1); | 169 AutoplayStatus::AutoplayStatusFailed, 1); |
169 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 170 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
170 } | 171 } |
171 | 172 |
172 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateGesture) { | 173 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateGesture) { |
| 174 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
173 HistogramTester histogramTester; | 175 HistogramTester histogramTester; |
174 createChildFrame(); | 176 createChildFrame(); |
175 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 177 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
176 | 178 |
177 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 179 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
178 &childDocument(), UserGestureToken::NewGesture)); | 180 &childDocument(), UserGestureToken::NewGesture)); |
179 | 181 |
180 BaseAudioContext* audioContext = | 182 BaseAudioContext* audioContext = |
181 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 183 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
182 recordAutoplayStatus(audioContext); | 184 recordAutoplayStatus(audioContext); |
183 | 185 |
184 histogramTester.expectBucketCount(kCrossOriginMetric, | 186 histogramTester.expectBucketCount(kCrossOriginMetric, |
185 AutoplayStatus::AutoplayStatusSucceeded, 1); | 187 AutoplayStatus::AutoplayStatusSucceeded, 1); |
186 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 188 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
187 } | 189 } |
188 | 190 |
189 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeGesture) { | 191 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeGesture) { |
| 192 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
190 HistogramTester histogramTester; | 193 HistogramTester histogramTester; |
191 createChildFrame(); | 194 createChildFrame(); |
192 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 195 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
193 | 196 |
194 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 197 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
195 | 198 |
196 BaseAudioContext* audioContext = | 199 BaseAudioContext* audioContext = |
197 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 200 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
198 | 201 |
199 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 202 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
200 &childDocument(), UserGestureToken::NewGesture)); | 203 &childDocument(), UserGestureToken::NewGesture)); |
201 | 204 |
202 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 205 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
203 rejectPendingResolvers(audioContext); | 206 rejectPendingResolvers(audioContext); |
204 recordAutoplayStatus(audioContext); | 207 recordAutoplayStatus(audioContext); |
205 | 208 |
206 histogramTester.expectBucketCount(kCrossOriginMetric, | 209 histogramTester.expectBucketCount(kCrossOriginMetric, |
207 AutoplayStatus::AutoplayStatusSucceeded, 1); | 210 AutoplayStatus::AutoplayStatusSucceeded, 1); |
208 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 211 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
209 } | 212 } |
210 | 213 |
211 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGesture) { | 214 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGesture) { |
| 215 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
212 HistogramTester histogramTester; | 216 HistogramTester histogramTester; |
213 createChildFrame(); | 217 createChildFrame(); |
214 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 218 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
215 | 219 |
216 BaseAudioContext* audioContext = | 220 BaseAudioContext* audioContext = |
217 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 221 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
218 audioContext->maybeRecordStartAttempt(); | 222 audioContext->maybeRecordStartAttempt(); |
219 recordAutoplayStatus(audioContext); | 223 recordAutoplayStatus(audioContext); |
220 | 224 |
221 histogramTester.expectBucketCount(kCrossOriginMetric, | 225 histogramTester.expectBucketCount(kCrossOriginMetric, |
222 AutoplayStatus::AutoplayStatusFailed, 1); | 226 AutoplayStatus::AutoplayStatusFailed, 1); |
223 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 227 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
224 } | 228 } |
225 | 229 |
226 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGesture) { | 230 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGesture) { |
| 231 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
227 HistogramTester histogramTester; | 232 HistogramTester histogramTester; |
228 createChildFrame(); | 233 createChildFrame(); |
229 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 234 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
230 | 235 |
231 BaseAudioContext* audioContext = | 236 BaseAudioContext* audioContext = |
232 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 237 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
233 | 238 |
234 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 239 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
235 &childDocument(), UserGestureToken::NewGesture)); | 240 &childDocument(), UserGestureToken::NewGesture)); |
236 audioContext->maybeRecordStartAttempt(); | 241 audioContext->maybeRecordStartAttempt(); |
237 recordAutoplayStatus(audioContext); | 242 recordAutoplayStatus(audioContext); |
238 | 243 |
239 histogramTester.expectBucketCount( | 244 histogramTester.expectBucketCount( |
240 kCrossOriginMetric, AutoplayStatus::AutoplayStatusFailedWithStart, 1); | 245 kCrossOriginMetric, AutoplayStatus::AutoplayStatusFailedWithStart, 1); |
241 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 246 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
242 } | 247 } |
243 | 248 |
244 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGestureThenSuccess) { | 249 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGestureThenSuccess) { |
| 250 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
245 HistogramTester histogramTester; | 251 HistogramTester histogramTester; |
246 createChildFrame(); | 252 createChildFrame(); |
247 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 253 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
248 | 254 |
249 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 255 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
250 | 256 |
251 BaseAudioContext* audioContext = | 257 BaseAudioContext* audioContext = |
252 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 258 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
253 audioContext->maybeRecordStartAttempt(); | 259 audioContext->maybeRecordStartAttempt(); |
254 | 260 |
255 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 261 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
256 &childDocument(), UserGestureToken::NewGesture)); | 262 &childDocument(), UserGestureToken::NewGesture)); |
257 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 263 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
258 rejectPendingResolvers(audioContext); | 264 rejectPendingResolvers(audioContext); |
259 recordAutoplayStatus(audioContext); | 265 recordAutoplayStatus(audioContext); |
260 | 266 |
261 histogramTester.expectBucketCount(kCrossOriginMetric, | 267 histogramTester.expectBucketCount(kCrossOriginMetric, |
262 AutoplayStatus::AutoplayStatusSucceeded, 1); | 268 AutoplayStatus::AutoplayStatusSucceeded, 1); |
263 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 269 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
264 } | 270 } |
265 | 271 |
266 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGestureThenSucces) { | 272 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGestureThenSucces) { |
| 273 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; |
267 HistogramTester histogramTester; | 274 HistogramTester histogramTester; |
268 createChildFrame(); | 275 createChildFrame(); |
269 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 276 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
270 | 277 |
271 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 278 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
272 | 279 |
273 BaseAudioContext* audioContext = | 280 BaseAudioContext* audioContext = |
274 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 281 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
275 | 282 |
276 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 283 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
277 &childDocument(), UserGestureToken::NewGesture)); | 284 &childDocument(), UserGestureToken::NewGesture)); |
278 audioContext->maybeRecordStartAttempt(); | 285 audioContext->maybeRecordStartAttempt(); |
279 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 286 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
280 rejectPendingResolvers(audioContext); | 287 rejectPendingResolvers(audioContext); |
281 recordAutoplayStatus(audioContext); | 288 recordAutoplayStatus(audioContext); |
282 | 289 |
283 histogramTester.expectBucketCount(kCrossOriginMetric, | 290 histogramTester.expectBucketCount(kCrossOriginMetric, |
284 AutoplayStatus::AutoplayStatusSucceeded, 1); | 291 AutoplayStatus::AutoplayStatusSucceeded, 1); |
285 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 292 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
286 } | 293 } |
287 | 294 |
288 } // namespace blink | 295 } // namespace blink |
OLD | NEW |