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

Side by Side Diff: third_party/WebKit/Source/modules/webaudio/BaseAudioContextTest.cpp

Issue 2850553002: Autoplay: use an autoplay policy setting in Blink. (Closed)
Patch Set: rebase Created 3 years, 7 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
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 "bindings/core/v8/V8BindingForCore.h" 7 #include "bindings/core/v8/V8BindingForCore.h"
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/dom/DocumentUserGestureToken.h" 9 #include "core/dom/DocumentUserGestureToken.h"
10 #include "core/frame/FrameOwner.h" 10 #include "core/frame/FrameOwner.h"
11 #include "core/frame/FrameTypes.h" 11 #include "core/frame/FrameTypes.h"
12 #include "core/frame/FrameView.h" 12 #include "core/frame/FrameView.h"
13 #include "core/frame/Settings.h" 13 #include "core/frame/Settings.h"
14 #include "core/html/media/AutoplayPolicy.h"
14 #include "core/loader/DocumentLoader.h" 15 #include "core/loader/DocumentLoader.h"
15 #include "core/loader/EmptyClients.h" 16 #include "core/loader/EmptyClients.h"
16 #include "core/testing/DummyPageHolder.h" 17 #include "core/testing/DummyPageHolder.h"
17 #include "modules/webaudio/AudioContextOptions.h" 18 #include "modules/webaudio/AudioContextOptions.h"
18 #include "platform/UserGestureIndicator.h" 19 #include "platform/UserGestureIndicator.h"
19 #include "platform/testing/HistogramTester.h" 20 #include "platform/testing/HistogramTester.h"
20 #include "platform/testing/TestingPlatformSupport.h" 21 #include "platform/testing/TestingPlatformSupport.h"
21 #include "platform/wtf/PtrUtil.h" 22 #include "platform/wtf/PtrUtil.h"
22 #include "public/platform/WebAudioDevice.h" 23 #include "public/platform/WebAudioDevice.h"
23 #include "public/platform/WebAudioLatencyHint.h" 24 #include "public/platform/WebAudioLatencyHint.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 BaseAudioContext* audio_context = BaseAudioContext::Create( 141 BaseAudioContext* audio_context = BaseAudioContext::Create(
141 GetDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 142 GetDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
142 RecordAutoplayStatus(audio_context); 143 RecordAutoplayStatus(audio_context);
143 144
144 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 0); 145 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 0);
145 } 146 }
146 147
147 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateNoGesture) { 148 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateNoGesture) {
148 HistogramTester histogram_tester; 149 HistogramTester histogram_tester;
149 CreateChildFrame(); 150 CreateChildFrame();
150 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 151 ChildDocument().GetSettings()->SetAutoplayPolicy(
152 AutoplayPolicy::Type::kUserGestureRequired);
151 153
152 BaseAudioContext* audio_context = BaseAudioContext::Create( 154 BaseAudioContext* audio_context = BaseAudioContext::Create(
153 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 155 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
154 RecordAutoplayStatus(audio_context); 156 RecordAutoplayStatus(audio_context);
155 157
156 histogram_tester.ExpectBucketCount(kCrossOriginMetric, 158 histogram_tester.ExpectBucketCount(kCrossOriginMetric,
157 AutoplayStatus::kAutoplayStatusFailed, 1); 159 AutoplayStatus::kAutoplayStatusFailed, 1);
158 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 160 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
159 } 161 }
160 162
161 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeNoGesture) { 163 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeNoGesture) {
162 HistogramTester histogram_tester; 164 HistogramTester histogram_tester;
163 CreateChildFrame(); 165 CreateChildFrame();
164 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 166 ChildDocument().GetSettings()->SetAutoplayPolicy(
167 AutoplayPolicy::Type::kUserGestureRequired);
165 168
166 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument())); 169 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument()));
167 170
168 BaseAudioContext* audio_context = BaseAudioContext::Create( 171 BaseAudioContext* audio_context = BaseAudioContext::Create(
169 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 172 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
170 audio_context->resumeContext(GetScriptStateFrom(ChildDocument())); 173 audio_context->resumeContext(GetScriptStateFrom(ChildDocument()));
171 RejectPendingResolvers(audio_context); 174 RejectPendingResolvers(audio_context);
172 RecordAutoplayStatus(audio_context); 175 RecordAutoplayStatus(audio_context);
173 176
174 histogram_tester.ExpectBucketCount(kCrossOriginMetric, 177 histogram_tester.ExpectBucketCount(kCrossOriginMetric,
175 AutoplayStatus::kAutoplayStatusFailed, 1); 178 AutoplayStatus::kAutoplayStatusFailed, 1);
176 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 179 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
177 } 180 }
178 181
179 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateGesture) { 182 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateGesture) {
180 HistogramTester histogram_tester; 183 HistogramTester histogram_tester;
181 CreateChildFrame(); 184 CreateChildFrame();
182 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 185 ChildDocument().GetSettings()->SetAutoplayPolicy(
186 AutoplayPolicy::Type::kUserGestureRequired);
183 187
184 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create( 188 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create(
185 &ChildDocument(), UserGestureToken::kNewGesture)); 189 &ChildDocument(), UserGestureToken::kNewGesture));
186 190
187 BaseAudioContext* audio_context = BaseAudioContext::Create( 191 BaseAudioContext* audio_context = BaseAudioContext::Create(
188 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 192 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
189 RecordAutoplayStatus(audio_context); 193 RecordAutoplayStatus(audio_context);
190 194
191 histogram_tester.ExpectBucketCount( 195 histogram_tester.ExpectBucketCount(
192 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1); 196 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1);
193 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 197 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
194 } 198 }
195 199
196 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeGesture) { 200 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeGesture) {
197 HistogramTester histogram_tester; 201 HistogramTester histogram_tester;
198 CreateChildFrame(); 202 CreateChildFrame();
199 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 203 ChildDocument().GetSettings()->SetAutoplayPolicy(
204 AutoplayPolicy::Type::kUserGestureRequired);
200 205
201 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument())); 206 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument()));
202 207
203 BaseAudioContext* audio_context = BaseAudioContext::Create( 208 BaseAudioContext* audio_context = BaseAudioContext::Create(
204 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 209 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
205 210
206 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create( 211 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create(
207 &ChildDocument(), UserGestureToken::kNewGesture)); 212 &ChildDocument(), UserGestureToken::kNewGesture));
208 213
209 audio_context->resumeContext(GetScriptStateFrom(ChildDocument())); 214 audio_context->resumeContext(GetScriptStateFrom(ChildDocument()));
210 RejectPendingResolvers(audio_context); 215 RejectPendingResolvers(audio_context);
211 RecordAutoplayStatus(audio_context); 216 RecordAutoplayStatus(audio_context);
212 217
213 histogram_tester.ExpectBucketCount( 218 histogram_tester.ExpectBucketCount(
214 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1); 219 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1);
215 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 220 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
216 } 221 }
217 222
218 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGesture) { 223 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGesture) {
219 HistogramTester histogram_tester; 224 HistogramTester histogram_tester;
220 CreateChildFrame(); 225 CreateChildFrame();
221 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 226 ChildDocument().GetSettings()->SetAutoplayPolicy(
227 AutoplayPolicy::Type::kUserGestureRequired);
222 228
223 BaseAudioContext* audio_context = BaseAudioContext::Create( 229 BaseAudioContext* audio_context = BaseAudioContext::Create(
224 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 230 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
225 audio_context->MaybeRecordStartAttempt(); 231 audio_context->MaybeRecordStartAttempt();
226 RecordAutoplayStatus(audio_context); 232 RecordAutoplayStatus(audio_context);
227 233
228 histogram_tester.ExpectBucketCount(kCrossOriginMetric, 234 histogram_tester.ExpectBucketCount(kCrossOriginMetric,
229 AutoplayStatus::kAutoplayStatusFailed, 1); 235 AutoplayStatus::kAutoplayStatusFailed, 1);
230 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 236 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
231 } 237 }
232 238
233 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGesture) { 239 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGesture) {
234 HistogramTester histogram_tester; 240 HistogramTester histogram_tester;
235 CreateChildFrame(); 241 CreateChildFrame();
236 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 242 ChildDocument().GetSettings()->SetAutoplayPolicy(
243 AutoplayPolicy::Type::kUserGestureRequired);
237 244
238 BaseAudioContext* audio_context = BaseAudioContext::Create( 245 BaseAudioContext* audio_context = BaseAudioContext::Create(
239 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 246 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
240 247
241 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create( 248 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create(
242 &ChildDocument(), UserGestureToken::kNewGesture)); 249 &ChildDocument(), UserGestureToken::kNewGesture));
243 audio_context->MaybeRecordStartAttempt(); 250 audio_context->MaybeRecordStartAttempt();
244 RecordAutoplayStatus(audio_context); 251 RecordAutoplayStatus(audio_context);
245 252
246 histogram_tester.ExpectBucketCount( 253 histogram_tester.ExpectBucketCount(
247 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusFailedWithStart, 1); 254 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusFailedWithStart, 1);
248 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 255 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
249 } 256 }
250 257
251 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGestureThenSuccess) { 258 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGestureThenSuccess) {
252 HistogramTester histogram_tester; 259 HistogramTester histogram_tester;
253 CreateChildFrame(); 260 CreateChildFrame();
254 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 261 ChildDocument().GetSettings()->SetAutoplayPolicy(
262 AutoplayPolicy::Type::kUserGestureRequired);
255 263
256 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument())); 264 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument()));
257 265
258 BaseAudioContext* audio_context = BaseAudioContext::Create( 266 BaseAudioContext* audio_context = BaseAudioContext::Create(
259 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 267 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
260 audio_context->MaybeRecordStartAttempt(); 268 audio_context->MaybeRecordStartAttempt();
261 269
262 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create( 270 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create(
263 &ChildDocument(), UserGestureToken::kNewGesture)); 271 &ChildDocument(), UserGestureToken::kNewGesture));
264 audio_context->resumeContext(GetScriptStateFrom(ChildDocument())); 272 audio_context->resumeContext(GetScriptStateFrom(ChildDocument()));
265 RejectPendingResolvers(audio_context); 273 RejectPendingResolvers(audio_context);
266 RecordAutoplayStatus(audio_context); 274 RecordAutoplayStatus(audio_context);
267 275
268 histogram_tester.ExpectBucketCount( 276 histogram_tester.ExpectBucketCount(
269 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1); 277 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1);
270 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 278 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
271 } 279 }
272 280
273 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGestureThenSucces) { 281 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGestureThenSucces) {
274 HistogramTester histogram_tester; 282 HistogramTester histogram_tester;
275 CreateChildFrame(); 283 CreateChildFrame();
276 ChildDocument().GetSettings()->SetMediaPlaybackRequiresUserGesture(true); 284 ChildDocument().GetSettings()->SetAutoplayPolicy(
285 AutoplayPolicy::Type::kUserGestureRequired);
277 286
278 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument())); 287 ScriptState::Scope scope(GetScriptStateFrom(ChildDocument()));
279 288
280 BaseAudioContext* audio_context = BaseAudioContext::Create( 289 BaseAudioContext* audio_context = BaseAudioContext::Create(
281 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION); 290 ChildDocument(), AudioContextOptions(), ASSERT_NO_EXCEPTION);
282 291
283 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create( 292 UserGestureIndicator user_gesture_scope(DocumentUserGestureToken::Create(
284 &ChildDocument(), UserGestureToken::kNewGesture)); 293 &ChildDocument(), UserGestureToken::kNewGesture));
285 audio_context->MaybeRecordStartAttempt(); 294 audio_context->MaybeRecordStartAttempt();
286 audio_context->resumeContext(GetScriptStateFrom(ChildDocument())); 295 audio_context->resumeContext(GetScriptStateFrom(ChildDocument()));
287 RejectPendingResolvers(audio_context); 296 RejectPendingResolvers(audio_context);
288 RecordAutoplayStatus(audio_context); 297 RecordAutoplayStatus(audio_context);
289 298
290 histogram_tester.ExpectBucketCount( 299 histogram_tester.ExpectBucketCount(
291 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1); 300 kCrossOriginMetric, AutoplayStatus::kAutoplayStatusSucceeded, 1);
292 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1); 301 histogram_tester.ExpectTotalCount(kCrossOriginMetric, 1);
293 } 302 }
294 303
295 } // namespace blink 304 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp ('k') | third_party/WebKit/Source/web/AssertMatchingEnums.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698