Skip to content

Commit

Permalink
Remove HTML-attribute-based attribution source registration
Browse files Browse the repository at this point in the history
This API is deprecated and only accessible behind a test-only
runtime-enabled feature. The API has been replaced with
response-header-based registration:
https://github.com/WICG/conversion-measurement-api/blob/main/EVENT.md#registering-attribution-sources

This also allows us to replace all uses of blink::WebImpression with
blink::Impression and to remove the ConversionMeasurement
runtime-enabled feature entirely.

Bug: 1301960, 1319881
Change-Id: Ia97500fc5023f92c319b3234a34be761f590d88e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3576874
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Commit-Queue: Andrew Paseltiner <apaseltiner@chromium.org>
Quick-Run: Andrew Paseltiner <apaseltiner@chromium.org>
Reviewed-by: Nate Chapin <japhet@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: John Delaney <johnidel@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1001706}
  • Loading branch information
Andrew Paseltiner authored and Chromium LUCI CQ committed May 10, 2022
1 parent cd9348e commit d797bf0
Show file tree
Hide file tree
Showing 77 changed files with 100 additions and 1,184 deletions.
2 changes: 0 additions & 2 deletions content/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -423,8 +423,6 @@ source_set("browser") {
"attribution_reporting/attribution_observer.h",
"attribution_reporting/attribution_observer_types.cc",
"attribution_reporting/attribution_observer_types.h",
"attribution_reporting/attribution_page_metrics.cc",
"attribution_reporting/attribution_page_metrics.h",
"attribution_reporting/attribution_random_generator.h",
"attribution_reporting/attribution_report.cc",
"attribution_reporting/attribution_report.h",
Expand Down
85 changes: 4 additions & 81 deletions content/browser/attribution_reporting/attribution_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,13 @@
#include <utility>

#include "base/check.h"
#include "base/check_op.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram_macros.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "content/browser/attribution_reporting/attribution_aggregatable_source.h"
#include "content/browser/attribution_reporting/attribution_data_host_manager.h"
#include "content/browser/attribution_reporting/attribution_filter_data.h"
#include "content/browser/attribution_reporting/attribution_manager.h"
#include "content/browser/attribution_reporting/attribution_manager_provider.h"
#include "content/browser/attribution_reporting/attribution_metrics.h"
#include "content/browser/attribution_reporting/attribution_page_metrics.h"
#include "content/browser/attribution_reporting/attribution_source_type.h"
#include "content/browser/attribution_reporting/common_source_info.h"
#include "content/browser/attribution_reporting/storable_source.h"
#include "content/browser/renderer_host/frame_tree.h"
#include "content/browser/renderer_host/frame_tree_node.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
Expand All @@ -31,7 +24,6 @@
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_client.h"
#include "mojo/public/cpp/bindings/message.h"
#include "net/base/schemeful_site.h"
#include "services/network/public/cpp/is_potentially_trustworthy.h"
#include "third_party/blink/public/common/navigation/impression.h"
#include "url/gurl.h"
Expand Down Expand Up @@ -117,18 +109,6 @@ void AttributionHost::DidStartNavigation(NavigationHandle* navigation_handle) {
->current_origin();
navigation_impression_origins_.emplace(navigation_handle->GetNavigationId(),
initiator_root_frame_origin);

if (auto* initiator_web_contents =
WebContents::FromRenderFrameHost(initiator_frame_host)) {
if (auto* initiator_conversion_host =
AttributionHost::FromWebContents(initiator_web_contents)) {
// This doesn't necessarily mean that the browser will store the report,
// due to the additional logic in DidFinishNavigation(). This records
// that a page /attempted/ to register an impression for a navigation.
initiator_conversion_host->NotifyImpressionInitiatedByPage(
initiator_root_frame_origin, *(navigation_handle->GetImpression()));
}
}
}

void AttributionHost::DidFinishNavigation(NavigationHandle* navigation_handle) {
Expand Down Expand Up @@ -167,8 +147,6 @@ void AttributionHost::DidFinishNavigation(NavigationHandle* navigation_handle) {
return;
}

conversion_page_metrics_ = std::make_unique<AttributionPageMetrics>();

// If we were not able to access the impression origin, ignore the
// navigation.
if (!navigation_impression_origin_it) {
Expand All @@ -181,7 +159,6 @@ void AttributionHost::DidFinishNavigation(NavigationHandle* navigation_handle) {
DCHECK(navigation_handle->GetImpression());
const blink::Impression& impression = *(navigation_handle->GetImpression());

if (impression.attribution_src_token) {
auto* data_host_manager = attribution_manager->GetDataHostManager();
if (!data_host_manager)
return;
Expand All @@ -190,48 +167,8 @@ void AttributionHost::DidFinishNavigation(NavigationHandle* navigation_handle) {
navigation_handle->GetRenderFrameHost()->GetLastCommittedOrigin();

data_host_manager->NotifyNavigationForDataHost(
*impression.attribution_src_token, impression_origin,
impression.attribution_src_token, impression_origin,
destination_origin);
return;
}

// If the impression's conversion destination does not match the final top
// frame origin of this new navigation ignore it.
if (net::SchemefulSite(impression.conversion_destination) !=
net::SchemefulSite(
navigation_handle->GetRenderFrameHost()->GetLastCommittedOrigin())) {
return;
}

// Convert |impression| into a StorableImpression that can be forwarded to
// storage. If a reporting origin was not provided, default to the impression
// origin for reporting.
const url::Origin& reporting_origin = !impression.reporting_origin
? impression_origin
: *impression.reporting_origin;

// Conversion measurement is only allowed in secure contexts.
if (!network::IsOriginPotentiallyTrustworthy(impression_origin) ||
!network::IsOriginPotentiallyTrustworthy(reporting_origin) ||
!network::IsOriginPotentiallyTrustworthy(
impression.conversion_destination)) {
return;
}

const AttributionSourceType source_type = AttributionSourceType::kNavigation;
const base::Time impression_time = base::Time::Now();

StorableSource storable_impression(
// Impression data doesn't need to be sanitized.
CommonSourceInfo(
impression.impression_data, impression_origin,
impression.conversion_destination, reporting_origin, impression_time,
CommonSourceInfo::GetExpiryTime(impression.expiry, impression_time,
source_type),
source_type, impression.priority, AttributionFilterData(),
/*debug_key=*/absl::nullopt, AttributionAggregatableSource()));

attribution_manager->HandleSource(std::move(storable_impression));
}

void AttributionHost::MaybeNotifyFailedSourceNavigation(
Expand All @@ -247,24 +184,10 @@ void AttributionHost::MaybeNotifyFailedSourceNavigation(

absl::optional<blink::Impression> impression =
navigation_handle->GetImpression();
if (!impression || !impression->attribution_src_token) {
return;
}

data_host_manager->NotifyNavigationFailure(
*impression->attribution_src_token);
}

void AttributionHost::NotifyImpressionInitiatedByPage(
const url::Origin& impression_origin,
const blink::Impression& impression) {
if (!conversion_page_metrics_)
if (!impression)
return;

const url::Origin& reporting_origin = !impression.reporting_origin
? impression_origin
: *impression.reporting_origin;
conversion_page_metrics_->OnImpression(reporting_origin);
data_host_manager->NotifyNavigationFailure(impression->attribution_src_token);
}

void AttributionHost::RegisterDataHost(
Expand Down
10 changes: 0 additions & 10 deletions content/browser/attribution_reporting/attribution_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
namespace content {

class AttributionManagerProvider;
class AttributionPageMetrics;
class WebContents;

// Class responsible for listening to conversion events originating from blink,
Expand Down Expand Up @@ -56,10 +55,6 @@ class CONTENT_EXPORT AttributionHost
void DidStartNavigation(NavigationHandle* navigation_handle) override;
void DidFinishNavigation(NavigationHandle* navigation_handle) override;

// Notifies an impression.
void NotifyImpressionInitiatedByPage(const url::Origin& impression_origin,
const blink::Impression& impression);

// Notifies the `AttributionDataHostManager` that a navigation with an
// associated `AttributionDataHost` failed, if necessary.
void MaybeNotifyFailedSourceNavigation(NavigationHandle* navigation_handle);
Expand All @@ -83,11 +78,6 @@ class CONTENT_EXPORT AttributionHost
// and conversion registrations to.
std::unique_ptr<AttributionManagerProvider> attribution_manager_provider_;

// Logs metrics per top-level page load. Created for every top level
// navigation that commits, as long as there is a AttributionManager.
// Excludes the initial about:blank document.
std::unique_ptr<AttributionPageMetrics> conversion_page_metrics_;

RenderFrameHostReceiverSet<blink::mojom::ConversionHost> receivers_;

WEB_CONTENTS_USER_DATA_KEY_DECL();
Expand Down

0 comments on commit d797bf0

Please sign in to comment.