| 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 |