blob: 23d5116a001108df8ea5d473e597d9c8771728fd [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module attribution_internals.mojom;
import "components/attribution_reporting/registration.mojom";
import "components/attribution_reporting/source_registration_error.mojom";
import "components/attribution_reporting/source_type.mojom";
import "content/browser/attribution_reporting/attribution_reporting.mojom";
import "content/browser/attribution_reporting/store_source_result.mojom";
import "services/network/public/mojom/attribution.mojom";
import "services/network/public/mojom/schemeful_site.mojom";
import "url/mojom/origin.mojom";
import "url/mojom/url.mojom";
// Represents `AttributionReport::EventLevelData::Id`.
// Will be used to issue commands for individual reports.
struct EventLevelReportID {
int64 value;
};
// Represents `AttributionReport::AggregatableAttributionData::Id`.
// Will be used to issue commands for individual reports.
struct AggregatableAttributionReportID {
int64 value;
};
union ReportID {
EventLevelReportID event_level_id;
AggregatableAttributionReportID aggregatable_attribution_id;
};
// Contains event-level data to be displayed.
struct WebUIReportEventLevelData {
int64 priority;
bool attributed_truthfully;
};
// Represents `AggregatableHistogramContribution`.
struct AggregatableHistogramContribution {
// Hex-encoded unsigned 128-bit integer.
string key;
uint32 value;
};
struct AttestationToken {
string value;
};
// Contains aggregatable attribution data to be displayed.
struct WebUIReportAggregatableAttributionData {
array<AggregatableHistogramContribution> contributions;
AttestationToken? attestation_token;
string aggregation_coordinator;
};
union WebUIReportData {
WebUIReportEventLevelData event_level_data;
WebUIReportAggregatableAttributionData
aggregatable_attribution_data;
};
struct Empty {};
union ReportStatus {
Empty pending;
// Contains the external report ID of the replacement report.
string replaced_by_higher_priority_report;
Empty prohibited_by_browser_policy;
// Contains the HTTP response code.
int32 sent;
string network_error;
Empty failed_to_assemble;
};
// Struct containing stored data that will be sent in a future attribution
// report.
struct WebUIReport {
// Allows the WebUI to issue commands for individual reports.
// Not intended to be displayed.
ReportID id;
url.mojom.Url report_url;
double trigger_time;
double report_time;
string report_body;
ReportStatus status;
WebUIReportData data;
};
union DebugReportStatus {
int32 http_response_code;
string network_error;
};
struct WebUIDebugReport {
url.mojom.Url url;
double time;
string body;
DebugReportStatus status;
};
// Struct representing a stored attribution source that will be displayed by WebUI.
struct WebUISource {
uint64 source_event_id;
url.mojom.Origin source_origin;
array<network.mojom.SchemefulSite> destinations;
url.mojom.Origin reporting_origin;
double source_time;
double expiry_time;
double event_report_window_time;
double aggregatable_report_window_time;
attribution_reporting.mojom.SourceType source_type;
int64 priority;
attribution_reporting.mojom.DebugKey? debug_key;
array<uint64> dedup_keys;
map<string, array<string>> filter_data;
// The value is a hex-encoded unsigned 128-bit integer.
map<string, string> aggregation_keys;
uint64 aggregatable_budget_consumed;
array<uint64> aggregatable_dedup_keys;
enum Attributability {
kAttributable,
// The source was dropped due to `CommonSourceInfo::AttributionLogic::kNever`.
kNoisedNever,
// The source was dropped due to `CommonSourceInfo::AttributionLogic::kFalsely`.
kNoisedFalsely,
kReachedEventLevelAttributionLimit,
};
Attributability attributability;
};
struct WebUIRegistration {
double time;
url.mojom.Origin context_origin;
url.mojom.Origin reporting_origin;
// String instead of mojo_base.mojom.DictionaryValue because the value is
// simply displayed in the UI, never inspected.
string registration_json;
attribution_reporting.mojom.DebugKey? cleared_debug_key;
};
struct WebUITrigger {
WebUIRegistration registration;
network.mojom.TriggerAttestation? attestation;
enum Status {
// Shared statuses:
kSuccess,
kInternalError,
kNoMatchingSources,
kNoMatchingSourceFilterData,
kNoReportCapacityForDestinationSite,
kExcessiveAttributions,
kExcessiveReportingOrigins,
kProhibitedByBrowserPolicy,
kDeduplicated,
kReportWindowPassed,
kNotRegistered,
// Event-level statuses:
kLowPriority,
kNoised,
kNoMatchingConfigurations,
kExcessiveEventLevelReports,
// Aggregatable statuses:
kNoHistograms,
kInsufficientBudget,
};
Status event_level_status;
Status aggregatable_status;
};
union SourceStatus {
attribution_reporting.mojom.StoreSourceResult store_source_result;
attribution_reporting.mojom.SourceRegistrationError json_error;
};
struct WebUISourceRegistration {
WebUIRegistration registration;
attribution_reporting.mojom.SourceType type;
SourceStatus status;
};
// Observer for events relevant to the attribution internals WebUI.
interface Observer {
// Called when the sources in storage changed, indicating that the observer
// should call `Handler::GetActiveSources()`.
OnSourcesChanged();
// Called when the reports in storage changed, indicating that the observer
// should call `Handler::GetReports()`.
OnReportsChanged(attribution_reporting.mojom.ReportType report_type);
// Called when a source is registered, regardless of success or failure.
OnSourceHandled(WebUISourceRegistration source);
// Called when a report is sent, regardless of success.
OnReportSent(WebUIReport report);
// Called when a verbose debug report is sent, regardless of success.
OnDebugReportSent(WebUIDebugReport report);
// Called when a report is dropped from storage or prevented from being
// created in the first place.
OnReportDropped(WebUIReport report);
// Called when a trigger is registered, regardless of success or failure.
OnTriggerHandled(WebUITrigger trigger);
};
// Mojo interface for the attribution internals WebUI to communicate with the
// storage layer.
interface Handler {
// Returns whether attribution reporting and the debug mode are enabled in
// the browsing context the WebUI is in.
IsAttributionReportingEnabled() => (bool enabled, bool debug_mode);
// Returns all active sources that are persisted in storage. This does
// not include expired sources, or sources that can no longer be attributed
// due to reaching policy limits.
GetActiveSources() => (array<WebUISource> sources);
// Returns all reports of the specified type contained in storage, including
// those that are actively being sent.
GetReports(attribution_reporting.mojom.ReportType report_type) => (array<WebUIReport> reports);
// Sends the given reports, ignoring delay, returning when the operation has
// been completed and the reports have been cleared from storage.
SendReports(array<ReportID> ids) => ();
// Deletes all persisted data for the attribution reporting API, returning when the
// operation has been completed.
ClearStorage() => ();
};
// Factory for Observer and Handler.
interface Factory {
// Binds the observer and handler.
Create(pending_remote<Observer> observer,
pending_receiver<Handler> handler);
};