Changeset 281032 in webkit
- Timestamp:
- Aug 13, 2021, 1:53:03 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 20 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/NetworkResourceLoadParameters.cpp (modified) (2 diffs)
-
Platform/IPC/FormDataReference.h (modified) (1 diff)
-
Shared/Cocoa/SandboxExtensionCocoa.mm (modified) (9 diffs)
-
Shared/SandboxExtension.h (modified) (2 diffs)
-
UIProcess/Cocoa/WebPageProxyCocoa.mm (modified) (5 diffs)
-
UIProcess/Cocoa/WebPasteboardProxyCocoa.mm (modified) (1 diff)
-
UIProcess/Cocoa/WebProcessPoolCocoa.mm (modified) (5 diffs)
-
UIProcess/Downloads/DownloadProxy.cpp (modified) (2 diffs)
-
UIProcess/GPU/GPUProcessProxy.cpp (modified) (7 diffs)
-
UIProcess/Network/NetworkProcessProxy.cpp (modified) (2 diffs)
-
UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp (modified) (1 diff)
-
UIProcess/UserMediaPermissionRequestManagerProxy.cpp (modified) (1 diff)
-
UIProcess/UserMediaProcessManager.cpp (modified) (1 diff)
-
UIProcess/WebPageProxy.cpp (modified) (4 diffs)
-
UIProcess/WebProcessPool.cpp (modified) (7 diffs)
-
UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (modified) (2 diffs)
-
UIProcess/WebsiteData/WebsiteDataStore.cpp (modified) (4 diffs)
-
WebProcess/FileAPI/BlobRegistryProxy.cpp (modified) (1 diff)
-
WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r281012 r281032 1 2021-08-13 Alex Christensen <achristensen@webkit.org> 2 3 SandboxExtension::Handle creation should return std::optional instead of bool 4 https://bugs.webkit.org/show_bug.cgi?id=228875 5 6 Reviewed by Youenn Fablet. 7 8 This modernizes the code somewhat. 9 This makes it easier to write code that realizes that handle creation can fail. 10 This is a step towards removing the unnecessary abstraction HandleArray. 11 12 * NetworkProcess/NetworkResourceLoadParameters.cpp: 13 (WebKit::NetworkResourceLoadParameters::encode const): 14 * Platform/IPC/FormDataReference.h: 15 (IPC::FormDataReference::encode const): 16 * Shared/Cocoa/SandboxExtensionCocoa.mm: 17 (WebKit::SandboxExtension::createHandleWithoutResolvingPath): 18 (WebKit::SandboxExtension::createHandle): 19 (WebKit::createHandlesForResources): 20 (WebKit::SandboxExtension::createReadOnlyHandlesForFiles): 21 (WebKit::SandboxExtension::createHandleForReadWriteDirectory): 22 (WebKit::SandboxExtension::createHandleForTemporaryFile): 23 (WebKit::SandboxExtension::createHandleForGenericExtension): 24 (WebKit::SandboxExtension::createHandleForMachLookup): 25 (WebKit::SandboxExtension::createHandlesForMachLookup): 26 (WebKit::SandboxExtension::createHandleForReadByAuditToken): 27 (WebKit::SandboxExtension::createHandleForIOKitClassExtension): 28 (WebKit::SandboxExtension::createHandlesForIOKitClassExtensions): 29 * Shared/SandboxExtension.h: 30 (WebKit::SandboxExtension::createHandle): 31 (WebKit::SandboxExtension::createHandleWithoutResolvingPath): 32 (WebKit::SandboxExtension::createHandleForReadWriteDirectory): 33 (WebKit::SandboxExtension::createHandleForTemporaryFile): 34 (WebKit::SandboxExtension::createHandleForGenericExtension): 35 * UIProcess/Cocoa/WebPageProxyCocoa.mm: 36 (WebKit::WebPageProxy::addPlatformLoadParameters): 37 (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Deleted. 38 (WebKit::WebPageProxy::scrollingUpdatesDisabledForTesting): Deleted. 39 (WebKit::WebPageProxy::startDrag): Deleted. 40 (WebKit::WebPageProxy::setPromisedDataForImage): Deleted. 41 (WebKit::WebPageProxy::setDragCaretRect): Deleted. 42 (WebKit::WebPageProxy::platformRegisterAttachment): Deleted. 43 (WebKit::WebPageProxy::platformCloneAttachment): Deleted. 44 (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. 45 (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted. 46 (WebKit::WebPageProxy::insertDictatedTextAsync): Deleted. 47 (WebKit::WebPageProxy::platformDictationAlternatives): Deleted. 48 (WebKit::WebPageProxy::errorForUnpermittedAppBoundDomainNavigation): Deleted. 49 (WebKit::WebPageProxy::paymentCoordinatorConnection): Deleted. 50 (WebKit::WebPageProxy::paymentCoordinatorBoundInterfaceIdentifier): Deleted. 51 (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Deleted. 52 (WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Deleted. 53 (WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver): Deleted. 54 (WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver): Deleted. 55 (WebKit::WebPageProxy::didStartSpeaking): Deleted. 56 (WebKit::WebPageProxy::didFinishSpeaking): Deleted. 57 (WebKit::WebPageProxy::didPauseSpeaking): Deleted. 58 (WebKit::WebPageProxy::didResumeSpeaking): Deleted. 59 (WebKit::WebPageProxy::speakingErrorOccurred): Deleted. 60 (WebKit::WebPageProxy::boundaryEventOccurred): Deleted. 61 (WebKit::WebPageProxy::voicesDidChange): Deleted. 62 (WebKit::WebPageProxy::didCreateContextInWebProcessForVisibilityPropagation): Deleted. 63 (WebKit::WebPageProxy::didCreateContextInGPUProcessForVisibilityPropagation): Deleted. 64 (WebKit::WebPageProxy::grantAccessToPreferenceService): Deleted. 65 (WebKit::WebPageProxy::mediaUsageManager): Deleted. 66 (WebKit::WebPageProxy::addMediaUsageManagerSession): Deleted. 67 (WebKit::WebPageProxy::updateMediaUsageManagerSessionState): Deleted. 68 (WebKit::WebPageProxy::removeMediaUsageManagerSession): Deleted. 69 (WebKit::convertPlatformImageToBitmap): Deleted. 70 (WebKit::WebPageProxy::requestThumbnailWithOperation): Deleted. 71 (WebKit::WebPageProxy::requestThumbnailWithFileWrapper): Deleted. 72 (WebKit::WebPageProxy::requestThumbnailWithPath): Deleted. 73 (WebKit::WebPageProxy::scheduleActivityStateUpdate): Deleted. 74 (WebKit::WebPageProxy::addActivityStateUpdateCompletionHandler): Deleted. 75 (WebKit::WebPageProxy::createAppHighlightInSelectedRange): Deleted. 76 (WebKit::WebPageProxy::restoreAppHighlightsAndScrollToIndex): Deleted. 77 (WebKit::WebPageProxy::setAppHighlightsVisibility): Deleted. 78 (WebKit::WebPageProxy::appHighlightsVisibility): Deleted. 79 (WebKit::WebPageProxy::appHighlightsOverlayRect): Deleted. 80 (WebKit::WebPageProxy::setUpHighlightsObserver): Deleted. 81 (WebKit::WebPageProxy::createNetworkExtensionsSandboxExtensions): Deleted. 82 (WebKit::WebPageProxy::canHandleContextMenuTranslation const): Deleted. 83 (WebKit::WebPageProxy::handleContextMenuTranslation): Deleted. 84 (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo): Deleted. 85 (WebKit::WebPageProxy::setLastNavigationWasAppInitiated): Deleted. 86 (WebKit::WebPageProxy::lastNavigationWasAppInitiated): Deleted. 87 (WebKit::WebPageProxy::grantAccessToAssetServices): Deleted. 88 (WebKit::WebPageProxy::revokeAccessToAssetServices): Deleted. 89 (WebKit::WebPageProxy::switchFromStaticFontRegistryToUserFontRegistry): Deleted. 90 (WebKit::WebPageProxy::fontdMachExtensionHandle): Deleted. 91 (WebKit::WebPageProxy::contentsOfUserInterfaceItem): Deleted. 92 * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm: 93 (WebKit::WebPasteboardProxy::getPasteboardPathnamesForType): 94 * UIProcess/Cocoa/WebProcessPoolCocoa.mm: 95 (WebKit::WebProcessPool::platformInitializeWebProcess): 96 (WebKit::WebProcessPool::platformInitializeNetworkProcess): Deleted. 97 (WebKit::WebProcessPool::platformInvalidateContext): Deleted. 98 (WebKit::WebProcessPool::parentBundleDirectory): Deleted. 99 (WebKit::WebProcessPool::networkingCachesDirectory): Deleted. 100 (WebKit::WebProcessPool::webContentCachesDirectory): Deleted. 101 (WebKit::WebProcessPool::containerTemporaryDirectory): Deleted. 102 (WebKit::WebProcessPool::setJavaScriptConfigurationFileEnabledFromDefaults): Deleted. 103 (WebKit::WebProcessPool::omitPDFSupport): Deleted. 104 (WebKit::WebProcessPool::processSuppressionEnabled const): Deleted. 105 (WebKit::WebProcessPool::displayBrightness): Deleted. 106 (WebKit::WebProcessPool::backlightLevelDidChangeCallback): Deleted. 107 (WebKit::WebProcessPool::accessibilityPreferencesChangedCallback): Deleted. 108 (WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback): Deleted. 109 (WebKit::WebProcessPool::colorPreferencesDidChangeCallback): Deleted. 110 (WebKit::WebProcessPool::remoteWebInspectorEnabledCallback): Deleted. 111 (WebKit::WebProcessPool::startObservingPreferenceChanges): Deleted. 112 (WebKit::WebProcessPool::registerNotificationObservers): Deleted. 113 (WebKit::WebProcessPool::unregisterNotificationObservers): Deleted. 114 (WebKit::WebProcessPool::isURLKnownHSTSHost const): Deleted. 115 (WebKit::WebProcessPool::nominalFramesPerSecondForDisplay): Deleted. 116 (WebKit::WebProcessPool::startDisplayLink): Deleted. 117 (WebKit::WebProcessPool::stopDisplayLink): Deleted. 118 (WebKit::WebProcessPool::stopDisplayLinks): Deleted. 119 (WebKit::WebProcessPool::setDisplayLinkPreferredFramesPerSecond): Deleted. 120 (WebKit::WebProcessPool::setDisplayLinkForDisplayWantsFullSpeedUpdates): Deleted. 121 (WebKit::WebProcessPool::setCookieStoragePartitioningEnabled): Deleted. 122 (WebKit::WebProcessPool::clearPermanentCredentialsForProtectionSpace): Deleted. 123 (WebKit::networkProcessLatencyQOS): Deleted. 124 (WebKit::networkProcessThroughputQOS): Deleted. 125 (WebKit::webProcessLatencyQOS): Deleted. 126 (WebKit::webProcessThroughputQOS): Deleted. 127 (WebKit::WebProcessPool::applicationIsAboutToSuspend): Deleted. 128 (WebKit::WebProcessPool::notifyProcessPoolsApplicationIsAboutToSuspend): Deleted. 129 (WebKit::WebProcessPool::initializeClassesForParameterCoding): Deleted. 130 (WebKit::WebProcessPool::allowedClassesForParameterCoding const): Deleted. 131 (WebKit::WebProcessPool::notifyPreferencesChanged): Deleted. 132 (WebKit::webProcessPoolHighDynamicRangeDidChangeCallback): Deleted. 133 (WebKit::WebProcessPool::registerHighDynamicRangeChangeCallback): Deleted. 134 (WebKit::WebProcessPool::systemWillSleep): Deleted. 135 (WebKit::WebProcessPool::systemDidWake): Deleted. 136 * UIProcess/Downloads/DownloadProxy.cpp: 137 (WebKit::DownloadProxy::publishProgress): 138 (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename): 139 * UIProcess/GPU/GPUProcessProxy.cpp: 140 (WebKit::GPUProcessProxy::GPUProcessProxy): 141 (WebKit::addCameraSandboxExtensions): 142 (WebKit::addMicrophoneSandboxExtension): 143 (WebKit::addTCCDSandboxExtension): 144 (WebKit::gpuProcessSessionParameters): 145 * UIProcess/Network/NetworkProcessProxy.cpp: 146 (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess): 147 (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters): 148 * UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp: 149 (WebKit::SpeechRecognitionRemoteRealtimeMediaSourceManager::addSource): 150 * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: 151 (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest): 152 * UIProcess/UserMediaProcessManager.cpp: 153 (WebKit::UserMediaProcessManager::willCreateMediaStream): 154 * UIProcess/WebPageProxy.cpp: 155 (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): 156 (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon): 157 * UIProcess/WebProcessPool.cpp: 158 (WebKit::WebProcessPool::webProcessDataStoreParameters): 159 (WebKit::WebProcessPool::initializeNewWebProcess): 160 (WebKit::WebProcessPool::processDidFinishLaunching): 161 (WebKit::WebProcessPool::resumeDownload): 162 (WebKit::WebProcessPool::startMemorySampler): 163 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 164 (WebKit::WebsiteDataStore::platformSetNetworkParameters): 165 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 166 (WebKit::WebsiteDataStore::parameters): 167 * WebProcess/FileAPI/BlobRegistryProxy.cpp: 168 (WebKit::BlobRegistryProxy::registerFileBlobURL): 169 * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: 170 (WebKit::MediaPlayerPrivateRemote::load): 171 1 172 2021-08-13 Youenn Fablet <youenn@apple.com> 2 173 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp
r280953 r281032 66 66 if (auto* fileData = WTF::get_if<FormDataElement::EncodedFileData>(element.data)) { 67 67 const String& path = fileData->filename; 68 SandboxExtension::createHandle(path, SandboxExtension::Type::ReadOnly, requestBodySandboxExtensions[extensionIndex++]); 68 if (auto handle = SandboxExtension::createHandle(path, SandboxExtension::Type::ReadOnly)) 69 requestBodySandboxExtensions[extensionIndex++] = WTFMove(*handle); 69 70 } 70 71 } … … 75 76 SandboxExtension::Handle requestSandboxExtension; 76 77 #if HAVE(AUDIT_TOKEN) 77 if (networkProcessAuditToken) 78 SandboxExtension::createHandleForReadByAuditToken(request.url().fileSystemPath(), *networkProcessAuditToken, requestSandboxExtension); 79 else 80 #endif 81 SandboxExtension::createHandle(request.url().fileSystemPath(), SandboxExtension::Type::ReadOnly, requestSandboxExtension); 78 if (networkProcessAuditToken) { 79 if (auto handle = SandboxExtension::createHandleForReadByAuditToken(request.url().fileSystemPath(), *networkProcessAuditToken)) 80 requestSandboxExtension = WTFMove(*handle); 81 } else 82 #endif 83 { 84 if (auto handle = SandboxExtension::createHandle(request.url().fileSystemPath(), SandboxExtension::Type::ReadOnly)) 85 requestSandboxExtension = WTFMove(*handle); 86 } 82 87 83 88 encoder << requestSandboxExtension; -
trunk/Source/WebKit/Platform/IPC/FormDataReference.h
r278253 r281032 62 62 if (auto* fileData = WTF::get_if<WebCore::FormDataElement::EncodedFileData>(element.data)) { 63 63 const String& path = fileData->filename; 64 WebKit::SandboxExtension::createHandle(path, WebKit::SandboxExtension::Type::ReadOnly, sandboxExtensionHandles[extensionIndex++]); 64 if (auto handle = WebKit::SandboxExtension::createHandle(path, WebKit::SandboxExtension::Type::ReadOnly)) 65 sandboxExtensionHandles[extensionIndex++] = WTFMove(*handle); 65 66 } 66 67 } -
trunk/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm
r278253 r281032 277 277 } 278 278 279 bool SandboxExtension::createHandleWithoutResolvingPath(const String& path, Type type, Handle& handle) 280 { 279 auto SandboxExtension::createHandleWithoutResolvingPath(const String& path, Type type) -> std::optional<Handle> 280 { 281 Handle handle; 281 282 ASSERT(!handle.m_sandboxExtension); 282 283 … … 284 285 if (!handle.m_sandboxExtension) { 285 286 LOG_ERROR("Could not create a sandbox extension for '%s'", path.utf8().data()); 286 return false; 287 } 288 return true; 289 } 290 291 bool SandboxExtension::createHandle(const String& path, Type type, Handle& handle) 292 { 293 ASSERT(!handle.m_sandboxExtension); 294 295 return createHandleWithoutResolvingPath(resolvePathForSandboxExtension(path), type, handle); 287 return std::nullopt; 288 } 289 return WTFMove(handle); 290 } 291 292 auto SandboxExtension::createHandle(const String& path, Type type) -> std::optional<Handle> 293 { 294 return createHandleWithoutResolvingPath(resolvePathForSandboxExtension(path), type); 296 295 } 297 296 298 297 template <typename T> 299 static SandboxExtension::HandleArray createHandlesForResources(const Vector<T>& resources, Function< bool(const T&, SandboxExtension::Handle& handle)>&& createFunction)298 static SandboxExtension::HandleArray createHandlesForResources(const Vector<T>& resources, Function<std::optional<SandboxExtension::Handle>(const T&)>&& createFunction) 300 299 { 301 300 SandboxExtension::HandleArray handleArray; … … 306 305 size_t currentHandle = 0; 307 306 for (const auto& resource : resources) { 308 if (!createFunction(resource, handleArray[currentHandle])) 307 auto handle = createFunction(resource); 308 if (!handle) 309 309 continue; 310 handleArray[currentHandle] = WTFMove(*handle); 310 311 ++currentHandle; 311 312 } … … 316 317 SandboxExtension::HandleArray SandboxExtension::createReadOnlyHandlesForFiles(ASCIILiteral logLabel, const Vector<String>& paths) 317 318 { 318 return createHandlesForResources(paths, Function<bool(const String&, Handle&)>([&logLabel] (const String& path, Handle& handle) { 319 if (!SandboxExtension::createHandle(path, SandboxExtension::Type::ReadOnly, handle)) { 319 return createHandlesForResources<String>(paths, [&logLabel] (const String& path) { 320 auto handle = SandboxExtension::createHandle(path, SandboxExtension::Type::ReadOnly); 321 if (!handle) { 320 322 // This can legitimately fail if a directory containing the file is deleted after the file was chosen. 321 323 // We also have reports of cases where this likely fails for some unknown reason, <rdar://problem/10156710>. 322 324 WTFLogAlways("%s: could not create a sandbox extension for '%s'\n", logLabel.characters(), path.utf8().data()); 323 325 ASSERT_NOT_REACHED(); 324 return false;325 326 } 326 return true;327 }) );328 } 329 330 bool SandboxExtension::createHandleForReadWriteDirectory(const String& path, SandboxExtension::Handle& handle) 327 return handle; 328 }); 329 } 330 331 auto SandboxExtension::createHandleForReadWriteDirectory(const String& path) -> std::optional<Handle> 331 332 { 332 333 String resolvedPath = resolveAndCreateReadWriteDirectoryForSandboxExtension(path); 333 334 if (resolvedPath.isNull()) 334 return false;335 336 return SandboxExtension::createHandleWithoutResolvingPath(resolvedPath, SandboxExtension::Type::ReadWrite, handle); 337 } 338 339 String SandboxExtension::createHandleForTemporaryFile(const String& prefix, Type type, Handle& handle) 340 { 335 return std::nullopt; 336 return SandboxExtension::createHandleWithoutResolvingPath(resolvedPath, SandboxExtension::Type::ReadWrite); 337 } 338 339 auto SandboxExtension::createHandleForTemporaryFile(const String& prefix, Type type) -> std::optional<std::pair<Handle, String>> 340 { 341 Handle handle; 341 342 ASSERT(!handle.m_sandboxExtension); 342 343 343 344 Vector<char> path(PATH_MAX); 344 345 if (!confstr(_CS_DARWIN_USER_TEMP_DIR, path.data(), path.size())) 345 return String();346 return std::nullopt; 346 347 347 348 // Shrink the vector. … … 361 362 if (!handle.m_sandboxExtension) { 362 363 WTFLogAlways("Could not create a sandbox extension for temporary file '%s'", path.data()); 363 return String(); 364 } 365 return String(path.data()); 366 } 367 368 bool SandboxExtension::createHandleForGenericExtension(ASCIILiteral extensionClass, Handle& handle) 369 { 364 return std::nullopt; 365 } 366 return {{ WTFMove(handle), String(path.data()) }}; 367 } 368 369 auto SandboxExtension::createHandleForGenericExtension(ASCIILiteral extensionClass) -> std::optional<Handle> 370 { 371 Handle handle; 370 372 ASSERT(!handle.m_sandboxExtension); 371 373 … … 373 375 if (!handle.m_sandboxExtension) { 374 376 WTFLogAlways("Could not create a '%s' sandbox extension", extensionClass.characters()); 375 return false; 376 } 377 378 return true; 379 } 380 381 bool SandboxExtension::createHandleForMachLookup(ASCIILiteral service, std::optional<audit_token_t> auditToken, Handle& handle, OptionSet<Flags> flags) 382 { 377 return std::nullopt; 378 } 379 380 return WTFMove(handle); 381 } 382 383 auto SandboxExtension::createHandleForMachLookup(ASCIILiteral service, std::optional<audit_token_t> auditToken, OptionSet<Flags> flags) -> std::optional<Handle> 384 { 385 Handle handle; 383 386 ASSERT(!handle.m_sandboxExtension); 384 387 … … 386 389 if (!handle.m_sandboxExtension) { 387 390 WTFLogAlways("Could not create a '%s' sandbox extension", service.characters()); 388 return false;389 } 390 391 return true;391 return std::nullopt; 392 } 393 394 return WTFMove(handle); 392 395 } 393 396 394 397 SandboxExtension::HandleArray SandboxExtension::createHandlesForMachLookup(const Vector<ASCIILiteral>& services, std::optional<audit_token_t> auditToken, OptionSet<Flags> flags) 395 398 { 396 return createHandlesForResources(services, Function<bool(const ASCIILiteral&, Handle&)>([auditToken, flags] (const ASCIILiteral& service, Handle& handle) { 397 if (!SandboxExtension::createHandleForMachLookup(service, auditToken, handle, flags)) { 398 ASSERT_NOT_REACHED(); 399 return false; 400 } 401 return true; 402 })); 403 } 404 405 bool SandboxExtension::createHandleForReadByAuditToken(const String& path, audit_token_t auditToken, Handle& handle) 406 { 399 return createHandlesForResources<ASCIILiteral>(services, [auditToken, flags] (const ASCIILiteral& service) -> std::optional<Handle> { 400 auto handle = SandboxExtension::createHandleForMachLookup(service, auditToken, flags); 401 ASSERT(handle); 402 return handle; 403 }); 404 } 405 406 auto SandboxExtension::createHandleForReadByAuditToken(const String& path, audit_token_t auditToken) -> std::optional<Handle> 407 { 408 Handle handle; 407 409 ASSERT(!handle.m_sandboxExtension); 408 410 … … 410 412 if (!handle.m_sandboxExtension) { 411 413 LOG_ERROR("Could not create a sandbox extension for '%s'", path.utf8().data()); 412 return false; 413 } 414 415 return true; 416 } 417 418 bool SandboxExtension::createHandleForIOKitClassExtension(ASCIILiteral ioKitClass, std::optional<audit_token_t> auditToken, Handle& handle, OptionSet<Flags> flags) 419 { 414 return std::nullopt; 415 } 416 417 return WTFMove(handle); 418 } 419 420 auto SandboxExtension::createHandleForIOKitClassExtension(ASCIILiteral ioKitClass, std::optional<audit_token_t> auditToken, OptionSet<Flags> flags) -> std::optional<Handle> 421 { 422 Handle handle; 420 423 ASSERT(!handle.m_sandboxExtension); 421 424 … … 423 426 if (!handle.m_sandboxExtension) { 424 427 LOG_ERROR("Could not create a sandbox extension for '%s'", ioKitClass.characters()); 425 return false;426 } 427 428 return true;428 return std::nullopt; 429 } 430 431 return WTFMove(handle); 429 432 } 430 433 431 434 SandboxExtension::HandleArray SandboxExtension::createHandlesForIOKitClassExtensions(const Vector<ASCIILiteral>& iokitClasses, std::optional<audit_token_t> auditToken, OptionSet<Flags> flags) 432 435 { 433 return createHandlesForResources(iokitClasses, Function<bool(const ASCIILiteral&, Handle&)>([auditToken, flags] (const ASCIILiteral& iokitClass, Handle& handle) { 434 if (!SandboxExtension::createHandleForIOKitClassExtension(iokitClass, auditToken, handle, flags)) { 435 ASSERT_NOT_REACHED(); 436 return false; 437 } 438 return true; 439 })); 436 return createHandlesForResources<ASCIILiteral>(iokitClasses, [auditToken, flags] (const ASCIILiteral& iokitClass) { 437 auto handle = SandboxExtension::createHandleForIOKitClassExtension(iokitClass, auditToken, flags); 438 ASSERT(handle); 439 return handle; 440 }); 440 441 } 441 442 -
trunk/Source/WebKit/Shared/SandboxExtension.h
r278253 r281032 113 113 114 114 static RefPtr<SandboxExtension> create(Handle&&); 115 static bool createHandle(const String& path, Type, Handle&);115 static std::optional<Handle> createHandle(const String& path, Type); 116 116 static SandboxExtension::HandleArray createReadOnlyHandlesForFiles(ASCIILiteral logLabel, const Vector<String>& paths); 117 static bool createHandleWithoutResolvingPath(const String& path, Type, Handle&);118 static bool createHandleForReadWriteDirectory(const String& path, Handle&); // Will attempt to create the directory.119 static String createHandleForTemporaryFile(const String& prefix, Type, Handle&);120 static bool createHandleForGenericExtension(ASCIILiteral extensionClass, Handle&);117 static std::optional<Handle> createHandleWithoutResolvingPath(const String& path, Type); 118 static std::optional<Handle> createHandleForReadWriteDirectory(const String& path); // Will attempt to create the directory. 119 static std::optional<std::pair<Handle, String>> createHandleForTemporaryFile(const String& prefix, Type); 120 static std::optional<Handle> createHandleForGenericExtension(ASCIILiteral extensionClass); 121 121 #if HAVE(AUDIT_TOKEN) 122 static bool createHandleForMachLookup(ASCIILiteral service, std::optional<audit_token_t>, Handle&, OptionSet<Flags> = Flags::Default);122 static std::optional<Handle> createHandleForMachLookup(ASCIILiteral service, std::optional<audit_token_t>, OptionSet<Flags> = Flags::Default); 123 123 static HandleArray createHandlesForMachLookup(const Vector<ASCIILiteral>& services, std::optional<audit_token_t>, OptionSet<Flags> = Flags::Default); 124 static bool createHandleForReadByAuditToken(const String& path, audit_token_t, Handle&);125 static bool createHandleForIOKitClassExtension(ASCIILiteral iokitClass, std::optional<audit_token_t>, Handle&, OptionSet<Flags> = Flags::Default);124 static std::optional<Handle> createHandleForReadByAuditToken(const String& path, audit_token_t); 125 static std::optional<Handle> createHandleForIOKitClassExtension(ASCIILiteral iokitClass, std::optional<audit_token_t>, OptionSet<Flags> = Flags::Default); 126 126 static HandleArray createHandlesForIOKitClassExtensions(const Vector<ASCIILiteral>& iokitClasses, std::optional<audit_token_t>, OptionSet<Flags> = Flags::Default); 127 127 #endif … … 163 163 inline auto SandboxExtension::HandleArray::decode(IPC::Decoder&) -> std::optional<HandleArray> { return { HandleArray() }; } 164 164 inline RefPtr<SandboxExtension> SandboxExtension::create(Handle&&) { return nullptr; } 165 inline bool SandboxExtension::createHandle(const String&, Type, Handle&) { return true; }165 inline auto SandboxExtension::createHandle(const String&, Type) -> std::optional<Handle> { return {{ }}; } 166 166 inline SandboxExtension::HandleArray SandboxExtension::createReadOnlyHandlesForFiles(ASCIILiteral, const Vector<String>&) { return { }; } 167 inline bool SandboxExtension::createHandleWithoutResolvingPath(const String&, Type, Handle&) { return true; }168 inline bool SandboxExtension::createHandleForReadWriteDirectory(const String&, Handle&) { return true; }169 inline String SandboxExtension::createHandleForTemporaryFile(const String& /*prefix*/, Type, Handle&) {return String();}170 inline bool SandboxExtension::createHandleForGenericExtension(ASCIILiteral /*extensionClass*/, Handle&) { return true; }167 inline auto SandboxExtension::createHandleWithoutResolvingPath(const String&, Type) -> std::optional<Handle> { return {{ }}; } 168 inline auto SandboxExtension::createHandleForReadWriteDirectory(const String&) -> std::optional<Handle> { return {{ }}; } 169 inline auto SandboxExtension::createHandleForTemporaryFile(const String& /*prefix*/, Type) -> std::optional<std::pair<Handle, String>> { return std::optional<std::pair<Handle, String>> { std::pair<Handle, String> { Handle { }, String { } } }; } 170 inline auto SandboxExtension::createHandleForGenericExtension(ASCIILiteral /*extensionClass*/) -> std::optional<Handle> { return {{ }}; } 171 171 inline SandboxExtension::~SandboxExtension() { } 172 172 inline bool SandboxExtension::revoke() { return true; } -
trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
r280850 r281032 178 178 #if PLATFORM(IOS) 179 179 if (!process.hasManagedSessionSandboxAccess() && [getWebFilterEvaluatorClass() isManagedSession]) { 180 SandboxExtension::Handle handle; 181 SandboxExtension::createHandleForMachLookup("com.apple.uikit.viewservice.com.apple.WebContentFilter.remoteUI"_s, std::nullopt, handle); 182 loadParameters.contentFilterExtensionHandle = WTFMove(handle); 183 184 SandboxExtension::Handle frontboardServiceExtensionHandle; 185 if (SandboxExtension::createHandleForMachLookup("com.apple.frontboard.systemappservices"_s, std::nullopt, frontboardServiceExtensionHandle)) 186 loadParameters.frontboardServiceExtensionHandle = WTFMove(frontboardServiceExtensionHandle); 180 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.uikit.viewservice.com.apple.WebContentFilter.remoteUI"_s, std::nullopt)) 181 loadParameters.contentFilterExtensionHandle = WTFMove(*handle); 182 183 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.frontboard.systemappservices"_s, std::nullopt)) 184 loadParameters.frontboardServiceExtensionHandle = WTFMove(*handle); 187 185 188 186 process.markHasManagedSessionSandboxAccess(); … … 200 198 if ([[NSFileManager defaultManager] fileExistsAtPath:files[0] isDirectory:&isDirectory] && !isDirectory) { 201 199 ASSERT(process().connection() && process().connection()->getAuditToken()); 202 if (process().connection() && process().connection()->getAuditToken()) 203 SandboxExtension::createHandleForReadByAuditToken("/", *(process().connection()->getAuditToken()), fileReadHandle); 204 else 205 SandboxExtension::createHandle("/", SandboxExtension::Type::ReadOnly, fileReadHandle); 200 if (process().connection() && process().connection()->getAuditToken()) { 201 if (auto handle = SandboxExtension::createHandleForReadByAuditToken("/", *(process().connection()->getAuditToken()))) 202 fileReadHandle = WTFMove(*handle); 203 } else if (auto handle = SandboxExtension::createHandle("/", SandboxExtension::Type::ReadOnly)) 204 fileReadHandle = WTFMove(*handle); 206 205 willAcquireUniversalFileReadSandboxExtension(m_process); 207 206 } … … 213 212 if (![[NSFileManager defaultManager] fileExistsAtPath:file]) 214 213 continue; 215 SandboxExtension::createHandle(file, SandboxExtension::Type::ReadOnly, fileUploadHandles[i]); 214 if (auto handle = SandboxExtension::createHandle(file, SandboxExtension::Type::ReadOnly)) 215 fileUploadHandles[i] = WTFMove(*handle); 216 216 } 217 217 } … … 686 686 { 687 687 SandboxExtension::Handle mobileAssetHandleV2; 688 SandboxExtension::createHandleForMachLookup("com.apple.mobileassetd.v2"_s, std::nullopt, mobileAssetHandleV2); 688 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.mobileassetd.v2"_s, std::nullopt)) 689 mobileAssetHandleV2 = WTFMove(*handle); 689 690 process().send(Messages::WebProcess::GrantAccessToAssetServices(mobileAssetHandleV2), 0); 690 691 } … … 703 704 { 704 705 SandboxExtension::Handle fontMachExtensionHandle; 705 SandboxExtension::createHandleForMachLookup("com.apple.fonts"_s, std::nullopt, fontMachExtensionHandle); 706 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.fonts"_s, std::nullopt)) 707 fontMachExtensionHandle = WTFMove(*handle); 706 708 return fontMachExtensionHandle; 707 709 } -
trunk/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm
r278244 r281032 179 179 if (![[NSFileManager defaultManager] fileExistsAtPath:filename]) 180 180 continue; 181 SandboxExtension::createHandle(filename, SandboxExtension::Type::ReadOnly, sandboxExtensions[i]); 181 if (auto handle = SandboxExtension::createHandle(filename, SandboxExtension::Type::ReadOnly)) 182 sandboxExtensions[i] = WTFMove(*handle); 182 183 } 183 184 #endif -
trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
r280841 r281032 329 329 // FIXME: This should really be configurable; we shouldn't just blindly allow read access to the UI process bundle. 330 330 parameters.uiProcessBundleResourcePath = m_resolvedPaths.uiProcessBundleResourcePath; 331 SandboxExtension::createHandleWithoutResolvingPath(parameters.uiProcessBundleResourcePath, SandboxExtension::Type::ReadOnly, parameters.uiProcessBundleResourcePathExtensionHandle); 331 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(parameters.uiProcessBundleResourcePath, SandboxExtension::Type::ReadOnly)) 332 parameters.uiProcessBundleResourcePathExtensionHandle = WTFMove(*handle); 332 333 333 334 parameters.uiProcessBundleIdentifier = applicationBundleIdentifier(); … … 337 338 338 339 #if PLATFORM(IOS_FAMILY) 339 if (!m_resolvedPaths.cookieStorageDirectory.isEmpty()) 340 SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.cookieStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.cookieStorageDirectoryExtensionHandle); 341 342 if (!m_resolvedPaths.containerCachesDirectory.isEmpty()) 343 SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.containerCachesDirectory, SandboxExtension::Type::ReadWrite, parameters.containerCachesDirectoryExtensionHandle); 344 345 if (!m_resolvedPaths.containerTemporaryDirectory.isEmpty()) 346 SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.containerTemporaryDirectory, SandboxExtension::Type::ReadWrite, parameters.containerTemporaryDirectoryExtensionHandle); 340 if (!m_resolvedPaths.cookieStorageDirectory.isEmpty()) { 341 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.cookieStorageDirectory, SandboxExtension::Type::ReadWrite)) 342 parameters.cookieStorageDirectoryExtensionHandle = WTFMove(*handle); 343 } 344 345 if (!m_resolvedPaths.containerCachesDirectory.isEmpty()) { 346 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.containerCachesDirectory, SandboxExtension::Type::ReadWrite)) 347 parameters.containerCachesDirectoryExtensionHandle = WTFMove(*handle); 348 } 349 350 if (!m_resolvedPaths.containerTemporaryDirectory.isEmpty()) { 351 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.containerTemporaryDirectory, SandboxExtension::Type::ReadWrite)) 352 parameters.containerTemporaryDirectoryExtensionHandle = WTFMove(*handle); 353 } 347 354 #endif 348 355 #if PLATFORM(COCOA) && ENABLE(REMOTE_INSPECTOR) 349 356 if (WebProcessProxy::shouldEnableRemoteInspector()) { 350 SandboxExtension::Handle enableRemoteWebInspectorExtensionHandle; 351 if (SandboxExtension::createHandleForMachLookup("com.apple.webinspector"_s, std::nullopt, enableRemoteWebInspectorExtensionHandle)) 352 parameters.enableRemoteWebInspectorExtensionHandle = WTFMove(enableRemoteWebInspectorExtensionHandle); 357 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.webinspector"_s, std::nullopt)) 358 parameters.enableRemoteWebInspectorExtensionHandle = WTFMove(*handle); 353 359 } 354 360 #endif … … 396 402 #if PLATFORM(MAC) || PLATFORM(MACCATALYST) 397 403 // FIXME: Remove this and related parameter when <rdar://problem/29448368> is fixed. 398 if (isSafari && mediaDevicesEnabled && !m_defaultPageGroup->preferences().captureAudioInUIProcessEnabled() && !m_defaultPageGroup->preferences().captureAudioInGPUProcessEnabled()) 399 SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s, parameters.audioCaptureExtensionHandle); 404 if (isSafari && mediaDevicesEnabled && !m_defaultPageGroup->preferences().captureAudioInUIProcessEnabled() && !m_defaultPageGroup->preferences().captureAudioInGPUProcessEnabled()) { 405 if (auto handle = SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s)) 406 parameters.audioCaptureExtensionHandle = WTFMove(*handle); 407 } 400 408 #else 401 409 UNUSED_PARAM(mediaDevicesEnabled); … … 433 441 434 442 if (requiresContainerManagerAccess()) { 435 SandboxExtension::Handle handle; 436 SandboxExtension::createHandleForMachLookup("com.apple.containermanagerd"_s, std::nullopt, handle); 437 parameters.containerManagerExtensionHandle = WTFMove(handle); 443 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.containermanagerd"_s, std::nullopt)) 444 parameters.containerManagerExtensionHandle = WTFMove(*handle); 438 445 } 439 446 … … 454 461 #if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST) 455 462 if (!_MGCacheValid()) { 456 SandboxExtension::Handle handle; 457 SandboxExtension::createHandleForMachLookup("com.apple.mobilegestalt.xpc"_s, std::nullopt, handle); 458 parameters.mobileGestaltExtensionHandle = WTFMove(handle); 463 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.mobilegestalt.xpc"_s, std::nullopt)) 464 parameters.mobileGestaltExtensionHandle = WTFMove(*handle); 459 465 } 460 466 #endif 461 467 462 468 #if PLATFORM(MAC) 463 SandboxExtension::Handle launchServicesExtensionHandle; 464 SandboxExtension::createHandleForMachLookup("com.apple.coreservices.launchservicesd"_s, std::nullopt, launchServicesExtensionHandle); 465 parameters.launchServicesExtensionHandle = WTFMove(launchServicesExtensionHandle); 469 if (auto launchServicesExtensionHandle = SandboxExtension::createHandleForMachLookup("com.apple.coreservices.launchservicesd"_s, std::nullopt)) 470 parameters.launchServicesExtensionHandle = WTFMove(*launchServicesExtensionHandle); 466 471 #endif 467 472 -
trunk/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp
r270638 r281032 108 108 109 109 SandboxExtension::Handle handle; 110 bool createdSandboxExtension = SandboxExtension::createHandle(URL.fileSystemPath(), SandboxExtension::Type::ReadWrite, handle); 111 ASSERT_UNUSED(createdSandboxExtension, createdSandboxExtension); 110 if (auto createdHandle = SandboxExtension::createHandle(URL.fileSystemPath(), SandboxExtension::Type::ReadWrite)) 111 handle = WTFMove(*createdHandle); 112 else 113 ASSERT_NOT_REACHED(); 114 112 115 m_dataStore->networkProcess().send(Messages::NetworkProcess::PublishDownloadProgress(m_downloadID, URL, handle), 0); 113 116 } … … 164 167 m_client->decideDestinationWithSuggestedFilename(*this, response, ResourceResponseBase::sanitizeSuggestedFilename(suggestedFilename), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (AllowOverwrite allowOverwrite, String destination) mutable { 165 168 SandboxExtension::Handle sandboxExtensionHandle; 166 if (!destination.isNull()) 167 SandboxExtension::createHandle(destination, SandboxExtension::Type::ReadWrite, sandboxExtensionHandle); 169 if (!destination.isNull()) { 170 if (auto handle = SandboxExtension::createHandle(destination, SandboxExtension::Type::ReadWrite)) 171 sandboxExtensionHandle = WTFMove(*handle); 172 } 168 173 169 174 setDestinationFilename(destination); -
trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
r280795 r281032 144 144 // FIXME: Remove this and related parameter when <rdar://problem/29448368> is fixed. 145 145 if (MacApplication::isSafari()) { 146 SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s, parameters.microphoneSandboxExtensionHandle); 146 if (auto handle = SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s)) 147 parameters.microphoneSandboxExtensionHandle = WTFMove(*handle); 147 148 m_hasSentMicrophoneSandboxExtension = true; 148 149 } … … 156 157 auto containerTemporaryDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(WebProcessPool::containerTemporaryDirectory()); 157 158 158 if (!containerCachesDirectory.isEmpty()) 159 SandboxExtension::createHandleWithoutResolvingPath(containerCachesDirectory, SandboxExtension::Type::ReadWrite, parameters.containerCachesDirectoryExtensionHandle); 160 161 if (!containerTemporaryDirectory.isEmpty()) 162 SandboxExtension::createHandleWithoutResolvingPath(containerTemporaryDirectory, SandboxExtension::Type::ReadWrite, parameters.containerTemporaryDirectoryExtensionHandle); 159 if (!containerCachesDirectory.isEmpty()) { 160 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(containerCachesDirectory, SandboxExtension::Type::ReadWrite)) 161 parameters.containerCachesDirectoryExtensionHandle = WTFMove(*handle); 162 } 163 164 if (!containerTemporaryDirectory.isEmpty()) { 165 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(containerTemporaryDirectory, SandboxExtension::Type::ReadWrite)) 166 parameters.containerTemporaryDirectoryExtensionHandle = WTFMove(*handle); 167 } 163 168 #endif 164 169 #if PLATFORM(IOS_FAMILY) … … 200 205 static inline bool addCameraSandboxExtensions(Vector<SandboxExtension::Handle>& extensions) 201 206 { 202 SandboxExtension::Handle sandboxExtensionHandle;203 if (! SandboxExtension::createHandleForGenericExtension("com.apple.webkit.camera"_s, sandboxExtensionHandle)) {207 auto sandboxExtensionHandle = SandboxExtension::createHandleForGenericExtension("com.apple.webkit.camera"_s); 208 if (!sandboxExtensionHandle) { 204 209 RELEASE_LOG_ERROR(WebRTC, "Unable to create com.apple.webkit.camera sandbox extension"); 205 210 return false; … … 207 212 #if HAVE(AUDIT_TOKEN) 208 213 if (shouldCreateAppleCameraServiceSandboxExtension()) { 209 SandboxExtension::Handle appleCameraServicePathSandboxExtensionHandle;210 if (! SandboxExtension::createHandleForMachLookup("com.apple.applecamerad"_s, std::nullopt, appleCameraServicePathSandboxExtensionHandle)) {214 auto appleCameraServicePathSandboxExtensionHandle = SandboxExtension::createHandleForMachLookup("com.apple.applecamerad"_s, std::nullopt); 215 if (!appleCameraServicePathSandboxExtensionHandle) { 211 216 RELEASE_LOG_ERROR(WebRTC, "Unable to create com.apple.applecamerad sandbox extension"); 212 217 return false; 213 218 } 214 219 #if HAVE(ADDITIONAL_APPLE_CAMERA_SERVICE) 215 SandboxExtension::Handle additionalAppleCameraServicePathSandboxExtensionHandle;216 if (! SandboxExtension::createHandleForMachLookup("com.apple.appleh13camerad"_s, std::nullopt, additionalAppleCameraServicePathSandboxExtensionHandle)) {220 auto additionalAppleCameraServicePathSandboxExtensionHandle = SandboxExtension::createHandleForMachLookup("com.apple.appleh13camerad"_s, std::nullopt); 221 if (!additionalAppleCameraServicePathSandboxExtensionHandle) { 217 222 RELEASE_LOG_ERROR(WebRTC, "Unable to create com.apple.appleh13camerad sandbox extension"); 218 223 return false; 219 224 } 220 extensions.append(WTFMove( additionalAppleCameraServicePathSandboxExtensionHandle));221 #endif 222 extensions.append(WTFMove( appleCameraServicePathSandboxExtensionHandle));225 extensions.append(WTFMove(*additionalAppleCameraServicePathSandboxExtensionHandle)); 226 #endif 227 extensions.append(WTFMove(*appleCameraServicePathSandboxExtensionHandle)); 223 228 } 224 229 #endif // HAVE(AUDIT_TOKEN) 225 230 226 extensions.append(WTFMove( sandboxExtensionHandle));231 extensions.append(WTFMove(*sandboxExtensionHandle)); 227 232 return true; 228 233 } … … 230 235 static inline bool addMicrophoneSandboxExtension(Vector<SandboxExtension::Handle>& extensions) 231 236 { 232 SandboxExtension::Handle sandboxExtensionHandle;233 if (! SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s, sandboxExtensionHandle)) {237 auto sandboxExtensionHandle = SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s); 238 if (!sandboxExtensionHandle) { 234 239 RELEASE_LOG_ERROR(WebRTC, "Unable to create com.apple.webkit.microphone sandbox extension"); 235 240 return false; 236 241 } 237 extensions.append(WTFMove( sandboxExtensionHandle));242 extensions.append(WTFMove(*sandboxExtensionHandle)); 238 243 return true; 239 244 } … … 242 247 static inline bool addTCCDSandboxExtension(Vector<SandboxExtension::Handle>& extensions) 243 248 { 244 SandboxExtension::Handle sandboxExtensionHandle;245 if (! SandboxExtension::createHandleForMachLookup("com.apple.tccd"_s, std::nullopt, sandboxExtensionHandle)) {249 auto handle = SandboxExtension::createHandleForMachLookup("com.apple.tccd"_s, std::nullopt); 250 if (!handle) { 246 251 RELEASE_LOG_ERROR(WebRTC, "Unable to create com.apple.tccd sandbox extension"); 247 252 return false; 248 253 } 249 extensions.append(WTFMove( sandboxExtensionHandle));254 extensions.append(WTFMove(*handle)); 250 255 return true; 251 256 } … … 455 460 parameters.mediaCacheDirectory = store.resolvedMediaCacheDirectory(); 456 461 SandboxExtension::Handle mediaCacheDirectoryExtensionHandle; 457 if (!parameters.mediaCacheDirectory.isEmpty()) 458 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaCacheDirectorySandboxExtensionHandle); 462 if (!parameters.mediaCacheDirectory.isEmpty()) { 463 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaCacheDirectory, SandboxExtension::Type::ReadWrite)) 464 parameters.mediaCacheDirectorySandboxExtensionHandle = WTFMove(*handle); 465 } 459 466 460 467 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) 461 468 parameters.mediaKeysStorageDirectory = store.resolvedMediaKeysDirectory(); 462 469 SandboxExtension::Handle mediaKeysStorageDirectorySandboxExtensionHandle; 463 if (!parameters.mediaKeysStorageDirectory.isEmpty()) 464 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeysStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaKeysStorageDirectorySandboxExtensionHandle); 470 if (!parameters.mediaKeysStorageDirectory.isEmpty()) { 471 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeysStorageDirectory, SandboxExtension::Type::ReadWrite)) 472 parameters.mediaKeysStorageDirectorySandboxExtensionHandle = WTFMove(*handle); 473 } 465 474 #endif 466 475 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r280611 r281032 151 151 parameters.urlSchemesRegisteredForCustomProtocols.append(scheme); 152 152 #if PLATFORM(IOS_FAMILY) 153 if (String cookieStorageDirectory = WebProcessPool::cookieStorageDirectory(); !cookieStorageDirectory.isEmpty()) 154 SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle); 155 if (String containerCachesDirectory = WebProcessPool::networkingCachesDirectory(); !containerCachesDirectory.isEmpty()) 156 SandboxExtension::createHandleForReadWriteDirectory(containerCachesDirectory, parameters.containerCachesDirectoryExtensionHandle); 157 if (String parentBundleDirectory = WebProcessPool::parentBundleDirectory(); !parentBundleDirectory.isEmpty()) 158 SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly, parameters.parentBundleDirectoryExtensionHandle); 159 SandboxExtension::createHandleForTemporaryFile(emptyString(), SandboxExtension::Type::ReadWrite, parameters.tempDirectoryExtensionHandle); 153 if (String cookieStorageDirectory = WebProcessPool::cookieStorageDirectory(); !cookieStorageDirectory.isEmpty()) { 154 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory)) 155 parameters.cookieStorageDirectoryExtensionHandle = WTFMove(*handle); 156 } 157 if (String containerCachesDirectory = WebProcessPool::networkingCachesDirectory(); !containerCachesDirectory.isEmpty()) { 158 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(containerCachesDirectory)) 159 parameters.containerCachesDirectoryExtensionHandle = WTFMove(*handle); 160 } 161 if (String parentBundleDirectory = WebProcessPool::parentBundleDirectory(); !parentBundleDirectory.isEmpty()) { 162 if (auto handle = SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly)) 163 parameters.parentBundleDirectoryExtensionHandle = WTFMove(*handle); 164 } 165 if (auto handleAndFilePath = SandboxExtension::createHandleForTemporaryFile(emptyString(), SandboxExtension::Type::ReadWrite)) 166 parameters.tempDirectoryExtensionHandle = WTFMove(handleAndFilePath->first); 160 167 #endif 161 168 … … 1302 1309 auto& cacheStorageDirectory = store->configuration().cacheStorageDirectory(); 1303 1310 SandboxExtension::Handle cacheStorageDirectoryExtensionHandle; 1304 if (!cacheStorageDirectory.isEmpty()) 1305 SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory, cacheStorageDirectoryExtensionHandle); 1311 if (!cacheStorageDirectory.isEmpty()) { 1312 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory)) 1313 cacheStorageDirectoryExtensionHandle = WTFMove(*handle); 1314 } 1306 1315 1307 1316 send(Messages::NetworkProcess::SetCacheStorageParameters { sessionID, cacheStorageDirectory, cacheStorageDirectoryExtensionHandle }, 0); -
trunk/Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSourceManager.cpp
r270986 r281032 50 50 if (m_sourcesNeedingSandboxExtension.size() == 1) { 51 51 SandboxExtension::Handle handleForTCCD; 52 SandboxExtension::createHandleForMachLookup("com.apple.tccd"_s, m_connection->getAuditToken(), handleForTCCD); 52 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.tccd"_s, m_connection->getAuditToken())) 53 handleForTCCD = WTFMove(*handle); 53 54 SandboxExtension::Handle handleForMicrophone; 54 SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s, handleForMicrophone); 55 if (auto handle = SandboxExtension::createHandleForGenericExtension("com.apple.webkit.microphone"_s)) 56 handleForMicrophone = WTFMove(*handle); 55 57 send(Messages::SpeechRecognitionRealtimeMediaSourceManager::GrantSandboxExtensions(handleForTCCD, handleForMicrophone)); 56 58 } -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
r278253 r281032 293 293 #if PLATFORM(COCOA) 294 294 if (!m_hasCreatedSandboxExtensionForTCCD && doesPageNeedTCCD(m_page)) { 295 SandboxExtension::createHandleForMachLookup("com.apple.tccd"_s, m_page.process().connection()->getAuditToken(), handle); 295 if (auto createdHandle = SandboxExtension::createHandleForMachLookup("com.apple.tccd"_s, m_page.process().connection()->getAuditToken())) 296 handle = WTFMove(*createdHandle); 296 297 m_hasCreatedSandboxExtensionForTCCD = true; 297 298 } -
trunk/Source/WebKit/UIProcess/UserMediaProcessManager.cpp
r278185 r281032 101 101 ids.reserveInitialCapacity(extensionCount); 102 102 103 if (needsAudioSandboxExtension && SandboxExtension::createHandleForGenericExtension(audioExtensionPath, handles[--extensionCount])) 104 ids.uncheckedAppend(audioExtensionPath); 105 106 if (needsVideoSandboxExtension && SandboxExtension::createHandleForGenericExtension(videoExtensionPath, handles[--extensionCount])) 107 ids.uncheckedAppend(videoExtensionPath); 103 if (needsAudioSandboxExtension) { 104 if (auto handle = SandboxExtension::createHandleForGenericExtension(audioExtensionPath)) { 105 handles[--extensionCount] = WTFMove(*handle); 106 ids.uncheckedAppend(audioExtensionPath); 107 } 108 } 109 110 if (needsVideoSandboxExtension) { 111 if (auto handle = SandboxExtension::createHandleForGenericExtension(videoExtensionPath)) { 112 handles[--extensionCount] = WTFMove(*handle); 113 ids.uncheckedAppend(videoExtensionPath); 114 } 115 } 108 116 109 117 if (needsAppleCameraSandboxExtension) { 110 if (SandboxExtension::createHandleForMachLookup(appleCameraServicePath, std::nullopt, handles[--extensionCount])) 118 if (auto handle = SandboxExtension::createHandleForMachLookup(appleCameraServicePath, std::nullopt)) { 119 handles[--extensionCount] = WTFMove(*handle); 111 120 ids.uncheckedAppend(appleCameraServicePath); 121 } 112 122 #if HAVE(ADDITIONAL_APPLE_CAMERA_SERVICE) 113 if (SandboxExtension::createHandleForMachLookup(additionalAppleCameraServicePath, std::nullopt, handles[--extensionCount])) 123 if (auto handle = SandboxExtension::createHandleForMachLookup(additionalAppleCameraServicePath, std::nullopt)) { 124 handles[--extensionCount] = WTFMove(*handle); 114 125 ids.uncheckedAppend(additionalAppleCameraServicePath); 126 } 115 127 #endif 116 128 } -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r280758 r281032 1266 1266 #if HAVE(AUDIT_TOKEN) 1267 1267 ASSERT(process.connection() && process.connection()->getAuditToken()); 1268 if (process.connection() && process.connection()->getAuditToken()) 1269 createdExtension = SandboxExtension::createHandleForReadByAuditToken(resourceDirectoryURL.fileSystemPath(), *(process.connection()->getAuditToken()), sandboxExtensionHandle); 1270 else 1271 #endif 1272 createdExtension = SandboxExtension::createHandle(resourceDirectoryURL.fileSystemPath(), SandboxExtension::Type::ReadOnly, sandboxExtensionHandle); 1268 if (process.connection() && process.connection()->getAuditToken()) { 1269 if (auto handle = SandboxExtension::createHandleForReadByAuditToken(resourceDirectoryURL.fileSystemPath(), *(process.connection()->getAuditToken()))) { 1270 sandboxExtensionHandle = WTFMove(*handle); 1271 createdExtension = true; 1272 } 1273 } else 1274 #endif 1275 { 1276 if (auto handle = SandboxExtension::createHandle(resourceDirectoryURL.fileSystemPath(), SandboxExtension::Type::ReadOnly)) { 1277 sandboxExtensionHandle = WTFMove(*handle); 1278 createdExtension = true; 1279 } 1280 } 1273 1281 1274 1282 if (createdExtension) { … … 1287 1295 #if HAVE(AUDIT_TOKEN) 1288 1296 ASSERT(process.connection() && process.connection()->getAuditToken()); 1289 if (process.connection() && process.connection()->getAuditToken()) 1290 createdExtension = SandboxExtension::createHandleForReadByAuditToken("/", *(process.connection()->getAuditToken()), sandboxExtensionHandle); 1291 else 1292 #endif 1293 createdExtension = SandboxExtension::createHandle("/", SandboxExtension::Type::ReadOnly, sandboxExtensionHandle); 1297 if (process.connection() && process.connection()->getAuditToken()) { 1298 if (auto handle = SandboxExtension::createHandleForReadByAuditToken("/", *(process.connection()->getAuditToken()))) { 1299 createdExtension = true; 1300 sandboxExtensionHandle = WTFMove(*handle); 1301 } 1302 } else 1303 #endif 1304 { 1305 if (auto handle = SandboxExtension::createHandle("/", SandboxExtension::Type::ReadOnly)) { 1306 createdExtension = true; 1307 sandboxExtensionHandle = WTFMove(*handle); 1308 } 1309 } 1294 1310 1295 1311 if (createdExtension) { … … 1309 1325 return; 1310 1326 #if HAVE(AUDIT_TOKEN) 1311 if (process.connection() && process.connection()->getAuditToken()) 1312 createdExtension = SandboxExtension::createHandleForReadByAuditToken(basePath, *(process.connection()->getAuditToken()), sandboxExtensionHandle); 1313 else 1314 #endif 1315 createdExtension = SandboxExtension::createHandle(basePath, SandboxExtension::Type::ReadOnly, sandboxExtensionHandle); 1327 if (process.connection() && process.connection()->getAuditToken()) { 1328 if (auto handle = SandboxExtension::createHandleForReadByAuditToken(basePath, *(process.connection()->getAuditToken()))) { 1329 sandboxExtensionHandle = WTFMove(*handle); 1330 createdExtension = true; 1331 } 1332 } else 1333 #endif 1334 { 1335 if (auto handle = SandboxExtension::createHandle(basePath, SandboxExtension::Type::ReadOnly)) { 1336 sandboxExtensionHandle = WTFMove(*handle); 1337 createdExtension = true; 1338 } 1339 } 1316 1340 1317 1341 if (createdExtension) … … 7002 7026 SandboxExtension::Handle frontboardServicesSandboxExtension, iconServicesSandboxExtension; 7003 7027 #if HAVE(FRONTBOARD_SYSTEM_APP_SERVICES) 7004 SandboxExtension::createHandleForMachLookup("com.apple.frontboard.systemappservices"_s, std::nullopt, frontboardServicesSandboxExtension); 7005 #endif 7006 SandboxExtension::createHandleForMachLookup("com.apple.iconservices"_s, std::nullopt, iconServicesSandboxExtension); 7028 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.frontboard.systemappservices"_s, std::nullopt)) 7029 frontboardServicesSandboxExtension = WTFMove(*handle); 7030 #endif 7031 if (auto handle = SandboxExtension::createHandleForMachLookup("com.apple.iconservices"_s, std::nullopt)) 7032 iconServicesSandboxExtension = WTFMove(*handle); 7007 7033 7008 7034 send(Messages::WebPage::DidChooseFilesForOpenPanelWithDisplayStringAndIcon(fileURLs, displayString, iconData ? iconData->dataReference() : IPC::DataReference(), frontboardServicesSandboxExtension, iconServicesSandboxExtension)); -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r280811 r281032 674 674 String applicationCacheDirectory = websiteDataStore.resolvedApplicationCacheDirectory(); 675 675 SandboxExtension::Handle applicationCacheDirectoryExtensionHandle; 676 if (!applicationCacheDirectory.isEmpty()) 677 SandboxExtension::createHandleWithoutResolvingPath(applicationCacheDirectory, SandboxExtension::Type::ReadWrite, applicationCacheDirectoryExtensionHandle); 676 if (!applicationCacheDirectory.isEmpty()) { 677 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(applicationCacheDirectory, SandboxExtension::Type::ReadWrite)) 678 applicationCacheDirectoryExtensionHandle = WTFMove(*handle); 679 } 678 680 679 681 String applicationCacheFlatFileSubdirectoryName = websiteDataStore.applicationCacheFlatFileSubdirectoryName(); … … 681 683 String mediaCacheDirectory = websiteDataStore.resolvedMediaCacheDirectory(); 682 684 SandboxExtension::Handle mediaCacheDirectoryExtensionHandle; 683 if (!mediaCacheDirectory.isEmpty()) 684 SandboxExtension::createHandleWithoutResolvingPath(mediaCacheDirectory, SandboxExtension::Type::ReadWrite, mediaCacheDirectoryExtensionHandle); 685 if (!mediaCacheDirectory.isEmpty()) { 686 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(mediaCacheDirectory, SandboxExtension::Type::ReadWrite)) 687 mediaCacheDirectoryExtensionHandle = WTFMove(*handle); 688 } 685 689 686 690 String mediaKeyStorageDirectory = websiteDataStore.resolvedMediaKeysDirectory(); 687 691 SandboxExtension::Handle mediaKeyStorageDirectoryExtensionHandle; 688 if (!mediaKeyStorageDirectory.isEmpty()) 689 SandboxExtension::createHandleWithoutResolvingPath(mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite, mediaKeyStorageDirectoryExtensionHandle); 692 if (!mediaKeyStorageDirectory.isEmpty()) { 693 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite)) 694 mediaKeyStorageDirectoryExtensionHandle = WTFMove(*handle); 695 } 690 696 691 697 String javaScriptConfigurationDirectory; … … 696 702 697 703 SandboxExtension::Handle javaScriptConfigurationDirectoryExtensionHandle; 698 if (!javaScriptConfigurationDirectory.isEmpty()) 699 SandboxExtension::createHandleWithoutResolvingPath(javaScriptConfigurationDirectory, SandboxExtension::Type::ReadWrite, javaScriptConfigurationDirectoryExtensionHandle); 704 if (!javaScriptConfigurationDirectory.isEmpty()) { 705 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(javaScriptConfigurationDirectory, SandboxExtension::Type::ReadWrite)) 706 javaScriptConfigurationDirectoryExtensionHandle = WTFMove(*handle); 707 } 700 708 701 709 #if HAVE(ARKIT_INLINE_PREVIEW) 702 710 auto modelElementCacheDirectory = websiteDataStore.resolvedModelElementCacheDirectory(); 703 711 SandboxExtension::Handle modelElementCacheDirectoryExtensionHandle; 704 if (!modelElementCacheDirectory.isEmpty()) 705 SandboxExtension::createHandleWithoutResolvingPath(modelElementCacheDirectory, SandboxExtension::Type::ReadWrite, modelElementCacheDirectoryExtensionHandle); 712 if (!modelElementCacheDirectory.isEmpty()) { 713 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(modelElementCacheDirectory, SandboxExtension::Type::ReadWrite)) 714 modelElementCacheDirectoryExtensionHandle = WTFMove(*handle); 715 } 706 716 #endif 707 717 … … 743 753 744 754 parameters.injectedBundlePath = m_resolvedPaths.injectedBundlePath; 745 if (!parameters.injectedBundlePath.isEmpty()) 746 SandboxExtension::createHandleWithoutResolvingPath(parameters.injectedBundlePath, SandboxExtension::Type::ReadOnly, parameters.injectedBundlePathExtensionHandle); 755 if (!parameters.injectedBundlePath.isEmpty()) { 756 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(parameters.injectedBundlePath, SandboxExtension::Type::ReadOnly)) 757 parameters.injectedBundlePathExtensionHandle = WTFMove(*handle); 758 } 747 759 748 760 parameters.additionalSandboxExtensionHandles.allocate(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size()); 749 for (size_t i = 0, size = m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size(); i < size; ++i) 750 SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths[i], SandboxExtension::Type::ReadOnly, parameters.additionalSandboxExtensionHandles[i]); 761 for (size_t i = 0, size = m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size(); i < size; ++i) { 762 if (auto handle = SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths[i], SandboxExtension::Type::ReadOnly)) 763 parameters.additionalSandboxExtensionHandles[i] = WTFMove(*handle); 764 } 751 765 752 766 #if PLATFORM(IOS_FAMILY) … … 902 916 WallTime now = WallTime::now(); 903 917 auto sampleLogFilePath = makeString("WebProcess", static_cast<unsigned long long>(now.secondsSinceEpoch().seconds()), "pid", process.processIdentifier()); 904 sampleLogFilePath = SandboxExtension::createHandleForTemporaryFile(sampleLogFilePath, SandboxExtension::Type::ReadWrite, sampleLogSandboxHandle); 918 if (auto handleAndFilePath = SandboxExtension::createHandleForTemporaryFile(sampleLogFilePath, SandboxExtension::Type::ReadWrite)) { 919 sampleLogSandboxHandle = WTFMove(handleAndFilePath->first); 920 sampleLogFilePath = WTFMove(handleAndFilePath->second); 921 } 905 922 906 923 process.send(Messages::WebProcess::StartMemorySampler(sampleLogSandboxHandle, sampleLogFilePath, m_memorySamplerInterval), 0); … … 1161 1178 1162 1179 SandboxExtension::Handle sandboxExtensionHandle; 1163 if (!path.isEmpty()) 1164 SandboxExtension::createHandle(path, SandboxExtension::Type::ReadWrite, sandboxExtensionHandle); 1180 if (!path.isEmpty()) { 1181 if (auto handle = SandboxExtension::createHandle(path, SandboxExtension::Type::ReadWrite)) 1182 sandboxExtensionHandle = WTFMove(*handle); 1183 } 1165 1184 1166 1185 dataStore.networkProcess().send(Messages::NetworkProcess::ResumeDownload(dataStore.sessionID(), downloadProxy.downloadID(), resumeData.dataReference(), path, sandboxExtensionHandle, callDownloadDidStart), 0); … … 1448 1467 WallTime now = WallTime::now(); 1449 1468 auto sampleLogFilePath = makeString("WebProcess", static_cast<unsigned long long>(now.secondsSinceEpoch().seconds())); 1450 sampleLogFilePath = SandboxExtension::createHandleForTemporaryFile(sampleLogFilePath, SandboxExtension::Type::ReadWrite, sampleLogSandboxHandle); 1469 if (auto handleAndFilePath = SandboxExtension::createHandleForTemporaryFile(sampleLogFilePath, SandboxExtension::Type::ReadWrite)) { 1470 sampleLogSandboxHandle = WTFMove(handleAndFilePath->first); 1471 sampleLogFilePath = WTFMove(handleAndFilePath->second); 1472 } 1451 1473 1452 1474 sendToAllProcesses(Messages::WebProcess::StartMemorySampler(sampleLogSandboxHandle, sampleLogFilePath, interval)); -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r279477 r281032 151 151 SandboxExtension::Handle alternativeServiceStorageDirectoryExtensionHandle; 152 152 String alternativeServiceStorageDirectory = resolvedAlternativeServicesStorageDirectory(); 153 if (!alternativeServiceStorageDirectory.isEmpty()) 154 SandboxExtension::createHandleForReadWriteDirectory(alternativeServiceStorageDirectory, alternativeServiceStorageDirectoryExtensionHandle); 153 if (!alternativeServiceStorageDirectory.isEmpty()) { 154 // FIXME: SandboxExtension::createHandleForReadWriteDirectory resolves the directory, but that has already been done. Remove this duplicate work. 155 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(alternativeServiceStorageDirectory)) 156 alternativeServiceStorageDirectoryExtensionHandle = WTFMove(*handle); 157 } 155 158 #endif 156 159 … … 186 189 parameters.uiProcessCookieStorageIdentifier = m_uiProcessCookieStorageIdentifier; 187 190 188 if (!cookieFile.isEmpty()) 189 SandboxExtension::createHandleForReadWriteDirectory(FileSystem::parentPath(cookieFile), parameters.cookieStoragePathExtensionHandle); 191 if (!cookieFile.isEmpty()) { 192 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(FileSystem::parentPath(cookieFile))) 193 parameters.cookieStoragePathExtensionHandle = WTFMove(*handle); 194 } 190 195 } 191 196 -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r280015 r281032 1933 1933 auto resourceLoadStatisticsDirectory = m_configuration->resourceLoadStatisticsDirectory(); 1934 1934 SandboxExtension::Handle resourceLoadStatisticsDirectoryHandle; 1935 if (!resourceLoadStatisticsDirectory.isEmpty()) 1936 SandboxExtension::createHandleForReadWriteDirectory(resourceLoadStatisticsDirectory, resourceLoadStatisticsDirectoryHandle); 1935 if (!resourceLoadStatisticsDirectory.isEmpty()) { 1936 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(resourceLoadStatisticsDirectory)) 1937 resourceLoadStatisticsDirectoryHandle = WTFMove(*handle); 1938 } 1937 1939 1938 1940 auto networkCacheDirectory = resolvedNetworkCacheDirectory(); 1939 1941 SandboxExtension::Handle networkCacheDirectoryExtensionHandle; 1940 if (!networkCacheDirectory.isEmpty()) 1941 SandboxExtension::createHandleForReadWriteDirectory(networkCacheDirectory, networkCacheDirectoryExtensionHandle); 1942 if (!networkCacheDirectory.isEmpty()) { 1943 // FIXME: SandboxExtension::createHandleForReadWriteDirectory resolves the directory, but that has already been done. Remove this duplicate work. 1944 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(networkCacheDirectory)) 1945 networkCacheDirectoryExtensionHandle = WTFMove(*handle); 1946 } 1942 1947 1943 1948 auto hstsStorageDirectory = resolvedHSTSStorageDirectory(); 1944 1949 SandboxExtension::Handle hstsStorageDirectoryExtensionHandle; 1945 if (!hstsStorageDirectory.isEmpty()) 1946 SandboxExtension::createHandleForReadWriteDirectory(hstsStorageDirectory, hstsStorageDirectoryExtensionHandle); 1950 if (!hstsStorageDirectory.isEmpty()) { 1951 // FIXME: SandboxExtension::createHandleForReadWriteDirectory resolves the directory, but that has already been done. Remove this duplicate work. 1952 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(hstsStorageDirectory)) 1953 hstsStorageDirectoryExtensionHandle = WTFMove(*handle); 1954 } 1947 1955 1948 1956 bool shouldIncludeLocalhostInResourceLoadStatistics = false; … … 2005 2013 2006 2014 parameters.indexedDatabaseDirectory = resolvedIndexedDatabaseDirectory(); 2007 if (!parameters.indexedDatabaseDirectory.isEmpty()) 2008 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 2015 if (!parameters.indexedDatabaseDirectory.isEmpty()) { 2016 // FIXME: SandboxExtension::createHandleForReadWriteDirectory resolves the directory, but that has already been done. Remove this duplicate work. 2017 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory)) 2018 parameters.indexedDatabaseDirectoryExtensionHandle = WTFMove(*handle); 2019 } 2009 2020 2010 2021 #if ENABLE(SERVICE_WORKER) 2011 2022 parameters.serviceWorkerRegistrationDirectory = resolvedServiceWorkerRegistrationDirectory(); 2012 if (!parameters.serviceWorkerRegistrationDirectory.isEmpty()) 2013 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 2023 if (!parameters.serviceWorkerRegistrationDirectory.isEmpty()) { 2024 // FIXME: SandboxExtension::createHandleForReadWriteDirectory resolves the directory, but that has already been done. Remove this duplicate work. 2025 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory)) 2026 parameters.serviceWorkerRegistrationDirectoryExtensionHandle = WTFMove(*handle); 2027 } 2014 2028 parameters.serviceWorkerProcessTerminationDelayEnabled = m_configuration->serviceWorkerProcessTerminationDelayEnabled(); 2015 2029 #endif … … 2018 2032 if (!localStorageDirectory.isEmpty()) { 2019 2033 parameters.localStorageDirectory = localStorageDirectory; 2020 SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory, parameters.localStorageDirectoryExtensionHandle); 2034 // FIXME: SandboxExtension::createHandleForReadWriteDirectory resolves the directory, but that has already been done. Remove this duplicate work. 2035 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory)) 2036 parameters.localStorageDirectoryExtensionHandle = WTFMove(*handle); 2021 2037 } 2022 2038 … … 2024 2040 if (!cacheStorageDirectory.isEmpty()) { 2025 2041 parameters.cacheStorageDirectory = cacheStorageDirectory; 2026 SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory, parameters.cacheStorageDirectoryExtensionHandle); 2042 if (auto handle = SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory)) 2043 parameters.cacheStorageDirectoryExtensionHandle = WTFMove(*handle); 2027 2044 } 2028 2045 -
trunk/Source/WebKit/WebProcess/FileAPI/BlobRegistryProxy.cpp
r280881 r281032 43 43 44 44 // File path can be empty when submitting a form file input without a file, see bug 111778. 45 if (!file->path().isEmpty()) 46 SandboxExtension::createHandle(file->path(), SandboxExtension::Type::ReadOnly, extensionHandle); 45 if (!file->path().isEmpty()) { 46 if (auto handle = SandboxExtension::createHandle(file->path(), SandboxExtension::Type::ReadOnly)) 47 extensionHandle = WTFMove(*handle); 48 } 47 49 48 50 String replacementPath = path == file->path() ? nullString() : file->path(); -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
r280723 r281032 170 170 auto createExtension = [&] { 171 171 #if HAVE(AUDIT_TOKEN) 172 if (auto auditToken = m_manager.gpuProcessConnection().auditToken()) 173 return SandboxExtension::createHandleForReadByAuditToken(fileSystemPath, auditToken.value(), handle); 174 #endif 175 176 return SandboxExtension::createHandle(fileSystemPath, SandboxExtension::Type::ReadOnly, handle); 172 if (auto auditToken = m_manager.gpuProcessConnection().auditToken()) { 173 if (auto createdHandle = SandboxExtension::createHandleForReadByAuditToken(fileSystemPath, auditToken.value())) { 174 handle = WTFMove(*createdHandle); 175 return true; 176 } 177 return false; 178 } 179 #endif 180 if (auto createdHandle = SandboxExtension::createHandle(fileSystemPath, SandboxExtension::Type::ReadOnly)) { 181 handle = WTFMove(*createdHandle); 182 return true; 183 } 184 return false; 177 185 }; 178 186
Note:
See TracChangeset
for help on using the changeset viewer.