Changeset 245859 in webkit
- Timestamp:
- May 29, 2019 11:51:25 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r245858 r245859 1 2019-05-29 Youenn Fablet <youenn@apple.com> 2 3 UserMediaCaptureManager should remove a source from its map once the source is ended 4 https://bugs.webkit.org/show_bug.cgi?id=198337 5 6 Reviewed by Eric Carlson. 7 8 When the source is stopped, for instance using MediaStreamTrack.stop, 9 remove the source from UserMediaCaptureManager sources map. 10 This makes sure the map will not grow over time. 11 Add an if check to ensure that the source is still there before processing an incoming IPC call. 12 13 When UIProcess tells us the capture is finished (typically capture failed), remove the entry on WebProcess side as well. 14 15 * WebProcess/cocoa/UserMediaCaptureManager.cpp: 16 (WebKit::UserMediaCaptureManager::createCaptureSource): 17 (WebKit::UserMediaCaptureManager::sourceStopped): 18 (WebKit::UserMediaCaptureManager::captureFailed): 19 (WebKit::UserMediaCaptureManager::sourceMutedChanged): 20 (WebKit::UserMediaCaptureManager::sourceSettingsChanged): 21 (WebKit::UserMediaCaptureManager::storageChanged): 22 (WebKit::UserMediaCaptureManager::ringBufferFrameBoundsChanged): 23 (WebKit::UserMediaCaptureManager::audioSamplesAvailable): 24 (WebKit::UserMediaCaptureManager::remoteVideoSampleAvailable): 25 (WebKit::UserMediaCaptureManager::sourceEnded): 26 (WebKit::UserMediaCaptureManager::applyConstraintsSucceeded): 27 (WebKit::UserMediaCaptureManager::applyConstraintsFailed): 28 1 29 2019-05-29 Youenn Fablet <youenn@apple.com> 2 30 -
trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp
r241145 r245859 257 257 auto source = adoptRef(*new Source(String::number(id), type, device.type(), String { settings.label() }, WTFMove(hashSalt), id, *this)); 258 258 source->setSettings(WTFMove(settings)); 259 m_sources. set(id, source.copyRef());259 m_sources.add(id, source.copyRef()); 260 260 return WebCore::CaptureSourceOrError(WTFMove(source)); 261 261 } … … 263 263 void UserMediaCaptureManager::sourceStopped(uint64_t id) 264 264 { 265 ASSERT(m_sources.contains(id)); 266 m_sources.get(id)->stop(); 265 if (auto source = m_sources.get(id)) { 266 source->stop(); 267 sourceEnded(id); 268 } 267 269 } 268 270 269 271 void UserMediaCaptureManager::captureFailed(uint64_t id) 270 272 { 271 ASSERT(m_sources.contains(id)); 272 m_sources.get(id)->captureFailed(); 273 if (auto source = m_sources.get(id)) { 274 source->captureFailed(); 275 sourceEnded(id); 276 } 273 277 } 274 278 275 279 void UserMediaCaptureManager::sourceMutedChanged(uint64_t id, bool muted) 276 280 { 277 ASSERT(m_sources.contains(id));278 m_sources.get(id)->setMuted(muted);281 if (auto source = m_sources.get(id)) 282 source->setMuted(muted); 279 283 } 280 284 281 285 void UserMediaCaptureManager::sourceSettingsChanged(uint64_t id, const RealtimeMediaSourceSettings& settings) 282 286 { 283 ASSERT(m_sources.contains(id));284 m_sources.get(id)->setSettings(RealtimeMediaSourceSettings(settings));287 if (auto source = m_sources.get(id)) 288 source->setSettings(RealtimeMediaSourceSettings(settings)); 285 289 } 286 290 287 291 void UserMediaCaptureManager::storageChanged(uint64_t id, const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames) 288 292 { 289 ASSERT(m_sources.contains(id));290 m_sources.get(id)->setStorage(handle, description, numberOfFrames);293 if (auto source = m_sources.get(id)) 294 source->setStorage(handle, description, numberOfFrames); 291 295 } 292 296 293 297 void UserMediaCaptureManager::ringBufferFrameBoundsChanged(uint64_t id, uint64_t startFrame, uint64_t endFrame) 294 298 { 295 ASSERT(m_sources.contains(id));296 m_sources.get(id)->setRingBufferFrameBounds(startFrame, endFrame);299 if (auto source = m_sources.get(id)) 300 source->setRingBufferFrameBounds(startFrame, endFrame); 297 301 } 298 302 299 303 void UserMediaCaptureManager::audioSamplesAvailable(uint64_t id, MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame) 300 304 { 301 ASSERT(m_sources.contains(id));302 auto& source = *m_sources.get(id);303 source.setRingBufferFrameBounds(startFrame, endFrame);304 source.audioSamplesAvailable(time, numberOfFrames);305 if (auto source = m_sources.get(id)) { 306 source->setRingBufferFrameBounds(startFrame, endFrame); 307 source->audioSamplesAvailable(time, numberOfFrames); 308 } 305 309 } 306 310 … … 308 312 void UserMediaCaptureManager::remoteVideoSampleAvailable(uint64_t id, RemoteVideoSample&& sample) 309 313 { 310 ASSERT(m_sources.contains(id));311 m_sources.get(id)->remoteVideoSampleAvailable(WTFMove(sample));314 if (auto source = m_sources.get(id)) 315 source->remoteVideoSampleAvailable(WTFMove(sample)); 312 316 } 313 317 #else … … 348 352 { 349 353 m_process.send(Messages::UserMediaCaptureManagerProxy::End(id), 0); 354 m_sources.remove(id); 350 355 } 351 356 352 357 void UserMediaCaptureManager::applyConstraintsSucceeded(uint64_t id, const WebCore::RealtimeMediaSourceSettings& settings) 353 358 { 354 ASSERT(m_sources.contains(id)); 355 auto& source = *m_sources.get(id); 356 source.applyConstraintsSucceeded(settings); 359 if (auto source = m_sources.get(id)) 360 source->applyConstraintsSucceeded(settings); 357 361 } 358 362 359 363 void UserMediaCaptureManager::applyConstraintsFailed(uint64_t id, String&& failedConstraint, String&& message) 360 364 { 361 ASSERT(m_sources.contains(id)); 362 auto& source = *m_sources.get(id); 363 source.applyConstraintsFailed(WTFMove(failedConstraint), WTFMove(message)); 365 if (auto source = m_sources.get(id)) 366 source->applyConstraintsFailed(WTFMove(failedConstraint), WTFMove(message)); 364 367 } 365 368
Note: See TracChangeset
for help on using the changeset viewer.