Diff
Modified: trunk/Source/WebCore/ChangeLog (279911 => 279912)
--- trunk/Source/WebCore/ChangeLog 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebCore/ChangeLog 2021-07-14 18:06:28 UTC (rev 279912)
@@ -1,3 +1,15 @@
+2021-07-14 Eric Carlson <[email protected]>
+
+ [iOS] Dynamically set capture attribution
+ https://bugs.webkit.org/show_bug.cgi?id=227871
+ rdar://70241665
+
+ Reviewed by Jer Noble.
+
+ No new tests, tested manually.
+
+ * en.lproj/Localizable.strings:
+
2021-07-14 Said Abou-Hallawa <[email protected]>
RenderElement::updateFillImages must fix the clients of the CSS image whose URL is invalid
Modified: trunk/Source/WebCore/PAL/ChangeLog (279911 => 279912)
--- trunk/Source/WebCore/PAL/ChangeLog 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebCore/PAL/ChangeLog 2021-07-14 18:06:28 UTC (rev 279912)
@@ -1,3 +1,15 @@
+2021-07-14 Eric Carlson <[email protected]>
+
+ [iOS] Dynamically set capture attribution
+ https://bugs.webkit.org/show_bug.cgi?id=227871
+ rdar://70241665
+
+ Reviewed by Jer Noble.
+
+ * PAL.xcodeproj/project.pbxproj:
+ * pal/ios/SystemStatusSoftLink.h: Added.
+ * pal/ios/SystemStatusSoftLink.mm: Added.
+
2021-07-09 Jer Noble <[email protected]>
[Cocoa] Make Coordinator playback commands more precise
Modified: trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj (279911 => 279912)
--- trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj 2021-07-14 18:06:28 UTC (rev 279912)
@@ -25,6 +25,8 @@
07611DB7243FA5BF00D80704 /* UsageTrackingSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07611DB5243FA5BF00D80704 /* UsageTrackingSoftLink.mm */; };
077E87B1226A460200A2AFF0 /* AVFoundationSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 077E87AF226A460200A2AFF0 /* AVFoundationSoftLink.mm */; };
077E87B2226A460300A2AFF0 /* AVFoundationSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 077E87B0226A460200A2AFF0 /* AVFoundationSoftLink.h */; };
+ 079D1D9726950DD700883577 /* SystemStatusSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 079D1D9526950DD700883577 /* SystemStatusSoftLink.h */; };
+ 079D1D9826950DD700883577 /* SystemStatusSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 079D1D9626950DD700883577 /* SystemStatusSoftLink.mm */; };
0C00CFD41F68CE4600AAC26D /* MediaTimeAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C00CFD21F68CE4600AAC26D /* MediaTimeAVFoundation.h */; };
0C2D9E731EEF5AF600DBC317 /* ExportMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C2D9E721EEF5AF600DBC317 /* ExportMacros.h */; };
0C2DA06D1F33CA8400DBC317 /* CFLocaleSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C2DA0671F33CA8400DBC317 /* CFLocaleSPI.h */; };
@@ -236,6 +238,8 @@
07611DB5243FA5BF00D80704 /* UsageTrackingSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UsageTrackingSoftLink.mm; sourceTree = "<group>"; };
077E87AF226A460200A2AFF0 /* AVFoundationSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AVFoundationSoftLink.mm; sourceTree = "<group>"; };
077E87B0226A460200A2AFF0 /* AVFoundationSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AVFoundationSoftLink.h; sourceTree = "<group>"; };
+ 079D1D9526950DD700883577 /* SystemStatusSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SystemStatusSoftLink.h; sourceTree = "<group>"; };
+ 079D1D9626950DD700883577 /* SystemStatusSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SystemStatusSoftLink.mm; sourceTree = "<group>"; };
0C00CFD11F68CE4600AAC26D /* MediaTimeAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTimeAVFoundation.cpp; sourceTree = "<group>"; };
0C00CFD21F68CE4600AAC26D /* MediaTimeAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTimeAVFoundation.h; sourceTree = "<group>"; };
0C2D9E721EEF5AF600DBC317 /* ExportMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExportMacros.h; sourceTree = "<group>"; };
@@ -764,6 +768,8 @@
5C7C787223AC3E770065F47E /* ManagedConfigurationSoftLink.mm */,
4450FC9E21F5F602004DFA56 /* QuickLookSoftLink.h */,
4450FC9D21F5F602004DFA56 /* QuickLookSoftLink.mm */,
+ 079D1D9526950DD700883577 /* SystemStatusSoftLink.h */,
+ 079D1D9626950DD700883577 /* SystemStatusSoftLink.mm */,
2E1342CA215AA10A007199D2 /* UIKitSoftLink.h */,
2E1342CB215AA10A007199D2 /* UIKitSoftLink.mm */,
);
@@ -997,6 +1003,7 @@
31308B1420A21705003FB929 /* SystemPreviewSPI.h in Headers */,
A3AB6E581F3D1DDB009C14B1 /* SystemSleepListener.h in Headers */,
A3AB6E641F3D217F009C14B1 /* SystemSleepListenerMac.h in Headers */,
+ 079D1D9726950DD700883577 /* SystemStatusSoftLink.h in Headers */,
0C7785A11F45130F00F4EBB6 /* TelephonyUtilitiesSPI.h in Headers */,
2E1342CC215AA10A007199D2 /* UIKitSoftLink.h in Headers */,
0C5AF9221F43A4C7002EAC02 /* UIKitSPI.h in Headers */,
@@ -1134,6 +1141,7 @@
93B38EC025821CD800198E63 /* SpeechSoftLink.mm in Sources */,
A3AB6E571F3D1DDB009C14B1 /* SystemSleepListener.cpp in Sources */,
A3AB6E651F3D217F009C14B1 /* SystemSleepListenerMac.mm in Sources */,
+ 079D1D9826950DD700883577 /* SystemStatusSoftLink.mm in Sources */,
2E1342CD215AA10A007199D2 /* UIKitSoftLink.mm in Sources */,
07611DB7243FA5BF00D80704 /* UsageTrackingSoftLink.mm in Sources */,
41E1F344248A6A000022D5DE /* VideoToolboxSoftLink.cpp in Sources */,
Added: trunk/Source/WebCore/PAL/pal/ios/SystemStatusSoftLink.h (0 => 279912)
--- trunk/Source/WebCore/PAL/pal/ios/SystemStatusSoftLink.h (rev 0)
+++ trunk/Source/WebCore/PAL/pal/ios/SystemStatusSoftLink.h 2021-07-14 18:06:28 UTC (rev 279912)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
+
+#import <wtf/SoftLinking.h>
+
+SOFT_LINK_FRAMEWORK_FOR_HEADER(PAL, SystemStatus)
+
+SOFT_LINK_CLASS_FOR_HEADER(PAL, STDynamicActivityAttributionPublisher);
+
+#endif
Added: trunk/Source/WebCore/PAL/pal/ios/SystemStatusSoftLink.mm (0 => 279912)
--- trunk/Source/WebCore/PAL/pal/ios/SystemStatusSoftLink.mm (rev 0)
+++ trunk/Source/WebCore/PAL/pal/ios/SystemStatusSoftLink.mm 2021-07-14 18:06:28 UTC (rev 279912)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+
+#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
+
+#import <wtf/SoftLinking.h>
+
+SOFT_LINK_PRIVATE_FRAMEWORK_FOR_SOURCE(PAL, SystemStatus)
+
+SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT(PAL, SystemStatus, STDynamicActivityAttributionPublisher, PAL_EXPORT);
+
+#endif
Modified: trunk/Source/WebCore/en.lproj/Localizable.strings (279911 => 279912)
--- trunk/Source/WebCore/en.lproj/Localizable.strings 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebCore/en.lproj/Localizable.strings 2021-07-14 18:06:28 UTC (rev 279912)
@@ -1636,3 +1636,5 @@
/* Option in segmented control for choosing list type in text editing */
"•" = "•";
+/* The domain and application using the camera and/or microphone. The first argument is domain, the second is the application name (iOS only). */
+"“%@” in “%%@”" = "“%@” in “%%@”";
Modified: trunk/Source/WebKit/ChangeLog (279911 => 279912)
--- trunk/Source/WebKit/ChangeLog 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/ChangeLog 2021-07-14 18:06:28 UTC (rev 279912)
@@ -1,3 +1,53 @@
+2021-07-14 Eric Carlson <[email protected]>
+
+ [iOS] Dynamically set capture attribution
+ https://bugs.webkit.org/show_bug.cgi?id=227871
+ rdar://70241665
+
+ Reviewed by Jer Noble.
+
+ * GPUProcess/GPUConnectionToWebProcess.cpp:
+ (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess): Initialize m_captureOrigin.
+ (WebKit::GPUConnectionToWebProcess::updateCaptureOrigin): Update.
+ (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString const): Non-Cocoa stub.
+ * GPUProcess/GPUConnectionToWebProcess.h:
+
+ * GPUProcess/GPUProcess.cpp:
+ (WebKit::GPUProcess::updateCaptureOrigin): Call same method in WebProcessConnection,
+ if it exists.
+ * GPUProcess/GPUProcess.h:
+ * GPUProcess/GPUProcess.messages.in:
+
+ * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm: Added.
+ (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString): Set the attribution
+ string to "[domain] in [application]".
+
+ * Platform/spi/ios/SystemStatusSPI.h: Added.
+ * Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb: Allow "com.apple.systemstatus.activityattribution"
+ to be looked up.
+
+ * Scripts/process-entitlements.sh: Add the entitlements required to use the
+ SystemStatus SPI.
+
+ * SourcesCocoa.txt:
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ (WebKit::UserMediaCaptureManagerProxy::startProducingData): Fail capture
+ if setCaptureAttributionString returns false.
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
+ (WebKit::UserMediaCaptureManagerProxy::ConnectionProxy::setCaptureAttributionString):
+
+ * UIProcess/GPU/GPUProcessProxy.cpp:
+ (WebKit::GPUProcessProxy::updateCaptureOrigin): Call gpuProcess.updateCaptureOrigin
+ so the capture origin is correct when capture begins.
+ * UIProcess/GPU/GPUProcessProxy.h:
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didChangeMainDocument): Update the capture origin.
+ (WebKit::WebPageProxy::willStartCapture): Ditto.
+ (WebKit::WebPageProxy::gpuProcessExited): Drive-by - update local variable names
+ to make their purpose clearer.
+ * WebKit.xcodeproj/project.pbxproj:
+
2021-07-13 Wenson Hsieh <[email protected]>
[WK2] Push OS state dumping logic down from WebProcess to AuxiliaryProcess
Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (279911 => 279912)
--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp 2021-07-14 18:06:28 UTC (rev 279912)
@@ -139,6 +139,10 @@
#include "LocalAudioSessionRoutingArbitrator.h"
#endif
+#if ENABLE(MEDIA_STREAM)
+#include <WebCore/SecurityOrigin.h>
+#endif
+
namespace WebKit {
using namespace WebCore;
@@ -178,9 +182,15 @@
return m_process.allowsDisplayCapture();
}
}
+
+ bool setCaptureAttributionString() final
+ {
+ return m_process.setCaptureAttributionString();
+ }
GPUConnectionToWebProcess& m_process;
};
+
#endif
Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
@@ -203,6 +213,9 @@
#if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM)
, m_sampleBufferDisplayLayerManager(RemoteSampleBufferDisplayLayerManager::create(*this))
#endif
+#if ENABLE(MEDIA_STREAM)
+ , m_captureOrigin(SecurityOrigin::createUnique())
+#endif
#if ENABLE(ROUTING_ARBITRATION) && HAVE(AVAUDIO_ROUTING_ARBITER)
, m_routingArbitrator(LocalAudioSessionRoutingArbitrator::create(*this))
#endif
@@ -820,7 +833,18 @@
m_allowsVideoCapture |= allowVideoCapture;
m_allowsDisplayCapture |= allowDisplayCapture;
}
+
+void GPUConnectionToWebProcess::updateCaptureOrigin(const WebCore::SecurityOriginData& originData)
+{
+ m_captureOrigin = originData.securityOrigin();
+}
+
+#if !PLATFORM(COCOA)
+bool GPUConnectionToWebProcess::setCaptureAttributionString() const
+{
+}
#endif
+#endif // ENABLE(MEDIA_STREAM)
#if PLATFORM(MAC)
void GPUConnectionToWebProcess::displayConfigurationChanged(CGDirectDisplayID, CGDisplayChangeSummaryFlags flags)
Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h (279911 => 279912)
--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h 2021-07-14 18:06:28 UTC (rev 279912)
@@ -37,6 +37,7 @@
#include "ScopedActiveMessageReceiveQueue.h"
#include <WebCore/LibWebRTCEnumTraits.h>
#include <WebCore/NowPlayingManager.h>
+#include <WebCore/PageIdentifier.h>
#include <WebCore/ProcessIdentifier.h>
#include <pal/SessionID.h>
#include <wtf/Logger.h>
@@ -52,6 +53,11 @@
#include <CoreGraphics/CGDisplayConfiguration.h>
#endif
+namespace WebCore {
+class SecurityOrigin;
+struct SecurityOriginData;
+}
+
namespace WebKit {
class GPUProcess;
@@ -111,6 +117,8 @@
#if ENABLE(MEDIA_STREAM)
void setOrientationForMediaCapture(uint64_t orientation);
void updateCaptureAccess(bool allowAudioCapture, bool allowVideoCapture, bool allowDisplayCapture);
+ void updateCaptureOrigin(const WebCore::SecurityOriginData&);
+ bool setCaptureAttributionString();
bool allowsAudioCapture() const { return m_allowsAudioCapture; }
bool allowsVideoCapture() const { return m_allowsVideoCapture; }
bool allowsDisplayCapture() const { return m_allowsDisplayCapture; }
@@ -248,6 +256,7 @@
std::unique_ptr<RemoteMediaRecorderManager> m_remoteMediaRecorderManager;
#endif
#if ENABLE(MEDIA_STREAM)
+ Ref<WebCore::SecurityOrigin> m_captureOrigin;
bool m_allowsAudioCapture { false };
bool m_allowsVideoCapture { false };
bool m_allowsDisplayCapture { false };
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.cpp (279911 => 279912)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2021-07-14 18:06:28 UTC (rev 279912)
@@ -312,6 +312,12 @@
completionHandler();
}
+void GPUProcess::updateCaptureOrigin(const WebCore::SecurityOriginData& originData, ProcessIdentifier processID)
+{
+ if (auto* connection = webProcessConnection(processID))
+ connection->updateCaptureOrigin(originData);
+}
+
void GPUProcess::updateSandboxAccess(const Vector<SandboxExtension::Handle>& extensions)
{
for (auto& extension : extensions)
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.h (279911 => 279912)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.h 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.h 2021-07-14 18:06:28 UTC (rev 279912)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -45,6 +45,7 @@
namespace WebCore {
class NowPlayingManager;
struct MockMediaDevice;
+struct SecurityOriginData;
}
namespace WebKit {
@@ -124,11 +125,13 @@
void setMockCaptureDevicesEnabled(bool);
void setOrientationForMediaCapture(uint64_t orientation);
void updateCaptureAccess(bool allowAudioCapture, bool allowVideoCapture, bool allowDisplayCapture, WebCore::ProcessIdentifier, CompletionHandler<void()>&&);
+ void updateCaptureOrigin(const WebCore::SecurityOriginData&, WebCore::ProcessIdentifier);
void updateSandboxAccess(const Vector<SandboxExtension::Handle>&);
void addMockMediaDevice(const WebCore::MockMediaDevice&);
void clearMockMediaDevices();
void removeMockMediaDevice(const String& persistentId);
void resetMockMediaDevices();
+ bool setCaptureAttributionString(const String&);
#endif
#if PLATFORM(MAC)
void displayConfigurationChanged(CGDirectDisplayID, CGDisplayChangeSummaryFlags);
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (279911 => 279912)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2021-07-14 18:06:28 UTC (rev 279912)
@@ -41,6 +41,7 @@
SetOrientationForMediaCapture(uint64_t orientation);
UpdateSandboxAccess(Vector<WebKit::SandboxExtension::Handle> extensions);
UpdateCaptureAccess(bool allowAudioCapture, bool allowVideoCapture, bool allowDisplayCapture, WebCore::ProcessIdentifier processID) -> () Async
+ UpdateCaptureOrigin(struct WebCore::SecurityOriginData originData, WebCore::ProcessIdentifier processID)
AddMockMediaDevice(struct WebCore::MockMediaDevice device);
ClearMockMediaDevices();
RemoveMockMediaDevice(String persistentId);
Added: trunk/Source/WebKit/GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm (0 => 279912)
--- trunk/Source/WebKit/GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm (rev 0)
+++ trunk/Source/WebKit/GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm 2021-07-14 18:06:28 UTC (rev 279912)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "GPUConnectionToWebProcess.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#import "SystemStatusSPI.h"
+#import <WebCore/LocalizedStrings.h>
+#import <WebCore/RegistrableDomain.h>
+#import <WebCore/SecurityOrigin.h>
+#import <pal/ios/SystemStatusSoftLink.h>
+
+namespace WebKit {
+
+#if ENABLE(MEDIA_STREAM)
+bool GPUConnectionToWebProcess::setCaptureAttributionString()
+{
+#if PLATFORM(IOS)
+ if (![PAL::getSTDynamicActivityAttributionPublisherClass() respondsToSelector:@selector(setCurrentAttributionStringWithFormat:auditToken:)])
+ return true;
+
+ auto domain = WebCore::RegistrableDomain { m_captureOrigin->data() };
+ if (domain.isEmpty())
+ return false;
+
+ auto auditToken = gpuProcess().parentProcessConnection()->getAuditToken();
+ if (!auditToken)
+ return false;
+
+ RetainPtr<NSString> formatString = [NSString stringWithFormat:WEB_UI_STRING("“%@” in “%%@”", "The domain and application using the camera and/or microphone. The first argument is domain, the second is the application name (iOS only)."), (NSString *)domain.string()];
+
+ [PAL::getSTDynamicActivityAttributionPublisherClass() setCurrentAttributionStringWithFormat:formatString.get() auditToken:auditToken.value()];
+#endif
+
+ return true;
+}
+#endif // ENABLE(MEDIA_STREAM)
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)
Added: trunk/Source/WebKit/Platform/spi/ios/SystemStatusSPI.h (0 => 279912)
--- trunk/Source/WebKit/Platform/spi/ios/SystemStatusSPI.h (rev 0)
+++ trunk/Source/WebKit/Platform/spi/ios/SystemStatusSPI.h 2021-07-14 18:06:28 UTC (rev 279912)
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#import <SystemStatus/STDynamicActivityAttributionPublisher.h>
+
+#else
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface STDynamicActivityAttributionPublisher : NSObject
+
++ (void)setCurrentAttributionStringWithFormat:(NSString *)format auditToken:(audit_token_t)auditToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif // USE(APPLE_INTERNAL_SDK)
Modified: trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb (279911 => 279912)
--- trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb 2021-07-14 18:06:28 UTC (rev 279912)
@@ -1003,6 +1003,9 @@
)
)
+(allow mach-lookup
+ (global-name "com.apple.systemstatus.activityattribution")
+)
(allow mach-lookup
(require-all
Modified: trunk/Source/WebKit/Scripts/process-entitlements.sh (279911 => 279912)
--- trunk/Source/WebKit/Scripts/process-entitlements.sh 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/Scripts/process-entitlements.sh 2021-07-14 18:06:28 UTC (rev 279912)
@@ -309,6 +309,10 @@
plistbuddy Add :seatbelt-profiles array
plistbuddy Add :seatbelt-profiles:0 string com.apple.WebKit.GPU
+
+ plistbuddy Add :com.apple.systemstatus.activityattribution bool YES
+ plistbuddy Add :com.apple.security.exception.mach-lookup.global-name array
+ plistbuddy Add :com.apple.security.exception.mach-lookup.global-name:0 string com.apple.systemstatus.activityattribution
}
function ios_family_process_webauthn_entitlements()
Modified: trunk/Source/WebKit/SourcesCocoa.txt (279911 => 279912)
--- trunk/Source/WebKit/SourcesCocoa.txt 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/SourcesCocoa.txt 2021-07-14 18:06:28 UTC (rev 279912)
@@ -58,6 +58,7 @@
NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm
GPUProcess/EntryPoint/Cocoa/XPCService/GPUServiceEntryPoint.mm
+GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm
GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp
GPUProcess/graphics/ScopedRenderingResourcesRequestCocoa.mm @no-unify
GPUProcess/graphics/ScopedWebGLRenderingResourcesRequestCocoa.cpp
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (279911 => 279912)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2021-07-14 18:06:28 UTC (rev 279912)
@@ -326,8 +326,16 @@
void UserMediaCaptureManagerProxy::startProducingData(RealtimeMediaSourceIdentifier id)
{
- if (auto* proxy = m_proxies.get(id))
- proxy->start();
+ auto* proxy = m_proxies.get(id);
+ if (!proxy)
+ return;
+
+ if (!m_connectionProxy->setCaptureAttributionString()) {
+ RELEASE_LOG_ERROR(WebRTC, "Unable to set capture attribution, failing capture.");
+ return;
+ }
+
+ proxy->start();
}
void UserMediaCaptureManagerProxy::stopProducingData(RealtimeMediaSourceIdentifier id)
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h (279911 => 279912)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2021-07-14 18:06:28 UTC (rev 279912)
@@ -57,6 +57,7 @@
virtual IPC::Connection& connection() = 0;
virtual bool willStartCapture(WebCore::CaptureDevice::DeviceType) const = 0;
virtual Logger& logger() = 0;
+ virtual bool setCaptureAttributionString() { return true; }
};
explicit UserMediaCaptureManagerProxy(UniqueRef<ConnectionProxy>&&);
~UserMediaCaptureManagerProxy();
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (279911 => 279912)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2021-07-14 18:06:28 UTC (rev 279912)
@@ -280,6 +280,10 @@
sendWithAsyncReply(Messages::GPUProcess::UpdateCaptureAccess { allowAudioCapture, allowVideoCapture, allowDisplayCapture, processID }, WTFMove(completionHandler));
}
+void GPUProcessProxy::updateCaptureOrigin(const WebCore::SecurityOriginData& originData, WebCore::ProcessIdentifier processID)
+{
+ send(Messages::GPUProcess::UpdateCaptureOrigin { originData, processID }, 0);
+}
void GPUProcessProxy::addMockMediaDevice(const WebCore::MockMediaDevice& device)
{
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (279911 => 279912)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2021-07-14 18:06:28 UTC (rev 279912)
@@ -49,6 +49,7 @@
namespace WebCore {
struct MockMediaDevice;
+struct SecurityOriginData;
}
namespace WebKit {
@@ -76,7 +77,7 @@
void setUseMockCaptureDevices(bool);
void setOrientationForMediaCapture(uint64_t orientation);
void updateCaptureAccess(bool allowAudioCapture, bool allowVideoCapture, bool allowDisplayCapture, WebCore::ProcessIdentifier, CompletionHandler<void()>&&);
-
+ void updateCaptureOrigin(const WebCore::SecurityOriginData&, WebCore::ProcessIdentifier);
void addMockMediaDevice(const WebCore::MockMediaDevice&);
void clearMockMediaDevices();
void removeMockMediaDevice(const String&);
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (279911 => 279912)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-07-14 18:06:28 UTC (rev 279912)
@@ -110,6 +110,7 @@
#include "WebCoreArgumentCoders.h"
#include "WebEditCommandProxy.h"
#include "WebEventConversion.h"
+#include "WebFrame.h"
#include "WebFramePolicyListenerProxy.h"
#include "WebFullScreenManagerProxy.h"
#include "WebFullScreenManagerProxyMessages.h"
@@ -136,6 +137,7 @@
#include "WebPopupMenuProxy.h"
#include "WebPreferences.h"
#include "WebPreferencesKeys.h"
+#include "WebProcess.h"
#include "WebProcessMessages.h"
#include "WebProcessPool.h"
#include "WebProcessProxy.h"
@@ -5101,11 +5103,21 @@
void WebPageProxy::didChangeMainDocument(FrameIdentifier frameID)
{
#if ENABLE(MEDIA_STREAM)
- if (m_userMediaPermissionRequestManager)
+ if (m_userMediaPermissionRequestManager) {
m_userMediaPermissionRequestManager->resetAccess(frameID);
+
+#if ENABLE(GPU_PROCESS)
+ if (auto* gpuProcess = m_process->processPool().gpuProcess()) {
+ if (auto* frame = m_process->webFrame(frameID))
+ gpuProcess->updateCaptureOrigin(SecurityOriginData::fromURL(frame->url()), m_process->coreProcessIdentifier());
+ }
+#endif
+ }
+
#else
UNUSED_PARAM(frameID);
#endif
+
m_isQuotaIncreaseDenied = false;
m_speechRecognitionPermissionManager = nullptr;
@@ -8418,6 +8430,7 @@
auto& gpuProcess = process().processPool().ensureGPUProcess();
gpuProcess.updateCaptureAccess(request.requiresAudioCapture(), request.requiresVideoCapture(), request.requiresDisplayCapture(), m_process->coreProcessIdentifier(), WTFMove(callback));
+ gpuProcess.updateCaptureOrigin(request.topLevelDocumentSecurityOrigin().data(), m_process->coreProcessIdentifier());
#if PLATFORM(IOS_FAMILY)
gpuProcess.setOrientationForMediaCapture(m_deviceOrientation);
#endif
@@ -10602,12 +10615,12 @@
pageClient().gpuProcessDidExit();
#if ENABLE(MEDIA_STREAM)
- bool shouldAllowAudioCapture = isCapturingAudio() && preferences().captureAudioInGPUProcessEnabled();
- bool shouldAllowVideoCapture = isCapturingVideo() && preferences().captureVideoInGPUProcessEnabled();
- bool shouldAllowDisplayCapture = false;
- if (shouldAllowAudioCapture || shouldAllowVideoCapture) {
+ bool activeAudioCapture = isCapturingAudio() && preferences().captureAudioInGPUProcessEnabled();
+ bool activeVideoCapture = isCapturingVideo() && preferences().captureVideoInGPUProcessEnabled();
+ bool activeDisplayCapture = false;
+ if (activeAudioCapture || activeVideoCapture) {
auto& gpuProcess = process().processPool().ensureGPUProcess();
- gpuProcess.updateCaptureAccess(shouldAllowAudioCapture, shouldAllowVideoCapture, shouldAllowDisplayCapture, m_process->coreProcessIdentifier(), [] { });
+ gpuProcess.updateCaptureAccess(activeAudioCapture, activeVideoCapture, activeDisplayCapture, m_process->coreProcessIdentifier(), [] { });
}
#endif
}
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (279911 => 279912)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-07-14 17:54:57 UTC (rev 279911)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-07-14 18:06:28 UTC (rev 279912)
@@ -124,6 +124,7 @@
07923148239CBCB8009598E2 /* RemoteMediaPlayerManagerProxyMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 07923142239CBCB5009598E2 /* RemoteMediaPlayerManagerProxyMessagesReplies.h */; };
0792314B239CBCB8009598E2 /* RemoteMediaPlayerManagerProxyMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07923145239CBCB7009598E2 /* RemoteMediaPlayerManagerProxyMessageReceiver.cpp */; };
0792314C239CBCB8009598E2 /* RemoteMediaPlayerManagerProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 07923146239CBCB7009598E2 /* RemoteMediaPlayerManagerProxyMessages.h */; };
+ 079D1D9A26960CD300883577 /* SystemStatusSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 079D1D9926960CD300883577 /* SystemStatusSPI.h */; };
07A5EBBC1C7BA43E00B9CA69 /* WKFrameHandleRef.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A5EBBA1C7BA43E00B9CA69 /* WKFrameHandleRef.h */; settings = {ATTRIBUTES = (Private, ); }; };
07E19EFB23D401F10094FFB4 /* MediaPlayerPrivateRemoteMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E19EF823D401F00094FFB4 /* MediaPlayerPrivateRemoteMessageReceiver.cpp */; };
07E19EFC23D401F10094FFB4 /* MediaPlayerPrivateRemoteMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E19EF923D401F00094FFB4 /* MediaPlayerPrivateRemoteMessages.h */; };
@@ -2449,6 +2450,8 @@
0794B4AC24451BB90001B9C4 /* MediaUsageManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaUsageManager.h; sourceTree = "<group>"; };
0794B4AE244524B00001B9C4 /* MediaUsageManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MediaUsageManager.cpp; sourceTree = "<group>"; };
0794B4AF24452A2C0001B9C4 /* MediaUsageManagerCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaUsageManagerCocoa.h; sourceTree = "<group>"; };
+ 079D1D9926960CD300883577 /* SystemStatusSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SystemStatusSPI.h; sourceTree = "<group>"; };
+ 079D1D9C2698DBD000883577 /* cocoa */ = {isa = PBXFileReference; lastKnownFileType = folder; path = cocoa; sourceTree = "<group>"; };
07A5EBB91C7BA43E00B9CA69 /* WKFrameHandleRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKFrameHandleRef.cpp; sourceTree = "<group>"; };
07A5EBBA1C7BA43E00B9CA69 /* WKFrameHandleRef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKFrameHandleRef.h; sourceTree = "<group>"; };
07A6E5E3260E411400959478 /* RemoteMediaSessionCoordinatorProxyMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteMediaSessionCoordinatorProxyMessageReceiver.cpp; sourceTree = "<group>"; };
@@ -7680,6 +7683,7 @@
2D9FB1FF2375209D0049F936 /* GPUProcess */ = {
isa = PBXGroup;
children = (
+ 079D1D9C2698DBD000883577 /* cocoa */,
2D9FB20D2375209D0049F936 /* EntryPoint */,
550640A124071A2900AAE045 /* graphics */,
2D9FB2042375209D0049F936 /* ios */,
@@ -11579,6 +11583,7 @@
3178AF9720E2A7F80074DE94 /* PDFKitSPI.h */,
2D279E1826955768004B3EEB /* PrototypeToolsSPI.h */,
46F38E8B2416E66D0059375A /* RunningBoardServicesSPI.h */,
+ 079D1D9926960CD300883577 /* SystemStatusSPI.h */,
CE1A0BD01A48E6C60054EF74 /* TCCSPI.h */,
CE1A0BD11A48E6C60054EF74 /* TextInputSPI.h */,
CEE4AE2A1A5DCF430002F49B /* UIKitSPI.h */,
@@ -12416,6 +12421,7 @@
448AC24E267135A700B28921 /* SynapseSPI.h in Headers */,
4459984222833E8700E61373 /* SyntheticEditingCommandType.h in Headers */,
3157135F2040A9B20084F9CF /* SystemPreviewController.h in Headers */,
+ 079D1D9A26960CD300883577 /* SystemStatusSPI.h in Headers */,
F4D985CB2691096600BBCCBE /* TapHandlingResult.h in Headers */,
44C51844266BE8C4006DD522 /* TCCSoftLink.h in Headers */,
CE1A0BD61A48E6C60054EF74 /* TCCSPI.h in Headers */,