Changeset 223148 in webkit
- Timestamp:
- Oct 10, 2017 2:51:47 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r223145 r223148 1 2017-10-10 Yoshiaki Jitsukawa <Yoshiaki.Jitsukawa@sony.com> 2 3 Fix MSVC build with ENCRYPTED_MEDIA enabled 4 https://bugs.webkit.org/show_bug.cgi?id=177803 5 6 Reviewed by Alex Christensen. 7 8 As a workaround for MSVC, a weak pointer of "this" is captured 9 at the outermost lambda expression. 10 11 * Modules/encryptedmedia/MediaKeySession.cpp: 12 (WebCore::MediaKeySession::generateRequest): 13 (WebCore::MediaKeySession::load): 14 (WebCore::MediaKeySession::update): 15 (WebCore::MediaKeySession::close): 16 (WebCore::MediaKeySession::remove): 17 * platform/encryptedmedia/clearkey/CDMClearKey.cpp: 18 (WebCore::CDMInstanceClearKey::updateLicense): 19 (WebCore::CDMInstanceClearKey::loadSession): 20 (WebCore::CDMInstanceClearKey::removeSessionData): 21 1 22 2017-10-10 Joanmarie Diggs <jdiggs@igalia.com> 2 23 -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp
r222422 r223148 142 142 // 9. Let promise be a new promise. 143 143 // 10. Run the following steps in parallel: 144 m_taskQueue.enqueueTask([this, initData = SharedBuffer::create(initData.data(), initData.length()), initDataType, promise = WTFMove(promise)] () mutable {144 m_taskQueue.enqueueTask([this, weakThis = m_weakPtrFactory.createWeakPtr(*this), initData = SharedBuffer::create(initData.data(), initData.length()), initDataType, promise = WTFMove(promise)] () mutable { 145 145 // 10.1. If the init data is not valid for initDataType, reject promise with a newly created TypeError. 146 146 // 10.2. Let sanitized init data be a validated and sanitized version of init data. … … 189 189 } 190 190 191 m_instance->requestLicense(m_sessionType, initDataType, WTFMove(initData), [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), promise = WTFMove(promise)] (Ref<SharedBuffer>&& message, const String& sessionId, bool needsIndividualization, CDMInstance::SuccessValue succeeded) mutable {191 m_instance->requestLicense(m_sessionType, initDataType, WTFMove(initData), [this, weakThis, promise = WTFMove(promise)] (Ref<SharedBuffer>&& message, const String& sessionId, bool needsIndividualization, CDMInstance::SuccessValue succeeded) mutable { 192 192 if (!weakThis) 193 193 return; … … 282 282 // 8.7. Let cdm be the CDM instance represented by this object's cdm instance value. 283 283 // 8.8. Use the cdm to execute the following steps: 284 m_instance->loadSession(m_sessionType, *sanitizedSessionId, origin, [this, weakThis = m_weakPtrFactory.createWeakPtr(*this),promise = WTFMove(promise), sanitizedSessionId = *sanitizedSessionId] (std::optional<CDMInstance::KeyStatusVector>&& knownKeys, std::optional<double>&& expiration, std::optional<CDMInstance::Message>&& message, CDMInstance::SuccessValue succeeded, CDMInstance::SessionLoadFailure failure) mutable {284 m_instance->loadSession(m_sessionType, *sanitizedSessionId, origin, [this, promise = WTFMove(promise), sanitizedSessionId = *sanitizedSessionId] (std::optional<CDMInstance::KeyStatusVector>&& knownKeys, std::optional<double>&& expiration, std::optional<CDMInstance::Message>&& message, CDMInstance::SuccessValue succeeded, CDMInstance::SessionLoadFailure failure) mutable { 285 285 // 8.8.1. If there is no data stored for the sanitized session ID in the origin, resolve promise with false and abort these steps. 286 286 // 8.8.2. If the stored session's session type is not the same as the current MediaKeySession session type, reject promise with a newly created TypeError. … … 313 313 314 314 // 8.9. Queue a task to run the following steps: 315 m_taskQueue.enqueueTask([this, knownKeys = WTFMove(knownKeys), expiration = WTFMove(expiration), message = WTFMove(message), sanitizedSessionId , succeeded, promise = WTFMove(promise)] () mutable {315 m_taskQueue.enqueueTask([this, knownKeys = WTFMove(knownKeys), expiration = WTFMove(expiration), message = WTFMove(message), sanitizedSessionId = sanitizedSessionId, succeeded, promise = WTFMove(promise)] () mutable { 316 316 // 8.9.1. If any of the preceding steps failed, reject promise with a the appropriate error name. 317 317 if (succeeded == CDMInstance::SuccessValue::Failed) { … … 368 368 // 5. Let promise be a new promise. 369 369 // 6. Run the following steps in parallel: 370 m_taskQueue.enqueueTask([this, response = SharedBuffer::create(response.data(), response.length()), promise = WTFMove(promise)] () mutable {370 m_taskQueue.enqueueTask([this, weakThis = m_weakPtrFactory.createWeakPtr(*this), response = SharedBuffer::create(response.data(), response.length()), promise = WTFMove(promise)] () mutable { 371 371 // 6.1. Let sanitized response be a validated and/or sanitized version of response copy. 372 372 RefPtr<SharedBuffer> sanitizedResponse = m_implementation->sanitizeResponse(response); … … 383 383 // 6.6. Let cdm be the CDM instance represented by this object's cdm instance value. 384 384 // 6.7. Use the cdm to execute the following steps: 385 m_instance->updateLicense(m_sessionId, m_sessionType, *sanitizedResponse, [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), promise = WTFMove(promise)](bool sessionWasClosed, std::optional<CDMInstance::KeyStatusVector>&& changedKeys, std::optional<double>&& changedExpiration, std::optional<CDMInstance::Message>&& message, CDMInstance::SuccessValue succeeded) mutable {385 m_instance->updateLicense(m_sessionId, m_sessionType, *sanitizedResponse, [this, weakThis, promise = WTFMove(promise)](bool sessionWasClosed, std::optional<CDMInstance::KeyStatusVector>&& changedKeys, std::optional<double>&& changedExpiration, std::optional<CDMInstance::Message>&& message, CDMInstance::SuccessValue succeeded) mutable { 386 386 if (!weakThis) 387 387 return; … … 492 492 // 4. Let promise be a new promise. 493 493 // 5. Run the following steps in parallel: 494 m_taskQueue.enqueueTask([this, promise = WTFMove(promise)] () mutable {494 m_taskQueue.enqueueTask([this, weakThis = m_weakPtrFactory.createWeakPtr(*this), promise = WTFMove(promise)] () mutable { 495 495 // 5.1. Let cdm be the CDM instance represented by session's cdm instance value. 496 496 // 5.2. Use cdm to close the key session associated with session. 497 m_instance->closeSession(m_sessionId, [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), promise = WTFMove(promise)] () mutable {497 m_instance->closeSession(m_sessionId, [this, weakThis, promise = WTFMove(promise)] () mutable { 498 498 if (!weakThis) 499 499 return; … … 527 527 // 3. Let promise be a new promise. 528 528 // 4. Run the following steps in parallel: 529 m_taskQueue.enqueueTask([this, promise = WTFMove(promise)] () mutable {529 m_taskQueue.enqueueTask([this, weakThis = m_weakPtrFactory.createWeakPtr(*this), promise = WTFMove(promise)] () mutable { 530 530 // 4.1. Let cdm be the CDM instance represented by this object's cdm instance value. 531 531 // 4.2. Let message be null. … … 533 533 534 534 // 4.4. Use the cdm to execute the following steps: 535 m_instance->removeSessionData(m_sessionId, m_sessionType, [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), promise = WTFMove(promise)] (CDMInstance::KeyStatusVector&& keys, std::optional<Ref<SharedBuffer>>&& message, CDMInstance::SuccessValue succeeded) mutable {535 m_instance->removeSessionData(m_sessionId, m_sessionType, [this, weakThis, promise = WTFMove(promise)] (CDMInstance::KeyStatusVector&& keys, std::optional<Ref<SharedBuffer>>&& message, CDMInstance::SuccessValue succeeded) mutable { 536 536 if (!weakThis) 537 537 return; -
trunk/Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp
r222946 r223148 355 355 // duplicated callOnMainThread() calls. 356 356 auto dispatchCallback = 357 [this, &callback](bool sessionWasClosed, std::optional<KeyStatusVector>&& changedKeys, SuccessValue succeeded) {357 [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), &callback](bool sessionWasClosed, std::optional<KeyStatusVector>&& changedKeys, SuccessValue succeeded) { 358 358 callOnMainThread( 359 [weakThis = m_weakPtrFactory.createWeakPtr(*this), callback = WTFMove(callback), sessionWasClosed, changedKeys = WTFMove(changedKeys), succeeded] () mutable {359 [weakThis, callback = WTFMove(callback), sessionWasClosed, changedKeys = WTFMove(changedKeys), succeeded] () mutable { 360 360 if (!weakThis) 361 361 return; … … 459 459 // Use a helper functor that schedules the callback dispatch, avoiding duplicated callOnMainThread() calls. 460 460 auto dispatchCallback = 461 [this, &callback](std::optional<KeyStatusVector>&& existingKeys, SuccessValue success, SessionLoadFailure loadFailure) {461 [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), &callback](std::optional<KeyStatusVector>&& existingKeys, SuccessValue success, SessionLoadFailure loadFailure) { 462 462 callOnMainThread( 463 [weakThis = m_weakPtrFactory.createWeakPtr(*this), callback = WTFMove(callback), existingKeys = WTFMove(existingKeys), success, loadFailure]() mutable {463 [weakThis, callback = WTFMove(callback), existingKeys = WTFMove(existingKeys), success, loadFailure]() mutable { 464 464 if (!weakThis) 465 465 return; … … 503 503 // Use a helper functor that schedules the callback dispatch, avoiding duplicated callOnMainThread() calls. 504 504 auto dispatchCallback = 505 [this, &callback](KeyStatusVector&& keyStatusVector, std::optional<Ref<SharedBuffer>>&& message, SuccessValue success) {505 [this, weakThis = m_weakPtrFactory.createWeakPtr(*this), &callback](KeyStatusVector&& keyStatusVector, std::optional<Ref<SharedBuffer>>&& message, SuccessValue success) { 506 506 callOnMainThread( 507 [weakThis = m_weakPtrFactory.createWeakPtr(*this), callback = WTFMove(callback), keyStatusVector = WTFMove(keyStatusVector), message = WTFMove(message), success]() mutable {507 [weakThis, callback = WTFMove(callback), keyStatusVector = WTFMove(keyStatusVector), message = WTFMove(message), success]() mutable { 508 508 if (!weakThis) 509 509 return;
Note: See TracChangeset
for help on using the changeset viewer.