[webkit-changes] [WebKit/WebKit] 7fde32: Move Opaque Origin Identifier from SecurityOrigin ...

Matthew Finkel noreply at github.com
Mon Feb 13 12:00:48 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7fde32c36b521c0b98efa92eb57a635018f8355f
      https://github.com/WebKit/WebKit/commit/7fde32c36b521c0b98efa92eb57a635018f8355f
  Author: Matthew Finkel <sysrqb at apple.com>
  Date:   2023-02-13 (Mon, 13 Feb 2023)

  Changed paths:
    M Source/WTF/wtf/Markable.h
    M Source/WebCore/page/SecurityOrigin.cpp
    M Source/WebCore/page/SecurityOrigin.h
    M Source/WebCore/page/SecurityOriginData.cpp
    M Source/WebCore/page/SecurityOriginData.h
    M Source/WebKit/NetworkProcess/NetworkProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkProcess.h
    M Source/WebKit/NetworkProcess/NetworkProcess.messages.in
    M Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp
    M Source/WebKit/Shared/API/APISecurityOrigin.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
    M Source/WebKit/UIProcess/API/glib/WebKitSecurityOrigin.cpp
    M Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
    M Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
    M Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
    M Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPermissionControllerProxy.cpp
    M Source/WebKit/UIProcess/WebProcessProxy.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
    M Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.mm
    M Tools/TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp
    M Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp

  Log Message:
  -----------
  Move Opaque Origin Identifier from SecurityOrigin to SecurityOriginData
https://bugs.webkit.org/show_bug.cgi?id=251048
rdar://104578586

Reviewed by Youenn Fablet, Sihui Liu and Chris Dumez.

This change is a pre-patch for later work. The motivation for this change is
that SecurityOriginData will be used in a HashMap and the key in that mapping
must correctly take the opaqueOriginIdentifier into account.

There are some unintended side-effects from this change, so we make some
relevant changes, as well. We modify some permissions checks in WebKit's
UIProcess and NetworkProcess because the expectations of the existing logic
fall into two categories:
  - converting a SecurityOriginData into a SecurityOrigin should consider
    creating an opaque origin
  - converting a URL into a SecurityOriginData should not consider creating an
    opaque origin.

Now with this patch neither of these actions are true. In the first case, now
we instantiate a SecurityOrigin directly with a SecurityOriginData, and in that
constructor we don't re-evaluate if an opaque origin should be created.
Therefore, that check must happen when creating the SecurityOriginData. In the
other case, we consider creating an opaque SecurityOriginData from a URL
instead of directly mapping the URL's scheme+host+port to the same fields in
the SecurityOriginData.

As a result of this, we now directly compare the scheme, host, and port of URLs
in some places instead of relying on SecurityOrigin::isSameSchemeHostPort. For
other cases, we introduce a new function
SecurityOriginData::fromURLWithoutStrictOpaqueness where we skip most Opaque
Origin checks.

We also explicitly set the URL in WebKitGLib's MediaStream tests because they
use about:blank as the default and that creates a discrepancy between the
Page's active URL and the top document's SecurityOrigin.

* Source/WTF/wtf/Markable.h:
(WTF::add):
* Source/WebCore/page/SecurityOrigin.cpp:
(WebCore::SecurityOrigin::initializeShared):
(WebCore::SecurityOrigin::SecurityOrigin):
(WebCore::SecurityOrigin::create):
(WebCore::SecurityOrigin::isSameOriginDomain const):
(WebCore::SecurityOrigin::isSameOriginAs const):
(WebCore::SecurityOrigin::equal const):
(WebCore::schemeRequiresHost): Deleted.
(WebCore::shouldTreatAsOpaqueOrigin): Deleted.
* Source/WebCore/page/SecurityOrigin.h:
(WebCore::SecurityOrigin::isOpaque const):
(WebCore::add):
* Source/WebCore/page/SecurityOriginData.cpp:
(WebCore::SecurityOriginData::fromURL):
(WebCore::SecurityOriginData::fromURLWithoutStrictOpaqueness):
(WebCore::SecurityOriginData::securityOrigin const):
(WebCore::SecurityOriginData::isolatedCopy const):
(WebCore::SecurityOriginData::isolatedCopy):
(WebCore::operator==):
(WebCore::schemeRequiresHost):
(WebCore::SecurityOriginData::shouldTreatAsOpaqueOrigin):
* Source/WebCore/page/SecurityOriginData.h:
(WebCore::SecurityOriginData::SecurityOriginData):
(WebCore::SecurityOriginData::createOpaque):
(WebCore::SecurityOriginData::isOpaque const):
(WebCore::SecurityOriginData::encode const):
(WebCore::SecurityOriginData::decode):
(WebCore::add):
(WebCore::SecurityOriginData::fromURL): Deleted.
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::deleteWebsiteDataForOrigin):
(WebKit::NetworkProcess::renameOriginInWebsiteData):
(WebKit::NetworkProcess::websiteDataOriginDirectoryForTesting):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
(WebKit::WebSWServerConnection::controlClient):
(WebKit::WebSWServerConnection::createFetchTask):
(WebKit::WebSWServerConnection::registerServiceWorkerClient):
* Source/WebKit/Shared/API/APISecurityOrigin.h:
(API::SecurityOrigin::createFromString):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _renameOrigin:to:forDataOfTypes:completionHandler:]):
(-[WKWebsiteDataStore _originDirectoryForTesting:topOrigin:type:completionHandler:]):
* Source/WebKit/UIProcess/API/glib/WebKitSecurityOrigin.cpp:
(webkit_security_origin_new_for_uri):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::renameOriginInWebsiteData):
(WebKit::NetworkProcessProxy::websiteDataOriginDirectoryForTesting):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:
* Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::cancel):
* Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::decidePolicyForUserMediaPermissionRequest):
(WebKit::UserMediaPermissionRequestManagerProxy::checkUserMediaPermissionForSpeechRecognition):
(WebKit::UserMediaPermissionRequestManagerProxy::shouldChangeDeniedToPromptForCamera const):
(WebKit::UserMediaPermissionRequestManagerProxy::shouldChangeDeniedToPromptForMicrophone const):
(WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::receivedNavigationPolicyDecision):
(WebKit::WebPageProxy::didChangeMainDocument):
(WebKit::WebPageProxy::makeStorageSpaceRequest):
* Source/WebKit/UIProcess/WebPermissionControllerProxy.cpp:
(WebKit::WebPermissionControllerProxy::mostReasonableWebPageProxy const):
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::forWebPagesWithOrigin):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::renameOriginInWebsiteData):
(WebKit::WebsiteDataStore::originDirectoryForTesting):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.mm:
(-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
* Tools/TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
(TestWebKitAPI::TEST_F):
* Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
(testWebViewUserMediaEnumerateDevicesPermissionCheck):
(testWebViewUserMediaPermissionRequests):
(testWebViewAudioOnlyUserMediaPermissionRequests):
(testWebViewDisplayUserMediaPermissionRequests):

Canonical link: https://commits.webkit.org/260214@main




More information about the webkit-changes mailing list