From d49d99ca336090b968bbf40e215011b5a47c903c Mon Sep 17 00:00:00 2001
From: uazo <uazo@users.noreply.github.com>
Date: Mon, 15 Nov 2021 09:43:29 +0000
Subject: [PATCH 12/12] Disable conversion measurement api

Disable Conversion Measurement API by disabling the flag and removing
support for the AttributionReporting provider. it also removes
the handling of attributions via intents between apps.
This patch enforces the deactivation by preventing the report from
being sent and being saved to disk, although it is currently in uncalled code.

Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
 .../browser/aw_content_browser_client.cc      |   3 +
 .../chromium/android_webview/AwSettings.java  |   4 +-
 chrome/android/java/AndroidManifest.xml       |   4 -
 .../ChromeSiteSettingsDelegate.java           |   2 +
 .../k_anonymity_trust_token_getter.cc         |   2 +-
 .../privacy_page/privacy_page_index.html      |   8 -
 chrome/browser/resources/settings/route.ts    |   2 +-
 .../site_settings_page/site_settings_page.ts  |   1 +
 .../aggregatable_trigger_config.cc            |   2 +-
 components/attribution_reporting/features.cc  |   1 +
 .../core/browser/content_settings_registry.cc |   2 +-
 .../origin_trials/features.cc                 |   1 +
 .../render_view_context_menu_base.cc          |   3 -
 .../aggregatable_report_sender.cc             |  15 +-
 .../attribution_data_host_manager_impl.cc     |   8 +-
 .../attribution_reporting/attribution_host.cc |   3 +-
 .../attribution_manager_impl.cc               |   4 -
 .../attribution_os_level_manager.cc           |   3 +-
 .../attribution_report_network_sender.cc      |   9 +
 .../attribution_storage_sql.cc                |   8 +-
 .../renderer_host/render_frame_host_impl.cc   |  11 +
 content/browser/storage_partition_impl.cc     |  12 -
 content/public/android/BUILD.gn               |   2 -
 .../browser/AttributionOsLevelManager.java    | 349 +-----------------
 .../public/browser/content_browser_client.cc  |   7 +-
 .../public/browser/navigation_controller.cc   |   1 -
 .../Disable-conversion-measurement-api.inc    |   2 +
 .../Disable-conversion-measurement-api.inc    |   8 +
 .../attribution/request_headers_internal.cc   |   1 +
 services/network/network_context.cc           |  24 +-
 .../network/public/cpp/attribution_utils.cc   |   2 +
 .../core/frame/attribution_src_loader.cc      |   2 -
 third_party/blink/renderer/core/page/page.cc  |   2 +-
 .../platform/runtime_enabled_features.json5   |  20 +-
 ui/events/android/motion_event_android.cc     |   8 +-
 35 files changed, 103 insertions(+), 433 deletions(-)
 create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc
 create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc

diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 56fccea07dc47..150368cd37104 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -1317,6 +1317,7 @@ network::mojom::AttributionSupport
 AwContentBrowserClient::GetAttributionSupport(
     AttributionReportingOsApiState state,
     bool client_os_disabled) {
+  if ((true)) return network::mojom::AttributionSupport::kNone;
   // WebView only supports OS-level attribution and not web-attribution.
   switch (state) {
     case AttributionReportingOsApiState::kDisabled:
@@ -1335,6 +1336,8 @@ bool AwContentBrowserClient::IsAttributionReportingOperationAllowed(
     const url::Origin* destination_origin,
     const url::Origin* reporting_origin,
     bool* can_bypass) {
+  if ((true))
+    return false;
   AwBrowserContext* aw_context =
       static_cast<AwBrowserContext*>(browser_context);
   // WebView only supports OS-level attribution and not web-attribution.
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
index 5633b0341881b..7984df108ee0e 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -202,7 +202,7 @@ public class AwSettings {
     private boolean mSpatialNavigationEnabled; // Default depends on device features.
     private boolean mEnableSupportedHardwareAcceleratedFeatures;
     private int mMixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW;
-    private int mAttributionBehavior = AttributionBehavior.APP_SOURCE_AND_WEB_TRIGGER;
+    private int mAttributionBehavior = AttributionBehavior.DISABLED;
 
     @SpeculativeLoadingAllowedFlags
     private int mSpeculativeLoadingAllowedFlags =
@@ -1784,7 +1784,7 @@ public class AwSettings {
     public void setAttributionBehavior(@AttributionBehavior int behavior) {
         synchronized (mAwSettingsLock) {
             if (mAttributionBehavior != behavior) {
-                mAttributionBehavior = behavior;
+                mAttributionBehavior = AttributionBehavior.DISABLED;
                 mEventHandler.updateWebkitPreferencesLocked();
             }
         }
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index 44297dfd1149d..f7e201bb71a84 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -39,7 +39,6 @@ by a child template that "extends" this file.
         <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
     {% endif %}
 
-    <uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION" />
     <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
     <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
     <!--
@@ -1218,9 +1217,6 @@ by a child template that "extends" this file.
             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" >
         </activity>
 
-        <property android:name="android.adservices.AD_SERVICES_CONFIG"
-            android:resource="@xml/ad_services_config" />
-
         {% set enable_openxr = enable_openxr|default(0) %}
         {% if enable_openxr == "true" %}
           <!-- launchMode is set to singleTask because there should never be multiple copies of the app running. -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
index 513444cb9677e..2f80dedf41278 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
@@ -150,6 +150,8 @@ public class ChromeSiteSettingsDelegate implements SiteSettingsDelegate {
                 // not great to dynamically remove the preference in this way.
             case SiteSettingsCategory.Type.ADS:
                 return SiteSettingsCategory.adsCategoryEnabled();
+            case SiteSettingsCategory.Type.ANTI_ABUSE:
+                return false;
             case SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT:
                 return ChromeFeatureList.isEnabled(
                         ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING);
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc b/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc
index 843ec6e4b17f6..a426b117fcdbf 100644
--- a/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc
+++ b/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc
@@ -120,7 +120,7 @@ KAnonymityTrustTokenGetter::~KAnonymityTrustTokenGetter() = default;
 
 void KAnonymityTrustTokenGetter::TryGetTrustTokenAndKey(
     TryGetTrustTokenAndKeyCallback callback) {
-  if (!identity_manager_ ||
+  if (((true)) || !identity_manager_ ||
       !identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) {
     std::move(callback).Run(std::nullopt);
     return;
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page_index.html b/chrome/browser/resources/settings/privacy_page/privacy_page_index.html
index 8a52848a1a859..5361ab9be32f6 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page_index.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page_index.html
@@ -177,14 +177,6 @@
     </settings-ar-page>
   </template>
 
-  <template is="dom-if" if="[[renderView_(
-      routes_.SITE_SETTINGS_AUTO_VERIFY, currentRoute, inSearchMode)]]">
-    <settings-anti-abuse-page slot="view" id="siteSettingsAutoVerify"
-        data-parent-view-id="privacy"
-        route-path$="[[routes_.SITE_SETTINGS_AUTO_VERIFY.path]]">
-    </settings-anti-abuse-page>
-  </template>
-
   <template is="dom-if" if="[[autoPictureInPictureEnabled_]]">
     <template is="dom-if" if="[[renderView_(
         routes_.SITE_SETTINGS_AUTO_PICTURE_IN_PICTURE, currentRoute,
diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts
index 1fd9c83cb74e7..47db305e4ed27 100644
--- a/chrome/browser/resources/settings/route.ts
+++ b/chrome/browser/resources/settings/route.ts
@@ -84,7 +84,7 @@ function addPrivacyChildRoutes(r: Partial<SettingsRoutes>) {
         r.SITE_SETTINGS.createChild('smartCardReaders');
   }
   // </if>
-  r.SITE_SETTINGS_AUTO_VERIFY = r.SITE_SETTINGS.createChild('autoVerify');
+  // r.SITE_SETTINGS_AUTO_VERIFY = r.SITE_SETTINGS.createChild('autoVerify');
   r.SITE_SETTINGS_BACKGROUND_SYNC =
       r.SITE_SETTINGS.createChild('backgroundSync');
   r.SITE_SETTINGS_CAMERA = r.SITE_SETTINGS.createChild('camera');
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts
index 906c204e8e1f9..253195f713f88 100644
--- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts
+++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts
@@ -66,6 +66,7 @@ function getCategoryItemMap(): Map<ContentSettingsTypes, CategoryListItem> {
       route: routes.SITE_SETTINGS_AUTO_VERIFY,
       id: Id.ANTI_ABUSE,
       label: 'siteSettingsAntiAbuse',
+      shouldShow: () => false,
       icon: 'privacy20:person-check',
       enabledLabel: 'siteSettingsAntiAbuseEnabledSubLabel',
       disabledLabel: 'siteSettingsAntiAbuseDisabledSubLabel',
diff --git a/components/attribution_reporting/aggregatable_trigger_config.cc b/components/attribution_reporting/aggregatable_trigger_config.cc
index a44cef72f909d..4e3cd469b36fa 100644
--- a/components/attribution_reporting/aggregatable_trigger_config.cc
+++ b/components/attribution_reporting/aggregatable_trigger_config.cc
@@ -102,7 +102,7 @@ bool IsValid(SourceRegistrationTimeConfig source_registration_time_config,
 
 base::expected<std::optional<std::string>, TriggerRegistrationError>
 ParseTriggerContextId(base::Value* value) {
-  if (!value) {
+  if ((true)) {
     return std::nullopt;
   }
 
diff --git a/components/attribution_reporting/features.cc b/components/attribution_reporting/features.cc
index b199e7682ad33..a5929da4e4ba1 100644
--- a/components/attribution_reporting/features.cc
+++ b/components/attribution_reporting/features.cc
@@ -11,4 +11,5 @@ namespace attribution_reporting::features {
 // Controls whether the Conversion Measurement API infrastructure is enabled.
 BASE_FEATURE(kConversionMeasurement, base::FEATURE_ENABLED_BY_DEFAULT);
 
+SET_CROMITE_FEATURE_DISABLED(kConversionMeasurement);
 }  // namespace attribution_reporting::features
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
index 4766cd8817d0b..b2cf30f3a7df3 100644
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -680,7 +680,7 @@ void ContentSettingsRegistry::Init() {
            ContentSettingsInfo::INHERIT_IN_INCOGNITO,
            PermissionSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
 
-  Register(ContentSettingsType::ANTI_ABUSE, "anti-abuse", CONTENT_SETTING_ALLOW,
+  Register(ContentSettingsType::ANTI_ABUSE, "anti-abuse", CONTENT_SETTING_BLOCK,
            WebsiteSettingsInfo::SYNCABLE,
            /*allowlisted_primary_schemes=*/{},
            /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
diff --git a/components/embedder_support/origin_trials/features.cc b/components/embedder_support/origin_trials/features.cc
index df26d9e881731..89237d70dcf4b 100644
--- a/components/embedder_support/origin_trials/features.cc
+++ b/components/embedder_support/origin_trials/features.cc
@@ -15,4 +15,5 @@ namespace embedder_support {
 // from the origin trial.
 BASE_FEATURE(kOriginTrialsSampleAPIThirdPartyAlternativeUsage,
              base::FEATURE_ENABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kOriginTrialsSampleAPIThirdPartyAlternativeUsage);
 }  // namespace embedder_support
diff --git a/components/renderer_context_menu/render_view_context_menu_base.cc b/components/renderer_context_menu/render_view_context_menu_base.cc
index ad4a62e7b5296..87d4ac9560279 100644
--- a/components/renderer_context_menu/render_view_context_menu_base.cc
+++ b/components/renderer_context_menu/render_view_context_menu_base.cc
@@ -541,9 +541,6 @@ RenderViewContextMenuBase::GetOpenURLParamsWithExtraHeaders(
 
   open_url_params.source_site_instance = site_instance_;
 
-  if (disposition != WindowOpenDisposition::OFF_THE_RECORD)
-    open_url_params.impression = params_.impression;
-
   return open_url_params;
 }
 
diff --git a/content/browser/aggregation_service/aggregatable_report_sender.cc b/content/browser/aggregation_service/aggregatable_report_sender.cc
index bdec3320a8416..062360fc938ca 100644
--- a/content/browser/aggregation_service/aggregatable_report_sender.cc
+++ b/content/browser/aggregation_service/aggregatable_report_sender.cc
@@ -192,13 +192,8 @@ void AggregatableReportSender::SendReport(GURL url,
   // Allow bodies of non-2xx responses to be returned.
   simple_url_loader_ptr->SetAllowHttpErrorResults(true);
 
-  // Unretained is safe because the URLLoader is owned by `this` and will be
-  // deleted before `this`.
-  simple_url_loader_ptr->DownloadHeadersOnly(
-      url_loader_factory_.get(),
-      base::BindOnce(&AggregatableReportSender::OnReportSent,
-                     base::Unretained(this), std::move(it), std::move(callback),
-                     delay_type, std::move(serialized_url)));
+  // this is never called on Bromite but nothing would be sent if it were
+  OnReportSent(std::move(it), std::move(callback), delay_type, std::move(serialized_url), nullptr);
 }
 
 void AggregatableReportSender::OnReportSent(
@@ -206,7 +201,11 @@ void AggregatableReportSender::OnReportSent(
     ReportSentCallback callback,
     std::optional<DelayType> delay_type,
     std::string serialized_url,
-    scoped_refptr<net::HttpResponseHeaders> headers) {
+    scoped_refptr<net::HttpResponseHeaders> headers) { // disable in Bromite
+  if ((true)) {
+    std::move(callback).Run(RequestStatus::kOk);
+    return;
+  }
   std::optional<int> http_response_code;
   if (headers) {
     http_response_code = headers->response_code();
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
index 675f2c620e117..4baeb880018fb 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
@@ -807,11 +807,9 @@ class AttributionDataHostManagerImpl::PendingRegistrationData {
         headers->GetNormalizedHeader(
             attribution_reporting::kAttributionReportingRegisterTriggerHeader);
 
-    std::optional<std::string> os_source_header = headers->GetNormalizedHeader(
-        attribution_reporting::kAttributionReportingRegisterOsSourceHeader);
+    std::optional<std::string> os_source_header;
 
-    std::optional<std::string> os_trigger_header = headers->GetNormalizedHeader(
-        attribution_reporting::kAttributionReportingRegisterOsTriggerHeader);
+    std::optional<std::string> os_trigger_header;
 
     const bool has_source =
         web_source_header.has_value() || os_source_header.has_value();
@@ -1166,6 +1164,8 @@ void AttributionDataHostManagerImpl::ParseHeader(
     Registrations& registrations,
     HeaderPendingDecode pending_decode,
     Registrar registrar) {
+  if ((true)) return;
+
   switch (registrations.eligibility()) {
     case RegistrationEligibility::kSourceOrTrigger:
       break;
diff --git a/content/browser/attribution_reporting/attribution_host.cc b/content/browser/attribution_reporting/attribution_host.cc
index 7332c82e10be2..e27f6cb64f867 100644
--- a/content/browser/attribution_reporting/attribution_host.cc
+++ b/content/browser/attribution_reporting/attribution_host.cc
@@ -132,8 +132,6 @@ AttributionHost::AttributionHost(WebContents* web_contents)
       attribution_reporting::features::kConversionMeasurement));
 
 #if BUILDFLAG(IS_ANDROID)
-  input_event_tracker_android_ =
-      std::make_unique<AttributionInputEventTrackerAndroid>(web_contents);
 #endif
 }
 
@@ -346,6 +344,7 @@ void AttributionHost::NotifyNavigationRegistrationData(
     return;
   }
 
+  if ((true)) return;
   auto* attribution_manager =
       AttributionManager::FromWebContents(web_contents());
   CHECK(attribution_manager);
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.cc b/content/browser/attribution_reporting/attribution_manager_impl.cc
index 485d725ef5c1c..c0983ddfcf4ca 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_manager_impl.cc
@@ -601,11 +601,7 @@ bool IsOperationAllowed(
 }
 
 std::unique_ptr<AttributionOsLevelManager> CreateOsLevelManager() {
-#if BUILDFLAG(IS_ANDROID)
-  return std::make_unique<AttributionOsLevelManagerAndroid>();
-#else
   return std::make_unique<NoOpAttributionOsLevelManager>();
-#endif
 }
 
 base::Time GetReportExpiryTime(const AttributionReport& report) {
diff --git a/content/browser/attribution_reporting/attribution_os_level_manager.cc b/content/browser/attribution_reporting/attribution_os_level_manager.cc
index 21787d459d6dd..2d21801d7876f 100644
--- a/content/browser/attribution_reporting/attribution_os_level_manager.cc
+++ b/content/browser/attribution_reporting/attribution_os_level_manager.cc
@@ -46,6 +46,7 @@ std::optional<ApiState> g_state GUARDED_BY_CONTEXT(GetSequenceChecker());
 
 // static
 bool AttributionOsLevelManager::ShouldInitializeApiState() {
+  if ((true)) return false;
   DCHECK_CALLED_ON_VALID_SEQUENCE(GetSequenceChecker());
   if (g_state.has_value()) {
     return false;
@@ -57,7 +58,7 @@ bool AttributionOsLevelManager::ShouldInitializeApiState() {
 // static
 ApiState AttributionOsLevelManager::GetApiState() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(GetSequenceChecker());
-  return g_state.value_or(ApiState::kDisabled);
+  return ApiState::kDisabled;
 }
 
 // static
diff --git a/content/browser/attribution_reporting/attribution_report_network_sender.cc b/content/browser/attribution_reporting/attribution_report_network_sender.cc
index 1351c55b3bc27..426abb97f42a3 100644
--- a/content/browser/attribution_reporting/attribution_report_network_sender.cc
+++ b/content/browser/attribution_reporting/attribution_report_network_sender.cc
@@ -155,6 +155,9 @@ void AttributionReportNetworkSender::SendReport(GURL url,
                                                 url::Origin origin,
                                                 std::string body,
                                                 UrlLoaderCallback callback) {
+  // this is never called on Bromite but nothing would be sent if it were
+  if ((true)) return;
+
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = std::move(url);
   resource_request->method = net::HttpRequestHeaders::kPostMethod;
@@ -230,6 +233,12 @@ void AttributionReportNetworkSender::OnReportSent(
     ReportSentCallback sent_callback,
     UrlLoaderList::iterator it,
     scoped_refptr<net::HttpResponseHeaders> headers) {
+  if ((true)) {
+    std::move(sent_callback)
+        .Run(report,
+             SendResult::Sent(SendResult::Sent::Result::kSent, 200));
+    return;
+  }
   network::SimpleURLLoader* loader = it->get();
 
   const int net_error = loader->NetError();
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc
index b32d9d850eee0..8313c0f87413d 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -539,6 +539,8 @@ void AssignSourceForDeactivationOrDeletion(
   }
 }
 
+bool g_run_in_memory = true;
+
 }  // namespace
 
 // static
@@ -561,9 +563,9 @@ bool AttributionStorageSql::Transaction::Commit() {
 AttributionStorageSql::AttributionStorageSql(
     const base::FilePath& user_data_directory,
     AttributionResolverDelegate* delegate)
-    : path_to_database_(user_data_directory.empty()
-                            ? base::FilePath()
-                            : DatabasePath(user_data_directory)),
+    : path_to_database_(user_data_directory.empty() || g_run_in_memory
+                             ? base::FilePath()
+                             : DatabasePath(user_data_directory)),
       db_(sql::DatabaseOptions().set_cache_size(32),
           /*tag=*/"Conversions"),
       delegate_(delegate),
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 59c9498a6d42b..9746393b6668b 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -10511,6 +10511,7 @@ bool RenderFrameHostImpl::IsFencedFrameReportingFromRendererAllowed(
     return false;
   }
 
+  if ((true)) return false;
   if (!IsActive()) {
     // reportEvent is not allowed when this RenderFrameHost or one of its
     // ancestors is not active.
@@ -14517,6 +14518,16 @@ void RenderFrameHostImpl::BindTrustTokenQueryAnswerer(
     return;
   }
 
+  // flags are enforced in benign renderers by the
+  // RuntimeEnabled=PrivateStateTokens IDL attribute (the base::Feature's value
+  // is tied to the RuntimeEnabledFeature's).
+  if ((true)) {
+    mojo::ReportBadMessage(
+        "Attempted to get a TrustTokenQueryAnswerer with Private State Tokens "
+        "disabled.");
+    return;
+  }
+
   // TODO(crbug.com/40729410): Document.hasPrivateToken is restricted to
   // secure contexts, so we could additionally add a check verifying that the
   // bind request "is coming from a secure context"---but there's currently no
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index 4c53df5d97ea9..6004b4599c1f8 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -1505,15 +1505,6 @@ void StoragePartitionImpl::Initialize(
 
   bucket_manager_ = std::make_unique<BucketManager>(this);
 
-  if (base::FeatureList::IsEnabled(
-          attribution_reporting::features::kConversionMeasurement)) {
-    // The Conversion Measurement API is not available in Incognito mode, but
-    // this is enforced by the `AttributionManagerImpl` itself for better error
-    // reporting and metrics.
-    attribution_manager_ = std::make_unique<AttributionManagerImpl>(
-        this, path, special_storage_policy_);
-  }
-
   if (base::FeatureList::IsEnabled(network::features::kInterestGroupStorage)) {
     // Auction worklets on non-Android use dedicated processes; on Android due
     // to high cost of process launch they try to reuse renderers.
@@ -1565,9 +1556,6 @@ void StoragePartitionImpl::Initialize(
 
   font_access_manager_ = FontAccessManager::Create();
 
-  aggregation_service_ =
-      std::make_unique<AggregationServiceImpl>(is_in_memory(), path, this);
-
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
   if (is_in_memory()) {
     // Pass an empty path if in_memory so that CdmStorage.db is not stored on
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 85ef496ee2dd3..9e29889064c22 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -215,8 +215,6 @@ android_library("content_full_java") {
     "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
     "//third_party/androidx:androidx_collection_collection_java",
     "//third_party/androidx:androidx_core_core_java",
-    "//third_party/androidx:androidx_privacysandbox_ads_ads_adservices_java",
-    "//third_party/androidx:androidx_privacysandbox_ads_ads_adservices_java_java",
     "//third_party/androidx/local_modifications/window:window_util_java",
     "//third_party/blink/public:blink_headers_java",
     "//third_party/blink/public/common:common_java",
diff --git a/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java b/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java
index 85cabdbd730a0..4e2dc6dc1b3bd 100644
--- a/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java
@@ -15,18 +15,6 @@ import android.view.MotionEvent;
 
 import androidx.annotation.IntDef;
 import androidx.annotation.OptIn;
-import androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures;
-import androidx.privacysandbox.ads.adservices.measurement.DeletionRequest;
-import androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest;
-import androidx.privacysandbox.ads.adservices.measurement.WebSourceParams;
-import androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest;
-import androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams;
-import androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
 
 import org.jni_zero.CalledByNative;
 import org.jni_zero.JNINamespace;
@@ -61,6 +49,10 @@ import java.util.concurrent.TimeoutException;
 @JNINamespace("content")
 @NullMarked
 public class AttributionOsLevelManager {
+    private class MeasurementManagerFutures {}
+    private class WebTriggerParams {}
+    private class WebSourceParams {}
+
     private static final String TAG = "AttributionManager";
     // TODO: replace with constant in android.Manifest.permission once it becomes available in U.
     private static final String PERMISSION_ACCESS_ADSERVICES_ATTRIBUTION =
@@ -145,100 +137,11 @@ public class AttributionOsLevelManager {
     }
 
     private static boolean supportsAttribution() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R;
-    }
-
-    private static @OperationResult int getOperationResultFromMessage(@Nullable String message) {
-        if (message == null) {
-            return OperationResult.ERROR_UNKNOWN;
-        } else {
-            String lowerMessage = message.toLowerCase(Locale.US);
-            if (lowerMessage.contains("background")) {
-                return OperationResult.ERROR_BACKGROUND_CALLER;
-            } else if (lowerMessage.contains("unable to find the service")) {
-                return OperationResult.ERROR_SERVICE_NOT_FOUND;
-            } else if (lowerMessage.contains("service is not available")) {
-                return OperationResult.ERROR_SERVICE_UNAVAILABLE;
-            } else if (lowerMessage.contains("api rate limit exceeded")) {
-                return OperationResult.ERROR_API_RATE_LIMIT_EXCEEDED;
-            } else if (lowerMessage.contains("server rate limit exceeded")) {
-                return OperationResult.ERROR_SERVER_RATE_LIMIT_EXCEEDED;
-            } else if (lowerMessage.contains(
-                    "caller is not authorized to access information from another user")) {
-                return OperationResult.ERROR_CALLER_NOT_ALLOWED_TO_CROSS_USER_BOUNDARIES;
-            } else if (lowerMessage.contains(
-                    "caller is not allowed to perform this operation on behalf of the given"
-                            + " package")) {
-                return OperationResult.ERROR_CALLER_NOT_ALLOWED_ON_BEHALF;
-            } else if (lowerMessage.contains("permission was not requested")) {
-                return OperationResult.ERROR_PERMISSION_NOT_REQUESTED;
-            } else if (lowerMessage.contains("caller is not allowed")) {
-                return OperationResult.ERROR_CALLER_NOT_ALLOWED;
-            } else if (lowerMessage.contains("api time out")) {
-                return OperationResult.ERROR_TIMEOUT;
-            } else if (lowerMessage.contains("failed to encrypt responses")) {
-                return OperationResult.ERROR_ENCRYPTION_FAILURE;
-            } else if (lowerMessage.contains(
-                    "service received an invalid object from the server")) {
-                return OperationResult.ERROR_INVALID_OBJECT;
-            } else {
-                return OperationResult.ERROR_UNKNOWN;
-            }
-        }
-    }
-
-    private static @OperationResult int convertToOperationResult(Throwable thrown) {
-        @OperationResult int result = getOperationResultFromMessage(thrown.getMessage());
-        if (result != OperationResult.ERROR_UNKNOWN) {
-            return result;
-        } else if (thrown instanceof IllegalArgumentException) {
-            return OperationResult.ERROR_ILLEGAL_ARGUMENT;
-        } else if (thrown instanceof IOException) {
-            return OperationResult.ERROR_IO;
-        } else if (thrown instanceof IllegalStateException) {
-            return OperationResult.ERROR_ILLEGAL_STATE;
-        } else if (thrown instanceof SecurityException) {
-            return OperationResult.ERROR_SECURITY;
-        } else if (thrown instanceof TimeoutException) {
-            return OperationResult.ERROR_TIMEOUT;
-        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
-                && thrown instanceof LimitExceededException) {
-            return OperationResult.ERROR_LIMIT_EXCEEDED;
-        } else if (thrown instanceof InvalidObjectException) {
-            return OperationResult.ERROR_INVALID_OBJECT;
-        } else {
-            return OperationResult.ERROR_UNKNOWN;
-        }
+        return false;
     }
 
     private static void recordOperationResult(
             @OperationType int type, @OperationResult int result) {
-        String suffix = "";
-        switch (type) {
-            case OperationType.REGISTER_SOURCE:
-                suffix = "RegisterSource";
-                break;
-            case OperationType.REGISTER_WEB_SOURCE:
-                suffix = "RegisterWebSource";
-                break;
-            case OperationType.REGISTER_TRIGGER:
-                suffix = "RegisterTrigger";
-                break;
-            case OperationType.REGISTER_WEB_TRIGGER:
-                suffix = "RegisterWebTrigger";
-                break;
-            case OperationType.GET_MEASUREMENT_API_STATUS:
-                suffix = "GetMeasurementApiStatus";
-                break;
-            case OperationType.DELETE_REGISTRATIONS:
-                suffix = "DeleteRegistrations";
-                break;
-        }
-
-        assert suffix.length() > 0;
-
-        RecordHistogram.recordEnumeratedHistogram(
-                "Conversions.AndroidOperationResult2." + suffix, result, OperationResult.COUNT);
     }
 
     @CalledByNative
@@ -247,22 +150,7 @@ public class AttributionOsLevelManager {
     }
 
     private @Nullable MeasurementManagerFutures getManager() {
-        if (!supportsAttribution()) {
-            return null;
-        }
-        if (sManagerForTesting != null) {
-            return sManagerForTesting;
-        }
-        if (mManager != null) {
-            return mManager;
-        }
-        try {
-            mManager = MeasurementManagerFutures.from(ContextUtils.getApplicationContext());
-        } catch (Throwable t) {
-            // An error may be thrown if android.ext.adservices is not loaded.
-            Log.i(TAG, "Failed to get measurement manager", t);
-        }
-        return mManager;
+        return null;
     }
 
     private void onRegistrationCompleted(
@@ -276,28 +164,6 @@ public class AttributionOsLevelManager {
         }
     }
 
-    private void addRegistrationFutureCallback(
-            int requestId, @OperationType int type, ListenableFuture<?> future) {
-        if (!supportsAttribution()) {
-            return;
-        }
-        Futures.addCallback(
-                future,
-                new FutureCallback<Object>() {
-                    @Override
-                    public void onSuccess(@Nullable Object result) {
-                        onRegistrationCompleted(requestId, type, OperationResult.SUCCESS);
-                    }
-
-                    @Override
-                    public void onFailure(Throwable thrown) {
-                        Log.w(TAG, "Failed to register", thrown);
-                        onRegistrationCompleted(requestId, type, convertToOperationResult(thrown));
-                    }
-                },
-                PostTask.getUiBestEffortExecutor());
-    }
-
     @CalledByNative
     private static @Nullable List<WebSourceParams> createWebSourceParamsList(int size) {
         if (!supportsAttribution()) {
@@ -312,7 +178,6 @@ public class AttributionOsLevelManager {
         if (!supportsAttribution()) {
             return;
         }
-        list.add(new WebSourceParams(Uri.parse(registrationUrl.getSpec()), isDebugKeyAllowed));
     }
 
     /**
@@ -329,32 +194,12 @@ public class AttributionOsLevelManager {
                     OperationResult.ERROR_VERSION_UNSUPPORTED);
             return;
         }
-        MeasurementManagerFutures mm = getManager();
-        if (mm == null) {
-            onRegistrationCompleted(
-                    requestId, OperationType.REGISTER_WEB_SOURCE, OperationResult.ERROR_INTERNAL);
-            return;
-        }
-        ListenableFuture<?> future =
-                mm.registerWebSourceAsync(
-                        new WebSourceRegistrationRequest(
-                                sources,
-                                Uri.parse(topLevelOrigin.getSpec()),
-                                /* inputEvent= */ event,
-                                /* appDestination= */ null,
-                                /* webDestination= */ null,
-                                /* verifiedDestination= */ null));
-        addRegistrationFutureCallback(requestId, OperationType.REGISTER_WEB_SOURCE, future);
     }
 
     /**
      * Registers an attribution source with native, see `registerSourceAsync()`:
      * https://developer.android.com/reference/androidx/privacysandbox/ads/adservices/java/measurement/MeasurementManagerFutures.
      */
-    @OptIn(
-            markerClass =
-                    androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures
-                            .RegisterSourceOptIn.class)
     @CalledByNative
     private void registerAttributionSource(
             int requestId, @JniType("std::vector") GURL[] registrationUrls, MotionEvent event) {
@@ -365,37 +210,16 @@ public class AttributionOsLevelManager {
                     OperationResult.ERROR_VERSION_UNSUPPORTED);
             return;
         }
-        MeasurementManagerFutures mm = getManager();
-        if (mm == null) {
-            onRegistrationCompleted(
-                    requestId, OperationType.REGISTER_SOURCE, OperationResult.ERROR_INTERNAL);
-            return;
-        }
-
-        ArrayList<Uri> registrationUris = new ArrayList<Uri>(registrationUrls.length);
-        for (GURL registrationUrl : registrationUrls) {
-            registrationUris.add(Uri.parse(registrationUrl.getSpec()));
-        }
-        ListenableFuture<?> future =
-                mm.registerSourceAsync(new SourceRegistrationRequest(registrationUris, event));
-        addRegistrationFutureCallback(requestId, OperationType.REGISTER_SOURCE, future);
     }
 
     @CalledByNative
     private static @Nullable List<WebTriggerParams> createWebTriggerParamsList(int size) {
-        if (!supportsAttribution()) {
-            return null;
-        }
-        return new ArrayList<WebTriggerParams>(size);
+        return null;
     }
 
     @CalledByNative
     private static void addWebTriggerParams(
             List<WebTriggerParams> list, GURL registrationUrl, boolean isDebugKeyAllowed) {
-        if (!supportsAttribution()) {
-            return;
-        }
-        list.add(new WebTriggerParams(Uri.parse(registrationUrl.getSpec()), isDebugKeyAllowed));
     }
 
     /**
@@ -412,18 +236,6 @@ public class AttributionOsLevelManager {
                     OperationResult.ERROR_VERSION_UNSUPPORTED);
             return;
         }
-
-        MeasurementManagerFutures mm = getManager();
-        if (mm == null) {
-            onRegistrationCompleted(
-                    requestId, OperationType.REGISTER_WEB_TRIGGER, OperationResult.ERROR_INTERNAL);
-            return;
-        }
-        ListenableFuture<?> future =
-                mm.registerWebTriggerAsync(
-                        new WebTriggerRegistrationRequest(
-                                triggers, Uri.parse(topLevelOrigin.getSpec())));
-        addRegistrationFutureCallback(requestId, OperationType.REGISTER_WEB_TRIGGER, future);
     }
 
     /**
@@ -439,15 +251,6 @@ public class AttributionOsLevelManager {
                     OperationResult.ERROR_VERSION_UNSUPPORTED);
             return;
         }
-
-        MeasurementManagerFutures mm = getManager();
-        if (mm == null) {
-            onRegistrationCompleted(
-                    requestId, OperationType.REGISTER_TRIGGER, OperationResult.ERROR_INTERNAL);
-            return;
-        }
-        ListenableFuture<?> future = mm.registerTriggerAsync(Uri.parse(registrationUrl.getSpec()));
-        addRegistrationFutureCallback(requestId, OperationType.REGISTER_TRIGGER, future);
     }
 
     private void onDataDeletionCompleted(int requestId) {
@@ -482,96 +285,7 @@ public class AttributionOsLevelManager {
             onDataDeletionCompleted(requestId);
             return;
         }
-
-        // Currently Android and Chromium have different matching behaviors when both
-        // `origins` and `domains` are empty.
-        // Chromium: Delete -> Delete nothing; Preserve -> Delete all.
-        // Android: Delete -> Delete all; Preserve -> Delete nothing.
-        // Android may fix the behavior in the future. As a workaround, Chromium will
-        // not call Android if it's to delete nothing (no-op), and call Android with
-        // both Delete and Preserve modes if it's to delete all. These two modes will
-        // be one no-op and one delete all in Android releases with and without the
-        // fix. See crbug.com/1442967.
-
-        ImmutableList<Integer> matchBehaviors = null;
-
-        if (origins.length == 0 && domains.length == 0) {
-            switch (matchBehavior) {
-                case DeletionRequest.MATCH_BEHAVIOR_DELETE:
-                    recordOperationResult(
-                            OperationType.DELETE_REGISTRATIONS, OperationResult.SUCCESS);
-                    onDataDeletionCompleted(requestId);
-                    return;
-                case DeletionRequest.MATCH_BEHAVIOR_PRESERVE:
-                    matchBehaviors =
-                            ImmutableList.of(
-                                    DeletionRequest.MATCH_BEHAVIOR_DELETE,
-                                    DeletionRequest.MATCH_BEHAVIOR_PRESERVE);
-                    break;
-                default:
-                    Log.e(TAG, "Received invalid match behavior: ", matchBehavior);
-                    recordOperationResult(
-                            OperationType.DELETE_REGISTRATIONS, OperationResult.ERROR_UNKNOWN);
-                    onDataDeletionCompleted(requestId);
-                    return;
-            }
-        } else {
-            matchBehaviors = ImmutableList.of(matchBehavior);
-        }
-
-        ArrayList<Uri> originUris = new ArrayList<Uri>(origins.length);
-        for (GURL origin : origins) {
-            originUris.add(Uri.parse(origin.getSpec()));
-        }
-
-        ArrayList<Uri> domainUris = new ArrayList<Uri>(domains.length);
-        for (String domain : domains) {
-            domainUris.add(Uri.parse(domain));
-        }
-
-        int numCalls = matchBehaviors.size();
-
-        FutureCallback<Object> callback =
-                new FutureCallback<Object>() {
-                    private int mNumPendingCalls = numCalls;
-
-                    private void onCall() {
-                        if (--mNumPendingCalls == 0) {
-                            onDataDeletionCompleted(requestId);
-                        }
-                    }
-
-                    @Override
-                    public void onSuccess(@Nullable Object result) {
-                        recordOperationResult(
-                                OperationType.DELETE_REGISTRATIONS, OperationResult.SUCCESS);
-                        onCall();
-                    }
-
-                    @Override
-                    public void onFailure(Throwable thrown) {
-                        Log.w(TAG, "Failed to delete measurement API data", thrown);
-                        recordOperationResult(
-                                OperationType.DELETE_REGISTRATIONS,
-                                convertToOperationResult(thrown));
-                        onCall();
-                    }
-                };
-
-        for (int currMatchBehavior : matchBehaviors) {
-            ListenableFuture<?> future =
-                    mm.deleteRegistrationsAsync(
-                            new DeletionRequest(
-                                    deletionMode,
-                                    currMatchBehavior,
-                                    Instant.ofEpochMilli(startMs),
-                                    Instant.ofEpochMilli(endMs),
-                                    domainUris,
-                                    originUris));
-
-            Futures.addCallback(
-                    future, callback, PostTask.getUiUserVisibleExecutor());
-        }
+        onDataDeletionCompleted(requestId);
     }
 
     private static void onMeasurementStateReturned(int status, @OperationResult int result) {
@@ -587,6 +301,10 @@ public class AttributionOsLevelManager {
     private static void getMeasurementApiStatus() {
         ThreadUtils.assertOnBackgroundThread();
 
+        if ((true)) {
+            AttributionOsLevelManagerJni.get().onMeasurementStateReturned(0);
+            return;
+        }
         if (sManagerForTesting != null) {
             AttributionOsLevelManagerJni.get().onMeasurementStateReturned(1);
             return;
@@ -606,49 +324,6 @@ public class AttributionOsLevelManager {
             onMeasurementStateReturned(/* status= */ 0, OperationResult.ERROR_PERMISSION_UNGRANTED);
             return;
         }
-        MeasurementManagerFutures mm = null;
-        try {
-            mm = MeasurementManagerFutures.from(ContextUtils.getApplicationContext());
-        } catch (Throwable t) {
-            // An error may be thrown if android.ext.adservices is not loaded.
-            Log.i(TAG, "Failed to get measurement manager", t);
-        }
-
-        if (mm == null) {
-            onMeasurementStateReturned(/* status= */ 0, OperationResult.ERROR_INTERNAL);
-            return;
-        }
-
-        ListenableFuture<Integer> future = null;
-        try {
-            future = mm.getMeasurementApiStatusAsync();
-        } catch (IllegalStateException ex) {
-            // An illegal state exception may be thrown for some versions of the underlying
-            // Privacy Sandbox SDK.
-            Log.i(TAG, "Failed to get measurement API status", ex);
-        }
-
-        if (future == null) {
-            onMeasurementStateReturned(/* status= */ 0, OperationResult.ERROR_INTERNAL);
-            return;
-        }
-
-        Futures.addCallback(
-                future,
-                new FutureCallback<Integer>() {
-                    @Override
-                    public void onSuccess(@Nullable Integer status) {
-                        onMeasurementStateReturned(assumeNonNull(status), OperationResult.SUCCESS);
-                    }
-
-                    @Override
-                    public void onFailure(Throwable thrown) {
-                        Log.w(TAG, "Failed to get measurement API status", thrown);
-                        onMeasurementStateReturned(
-                                /* status= */ 0, convertToOperationResult(thrown));
-                    }
-                },
-                PostTask.getUiUserBlockingExecutor());
     }
 
     @CalledByNative
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index 68bafbcd65301..f6ae15393ead7 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -639,6 +639,7 @@ void ContentBrowserClient::OnAuctionComplete(
 network::mojom::AttributionSupport ContentBrowserClient::GetAttributionSupport(
     AttributionReportingOsApiState state,
     bool client_os_disabled) {
+  if ((true)) return network::mojom::AttributionSupport::kNone;
   switch (state) {
     case AttributionReportingOsApiState::kDisabled:
       return network::mojom::AttributionSupport::kWeb;
@@ -656,13 +657,13 @@ bool ContentBrowserClient::IsAttributionReportingOperationAllowed(
     const url::Origin* destination_origin,
     const url::Origin* reporting_origin,
     bool* can_bypass) {
-  return true;
+  return false;
 }
 
 ContentBrowserClient::AttributionReportingOsRegistrars
 ContentBrowserClient::GetAttributionReportingOsRegistrars(
     WebContents* web_contents) {
-  return {AttributionReportType::kWeb, AttributionReportType::kWeb};
+  return {AttributionReportType::kDisabled, AttributionReportType::kDisabled};
 }
 
 bool ContentBrowserClient::IsAttributionReportingAllowedForContext(
@@ -670,7 +671,7 @@ bool ContentBrowserClient::IsAttributionReportingAllowedForContext(
     content::RenderFrameHost* rfh,
     const url::Origin& context_origin,
     const url::Origin& reporting_origin) {
-  return true;
+  return false;
 }
 
 bool ContentBrowserClient::IsSharedStorageAllowed(
diff --git a/content/public/browser/navigation_controller.cc b/content/public/browser/navigation_controller.cc
index 4ef54807744e9..ff359411de028 100644
--- a/content/public/browser/navigation_controller.cc
+++ b/content/public/browser/navigation_controller.cc
@@ -40,7 +40,6 @@ NavigationController::LoadURLParams::LoadURLParams(const OpenURLParams& input)
       blob_url_loader_factory(input.blob_url_loader_factory),
       href_translate(input.href_translate),
       reload_type(input.reload_type),
-      impression(input.impression),
       is_pdf(input.is_pdf),
       has_rel_opener(input.has_rel_opener) {
 #if DCHECK_IS_ON()
diff --git a/cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc b/cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc
new file mode 100644
index 0000000000000..3487672196460
--- /dev/null
+++ b/cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopics);
+SET_CROMITE_FEATURE_DISABLED(kInterestGroupStorage);
diff --git a/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc b/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc
new file mode 100644
index 0000000000000..08338bef3c5a2
--- /dev/null
+++ b/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc
@@ -0,0 +1,8 @@
+SET_CROMITE_FEATURE_DISABLED(kAdAuctionSignals);
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopicsDocumentAPI);
+SET_CROMITE_FEATURE_DISABLED(kBrowsingTopicsParameters);
+SET_CROMITE_FEATURE_DISABLED(kFledge);
+SET_CROMITE_FEATURE_DISABLED(kFledgeBiddingAndAuctionServer);
+SET_CROMITE_FEATURE_DISABLED(kPrivateAggregationApi);
+SET_CROMITE_FEATURE_DISABLED(kAllowURNsInIframes);
+SET_CROMITE_FEATURE_DISABLED(kFledgeSampleDebugReports);
diff --git a/services/network/attribution/request_headers_internal.cc b/services/network/attribution/request_headers_internal.cc
index 430b310c9179f..a91c599f06826 100644
--- a/services/network/attribution/request_headers_internal.cc
+++ b/services/network/attribution/request_headers_internal.cc
@@ -189,6 +189,7 @@ std::string SerializeAttributionReportingEligibleHeader(
 std::string GetAttributionSupportHeader(
     mojom::AttributionSupport attribution_support,
     const AttributionReportingHeaderGreaseOptions& options) {
+  if ((true)) return "";
   std::vector<net::structured_headers::DictionaryMember> registrars;
 
   const char* grease1;
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index ec828e8fe98bc..73c99c6c497ca 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -1316,6 +1316,10 @@ void NetworkContext::ClearTrustTokenData(mojom::ClearDataFilterPtr filter,
 
 void NetworkContext::ClearTrustTokenSessionOnlyData(
     ClearTrustTokenSessionOnlyDataCallback callback) {
+  if (!trust_token_store_) {
+    std::move(callback).Run(false);
+    return;
+  }
   // Only called when Private State Tokens is enabled, i.e.,
   // `trust_token_store_` is non-null.
   DCHECK(trust_token_store_);
@@ -2759,26 +2763,6 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
     builder.set_network_quality_estimator(
         network_service_->network_quality_estimator());
   }
-  trust_token_store_ = std::make_unique<PendingTrustTokenStore>();
-
-  base::FilePath trust_token_path;
-  if (GetFullDataFilePath(
-          params_->file_paths,
-          &network::mojom::NetworkContextFilePaths::trust_token_database_name,
-          trust_token_path)) {
-    SQLiteTrustTokenPersister::CreateForFilePath(
-        base::ThreadPool::CreateSequencedTaskRunner(
-            {base::MayBlock(), kTrustTokenDatabaseTaskPriority,
-             base::TaskShutdownBehavior::BLOCK_SHUTDOWN}),
-        trust_token_path, kTrustTokenWriteBufferingWindow,
-        base::BindOnce(&NetworkContext::FinishConstructingTrustTokenStore,
-                       weak_factory_.GetWeakPtr()));
-  } else {
-    trust_token_store_->OnStoreReady(std::make_unique<TrustTokenStore>(
-        std::make_unique<InMemoryTrustTokenPersister>(),
-        std::make_unique<ExpiryInspectingRecordExpiryDelegate>(
-            network_service()->trust_token_key_commitments())));
-  }
 
   std::unique_ptr<net::StaticHttpUserAgentSettings> user_agent_settings =
       std::make_unique<net::StaticHttpUserAgentSettings>(
diff --git a/services/network/public/cpp/attribution_utils.cc b/services/network/public/cpp/attribution_utils.cc
index 17ba678f15681..540b02540358d 100644
--- a/services/network/public/cpp/attribution_utils.cc
+++ b/services/network/public/cpp/attribution_utils.cc
@@ -9,6 +9,7 @@
 namespace network {
 
 bool HasAttributionOsSupport(mojom::AttributionSupport attribution_support) {
+  if ((true)) return false;
   switch (attribution_support) {
     case mojom::AttributionSupport::kOs:
     case mojom::AttributionSupport::kWebAndOs:
@@ -21,6 +22,7 @@ bool HasAttributionOsSupport(mojom::AttributionSupport attribution_support) {
 }
 
 bool HasAttributionWebSupport(mojom::AttributionSupport attribution_support) {
+  if ((true)) return false;
   switch (attribution_support) {
     case mojom::AttributionSupport::kWeb:
     case mojom::AttributionSupport::kWebAndOs:
diff --git a/third_party/blink/renderer/core/frame/attribution_src_loader.cc b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
index 63ee957259210..1e142b41664b7 100644
--- a/third_party/blink/renderer/core/frame/attribution_src_loader.cc
+++ b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
@@ -209,8 +209,6 @@ struct AttributionSrcLoader::AttributionHeaders {
                      uint64_t request_id)
       : web_source(map.Get(http_names::kAttributionReportingRegisterSource)),
         web_trigger(map.Get(http_names::kAttributionReportingRegisterTrigger)),
-        os_source(map.Get(http_names::kAttributionReportingRegisterOSSource)),
-        os_trigger(map.Get(http_names::kAttributionReportingRegisterOSTrigger)),
         request_url(request_url),
         request_id(request_id) {}
 
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc
index 4bae310f299a2..98663da4be7b4 100644
--- a/third_party/blink/renderer/core/page/page.cc
+++ b/third_party/blink/renderer/core/page/page.cc
@@ -1620,7 +1620,7 @@ void Page::UpdateBrowsingContextGroup(
 
 void Page::SetAttributionSupport(
     network::mojom::AttributionSupport attribution_support) {
-  attribution_support_ = attribution_support;
+  attribution_support_ = network::mojom::AttributionSupport::kNone;
 }
 
 template class CORE_TEMPLATE_EXPORT Supplement<Page>;
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 6f47f1f484ffb..c1f9d6bb2bf9b 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -301,8 +301,8 @@
     },
     {
       // Interest Group JS API/runtimeflag.
-      name: "AdInterestGroupAPI",
-      status: "stable",
+      name: "AdInterestGroupAPI", // keep disabled
+      status: "experimental",     // keep disabled
       origin_trial_feature_name: "AdInterestGroupAPI",
       implied_by: ["Fledge", "Parakeet"],
       public: true,
@@ -586,8 +586,8 @@
       status: "stable",
     },
     {
-      name: "AttributionReporting",
-      status: "stable",
+      name: "AttributionReporting", // keep disabled
+      status: "experimental",       // keep disabled
       base_feature: "none",
       public: true,
     },
@@ -3873,8 +3873,8 @@
       base_feature: "none",
     },
     {
-      name: "PrivateStateTokens",
-      status: "stable",
+      name: "PrivateStateTokens", // disabled
+      status: "experimental",     // by default
       base_feature: "none",
       public: true,
     },
@@ -5143,16 +5143,16 @@
       status: "stable",
     },
     {
-      name: "TopicsAPI",
+      name: "TopicsAPI",       // keep disabled
+      status: "experimental",  // keep disabled
       base_feature: "none",
       public: true,
-      status: "stable",
     },
     {
-      name: "TopicsDocumentAPI",
+      name: "TopicsDocumentAPI", // keep disabled
+      status: "experimental",    // keep disabled
       base_feature: "none",
       public: true,
-      status: "stable",
     },
     {
       // This feature allows calling the Topics API via an image
diff --git a/ui/events/android/motion_event_android.cc b/ui/events/android/motion_event_android.cc
index 38eae727142a6..aff143a6078b4 100644
--- a/ui/events/android/motion_event_android.cc
+++ b/ui/events/android/motion_event_android.cc
@@ -30,8 +30,12 @@ namespace ui {
 namespace {
 
 base::TimeTicks FromAndroidTime(base::TimeTicks time) {
-  ValidateEventTimeClock(&time);
-  return time;
+  base::TimeTicks timestamp;
+  // Rounding down to milliseconds (from nanoseconds)
+  // see https://bugs.chromium.org/p/chromium/issues/detail?id=1378615
+  timestamp = base::TimeTicks::FromUptimeMillis(time.ToUptimeMillis());
+  ValidateEventTimeClock(&timestamp);
+  return timestamp;
 }
 
 float ToValidFloat(float x) {
-- 
2.51.2

