| 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 audioContext->rejectPendingResolvers(); | 114 audioContext->rejectPendingResolvers(); |
| 115 } | 115 } |
| 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 | |
| 125 Persistent<LocalFrame> m_childFrame; | 124 Persistent<LocalFrame> m_childFrame; |
| 125 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> m_platform; |
| 126 }; | 126 }; |
| 127 | 127 |
| 128 TEST_F(BaseAudioContextTest, AutoplayMetrics_NoRestriction) { | 128 TEST_F(BaseAudioContextTest, AutoplayMetrics_NoRestriction) { |
| 129 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 130 HistogramTester histogramTester; | 129 HistogramTester histogramTester; |
| 131 | 130 |
| 132 BaseAudioContext* audioContext = | 131 BaseAudioContext* audioContext = |
| 133 BaseAudioContext::create(document(), ASSERT_NO_EXCEPTION); | 132 BaseAudioContext::create(document(), ASSERT_NO_EXCEPTION); |
| 134 recordAutoplayStatus(audioContext); | 133 recordAutoplayStatus(audioContext); |
| 135 | 134 |
| 136 histogramTester.expectTotalCount(kCrossOriginMetric, 0); | 135 histogramTester.expectTotalCount(kCrossOriginMetric, 0); |
| 137 } | 136 } |
| 138 | 137 |
| 139 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateNoGesture) { | 138 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateNoGesture) { |
| 140 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 141 HistogramTester histogramTester; | 139 HistogramTester histogramTester; |
| 142 createChildFrame(); | 140 createChildFrame(); |
| 143 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 141 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 144 | 142 |
| 145 BaseAudioContext* audioContext = | 143 BaseAudioContext* audioContext = |
| 146 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 144 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 147 recordAutoplayStatus(audioContext); | 145 recordAutoplayStatus(audioContext); |
| 148 | 146 |
| 149 histogramTester.expectBucketCount(kCrossOriginMetric, | 147 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 150 AutoplayStatus::AutoplayStatusFailed, 1); | 148 AutoplayStatus::AutoplayStatusFailed, 1); |
| 151 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 149 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 152 } | 150 } |
| 153 | 151 |
| 154 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeNoGesture) { | 152 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeNoGesture) { |
| 155 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 156 HistogramTester histogramTester; | 153 HistogramTester histogramTester; |
| 157 createChildFrame(); | 154 createChildFrame(); |
| 158 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 155 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 159 | 156 |
| 160 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 157 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
| 161 | 158 |
| 162 BaseAudioContext* audioContext = | 159 BaseAudioContext* audioContext = |
| 163 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 160 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 164 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 161 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
| 165 rejectPendingResolvers(audioContext); | 162 rejectPendingResolvers(audioContext); |
| 166 recordAutoplayStatus(audioContext); | 163 recordAutoplayStatus(audioContext); |
| 167 | 164 |
| 168 histogramTester.expectBucketCount(kCrossOriginMetric, | 165 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 169 AutoplayStatus::AutoplayStatusFailed, 1); | 166 AutoplayStatus::AutoplayStatusFailed, 1); |
| 170 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 167 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 171 } | 168 } |
| 172 | 169 |
| 173 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateGesture) { | 170 TEST_F(BaseAudioContextTest, AutoplayMetrics_CreateGesture) { |
| 174 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 175 HistogramTester histogramTester; | 171 HistogramTester histogramTester; |
| 176 createChildFrame(); | 172 createChildFrame(); |
| 177 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 173 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 178 | 174 |
| 179 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 175 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
| 180 &childDocument(), UserGestureToken::NewGesture)); | 176 &childDocument(), UserGestureToken::NewGesture)); |
| 181 | 177 |
| 182 BaseAudioContext* audioContext = | 178 BaseAudioContext* audioContext = |
| 183 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 179 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 184 recordAutoplayStatus(audioContext); | 180 recordAutoplayStatus(audioContext); |
| 185 | 181 |
| 186 histogramTester.expectBucketCount(kCrossOriginMetric, | 182 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 187 AutoplayStatus::AutoplayStatusSucceeded, 1); | 183 AutoplayStatus::AutoplayStatusSucceeded, 1); |
| 188 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 184 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 189 } | 185 } |
| 190 | 186 |
| 191 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeGesture) { | 187 TEST_F(BaseAudioContextTest, AutoplayMetrics_CallResumeGesture) { |
| 192 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 193 HistogramTester histogramTester; | 188 HistogramTester histogramTester; |
| 194 createChildFrame(); | 189 createChildFrame(); |
| 195 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 190 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 196 | 191 |
| 197 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 192 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
| 198 | 193 |
| 199 BaseAudioContext* audioContext = | 194 BaseAudioContext* audioContext = |
| 200 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 195 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 201 | 196 |
| 202 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 197 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
| 203 &childDocument(), UserGestureToken::NewGesture)); | 198 &childDocument(), UserGestureToken::NewGesture)); |
| 204 | 199 |
| 205 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 200 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
| 206 rejectPendingResolvers(audioContext); | 201 rejectPendingResolvers(audioContext); |
| 207 recordAutoplayStatus(audioContext); | 202 recordAutoplayStatus(audioContext); |
| 208 | 203 |
| 209 histogramTester.expectBucketCount(kCrossOriginMetric, | 204 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 210 AutoplayStatus::AutoplayStatusSucceeded, 1); | 205 AutoplayStatus::AutoplayStatusSucceeded, 1); |
| 211 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 206 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 212 } | 207 } |
| 213 | 208 |
| 214 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGesture) { | 209 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGesture) { |
| 215 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 216 HistogramTester histogramTester; | 210 HistogramTester histogramTester; |
| 217 createChildFrame(); | 211 createChildFrame(); |
| 218 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 212 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 219 | 213 |
| 220 BaseAudioContext* audioContext = | 214 BaseAudioContext* audioContext = |
| 221 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 215 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 222 audioContext->maybeRecordStartAttempt(); | 216 audioContext->maybeRecordStartAttempt(); |
| 223 recordAutoplayStatus(audioContext); | 217 recordAutoplayStatus(audioContext); |
| 224 | 218 |
| 225 histogramTester.expectBucketCount(kCrossOriginMetric, | 219 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 226 AutoplayStatus::AutoplayStatusFailed, 1); | 220 AutoplayStatus::AutoplayStatusFailed, 1); |
| 227 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 221 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 228 } | 222 } |
| 229 | 223 |
| 230 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGesture) { | 224 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGesture) { |
| 231 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 232 HistogramTester histogramTester; | 225 HistogramTester histogramTester; |
| 233 createChildFrame(); | 226 createChildFrame(); |
| 234 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 227 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 235 | 228 |
| 236 BaseAudioContext* audioContext = | 229 BaseAudioContext* audioContext = |
| 237 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 230 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 238 | 231 |
| 239 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 232 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
| 240 &childDocument(), UserGestureToken::NewGesture)); | 233 &childDocument(), UserGestureToken::NewGesture)); |
| 241 audioContext->maybeRecordStartAttempt(); | 234 audioContext->maybeRecordStartAttempt(); |
| 242 recordAutoplayStatus(audioContext); | 235 recordAutoplayStatus(audioContext); |
| 243 | 236 |
| 244 histogramTester.expectBucketCount( | 237 histogramTester.expectBucketCount( |
| 245 kCrossOriginMetric, AutoplayStatus::AutoplayStatusFailedWithStart, 1); | 238 kCrossOriginMetric, AutoplayStatus::AutoplayStatusFailedWithStart, 1); |
| 246 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 239 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 247 } | 240 } |
| 248 | 241 |
| 249 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGestureThenSuccess) { | 242 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartNoGestureThenSuccess) { |
| 250 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 251 HistogramTester histogramTester; | 243 HistogramTester histogramTester; |
| 252 createChildFrame(); | 244 createChildFrame(); |
| 253 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 245 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 254 | 246 |
| 255 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 247 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
| 256 | 248 |
| 257 BaseAudioContext* audioContext = | 249 BaseAudioContext* audioContext = |
| 258 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 250 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 259 audioContext->maybeRecordStartAttempt(); | 251 audioContext->maybeRecordStartAttempt(); |
| 260 | 252 |
| 261 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 253 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
| 262 &childDocument(), UserGestureToken::NewGesture)); | 254 &childDocument(), UserGestureToken::NewGesture)); |
| 263 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 255 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
| 264 rejectPendingResolvers(audioContext); | 256 rejectPendingResolvers(audioContext); |
| 265 recordAutoplayStatus(audioContext); | 257 recordAutoplayStatus(audioContext); |
| 266 | 258 |
| 267 histogramTester.expectBucketCount(kCrossOriginMetric, | 259 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 268 AutoplayStatus::AutoplayStatusSucceeded, 1); | 260 AutoplayStatus::AutoplayStatusSucceeded, 1); |
| 269 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 261 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 270 } | 262 } |
| 271 | 263 |
| 272 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGestureThenSucces) { | 264 TEST_F(BaseAudioContextTest, AutoplayMetrics_NodeStartGestureThenSucces) { |
| 273 ScopedTestingPlatformSupport<BaseAudioContextTestPlatform> platform; | |
| 274 HistogramTester histogramTester; | 265 HistogramTester histogramTester; |
| 275 createChildFrame(); | 266 createChildFrame(); |
| 276 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); | 267 childDocument().settings()->setMediaPlaybackRequiresUserGesture(true); |
| 277 | 268 |
| 278 ScriptState::Scope scope(getScriptStateFrom(childDocument())); | 269 ScriptState::Scope scope(getScriptStateFrom(childDocument())); |
| 279 | 270 |
| 280 BaseAudioContext* audioContext = | 271 BaseAudioContext* audioContext = |
| 281 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); | 272 BaseAudioContext::create(childDocument(), ASSERT_NO_EXCEPTION); |
| 282 | 273 |
| 283 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( | 274 UserGestureIndicator userGestureScope(DocumentUserGestureToken::create( |
| 284 &childDocument(), UserGestureToken::NewGesture)); | 275 &childDocument(), UserGestureToken::NewGesture)); |
| 285 audioContext->maybeRecordStartAttempt(); | 276 audioContext->maybeRecordStartAttempt(); |
| 286 audioContext->resumeContext(getScriptStateFrom(childDocument())); | 277 audioContext->resumeContext(getScriptStateFrom(childDocument())); |
| 287 rejectPendingResolvers(audioContext); | 278 rejectPendingResolvers(audioContext); |
| 288 recordAutoplayStatus(audioContext); | 279 recordAutoplayStatus(audioContext); |
| 289 | 280 |
| 290 histogramTester.expectBucketCount(kCrossOriginMetric, | 281 histogramTester.expectBucketCount(kCrossOriginMetric, |
| 291 AutoplayStatus::AutoplayStatusSucceeded, 1); | 282 AutoplayStatus::AutoplayStatusSucceeded, 1); |
| 292 histogramTester.expectTotalCount(kCrossOriginMetric, 1); | 283 histogramTester.expectTotalCount(kCrossOriginMetric, 1); |
| 293 } | 284 } |
| 294 | 285 |
| 295 } // namespace blink | 286 } // namespace blink |
| OLD | NEW |