Changeset 255346 in webkit
- Timestamp:
- Jan 29, 2020 2:14:06 AM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 1 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r255345 r255346 1 2020-01-29 youenn fablet <youenn@apple.com> 2 3 Send WebsiteDataStore media parameters to GPUProcess when needed 4 https://bugs.webkit.org/show_bug.cgi?id=206870 5 6 Reviewed by Eric Carlson. 7 8 Whenever opening a new WebProcess/GPUProcess connection, make sure GPUProcess knows WebProcess session parameters. 9 Make sure to remove session parameters when data store is destroyed. 10 Update media code to no longer send the corresponding parameters for each media load. 11 12 Covered by existing tests no longer triggering sandbox violations. 13 14 * GPUProcess/GPUConnectionToWebProcess.cpp: 15 (WebKit::GPUConnectionToWebProcess::mediaCacheDirectory const): 16 (WebKit::GPUConnectionToWebProcess::mediaKeysStorageDirectory const): 17 * GPUProcess/GPUConnectionToWebProcess.h: 18 * GPUProcess/GPUProcess.cpp: 19 (WebKit::GPUProcess::addSession): 20 (WebKit::GPUProcess::removeSession): 21 (WebKit::GPUProcess::mediaCacheDirectory const): 22 (WebKit::GPUProcess::mediaKeysStorageDirectory const): 23 * GPUProcess/GPUProcess.h: 24 * GPUProcess/GPUProcess.messages.in: 25 * GPUProcess/media/RemoteMediaPlayerProxy.cpp: 26 (WebKit::RemoteMediaPlayerProxy::load): 27 (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory const): 28 (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory const): 29 * GPUProcess/media/RemoteMediaPlayerProxy.h: 30 * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h: 31 (WebKit::RemoteMediaPlayerProxyConfiguration::encode const): 32 (WebKit::RemoteMediaPlayerProxyConfiguration::decode): 33 * UIProcess/GPU/GPUProcessProxy.cpp: 34 (WebKit::GPUProcessProxy::singleton): 35 (WebKit::GPUProcessProxy::openGPUProcessConnection): 36 (WebKit::gpuProcessSessionParameters): 37 (WebKit::GPUProcessProxy::addSession): 38 (WebKit::GPUProcessProxy::removeSession): 39 * UIProcess/GPU/GPUProcessProxy.h: 40 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 41 (WebKit::WebsiteDataStore::~WebsiteDataStore): 42 * WebKit.xcodeproj/project.pbxproj: 43 * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp: 44 (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer): 45 1 46 2020-01-29 youenn fablet <youenn@apple.com> 2 47 -
trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
r254817 r255346 262 262 } 263 263 264 const String& GPUConnectionToWebProcess::mediaCacheDirectory() const 265 { 266 return m_gpuProcess->mediaCacheDirectory(m_sessionID); 267 } 268 269 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 270 const String& GPUConnectionToWebProcess::mediaKeysStorageDirectory() const 271 { 272 return m_gpuProcess->mediaKeysStorageDirectory(m_sessionID); 273 } 274 #endif 275 264 276 } // namespace WebKit 265 277 -
trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
r254817 r255346 66 66 Logger& logger(); 67 67 68 const String& mediaCacheDirectory() const; 69 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 70 const String& mediaKeysStorageDirectory() const; 71 #endif 72 68 73 private: 69 74 GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID); -
trunk/Source/WebKit/GPUProcess/GPUProcess.cpp
r254867 r255346 35 35 #include "GPUConnectionToWebProcess.h" 36 36 #include "GPUProcessCreationParameters.h" 37 #include "GPUProcessSessionParameters.h" 37 38 #include "Logging.h" 38 39 #include "SandboxExtension.h" … … 157 158 } 158 159 160 void GPUProcess::addSession(PAL::SessionID sessionID, GPUProcessSessionParameters&& parameters) 161 { 162 ASSERT(!m_sessions.contains(sessionID)); 163 SandboxExtension::consumePermanently(parameters.mediaCacheDirectorySandboxExtensionHandle); 164 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 165 SandboxExtension::consumePermanently(parameters.mediaKeysStorageDirectorySandboxExtensionHandle); 166 #endif 167 168 m_sessions.add(sessionID, GPUSession { 169 WTFMove(parameters.mediaCacheDirectory) 170 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 171 , WTFMove(parameters.mediaKeysStorageDirectory) 172 #endif 173 }); 174 } 175 176 void GPUProcess::removeSession(PAL::SessionID sessionID) 177 { 178 ASSERT(m_sessions.contains(sessionID)); 179 m_sessions.remove(sessionID); 180 } 181 182 const String& GPUProcess::mediaCacheDirectory(PAL::SessionID sessionID) const 183 { 184 ASSERT(m_sessions.contains(sessionID)); 185 return m_sessions.find(sessionID)->value.mediaCacheDirectory; 186 } 187 188 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 189 const String& GPUProcess::mediaKeysStorageDirectory(PAL::SessionID sessionID) const 190 { 191 ASSERT(m_sessions.contains(sessionID)); 192 return m_sessions.find(sessionID)->value.mediaKeysStorageDirectory; 193 } 194 #endif 195 159 196 } // namespace WebKit 160 197 -
trunk/Source/WebKit/GPUProcess/GPUProcess.h
r253900 r255346 39 39 class GPUConnectionToWebProcess; 40 40 struct GPUProcessCreationParameters; 41 struct GPUProcessSessionParameters; 41 42 42 43 class GPUProcess : public AuxiliaryProcess, public ThreadSafeRefCounted<GPUProcess>, public CanMakeWeakPtr<GPUProcess> { … … 57 58 GPUConnectionToWebProcess* webProcessConnection(WebCore::ProcessIdentifier) const; 58 59 60 const String& mediaCacheDirectory(PAL::SessionID) const; 61 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 62 const String& mediaKeysStorageDirectory(PAL::SessionID) const; 63 #endif 64 59 65 private: 60 66 void lowMemoryHandler(Critical); … … 73 79 void initializeGPUProcess(GPUProcessCreationParameters&&); 74 80 void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&); 81 void addSession(PAL::SessionID, GPUProcessSessionParameters&&); 82 void removeSession(PAL::SessionID); 75 83 76 84 void processDidTransitionToForeground(); … … 80 88 // Connections to WebProcesses. 81 89 HashMap<WebCore::ProcessIdentifier, Ref<GPUConnectionToWebProcess>> m_webProcessConnections; 90 91 struct GPUSession { 92 String mediaCacheDirectory; 93 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 94 String mediaKeysStorageDirectory; 95 #endif 96 }; 97 HashMap<PAL::SessionID, GPUSession> m_sessions; 82 98 }; 83 99 -
trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in
r254392 r255346 33 33 ProcessDidTransitionToBackground() 34 34 35 AddSession(PAL::SessionID sessionID, struct WebKit::GPUProcessSessionParameters parameters) 36 RemoveSession(PAL::SessionID sessionID) 37 35 38 #if ENABLE(MEDIA_STREAM) 36 39 SetMockCaptureDevicesEnabled(bool isEnabled) -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
r255235 r255346 90 90 } 91 91 92 void RemoteMediaPlayerProxy::load( const URL& url, Optional<SandboxExtension::Handle>&& sandboxExtensionHandle, const ContentType& contentType, const String& keySystem, CompletionHandler<void(RemoteMediaPlayerConfiguration&&)>&& completionHandler)92 void RemoteMediaPlayerProxy::load(URL&& url, Optional<SandboxExtension::Handle>&& sandboxExtensionHandle, const ContentType& contentType, const String& keySystem, CompletionHandler<void(RemoteMediaPlayerConfiguration&&)>&& completionHandler) 93 93 { 94 94 RemoteMediaPlayerConfiguration configuration; 95 96 95 if (sandboxExtensionHandle) { 97 96 m_sandboxExtension = SandboxExtension::create(WTFMove(sandboxExtensionHandle.value())); … … 290 289 String RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory() const 291 290 { 292 return m_ configuration.mediaKeysStorageDirectory;291 return m_manager.gpuConnectionToWebProcess().mediaKeysStorageDirectory(); 293 292 } 294 293 #endif … … 318 317 const String& RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory() const 319 318 { 320 return m_ configuration.mediaCacheDirectory;319 return m_manager.gpuConnectionToWebProcess().mediaCacheDirectory(); 321 320 } 322 321 -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h
r254964 r255346 78 78 void prepareForRendering(); 79 79 80 void load( const URL&, Optional<SandboxExtension::Handle>&&, const WebCore::ContentType&, const String&, CompletionHandler<void(RemoteMediaPlayerConfiguration&&)>&&);80 void load(URL&&, Optional<SandboxExtension::Handle>&&, const WebCore::ContentType&, const String&, CompletionHandler<void(RemoteMediaPlayerConfiguration&&)>&&); 81 81 void cancelLoad(); 82 82 -
trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h
r253941 r255346 34 34 35 35 struct RemoteMediaPlayerProxyConfiguration { 36 String mediaKeysStorageDirectory;37 36 String referrer; 38 37 String userAgent; 39 38 String sourceApplicationIdentifier; 40 39 String networkInterfaceName; 41 String mediaCacheDirectory;42 40 Vector<WebCore::ContentType> mediaContentTypesRequiringHardwareSupport; 43 41 Vector<String> preferredAudioCharacteristics; … … 49 47 void encode(Encoder& encoder) const 50 48 { 51 encoder << mediaKeysStorageDirectory;52 49 encoder << referrer; 53 50 encoder << userAgent; 54 51 encoder << sourceApplicationIdentifier; 55 52 encoder << networkInterfaceName; 56 encoder << mediaCacheDirectory;57 53 encoder << mediaContentTypesRequiringHardwareSupport; 58 54 encoder << preferredAudioCharacteristics; … … 65 61 static Optional<RemoteMediaPlayerProxyConfiguration> decode(Decoder& decoder) 66 62 { 67 Optional<String> mediaKeysStorageDirectory;68 decoder >> mediaKeysStorageDirectory;69 if (!mediaKeysStorageDirectory)70 return WTF::nullopt;71 72 63 Optional<String> referrer; 73 64 decoder >> referrer; … … 88 79 decoder >> networkInterfaceName; 89 80 if (!networkInterfaceName) 90 return WTF::nullopt;91 92 Optional<String> mediaCacheDirectory;93 decoder >> mediaCacheDirectory;94 if (!mediaCacheDirectory)95 81 return WTF::nullopt; 96 82 … … 121 107 122 108 return {{ 123 WTFMove(*mediaKeysStorageDirectory),124 109 WTFMove(*referrer), 125 110 WTFMove(*userAgent), 126 111 WTFMove(*sourceApplicationIdentifier), 127 112 WTFMove(*networkInterfaceName), 128 WTFMove(*mediaCacheDirectory),129 113 WTFMove(*mediaContentTypesRequiringHardwareSupport), 130 114 WTFMove(*preferredAudioCharacteristics), -
trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
r254867 r255346 34 34 #include "GPUProcessMessages.h" 35 35 #include "GPUProcessProxyMessages.h" 36 #include "GPUProcessSessionParameters.h" 36 37 #include "Logging.h" 37 38 #include "WebPageMessages.h" … … 83 84 } 84 85 86 GPUProcessProxy* GPUProcessProxy::m_singleton = nullptr; 87 85 88 GPUProcessProxy& GPUProcessProxy::singleton() 86 89 { … … 111 114 gpuProcess->send(Messages::GPUProcess::InitializeGPUProcess(parameters), 0); 112 115 gpuProcess->updateProcessAssertion(); 116 117 m_singleton = &gpuProcess.get(); 113 118 }); 114 119 … … 167 172 void GPUProcessProxy::openGPUProcessConnection(ConnectionRequestIdentifier connectionRequestIdentifier, WebProcessProxy& webProcessProxy) 168 173 { 174 addSession(webProcessProxy.websiteDataStore()); 175 169 176 auto& connection = *this->connection(); 170 177 … … 269 276 } 270 277 278 static inline GPUProcessSessionParameters gpuProcessSessionParameters(const WebsiteDataStore& store) 279 { 280 GPUProcessSessionParameters parameters; 281 282 parameters.mediaCacheDirectory = store.resolvedMediaCacheDirectory(); 283 SandboxExtension::Handle mediaCacheDirectoryExtensionHandle; 284 if (!parameters.mediaCacheDirectory.isEmpty()) 285 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaCacheDirectorySandboxExtensionHandle); 286 287 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 288 parameters.mediaKeysStorageDirectory = store.resolvedMediaKeysDirectory(); 289 SandboxExtension::Handle mediaKeysStorageDirectorySandboxExtensionHandle; 290 if (!parameters.mediaKeysStorageDirectory.isEmpty()) 291 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeysStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaKeysStorageDirectorySandboxExtensionHandle); 292 #endif 293 294 return parameters; 295 } 296 297 void GPUProcessProxy::addSession(const WebsiteDataStore& store) 298 { 299 if (!canSendMessage()) 300 return; 301 302 if (m_sessionIDs.contains(store.sessionID())) 303 return; 304 305 send(Messages::GPUProcess::AddSession { store.sessionID(), gpuProcessSessionParameters(store) }, 0); 306 m_sessionIDs.add(store.sessionID()); 307 } 308 309 void GPUProcessProxy::removeSession(PAL::SessionID sessionID) 310 { 311 if (!canSendMessage()) 312 return; 313 314 if (m_sessionIDs.remove(sessionID)) 315 send(Messages::GPUProcess::RemoveSession { sessionID }, 0); 316 } 317 271 318 } // namespace WebKit 272 319 -
trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
r254569 r255346 36 36 #include "WebProcessProxyMessagesReplies.h" 37 37 #include <memory> 38 #include <pal/SessionID.h> 38 39 39 40 namespace WebKit { 40 41 41 42 class WebProcessProxy; 43 class WebsiteDataStore; 42 44 struct GPUProcessCreationParameters; 43 45 … … 48 50 public: 49 51 static GPUProcessProxy& singleton(); 52 static GPUProcessProxy* singletonIfCreated() { return m_singleton; } 50 53 51 54 void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&); … … 61 64 #endif 62 65 66 void removeSession(PAL::SessionID); 67 63 68 private: 64 69 explicit GPUProcessProxy(); 65 70 ~GPUProcessProxy(); 71 72 void addSession(const WebsiteDataStore&); 66 73 67 74 // AuxiliaryProcessProxy … … 88 95 void didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference messageReceiverName, IPC::StringReference messageName) override; 89 96 97 static GPUProcessProxy* m_singleton; 98 90 99 struct ConnectionRequest { 91 100 WeakPtr<WebProcessProxy> webProcess; … … 100 109 bool m_useMockCaptureDevices { false }; 101 110 #endif 111 HashSet<PAL::SessionID> m_sessionIDs; 102 112 }; 103 113 -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r254556 r255346 136 136 } 137 137 } 138 #if ENABLE(GPU_PROCESS) 139 if (auto* gpuProcessProxy = GPUProcessProxy::singletonIfCreated()) 140 gpuProcessProxy->removeSession(m_sessionID); 141 #endif 138 142 } 139 143 -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r255214 r255346 3350 3350 4143751B20EAEA1E00FAD06C /* cn.microdone.cmb.safari.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cn.microdone.cmb.safari.sb; sourceTree = "<group>"; }; 3351 3351 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.cisco.webex.plugin.gpc64.sb; sourceTree = "<group>"; }; 3352 4150A5A023E06C910051264A /* GPUProcessSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPUProcessSessionParameters.h; sourceTree = "<group>"; }; 3352 3353 41518535222704F5005430C6 /* ServiceWorkerFetchTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerFetchTask.h; sourceTree = "<group>"; }; 3353 3354 41518536222704F6005430C6 /* ServiceWorkerFetchTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerFetchTask.cpp; sourceTree = "<group>"; }; … … 6507 6508 2D9FB2142375209D0049F936 /* GPUProcessCreationParameters.cpp */, 6508 6509 2D9FB2032375209D0049F936 /* GPUProcessCreationParameters.h */, 6510 4150A5A023E06C910051264A /* GPUProcessSessionParameters.h */, 6509 6511 ); 6510 6512 path = GPUProcess; -
trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp
r254817 r255346 148 148 149 149 RemoteMediaPlayerProxyConfiguration proxyConfiguration; 150 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)151 proxyConfiguration.mediaKeysStorageDirectory = player->mediaKeysStorageDirectory();152 #endif153 150 proxyConfiguration.referrer = player->referrer(); 154 151 proxyConfiguration.userAgent = player->userAgent(); … … 157 154 proxyConfiguration.networkInterfaceName = player->mediaPlayerNetworkInterfaceName(); 158 155 #endif 159 proxyConfiguration.mediaCacheDirectory = player->mediaCacheDirectory();160 156 proxyConfiguration.mediaContentTypesRequiringHardwareSupport = player->mediaContentTypesRequiringHardwareSupport(); 161 157 proxyConfiguration.preferredAudioCharacteristics = player->preferredAudioCharacteristics();
Note: See TracChangeset
for help on using the changeset viewer.