[webkit-changes] [WebKit/WebKit] e10cb3: Refactor Private Click Measurement support for eph...

Wenson Hsieh noreply at github.com
Fri Mar 10 10:07:19 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e10cb3c48fdc2ce116cf0d74cca3c96e931e7e6d
      https://github.com/WebKit/WebKit/commit/e10cb3c48fdc2ce116cf0d74cca3c96e931e7e6d
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2023-03-10 (Fri, 10 Mar 2023)

  Changed paths:
    R LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt
    R LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session.html
    A LayoutTests/http/tests/privateClickMeasurement/database-disabled-in-ephemeral-session-expected.txt
    A LayoutTests/http/tests/privateClickMeasurement/database-disabled-in-ephemeral-session.html
    R LayoutTests/http/tests/privateClickMeasurement/store-disabled-in-ephemeral-session-expected.txt
    R LayoutTests/http/tests/privateClickMeasurement/store-disabled-in-ephemeral-session.html
    A LayoutTests/http/tests/privateClickMeasurement/store-in-ephemeral-session-expected.txt
    A LayoutTests/http/tests/privateClickMeasurement/store-in-ephemeral-session.html
    M Source/WebCore/html/HTMLAnchorElement.cpp
    M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
    M Source/WebKit/NetworkProcess/NetworkSession.cpp
    M Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h
    M Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp
    M Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h
    M Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.h
    A Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEphemeralStore.cpp
    A Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEphemeralStore.h
    M Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp
    M Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h
    M Source/WebKit/Sources.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj

  Log Message:
  -----------
  Refactor Private Click Measurement support for ephemeral sessions
https://bugs.webkit.org/show_bug.cgi?id=253600

Reviewed by John Wilander.

Refactor some support for the ephemeral version of Private Click Measurement (i.e., the version
currently used in Safari view controller), such that it's additionally compatible with ephemeral
browsing sessions.

* LayoutTests/http/tests/privateClickMeasurement/database-disabled-in-ephemeral-session-expected.txt: Renamed from LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt.
* LayoutTests/http/tests/privateClickMeasurement/database-disabled-in-ephemeral-session.html: Renamed from LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session.html.
* LayoutTests/http/tests/privateClickMeasurement/store-disabled-in-ephemeral-session-expected.txt: Removed.
* LayoutTests/http/tests/privateClickMeasurement/store-in-ephemeral-session-expected.txt: Added.
* LayoutTests/http/tests/privateClickMeasurement/store-in-ephemeral-session.html: Renamed from LayoutTests/http/tests/privateClickMeasurement/store-disabled-in-ephemeral-session.html.

Rename these tests to better reflect the new behavior in ephemeral sessions, and adjust the test
output to match.

* Source/WebCore/html/HTMLAnchorElement.cpp:
(WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const):

Remove the early return here, and continue on call out to the client layer with PCM attribution
measurement data.

* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::willSendRedirectedRequestInternal):

Additionally avoid going through with attribution, if the click measurement happened too long ago
(i.e. older than `PrivateClickMeasurement::maxAge`, which is currently 1 week).

* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::managerOrProxy):
(WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClient.h:
* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.cpp:
(WebKit::PCM::ClientImpl::featureEnabled const):
(WebKit::PCM::ClientImpl::debugModeEnabled const):
(WebKit::PCM::ClientImpl::usesEphemeralDataStore const):

Enable the feature when using ephemeral sessions; however, add a new hook to return whether or not
we should actually attempt to persist entries to disk, or just keep them ephemerally in memory.

* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementClientImpl.h:
* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDaemonClient.h:
* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEphemeralStore.cpp: Added.

Add a subclass of `PCM::Store` that represents an ephemeral, single-use attribution measurement that
doesn't rely on any on-disk presence.

(WebKit::PCM::EphemeralStore::insertPrivateClickMeasurement):
(WebKit::PCM::EphemeralStore::markAllUnattributedPrivateClickMeasurementAsExpiredForTesting):
(WebKit::PCM::EphemeralStore::attributePrivateClickMeasurement):
(WebKit::PCM::EphemeralStore::privateClickMeasurementToStringForTesting const):
(WebKit::PCM::EphemeralStore::allAttributedPrivateClickMeasurement):
(WebKit::PCM::EphemeralStore::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
(WebKit::PCM::EphemeralStore::clearExpiredPrivateClickMeasurement):
(WebKit::PCM::EphemeralStore::clearPrivateClickMeasurement):
(WebKit::PCM::EphemeralStore::reset):
(WebKit::PCM::EphemeralStore::clearPrivateClickMeasurementForRegistrableDomain):
(WebKit::PCM::EphemeralStore::clearSentAttribution):
(WebKit::PCM::EphemeralStore::close):
* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementEphemeralStore.h: Added.
(WebKit::PCM::EphemeralStore::create):
* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
(WebKit::PrivateClickMeasurementManager::initializeStore const):
(WebKit::PrivateClickMeasurementManager::store):
(WebKit::PrivateClickMeasurementManager::store const):

Make this create either a `PersistentStore` or `EphemeralStore`, depending on whether or not we're
in an ephemeral session.

* Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:

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




More information about the webkit-changes mailing list