Diff
Modified: trunk/Source/WebKit/ChangeLog (260931 => 260932)
--- trunk/Source/WebKit/ChangeLog 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/ChangeLog 2020-04-30 03:03:17 UTC (rev 260932)
@@ -1,3 +1,44 @@
+2020-04-29 Brent Fulgham <bfulg...@apple.com>
+
+ Improve SandboxExtension::HandleArray to reduce boilerplate
+ https://bugs.webkit.org/show_bug.cgi?id=211103
+ <rdar://problem/62533632>
+
+ Reviewed by Per Arne Vollan.
+
+ There are a number of boilerplate patterns needed when using SandboxExtension::HandleArray.
+ We could make these simpler and less error prone by improving the class.
+
+ This patch:
+ 1. Adds convenience methods to create and consume HandleArrays.
+ 2. Updates uses of HandleArray to use the convenience methods.
+
+ Tested by existing tests.
+
+ * Platform/IPC/FormDataReference.h:
+ (IPC::FormDataReference::decode):
+ * Shared/Cocoa/SandboxExtensionCocoa.mm:
+ (WebKit::SandboxExtension::createHandlesForFiles):
+ (WebKit::SandboxExtension::createHandlesForMachLookup):
+ (WebKit::SandboxExtension::consumePermanently):
+ * Shared/SandboxExtension.h:
+ (WebKit::createHandlesForFiles):
+ (WebKit::SandboxExtension::consumePermanently):
+ * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+ (WebKit::WebProcessPool::platformInitializeWebProcess):
+ * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
+ (WebKit::WebProcessProxy::unblockPreferenceServiceIfNeeded):
+ * UIProcess/WebPageProxy.cpp:
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebKit::WebPlatformStrategies::getPathnamesForType):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::extendSandboxForFilesFromOpenPanel):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::initializeWebProcess):
+ * WebProcess/cocoa/WebProcessCocoa.mm:
+ (WebKit::WebProcess::platformInitializeWebProcess):
+ (WebKit::WebProcess::unblockPreferenceService):
+
2020-04-29 Chris Dumez <cdu...@apple.com>
REGRESSION(r260791) Network process fails to suspend promptly
Modified: trunk/Source/WebKit/Platform/IPC/FormDataReference.h (260931 => 260932)
--- trunk/Source/WebKit/Platform/IPC/FormDataReference.h 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/Platform/IPC/FormDataReference.h 2020-04-30 03:03:17 UTC (rev 260932)
@@ -85,8 +85,7 @@
if (!sandboxExtensionHandles)
return WTF::nullopt;
- for (size_t i = 0; i < sandboxExtensionHandles->size(); ++i)
- WebKit::SandboxExtension::consumePermanently(sandboxExtensionHandles->at(i));
+ WebKit::SandboxExtension::consumePermanently(*sandboxExtensionHandles);
return FormDataReference { formData.releaseNonNull() };
}
Modified: trunk/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm (260931 => 260932)
--- trunk/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm 2020-04-30 03:03:17 UTC (rev 260932)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2010-2020 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -293,6 +293,37 @@
return createHandleWithoutResolvingPath(resolvePathForSandboxExtension(path), type, handle);
}
+static SandboxExtension::HandleArray createHandlesForResources(const Vector<String>& resources, Function<bool(const String&, SandboxExtension::Handle& handle)>&& createFunction)
+{
+ SandboxExtension::HandleArray handleArray;
+
+ if (resources.size() > 0)
+ handleArray.allocate(resources.size());
+
+ size_t currentHandle = 0;
+ for (const auto& resource : resources) {
+ if (!createFunction(resource, handleArray[currentHandle]))
+ continue;
+ ++currentHandle;
+ }
+
+ return handleArray;
+}
+
+SandboxExtension::HandleArray SandboxExtension::createReadOnlyHandlesForFiles(const String& logLabel, const Vector<String>& paths)
+{
+ return createHandlesForResources(paths, [&logLabel] (const String& path, Handle& handle) {
+ if (!SandboxExtension::createHandle(path, SandboxExtension::Type::ReadOnly, handle)) {
+ // This can legitimately fail if a directory containing the file is deleted after the file was chosen.
+ // We also have reports of cases where this likely fails for some unknown reason, <rdar://problem/10156710>.
+ WTFLogAlways("%s: could not create a sandbox extension for '%s'\n", logLabel.utf8().data(), path.utf8().data());
+ ASSERT_NOT_REACHED();
+ return false;
+ }
+ return true;
+ });
+}
+
bool SandboxExtension::createHandleForReadWriteDirectory(const String& path, SandboxExtension::Handle& handle)
{
String resolvedPath = resolveAndCreateReadWriteDirectoryForSandboxExtension(path);
@@ -357,6 +388,17 @@
return true;
}
+SandboxExtension::HandleArray SandboxExtension::createHandlesForMachLookup(const Vector<String>& services, Optional<audit_token_t> auditToken, OptionSet<Flags> flags)
+{
+ return createHandlesForResources(services, [auditToken, flags] (const String& service, Handle& handle) {
+ if (!SandboxExtension::createHandleForMachLookup(service, auditToken, handle, flags)) {
+ ASSERT_NOT_REACHED();
+ return false;
+ }
+ return true;
+ });
+}
+
bool SandboxExtension::createHandleForReadByAuditToken(const String& path, audit_token_t auditToken, Handle& handle)
{
ASSERT(!handle.m_sandboxExtension);
@@ -383,6 +425,17 @@
return true;
}
+SandboxExtension::HandleArray SandboxExtension::createHandlesForIOKitClassExtensions(const Vector<String>& iokitClasses, Optional<audit_token_t> auditToken, OptionSet<Flags> flags)
+{
+ return createHandlesForResources(iokitClasses, [auditToken, flags] (const String& iokitClass, Handle& handle) {
+ if (!SandboxExtension::createHandleForIOKitClassExtension(iokitClass, auditToken, handle, flags)) {
+ ASSERT_NOT_REACHED();
+ return false;
+ }
+ return true;
+ });
+}
+
SandboxExtension::SandboxExtension(const Handle& handle)
: m_sandboxExtension(WTFMove(handle.m_sandboxExtension))
{
@@ -442,6 +495,21 @@
return result;
}
+bool SandboxExtension::consumePermanently(const HandleArray& handleArray)
+{
+ bool allSucceeded = true;
+ for (auto& handle : handleArray) {
+ if (!handle.m_sandboxExtension)
+ continue;
+
+ bool ok = SandboxExtension::consumePermanently(handle);
+ ASSERT(ok);
+ allSucceeded &= ok;
+ }
+
+ return allSucceeded;
+}
+
} // namespace WebKit
#endif // ENABLE(SANDBOX_EXTENSIONS)
Modified: trunk/Source/WebKit/Shared/SandboxExtension.h (260931 => 260932)
--- trunk/Source/WebKit/Shared/SandboxExtension.h 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/Shared/SandboxExtension.h 2020-04-30 03:03:17 UTC (rev 260932)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010-2020 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -93,6 +93,10 @@
Handle& operator[](size_t i);
Handle& at(size_t i) { return operator[](i); }
const Handle& operator[](size_t i) const;
+ Handle* begin();
+ Handle* end();
+ const Handle* begin() const;
+ const Handle* end() const;
size_t size() const;
void encode(IPC::Encoder&) const;
static Optional<HandleArray> decode(IPC::Decoder&);
@@ -107,6 +111,7 @@
static RefPtr<SandboxExtension> create(Handle&&);
static bool createHandle(const String& path, Type, Handle&);
+ static SandboxExtension::HandleArray createReadOnlyHandlesForFiles(const String& logLabel, const Vector<String>& paths);
static bool createHandleWithoutResolvingPath(const String& path, Type, Handle&);
static bool createHandleForReadWriteDirectory(const String& path, Handle&); // Will attempt to create the directory.
static String createHandleForTemporaryFile(const String& prefix, Type, Handle&);
@@ -113,8 +118,10 @@
static bool createHandleForGenericExtension(const String& extensionClass, Handle&);
#if HAVE(AUDIT_TOKEN)
static bool createHandleForMachLookup(const String& service, Optional<audit_token_t>, Handle&, OptionSet<Flags> = Flags::Default);
+ static HandleArray createHandlesForMachLookup(const Vector<String>& services, Optional<audit_token_t>, OptionSet<Flags> = Flags::Default);
static bool createHandleForReadByAuditToken(const String& path, audit_token_t, Handle&);
static bool createHandleForIOKitClassExtension(const String& iokitClass, Optional<audit_token_t>, Handle&, OptionSet<Flags> = Flags::Default);
+ static HandleArray createHandlesForIOKitClassExtensions(const Vector<String>& iokitClasses, Optional<audit_token_t>, OptionSet<Flags> = Flags::Default);
#endif
~SandboxExtension();
@@ -123,6 +130,7 @@
bool consumePermanently();
static bool consumePermanently(const Handle&);
+ static bool consumePermanently(const HandleArray&);
private:
explicit SandboxExtension(const Handle&);
@@ -144,10 +152,15 @@
inline size_t SandboxExtension::HandleArray::size() const { return 0; }
inline const SandboxExtension::Handle& SandboxExtension::HandleArray::operator[](size_t) const { return m_emptyHandle; }
inline SandboxExtension::Handle& SandboxExtension::HandleArray::operator[](size_t) { return m_emptyHandle; }
+inline SandboxExtension::Handle* SandboxExtension::HandleArray::begin() { return &m_emptyHandle; }
+inline SandboxExtension::Handle* SandboxExtension::HandleArray::end() { return &m_emptyHandle; }
+inline const SandboxExtension::Handle* SandboxExtension::HandleArray::begin() const { return &m_emptyHandle; }
+inline const SandboxExtension::Handle* SandboxExtension::HandleArray::end() const { return &m_emptyHandle; }
inline void SandboxExtension::HandleArray::encode(IPC::Encoder&) const { }
inline auto SandboxExtension::HandleArray::decode(IPC::Decoder&) -> Optional<HandleArray> { return {{ }}; }
inline RefPtr<SandboxExtension> SandboxExtension::create(Handle&&) { return nullptr; }
inline bool SandboxExtension::createHandle(const String&, Type, Handle&) { return true; }
+inline SandboxExtension::HandleArray SandboxExtension::createReadOnlyHandlesForFiles(const String&, const Vector<String>&) { return { }; }
inline bool SandboxExtension::createHandleWithoutResolvingPath(const String&, Type, Handle&) { return true; }
inline bool SandboxExtension::createHandleForReadWriteDirectory(const String&, Handle&) { return true; }
inline String SandboxExtension::createHandleForTemporaryFile(const String& /*prefix*/, Type, Handle&) {return String();}
@@ -157,10 +170,15 @@
inline bool SandboxExtension::consume() { return true; }
inline bool SandboxExtension::consumePermanently() { return true; }
inline bool SandboxExtension::consumePermanently(const Handle&) { return true; }
+inline bool SandboxExtension::consumePermanently(const HandleArray&) { return true; }
inline String stringByResolvingSymlinksInPath(const String& path) { return path; }
inline String resolvePathForSandboxExtension(const String& path) { return path; }
inline String resolveAndCreateReadWriteDirectoryForSandboxExtension(const String& path) { return path; }
#else
+inline SandboxExtension::Handle* SandboxExtension::HandleArray::begin() { return m_data.begin(); }
+inline SandboxExtension::Handle* SandboxExtension::HandleArray::end() { return m_data.end(); }
+inline const SandboxExtension::Handle* SandboxExtension::HandleArray::begin() const { return m_data.begin(); }
+inline const SandboxExtension::Handle* SandboxExtension::HandleArray::end() const { return m_data.end(); }
String stringByResolvingSymlinksInPath(const String& path);
String resolvePathForSandboxExtension(const String& path);
String resolveAndCreateReadWriteDirectoryForSandboxExtension(const String& path);
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (260931 => 260932)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2020-04-30 03:03:17 UTC (rev 260932)
@@ -244,6 +244,39 @@
return services;
}
+#if PLATFORM(IOS_FAMILY)
+static const Vector<String>& nonBrowserServices()
+{
+ ASSERT(isMainThread());
+ static const auto services = makeNeverDestroyed(Vector<String> {
+ "com.apple.lsd.open",
+ "com.apple.mobileassetd",
+ "com.apple.iconservices",
+ "com.apple.PowerManagement.control",
+ "com.apple.frontboard.systemappservices"
+ });
+ return services;
+}
+
+static const Vector<String>& agxCompilerClasses()
+{
+ ASSERT(isMainThread());
+ static const auto iokitClasses = makeNeverDestroyed(Vector<String> {
+ "AGXCommandQueue",
+ "AGXDevice",
+ "AGXSharedUserClient",
+ "IOAccelContext",
+ "IOAccelContext2",
+ "IOAccelDevice",
+ "IOAccelDevice2",
+ "IOAccelSharedUserClient",
+ "IOAccelSharedUserClient2"
+ "IOAccelSubmitter2",
+ });
+ return iokitClasses;
+}
+#endif
+
void WebProcessPool::platformInitializeWebProcess(const WebProcessProxy& process, WebProcessCreationParameters& parameters)
{
parameters.mediaMIMETypes = process.mediaMIMETypes();
@@ -351,19 +384,8 @@
#endif
#if PLATFORM(IOS_FAMILY)
- if (!WebCore::IOSApplication::isMobileSafari() || _AXSApplicationAccessibilityEnabled()) {
- static const char* services[] = {
- "com.apple.lsd.open",
- "com.apple.mobileassetd",
- "com.apple.iconservices",
- "com.apple.PowerManagement.control",
- "com.apple.frontboard.systemappservices"
- };
- auto size = WTF_ARRAY_LENGTH(services);
- parameters.dynamicMachExtensionHandles.allocate(size);
- for (size_t i = 0; i < size; ++i)
- SandboxExtension::createHandleForMachLookup(services[i], WTF::nullopt, parameters.dynamicMachExtensionHandles[i]);
- }
+ if (!WebCore::IOSApplication::isMobileSafari() || _AXSApplicationAccessibilityEnabled())
+ parameters.dynamicMachExtensionHandles = SandboxExtension::createHandlesForMachLookup(nonBrowserServices(), WTF::nullopt);
if (isInternalInstall()) {
SandboxExtension::Handle diagnosticsExtensionHandle;
@@ -375,24 +397,8 @@
if (SandboxExtension::createHandleForMachLookup("com.apple.runningboard", WTF::nullopt, runningboardExtensionHandle, SandboxExtension::Flags::NoReport))
parameters.runningboardExtensionHandle = WTFMove(runningboardExtensionHandle);
- if (WebCore::deviceHasAGXCompilerService()) {
- static const char* const ioKitClasses[] = {
- "AGXCommandQueue",
- "AGXDevice",
- "AGXSharedUserClient",
- "IOAccelContext",
- "IOAccelContext2",
- "IOAccelDevice",
- "IOAccelDevice2",
- "IOAccelSharedUserClient",
- "IOAccelSharedUserClient2"
- "IOAccelSubmitter2",
- };
- auto size = WTF_ARRAY_LENGTH(ioKitClasses);
- parameters.dynamicIOKitExtensionHandles.allocate(size);
- for (size_t i = 0; i < size; ++i)
- SandboxExtension::createHandleForIOKitClassExtension(ioKitClasses[i], WTF::nullopt, parameters.dynamicIOKitExtensionHandles[i]);
- }
+ if (WebCore::deviceHasAGXCompilerService())
+ parameters.dynamicIOKitExtensionHandles = SandboxExtension::createHandlesForIOKitClassExtensions(agxCompilerClasses(), WTF::nullopt);
#endif
#if PLATFORM(COCOA)
@@ -442,30 +448,13 @@
if (needWebProcessExtensions) {
// FIXME(207716): The following should be removed when the GPU process is complete.
- const auto& services = mediaRelatedMachServices();
- parameters.mediaExtensionHandles.allocate(services.size());
- for (size_t i = 0, size = services.size(); i < size; ++i)
- SandboxExtension::createHandleForMachLookup(services[i], WTF::nullopt, parameters.mediaExtensionHandles[i]);
+ parameters.mediaExtensionHandles = SandboxExtension::createHandlesForMachLookup(mediaRelatedMachServices(), WTF::nullopt);
}
#if ENABLE(CFPREFS_DIRECT_MODE)
#if PLATFORM(IOS_FAMILY)
- if (_AXSApplicationAccessibilityEnabled()) {
- SandboxExtension::HandleArray preferencesExtensionHandles;
-
- static constexpr const char* services[] = {
- "com.apple.cfprefsd.agent",
- "com.apple.cfprefsd.daemon"
- };
- auto size = std::size(services);
- preferencesExtensionHandles.allocate(size);
- for (size_t i = 0; i < size; ++i) {
- bool ok = SandboxExtension::createHandleForMachLookup(services[i], WTF::nullopt, preferencesExtensionHandles[i]);
- ASSERT_UNUSED(ok, ok);
- }
-
- parameters.preferencesExtensionHandles = WTFMove(preferencesExtensionHandles);
- }
+ if (_AXSApplicationAccessibilityEnabled())
+ parameters.preferencesExtensionHandles = SandboxExtension::createHandlesForMachLookup({ "com.apple.cfprefsd.agent"_s, "com.apple.cfprefsd.daemon"_s }, WTF::nullopt);
#endif
auto globalPreferencesDictionary = adoptCF(CFDictionaryCreateMutable(kCFAllocatorDefault, 0, nullptr, nullptr));
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm (260931 => 260932)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm 2020-04-30 03:03:17 UTC (rev 260932)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2020 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -239,19 +239,10 @@
if (!canSendMessage())
return;
- SandboxExtension::HandleArray handleArray;
- static constexpr const char* services[] = {
- "com.apple.cfprefsd.agent",
- "com.apple.cfprefsd.daemon"
- };
- auto size = std::size(services);
- handleArray.allocate(size);
- for (size_t i = 0; i < size; ++i) {
- if (!SandboxExtension::createHandleForMachLookup(services[i], connection() ? connection()->getAuditToken() : WTF::nullopt, handleArray[i]))
- return;
- }
+ auto handleArray = SandboxExtension::createHandlesForMachLookup({ "com.apple.cfprefsd.agent"_s, "com.apple.cfprefsd.daemon"_s }, connection() ? connection()->getAuditToken() : WTF::nullopt);
+ ASSERT(handleArray.size() == 2);
- send(Messages::WebProcess::UnblockPreferenceService(handleArray), 0);
+ send(Messages::WebProcess::UnblockPreferenceService(WTFMove(handleArray)), 0);
m_hasSentMessageToUnblockPreferenceService = true;
}
#endif
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (260931 => 260932)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-04-30 03:03:17 UTC (rev 260932)
@@ -6632,12 +6632,8 @@
return;
#if ENABLE(SANDBOX_EXTENSIONS)
- SandboxExtension::HandleArray sandboxExtensionHandles;
- sandboxExtensionHandles.allocate(fileURLs.size());
- for (size_t i = 0; i < fileURLs.size(); ++i)
- SandboxExtension::createHandle(fileURLs[i], SandboxExtension::Type::ReadOnly, sandboxExtensionHandles[i]);
-
- send(Messages::WebPage::ExtendSandboxForFilesFromOpenPanel(sandboxExtensionHandles));
+ auto sandboxExtensionHandles = SandboxExtension::createReadOnlyHandlesForFiles("WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon"_s, fileURLs);
+ send(Messages::WebPage::ExtendSandboxForFilesFromOpenPanel(WTFMove(sandboxExtensionHandles)));
#endif
SandboxExtension::Handle frontboardServicesSandboxExtension, iconServicesSandboxExtension;
@@ -6657,19 +6653,8 @@
return;
#if ENABLE(SANDBOX_EXTENSIONS)
- SandboxExtension::HandleArray sandboxExtensionHandles;
- sandboxExtensionHandles.allocate(fileURLs.size());
- for (size_t i = 0; i < fileURLs.size(); ++i) {
- bool createdExtension = SandboxExtension::createHandle(fileURLs[i], SandboxExtension::Type::ReadOnly, sandboxExtensionHandles[i]);
- if (!createdExtension) {
- // This can legitimately fail if a directory containing the file is deleted after the file was chosen.
- // We also have reports of cases where this likely fails for some unknown reason, <rdar://problem/10156710>.
- WTFLogAlways("WebPageProxy::didChooseFilesForOpenPanel: could not create a sandbox extension for '%s'\n", fileURLs[i].utf8().data());
- continue;
- }
- }
-
- send(Messages::WebPage::ExtendSandboxForFilesFromOpenPanel(sandboxExtensionHandles));
+ auto sandboxExtensionHandles = SandboxExtension::createReadOnlyHandlesForFiles("WebPageProxy::didChooseFilesForOpenPanel"_s, fileURLs);
+ send(Messages::WebPage::ExtendSandboxForFilesFromOpenPanel(WTFMove(sandboxExtensionHandles)));
#endif
send(Messages::WebPage::DidChooseFilesForOpenPanel(fileURLs));
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (260931 => 260932)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2020-04-30 03:03:17 UTC (rev 260932)
@@ -149,10 +149,7 @@
WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::GetPasteboardPathnamesForType(pasteboardName, pasteboardType),
Messages::WebPasteboardProxy::GetPasteboardPathnamesForType::Reply(pathnames, sandboxExtensionsHandleArray), 0);
ASSERT(pathnames.size() == sandboxExtensionsHandleArray.size());
- for (size_t i = 0; i < sandboxExtensionsHandleArray.size(); i++) {
- if (auto extension = SandboxExtension::create(WTFMove(sandboxExtensionsHandleArray[i])))
- extension->consumePermanently();
- }
+ SandboxExtension::consumePermanently(sandboxExtensionsHandleArray);
}
String WebPlatformStrategies::stringForType(const String& pasteboardType, const String& pasteboardName)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (260931 => 260932)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2020-04-30 03:03:17 UTC (rev 260932)
@@ -4277,12 +4277,10 @@
#if ENABLE(SANDBOX_EXTENSIONS)
void WebPage::extendSandboxForFilesFromOpenPanel(SandboxExtension::HandleArray&& handles)
{
- for (size_t i = 0; i < handles.size(); ++i) {
- bool result = SandboxExtension::consumePermanently(handles[i]);
- if (!result) {
- // We have reports of cases where this fails for some unknown reason, <rdar://problem/10156710>.
- WTFLogAlways("WebPage::extendSandboxForFileFromOpenPanel(): Could not consume a sandbox extension");
- }
+ bool result = SandboxExtension::consumePermanently(handles);
+ if (!result) {
+ // We have reports of cases where this fails for some unknown reason, <rdar://problem/10156710>.
+ WTFLogAlways("WebPage::extendSandboxForFileFromOpenPanel(): Could not consume a sandbox extension");
}
}
#endif
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (260931 => 260932)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2020-04-30 03:03:17 UTC (rev 260932)
@@ -373,8 +373,7 @@
memoryPressureHandler.install();
}
- for (size_t i = 0, size = parameters.additionalSandboxExtensionHandles.size(); i < size; ++i)
- SandboxExtension::consumePermanently(parameters.additionalSandboxExtensionHandles[i]);
+ SandboxExtension::consumePermanently(parameters.additionalSandboxExtensionHandles);
if (!parameters.injectedBundlePath.isEmpty())
m_injectedBundle = InjectedBundle::create(parameters, transformHandlesToObjects(parameters.initializationUserData.object()).get());
Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (260931 => 260932)
--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2020-04-30 03:00:35 UTC (rev 260931)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2020-04-30 03:03:17 UTC (rev 260932)
@@ -323,11 +323,8 @@
if (parameters.diagnosticsExtensionHandle)
SandboxExtension::consumePermanently(*parameters.diagnosticsExtensionHandle);
- for (size_t i = 0, size = parameters.dynamicMachExtensionHandles.size(); i < size; ++i)
- SandboxExtension::consumePermanently(parameters.dynamicMachExtensionHandles[i]);
-
- for (size_t i = 0, size = parameters.dynamicIOKitExtensionHandles.size(); i < size; ++i)
- SandboxExtension::consumePermanently(parameters.dynamicIOKitExtensionHandles[i]);
+ SandboxExtension::consumePermanently(parameters.dynamicMachExtensionHandles);
+ SandboxExtension::consumePermanently(parameters.dynamicIOKitExtensionHandles);
#endif
if (parameters.neHelperExtensionHandle)
@@ -344,16 +341,11 @@
#endif
// FIXME(207716): The following should be removed when the GPU process is complete.
- for (size_t i = 0, size = parameters.mediaExtensionHandles.size(); i < size; ++i)
- SandboxExtension::consumePermanently(parameters.mediaExtensionHandles[i]);
+ SandboxExtension::consumePermanently(parameters.mediaExtensionHandles);
#if ENABLE(CFPREFS_DIRECT_MODE)
if (parameters.preferencesExtensionHandles) {
- for (size_t i = 0; i < parameters.preferencesExtensionHandles->size(); ++i) {
- bool ok = SandboxExtension::consumePermanently(parameters.preferencesExtensionHandles->at(i));
- ASSERT_UNUSED(ok, ok);
- }
-
+ SandboxExtension::consumePermanently(*parameters.preferencesExtensionHandles);
_CFPrefsSetDirectModeEnabled(false);
}
#endif
@@ -963,11 +955,7 @@
void WebProcess::unblockPreferenceService(SandboxExtension::HandleArray&& handleArray)
{
- for (size_t i = 0; i < handleArray.size(); ++i) {
- bool ok = SandboxExtension::consumePermanently(handleArray[i]);
- ASSERT_UNUSED(ok, ok);
- }
-
+ SandboxExtension::consumePermanently(handleArray);
_CFPrefsSetDirectModeEnabled(false);
}
#endif