Title: [282918] branches/safari-612-branch/Source/WebKit
Revision
282918
Author
repst...@apple.com
Date
2021-09-22 21:30:21 -0700 (Wed, 22 Sep 2021)

Log Message

Cherry-pick r282803. rdar://problem/83429994

    Ensure that capture attribution works even for URLS without hostnames
    https://bugs.webkit.org/show_bug.cgi?id=230479
    <rdar://81832853>

    Reviewed by Eric Carlson.

    Some URLs allow to call getUserMedia but do not have origins, like custom scheme URLs.
    In that case, the attribution status call was failing previously as we were not able to get a visible name to provide.
    We mimick what we are doing for the default prompt by using the visible application name if the origin is not available.
    Since we do the system attribution in GPUProcess, we now send the visible name to GPUProcess when creating it.

    Manually tested.
    We do not have system status attributon on MacOS or simulator so we cannot test it automatically.

    * GPUProcess/GPUProcess.cpp:
    (WebKit::GPUProcess::initializeGPUProcess):
    * GPUProcess/GPUProcess.h:
    (WebKit::GPUProcess::applicationVisibleName const):
    * GPUProcess/GPUProcessCreationParameters.cpp:
    (WebKit::GPUProcessCreationParameters::encode const):
    (WebKit::GPUProcessCreationParameters::decode):
    * GPUProcess/GPUProcessCreationParameters.h:
    * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
    (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString):
    * UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
    (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
    * UIProcess/Cocoa/MediaPermissionUtilities.mm:
    (WebKit::applicationVisibleNameFromOrigin):
    (WebKit::applicationVisibleName):
    (WebKit::alertMessageText):
    * UIProcess/MediaPermissionUtilities.h:

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@282803 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-612-branch/Source/WebKit/ChangeLog (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/ChangeLog	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/ChangeLog	2021-09-23 04:30:21 UTC (rev 282918)
@@ -1,5 +1,78 @@
 2021-09-22  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r282803. rdar://problem/83429994
+
+    Ensure that capture attribution works even for URLS without hostnames
+    https://bugs.webkit.org/show_bug.cgi?id=230479
+    <rdar://81832853>
+    
+    Reviewed by Eric Carlson.
+    
+    Some URLs allow to call getUserMedia but do not have origins, like custom scheme URLs.
+    In that case, the attribution status call was failing previously as we were not able to get a visible name to provide.
+    We mimick what we are doing for the default prompt by using the visible application name if the origin is not available.
+    Since we do the system attribution in GPUProcess, we now send the visible name to GPUProcess when creating it.
+    
+    Manually tested.
+    We do not have system status attributon on MacOS or simulator so we cannot test it automatically.
+    
+    * GPUProcess/GPUProcess.cpp:
+    (WebKit::GPUProcess::initializeGPUProcess):
+    * GPUProcess/GPUProcess.h:
+    (WebKit::GPUProcess::applicationVisibleName const):
+    * GPUProcess/GPUProcessCreationParameters.cpp:
+    (WebKit::GPUProcessCreationParameters::encode const):
+    (WebKit::GPUProcessCreationParameters::decode):
+    * GPUProcess/GPUProcessCreationParameters.h:
+    * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
+    (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString):
+    * UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
+    (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
+    * UIProcess/Cocoa/MediaPermissionUtilities.mm:
+    (WebKit::applicationVisibleNameFromOrigin):
+    (WebKit::applicationVisibleName):
+    (WebKit::alertMessageText):
+    * UIProcess/MediaPermissionUtilities.h:
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@282803 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-21  Youenn Fablet  <you...@apple.com>
+
+            Ensure that capture attribution works even for URLS without hostnames
+            https://bugs.webkit.org/show_bug.cgi?id=230479
+            <rdar://81832853>
+
+            Reviewed by Eric Carlson.
+
+            Some URLs allow to call getUserMedia but do not have origins, like custom scheme URLs.
+            In that case, the attribution status call was failing previously as we were not able to get a visible name to provide.
+            We mimick what we are doing for the default prompt by using the visible application name if the origin is not available.
+            Since we do the system attribution in GPUProcess, we now send the visible name to GPUProcess when creating it.
+
+            Manually tested.
+            We do not have system status attributon on MacOS or simulator so we cannot test it automatically.
+
+            * GPUProcess/GPUProcess.cpp:
+            (WebKit::GPUProcess::initializeGPUProcess):
+            * GPUProcess/GPUProcess.h:
+            (WebKit::GPUProcess::applicationVisibleName const):
+            * GPUProcess/GPUProcessCreationParameters.cpp:
+            (WebKit::GPUProcessCreationParameters::encode const):
+            (WebKit::GPUProcessCreationParameters::decode):
+            * GPUProcess/GPUProcessCreationParameters.h:
+            * GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm:
+            (WebKit::GPUConnectionToWebProcess::setCaptureAttributionString):
+            * UIProcess/Cocoa/GPUProcessProxyCocoa.mm:
+            (WebKit::GPUProcessProxy::platformInitializeGPUProcessParameters):
+            * UIProcess/Cocoa/MediaPermissionUtilities.mm:
+            (WebKit::applicationVisibleNameFromOrigin):
+            (WebKit::applicationVisibleName):
+            (WebKit::alertMessageText):
+            * UIProcess/MediaPermissionUtilities.h:
+
+2021-09-22  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r282393. rdar://problem/83429703
 
     [Hardening] Validate IDBValue's blob paths in WebIDBServer::putOrAdd()

Modified: branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcess.cpp (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcess.cpp	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcess.cpp	2021-09-23 04:30:21 UTC (rev 282918)
@@ -249,6 +249,8 @@
     WebKit::logChannels().initializeLogChannelsIfNecessary(parameters.webKitLoggingChannels);
 #endif
 
+    m_applicationVisibleName = WTFMove(parameters.applicationVisibleName);
+
     // Match the QoS of the UIProcess since the GPU process is doing rendering on its behalf.
     WTF::Thread::setCurrentThreadIsUserInteractive(0);
 

Modified: branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcess.h (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcess.h	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcess.h	2021-09-23 04:30:21 UTC (rev 282918)
@@ -97,6 +97,8 @@
 
     void tryExitIfUnusedAndUnderMemoryPressure();
 
+    const String& applicationVisibleName() const { return m_applicationVisibleName; }
+
 private:
     void lowMemoryHandler(Critical, Synchronous);
 
@@ -204,6 +206,7 @@
 #if ENABLE(VORBIS)
     bool m_vorbisEnabled { false };
 #endif
+    String m_applicationVisibleName;
 };
 
 } // namespace WebKit

Modified: branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp	2021-09-23 04:30:21 UTC (rev 282918)
@@ -62,6 +62,8 @@
     encoder << wtfLoggingChannels;
     encoder << webCoreLoggingChannels;
     encoder << webKitLoggingChannels;
+
+    encoder << applicationVisibleName;
 }
 
 bool GPUProcessCreationParameters::decode(IPC::Decoder& decoder, GPUProcessCreationParameters& result)
@@ -117,6 +119,9 @@
     if (!decoder.decode(result.webKitLoggingChannels))
         return false;
 
+    if (!decoder.decode(result.applicationVisibleName))
+        return false;
+
     return true;
 }
 

Modified: branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h	2021-09-23 04:30:21 UTC (rev 282918)
@@ -61,6 +61,8 @@
     String webCoreLoggingChannels;
     String webKitLoggingChannels;
 
+    String applicationVisibleName;
+
     void encode(IPC::Encoder&) const;
     static WARN_UNUSED_RETURN bool decode(IPC::Decoder&, GPUProcessCreationParameters&);
 };

Modified: branches/safari-612-branch/Source/WebKit/GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/GPUProcess/cocoa/GPUConnectionToWebProcessCocoa.mm	2021-09-23 04:30:21 UTC (rev 282918)
@@ -28,6 +28,7 @@
 
 #if ENABLE(GPU_PROCESS)
 
+#import "MediaPermissionUtilities.h"
 #import "SystemStatusSPI.h"
 #import <WebCore/LocalizedStrings.h>
 #import <WebCore/RegistrableDomain.h>
@@ -43,16 +44,16 @@
     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()];
+    auto *visibleName = applicationVisibleNameFromOrigin(m_captureOrigin->data());
+    if (!visibleName)
+        visibleName = gpuProcess().applicationVisibleName();
 
+    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)."), visibleName];
+
     [PAL::getSTDynamicActivityAttributionPublisherClass() setCurrentAttributionStringWithFormat:formatString.get() auditToken:auditToken.value()];
 #endif
 

Modified: branches/safari-612-branch/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/UIProcess/Cocoa/GPUProcessProxyCocoa.mm	2021-09-23 04:30:21 UTC (rev 282918)
@@ -29,6 +29,7 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "GPUProcessCreationParameters.h"
+#include "MediaPermissionUtilities.h"
 
 namespace WebKit {
 
@@ -39,6 +40,8 @@
     parameters.webCoreLoggingChannels = [[NSUserDefaults standardUserDefaults] stringForKey:@"WebCoreLogging"];
     parameters.webKitLoggingChannels = [[NSUserDefaults standardUserDefaults] stringForKey:@"WebKit2Logging"];
 #endif
+
+    parameters.applicationVisibleName = applicationVisibleName();
 }
 
 }

Modified: branches/safari-612-branch/Source/WebKit/UIProcess/Cocoa/MediaPermissionUtilities.mm (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/UIProcess/Cocoa/MediaPermissionUtilities.mm	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/UIProcess/Cocoa/MediaPermissionUtilities.mm	2021-09-23 04:30:21 UTC (rev 282918)
@@ -110,16 +110,27 @@
     return startsWithLettersIgnoringASCIICase(domain, "www.") ? domain.substring(4) : domain;
 }
 
+NSString *applicationVisibleNameFromOrigin(const WebCore::SecurityOriginData& origin)
+{
+    if (origin.protocol != "http" && origin.protocol != "https")
+        return nil;
+
+    return visibleDomain(origin.host);
+}
+
+NSString *applicationVisibleName()
+{
+    NSBundle *appBundle = [NSBundle mainBundle];
+    NSString *displayName = appBundle.infoDictionary[(__bridge NSString *)_kCFBundleDisplayNameKey];
+    NSString *readableName = appBundle.infoDictionary[(__bridge NSString *)kCFBundleNameKey];
+    return displayName ?: readableName;
+}
+
 static NSString *alertMessageText(MediaPermissionReason reason, const WebCore::SecurityOriginData& origin)
 {
-    NSString *visibleOrigin;
-    if (origin.protocol != "http" && origin.protocol != "https") {
-        NSBundle *appBundle = [NSBundle mainBundle];
-        NSString *displayName = appBundle.infoDictionary[(__bridge NSString *)_kCFBundleDisplayNameKey];
-        NSString *readableName = appBundle.infoDictionary[(__bridge NSString *)kCFBundleNameKey];
-        visibleOrigin = displayName ?: readableName;
-    } else
-        visibleOrigin = visibleDomain(origin.host);
+    NSString *visibleOrigin = applicationVisibleNameFromOrigin(origin);
+    if (!visibleOrigin)
+        visibleOrigin = applicationVisibleName();
 
     switch (reason) {
     case MediaPermissionReason::Camera:

Modified: branches/safari-612-branch/Source/WebKit/UIProcess/MediaPermissionUtilities.h (282917 => 282918)


--- branches/safari-612-branch/Source/WebKit/UIProcess/MediaPermissionUtilities.h	2021-09-23 04:30:16 UTC (rev 282917)
+++ branches/safari-612-branch/Source/WebKit/UIProcess/MediaPermissionUtilities.h	2021-09-23 04:30:21 UTC (rev 282918)
@@ -62,6 +62,8 @@
 bool checkUsageDescriptionStringForType(MediaPermissionType);
 bool checkUsageDescriptionStringForSpeechRecognition();
 
+NSString *applicationVisibleNameFromOrigin(const WebCore::SecurityOriginData&);
+NSString *applicationVisibleName();
 void alertForPermission(WebPageProxy&, MediaPermissionReason, const WebCore::SecurityOriginData&, CompletionHandler<void(bool)>&&);
 #endif
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to