Changeset 271405 in webkit
- Timestamp:
- Jan 12, 2021 9:20:08 AM (3 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r271404 r271405 1 2021-01-12 Jer Noble <jer.noble@apple.com> 2 3 [Cocoa] Support key rotation with HLS-backed encrypted media streams 4 https://bugs.webkit.org/show_bug.cgi?id=220493 5 <rdar://68227709> 6 7 Reviewed by Eric Carlson. 8 9 Support key rotation through AVContentKeySession by explicitly handling unexpected key requests 10 submitted through the new -contentKeySession:didProvideContentKeyRequests:forInitializationData:. 11 Rotation was previously handled in the delegate method -contentKeySession:didProvideContentKeyRequest, 12 but that method is no longer called after the replacement delegate method was implemented, and 13 that method never handled "skd://" style initialization data. 14 15 Update the helper method, initTypeForRequest(), to detect "skd://" identifiers and correctly identify 16 those sessions as "skd". 17 18 Add a new helper method, initializationDataForRequest(), which will package the AVContentKeySession's 19 identifier as initialization data. 20 21 Drive-by Fix: Fixing this bug causes the default key group to update it's identifier, which causes an assert 22 when the group in question isn't any of those associated with an existing MediaKeySession, so handle that case 23 explicitly. 24 25 Drive-by Fix 2: Sometimes, when GPUP is enabled for media, we will get spurious mediaPlayerEngineUpdated() 26 calls which cause cdmInstanceAttached() to be called multiple times for the same player, triggering an ASSERT. 27 If called twice with the same CDM, just return early rather than ASSERTing. 28 29 * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h: 30 * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm: 31 (WebCore::initTypeForRequest): 32 (WebCore::initializationDataForRequest): 33 (WebCore::CDMInstanceFairPlayStreamingAVFObjC::takeUnexpectedKeyRequestForInitializationData): 34 (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest): 35 (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequests): 36 (WebCore::CDMInstanceFairPlayStreamingAVFObjC::handleUnexpectedRequests): 37 (WebCore::CDMInstanceFairPlayStreamingAVFObjC::groupSessionIdentifierChanged): 38 * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: 39 (WebCore::MediaSourcePrivateAVFObjC::cdmInstanceAttached): 40 1 41 2021-01-12 Youenn Fablet <youenn@apple.com> 2 42 -
trunk/Source/WebCore/PAL/ChangeLog
r271333 r271405 1 2021-01-12 Jer Noble <jer.noble@apple.com> 2 3 [Cocoa] Support key rotation with HLS-backed encrypted media streams 4 https://bugs.webkit.org/show_bug.cgi?id=220493 5 <rdar://68227709> 6 7 Reviewed by Eric Carlson. 8 9 * pal/spi/cocoa/AVFoundationSPI.h: 10 1 11 2021-01-08 Commit Queue <commit-queue@webkit.org> 2 12 -
trunk/Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h
r270872 r271405 201 201 202 202 @interface AVContentKeySession (AVContentKeyGroup_Support) 203 @property (readonly, nullable) AVContentKeyReportGroup *defaultContentKeyGroup; 203 204 - (nonnull AVContentKeyReportGroup *)makeContentKeyGroup; 204 205 @end -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h
r270872 r271405 121 121 122 122 private: 123 void handleUnexpectedRequests(Vector<RetainPtr<AVContentKeyRequest>>&&); 124 123 125 #if !RELEASE_LOG_DISABLED 124 126 WTF::Logger* loggerPtr() const { return m_logger.get(); }; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm
r270872 r271405 197 197 static AtomString initTypeForRequest(AVContentKeyRequest* request) 198 198 { 199 if ([request.identifier isKindOfClass:NSString.class] && [request.identifier hasPrefix:@"skd://"]) 200 return CDMPrivateFairPlayStreaming::skdName(); 201 199 202 if (![request respondsToSelector:@selector(options)]) { 200 203 // AVContentKeyRequest.options was added in 10.14.4; if we are running on a previous version … … 216 219 } 217 220 221 static Ref<SharedBuffer> initializationDataForRequest(AVContentKeyRequest* request) 222 { 223 if (!request) 224 return SharedBuffer::create(); 225 226 if (initTypeForRequest(request) == CDMPrivateFairPlayStreaming::skdName()) 227 return SharedBuffer::create([request.identifier dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]); 228 229 return SharedBuffer::create(request.initializationData); 230 } 231 218 232 CDMInstanceFairPlayStreamingAVFObjC::CDMInstanceFairPlayStreamingAVFObjC() = default; 219 233 … … 258 272 auto& request = *requestIter; 259 273 auto requestType = initTypeForRequest(request.get()); 260 auto * requestInitData = request.get().initializationData;261 if (initDataType != requestType || initData != SharedBuffer::create(requestInitData))274 auto requestInitData = initializationDataForRequest(request.get()); 275 if (initDataType != requestType || initData != requestInitData) 262 276 continue; 263 277 … … 445 459 DEBUG_LOG_IF_POSSIBLE(LOGIDENTIFIER, "- Unexpected request"); 446 460 447 m_unexpectedKeyRequests.add(request); 448 449 if (m_client) 450 m_client->unrequestedInitializationDataReceived(initTypeForRequest(request), SharedBuffer::create(request.initializationData)); 461 handleUnexpectedRequests({{ request }}); 451 462 } 452 463 … … 458 469 } 459 470 460 ASSERT_NOT_REACHED(); 461 ERROR_LOG_IF_POSSIBLE(LOGIDENTIFIER, "- no responsible session; dropping"); 471 handleUnexpectedRequests(WTFMove(requests)); 472 } 473 474 void CDMInstanceFairPlayStreamingAVFObjC::handleUnexpectedRequests(Vector<RetainPtr<AVContentKeyRequest>>&& requests) 475 { 476 while (!requests.isEmpty()) { 477 auto request = requests.takeLast(); 478 m_unexpectedKeyRequests.add(request); 479 480 if (m_client) 481 m_client->unrequestedInitializationDataReceived(initTypeForRequest(request.get()), initializationDataForRequest(request.get())); 482 } 462 483 } 463 484 … … 525 546 void CDMInstanceFairPlayStreamingAVFObjC::groupSessionIdentifierChanged(AVContentKeyReportGroup* group, NSData *sessionIdentifier) 526 547 { 548 if (group == [m_session defaultContentKeyGroup]) { 549 INFO_LOG_IF_POSSIBLE(LOGIDENTIFIER, "- default unused group identifier changed; dropping"); 550 return; 551 } 552 527 553 if (auto* session = sessionForGroup(group)) { 528 554 session->groupSessionIdentifierChanged(group, sessionIdentifier); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm
r270805 r271405 278 278 void MediaSourcePrivateAVFObjC::cdmInstanceAttached(CDMInstance& instance) 279 279 { 280 if (m_cdmInstance.get() == &instance) 281 return; 282 280 283 ASSERT(!m_cdmInstance); 281 284 m_cdmInstance = &instance; -
trunk/Source/WebKit/CMakeLists.txt
r270907 r271405 229 229 WebProcess/GPU/media/RemoteAudioSession 230 230 WebProcess/GPU/media/RemoteAudioSourceProviderManager 231 WebProcess/GPU/media/RemoteCDMInstance 231 232 WebProcess/GPU/media/RemoteCDMInstanceSession 232 233 WebProcess/GPU/media/RemoteLegacyCDMSession -
trunk/Source/WebKit/ChangeLog
r271401 r271405 1 2021-01-12 Jer Noble <jer.noble@apple.com> 2 3 [Cocoa] Support key rotation with HLS-backed encrypted media streams 4 https://bugs.webkit.org/show_bug.cgi?id=220493 5 <rdar://68227709> 6 7 Reviewed by Eric Carlson. 8 9 Support handling the "unexpectedInitializationDataReceived()" client callback from within the GPUP. 10 11 * DerivedSources-input.xcfilelist: 12 * DerivedSources-output.xcfilelist: 13 * DerivedSources.make: 14 * GPUProcess/media/RemoteCDMInstanceProxy.cpp: 15 (WebKit::RemoteCDMInstanceProxy::create): 16 (WebKit::RemoteCDMInstanceProxy::RemoteCDMInstanceProxy): 17 (WebKit::RemoteCDMInstanceProxy::~RemoteCDMInstanceProxy): 18 (WebKit::RemoteCDMInstanceProxy::unrequestedInitializationDataReceived): 19 * GPUProcess/media/RemoteCDMInstanceProxy.h: 20 * GPUProcess/media/RemoteCDMProxy.cpp: 21 (WebKit::RemoteCDMProxy::createInstance): 22 * WebKit.xcodeproj/project.pbxproj: 23 * WebProcess/GPU/media/RemoteCDMInstance.cpp: 24 (WebKit::RemoteCDMInstance::RemoteCDMInstance): 25 (WebKit::RemoteCDMInstance::~RemoteCDMInstance): 26 (WebKit::RemoteCDMInstance::unrequestedInitializationDataReceived): 27 * WebProcess/GPU/media/RemoteCDMInstance.h: 28 * WebProcess/GPU/media/RemoteCDMInstance.messages.in: Added. 29 1 30 2021-01-12 Youenn Fablet <youenn@apple.com> 2 31 -
trunk/Source/WebKit/DerivedSources-input.xcfilelist
r270907 r271405 144 144 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteAudioSession.messages.in 145 145 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteAudioSourceProviderManager.messages.in 146 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteCDMInstance.messages.in 146 147 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteCDMInstanceSession.messages.in 147 148 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteLegacyCDMSession.messages.in -
trunk/Source/WebKit/DerivedSources-output.xcfilelist
r270907 r271405 163 163 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMFactoryProxyMessages.h 164 164 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMFactoryProxyMessagesReplies.h 165 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMInstanceMessageReceiver.cpp 166 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMInstanceMessages.h 167 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMInstanceMessagesReplies.h 165 168 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMInstanceProxyMessageReceiver.cpp 166 169 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteCDMInstanceProxyMessages.h -
trunk/Source/WebKit/DerivedSources.make
r270907 r271405 181 181 WebProcess/GPU/media/RemoteAudioSession \ 182 182 WebProcess/GPU/media/RemoteAudioSourceProviderManager \ 183 WebProcess/GPU/media/RemoteCDMInstance \ 183 184 WebProcess/GPU/media/RemoteCDMInstanceSession \ 184 185 WebProcess/GPU/media/RemoteLegacyCDMSession \ -
trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceProxy.cpp
r266003 r271405 30 30 31 31 #include "RemoteCDMInstanceConfiguration.h" 32 #include "RemoteCDMInstanceMessages.h" 32 33 #include "RemoteCDMInstanceSessionProxy.h" 33 34 #include "SharedBufferCopy.h" … … 38 39 using namespace WebCore; 39 40 40 std::unique_ptr<RemoteCDMInstanceProxy> RemoteCDMInstanceProxy::create(WeakPtr<RemoteCDMProxy>&& cdm, Ref<CDMInstance>&& priv )41 std::unique_ptr<RemoteCDMInstanceProxy> RemoteCDMInstanceProxy::create(WeakPtr<RemoteCDMProxy>&& cdm, Ref<CDMInstance>&& priv, RemoteCDMInstanceIdentifier identifier) 41 42 { 42 43 auto configuration = makeUniqueRefWithoutFastMallocCheck<RemoteCDMInstanceConfiguration, RemoteCDMInstanceConfiguration&&>({ 43 44 priv->keySystem(), 44 45 }); 45 return std::unique_ptr<RemoteCDMInstanceProxy>(new RemoteCDMInstanceProxy(WTFMove(cdm), WTFMove(priv), WTFMove(configuration) ));46 return std::unique_ptr<RemoteCDMInstanceProxy>(new RemoteCDMInstanceProxy(WTFMove(cdm), WTFMove(priv), WTFMove(configuration), identifier)); 46 47 } 47 48 48 RemoteCDMInstanceProxy::RemoteCDMInstanceProxy(WeakPtr<RemoteCDMProxy>&& cdm, Ref<CDMInstance>&& priv, UniqueRef<RemoteCDMInstanceConfiguration>&& configuration )49 RemoteCDMInstanceProxy::RemoteCDMInstanceProxy(WeakPtr<RemoteCDMProxy>&& cdm, Ref<CDMInstance>&& priv, UniqueRef<RemoteCDMInstanceConfiguration>&& configuration, RemoteCDMInstanceIdentifier identifier) 49 50 : m_cdm(WTFMove(cdm)) 50 51 , m_instance(WTFMove(priv)) 51 52 , m_configuration(WTFMove(configuration)) 53 , m_identifier(identifier) 52 54 { 55 m_instance->setClient(makeWeakPtr<CDMInstanceClient>(this)); 53 56 } 54 57 55 RemoteCDMInstanceProxy::~RemoteCDMInstanceProxy() = default; 58 RemoteCDMInstanceProxy::~RemoteCDMInstanceProxy() 59 { 60 m_instance->clearClient(); 61 } 62 63 void RemoteCDMInstanceProxy::unrequestedInitializationDataReceived(const String& type, Ref<SharedBuffer>&& initData) 64 { 65 if (!m_cdm) 66 return; 67 68 if (auto* factory = m_cdm->factory()) 69 factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteCDMInstance::UnrequestedInitializationDataReceived(type, WTFMove(initData)), m_identifier); 70 } 56 71 57 72 void RemoteCDMInstanceProxy::initializeWithConfiguration(const WebCore::CDMKeySystemConfiguration& configuration, AllowDistinctiveIdentifiers allowDistinctiveIdentifiers, AllowPersistentState allowPersistentState, CompletionHandler<void(SuccessValue)>&& completion) -
trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceProxy.h
r266003 r271405 51 51 class RemoteCDMInstanceSessionProxy; 52 52 53 class RemoteCDMInstanceProxy : p rivate IPC::MessageReceiver {53 class RemoteCDMInstanceProxy : public WebCore::CDMInstanceClient, private IPC::MessageReceiver { 54 54 public: 55 static std::unique_ptr<RemoteCDMInstanceProxy> create(WeakPtr<RemoteCDMProxy>&&, Ref<WebCore::CDMInstance>&& );55 static std::unique_ptr<RemoteCDMInstanceProxy> create(WeakPtr<RemoteCDMProxy>&&, Ref<WebCore::CDMInstance>&&, RemoteCDMInstanceIdentifier); 56 56 ~RemoteCDMInstanceProxy(); 57 57 … … 61 61 private: 62 62 friend class RemoteCDMFactoryProxy; 63 RemoteCDMInstanceProxy(WeakPtr<RemoteCDMProxy>&&, Ref<WebCore::CDMInstance>&&, UniqueRef<RemoteCDMInstanceConfiguration>&&); 63 RemoteCDMInstanceProxy(WeakPtr<RemoteCDMProxy>&&, Ref<WebCore::CDMInstance>&&, UniqueRef<RemoteCDMInstanceConfiguration>&&, RemoteCDMInstanceIdentifier); 64 65 // CDMInstanceClient 66 void unrequestedInitializationDataReceived(const String&, Ref<WebCore::SharedBuffer>&&) final; 64 67 65 68 // IPC::MessageReceiver … … 80 83 Ref<WebCore::CDMInstance> m_instance; 81 84 UniqueRef<RemoteCDMInstanceConfiguration> m_configuration; 85 RemoteCDMInstanceIdentifier m_identifier; 82 86 HashMap<RemoteCDMInstanceSessionIdentifier, std::unique_ptr<RemoteCDMInstanceSessionProxy>> m_sessions; 83 87 }; -
trunk/Source/WebKit/GPUProcess/media/RemoteCDMProxy.cpp
r267143 r271405 91 91 return; 92 92 } 93 auto instance = RemoteCDMInstanceProxy::create(makeWeakPtr(this), privateInstance.releaseNonNull());94 93 auto identifier = RemoteCDMInstanceIdentifier::generate(); 94 auto instance = RemoteCDMInstanceProxy::create(makeWeakPtr(this), privateInstance.releaseNonNull(), identifier); 95 95 RemoteCDMInstanceConfiguration configuration = instance->configuration(); 96 96 m_factory->addInstance(identifier, WTFMove(instance)); -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r271253 r271405 1862 1862 CDA29A2A1CBEB67A00901CCF /* PlaybackSessionManagerProxyMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDA29A261CBEB67A00901CCF /* PlaybackSessionManagerProxyMessageReceiver.cpp */; }; 1863 1863 CDA29A2B1CBEB67A00901CCF /* PlaybackSessionManagerProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA29A271CBEB67A00901CCF /* PlaybackSessionManagerProxyMessages.h */; }; 1864 CDA6D45125A989C7004B1DF6 /* RemoteCDMInstanceMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDA6D45025A989AC004B1DF6 /* RemoteCDMInstanceMessageReceiver.cpp */; }; 1864 1865 CDA93DB022F8BCF400490A69 /* FullscreenTouchSecheuristicParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA93DAE22F8BCF300490A69 /* FullscreenTouchSecheuristicParameters.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1865 1866 CDA93DB122F8BCF400490A69 /* FullscreenTouchSecheuristicParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDA93DAF22F8BCF400490A69 /* FullscreenTouchSecheuristicParameters.cpp */; }; … … 5526 5527 CDA29A261CBEB67A00901CCF /* PlaybackSessionManagerProxyMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlaybackSessionManagerProxyMessageReceiver.cpp; path = DerivedSources/WebKit2/PlaybackSessionManagerProxyMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 5527 5528 CDA29A271CBEB67A00901CCF /* PlaybackSessionManagerProxyMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaybackSessionManagerProxyMessages.h; path = DerivedSources/WebKit2/PlaybackSessionManagerProxyMessages.h; sourceTree = BUILT_PRODUCTS_DIR; }; 5529 CDA6D44D25A97158004B1DF6 /* RemoteCDMInstance.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = RemoteCDMInstance.messages.in; sourceTree = "<group>"; }; 5530 CDA6D44F25A989AC004B1DF6 /* RemoteCDMInstanceMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteCDMInstanceMessages.h; sourceTree = "<group>"; }; 5531 CDA6D45025A989AC004B1DF6 /* RemoteCDMInstanceMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteCDMInstanceMessageReceiver.cpp; sourceTree = "<group>"; }; 5528 5532 CDA93DAE22F8BCF300490A69 /* FullscreenTouchSecheuristicParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FullscreenTouchSecheuristicParameters.h; path = ios/fullscreen/FullscreenTouchSecheuristicParameters.h; sourceTree = "<group>"; }; 5529 5533 CDA93DAF22F8BCF400490A69 /* FullscreenTouchSecheuristicParameters.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FullscreenTouchSecheuristicParameters.cpp; path = ios/fullscreen/FullscreenTouchSecheuristicParameters.cpp; sourceTree = "<group>"; }; … … 5963 5967 CDAC20BB23FC2F740021DEE3 /* RemoteCDMInstance.cpp */, 5964 5968 CDAC20B723FC2F730021DEE3 /* RemoteCDMInstance.h */, 5969 CDA6D44D25A97158004B1DF6 /* RemoteCDMInstance.messages.in */, 5965 5970 CDAC20C123FC2F750021DEE3 /* RemoteCDMInstanceConfiguration.h */, 5966 5971 CDAC20B623FC2F730021DEE3 /* RemoteCDMInstanceIdentifier.h */, … … 10765 10770 CDAC20F323FC383A0021DEE3 /* RemoteCDMFactoryProxyMessages.h */, 10766 10771 CDAC20EE23FC38390021DEE3 /* RemoteCDMFactoryProxyMessagesReplies.h */, 10772 CDA6D45025A989AC004B1DF6 /* RemoteCDMInstanceMessageReceiver.cpp */, 10773 CDA6D44F25A989AC004B1DF6 /* RemoteCDMInstanceMessages.h */, 10767 10774 CDAC20F523FC383B0021DEE3 /* RemoteCDMInstanceProxyMessageReceiver.cpp */, 10768 10775 CDAC20EB23FC38380021DEE3 /* RemoteCDMInstanceProxyMessages.h */, … … 13775 13782 2D11B7632126A282006F8878 /* UnifiedSource10-mm.mm in Sources */, 13776 13783 2D11B7652126A282006F8878 /* UnifiedSource11-mm.mm in Sources */, 13784 CDA6D45125A989C7004B1DF6 /* RemoteCDMInstanceMessageReceiver.cpp in Sources */, 13777 13785 2D11B7662126A282006F8878 /* UnifiedSource11.cpp in Sources */, 13778 13786 2D11B7672126A282006F8878 /* UnifiedSource12-mm.mm in Sources */, -
trunk/Source/WebKit/WebProcess/GPU/media/RemoteCDMInstance.cpp
r268118 r271405 30 30 31 31 #include "GPUProcessConnection.h" 32 #include "RemoteCDMInstanceMessages.h" 32 33 #include "RemoteCDMInstanceProxyMessages.h" 33 34 #include "RemoteCDMInstanceSession.h" … … 52 53 , m_configuration(WTFMove(configuration)) 53 54 { 55 if (m_factory) 56 m_factory->gpuProcessConnection().messageReceiverMap().addMessageReceiver(Messages::RemoteCDMInstance::messageReceiverName(), m_identifier.toUInt64(), *this); 57 } 58 59 RemoteCDMInstance::~RemoteCDMInstance() 60 { 61 if (m_factory) 62 m_factory->gpuProcessConnection().messageReceiverMap().removeMessageReceiver(Messages::RemoteCDMInstance::messageReceiverName(), m_identifier.toUInt64()); 63 } 64 65 void RemoteCDMInstance::unrequestedInitializationDataReceived(const String& type, IPC::SharedBufferCopy&& initData) 66 { 67 if (m_client && initData.buffer()) 68 m_client->unrequestedInitializationDataReceived(type, initData.buffer().releaseNonNull()); 54 69 } 55 70 -
trunk/Source/WebKit/WebProcess/GPU/media/RemoteCDMInstance.h
r257867 r271405 28 28 #if ENABLE(GPU_PROCESS) && ENABLE(ENCRYPTED_MEDIA) 29 29 30 #include "MessageReceiver.h" 30 31 #include "RemoteCDMFactory.h" 31 32 #include "RemoteCDMInstanceConfiguration.h" 32 33 #include "RemoteCDMInstanceIdentifier.h" 34 #include "SharedBufferCopy.h" 33 35 #include <WebCore/CDMInstance.h> 34 36 35 37 namespace WebKit { 36 38 37 class RemoteCDMInstance final : public WebCore::CDMInstance {39 class RemoteCDMInstance final : public WebCore::CDMInstance, private IPC::MessageReceiver { 38 40 public: 39 virtual ~RemoteCDMInstance() = default;41 virtual ~RemoteCDMInstance(); 40 42 static Ref<RemoteCDMInstance> create(WeakPtr<RemoteCDMFactory>&&, RemoteCDMInstanceIdentifier&&, RemoteCDMInstanceConfiguration&&); 41 43 … … 45 47 RemoteCDMInstance(WeakPtr<RemoteCDMFactory>&&, RemoteCDMInstanceIdentifier&&, RemoteCDMInstanceConfiguration&&); 46 48 49 // IPC::MessageReceiver 50 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final; 51 52 // Messages 53 void unrequestedInitializationDataReceived(const String&, IPC::SharedBufferCopy&&); 54 47 55 ImplementationType implementationType() const final { return ImplementationType::Remote; } 48 56 void initializeWithConfiguration(const WebCore::CDMKeySystemConfiguration&, AllowDistinctiveIdentifiers, AllowPersistentState, SuccessCallback&&) final; … … 51 59 const String& keySystem() const final { return m_configuration.keySystem; } 52 60 RefPtr<WebCore::CDMInstanceSession> createSession() final; 61 void setClient(WeakPtr<WebCore::CDMInstanceClient>&& client) final { m_client = WTFMove(client); } 62 void clearClient() final { m_client.clear(); } 53 63 54 64 WeakPtr<RemoteCDMFactory> m_factory; 55 65 RemoteCDMInstanceIdentifier m_identifier; 56 66 RemoteCDMInstanceConfiguration m_configuration; 67 WeakPtr<WebCore::CDMInstanceClient> m_client; 57 68 }; 58 69
Note: See TracChangeset
for help on using the changeset viewer.