From 26bac9f92dbdc429305739153b778a1d935b8ee5 Mon Sep 17 00:00:00 2001
From: uazo <29201891+uazo@users.noreply.github.com>
Date: Sat, 7 Feb 2026 04:05:55 +0000
Subject: [PATCH] [AUTO][FILECONTROL] - version 145.0.7632.46
---
tools/under-control/src/RELEASE | 2 +-
.../browser/aw_content_browser_client.cc | 13 +-
.../browser/aw_field_trials.cc | 35 +-
.../chrome/android/java/AndroidManifest.xml | 29 +-
.../CustomTabIntentDataProvider.java | 4 +-
.../src/chrome/browser/about_flags.cc | 1309 +++---
.../chrome_browsing_data_remover_delegate.cc | 33 -
.../chrome_browser_interface_binders.cc | 11 -
.../browser/chrome_content_browser_client.cc | 222 +-
...ent_browser_client_navigation_throttles.cc | 3 -
.../browser/flags/ChromeFeatureList.java | 216 +-
.../src/chrome/browser/prefs/browser_prefs.cc | 343 +-
.../src/chrome/browser/ui/tab_helpers.cc | 31 +-
.../extensions/api/autofill_private.idl | 2 +-
.../extensions/api/certificate_provider.idl | 13 +-
.../common/extensions/api/document_scan.idl | 19 +-
.../common/extensions/api/downloads.idl | 21 +-
.../api/enterprise_device_attributes.idl | 16 +-
.../api/enterprise_hardware_platform.idl | 3 +-
.../extensions/api/enterprise_kiosk_input.idl | 4 +-
.../api/enterprise_networking_attributes.idl | 4 +-
.../api/enterprise_platform_keys.idl | 15 +-
.../extensions/api/file_manager_private.idl | 34 -
.../api/file_manager_private_internal.idl | 10 -
.../chrome/common/extensions/api/identity.idl | 20 +-
.../common/extensions/api/notifications.idl | 23 +-
.../common/extensions/api/scripting.idl | 24 +-
.../common/extensions/api/side_panel.idl | 22 +-
.../common/extensions/api/system_log.idl | 3 +-
.../common/extensions/api/tab_capture.idl | 7 +-
.../common/extensions/api/vpn_provider.idl | 18 +-
.../chrome_content_renderer_client.cc | 7 +-
.../resources/templates/common_schemas.yaml | 2 +-
.../policy/resources/templates/policies.yaml | 11 +-
.../SaaSReportDomainUrlsForBrowser.yaml | 39 +
.../SaaSReportDomainUrlsForProfile.yaml | 42 +
.../AutoSelectCertificateForUrls.yaml | 1 +
.../DefaultSearchProviderEnabled.yaml | 4 -
.../Extensions/BlockExternalExtensions.yaml | 2 +
.../Extensions/ExtensionAllowedTypes.yaml | 2 +
...nstallWithNonMalwareViolationsEnabled.yaml | 8 +-
.../Extensions/ExtensionInstallSources.yaml | 2 +
.../ExtensionUnpublishedAvailability.yaml | 2 +
.../Extensions/policy_atomic_groups.yaml | 1 -
.../FirstPartySets/FirstPartySetsEnabled.yaml | 8 +-
.../FirstPartySetsOverrides.yaml | 8 +-
.../GeminiActOnWebAllowedForURLs.yaml | 33 +
.../GeminiActOnWebBlockedForURLs.yaml | 33 +
.../GenerativeAI/GeminiActOnWebSettings.yaml | 2 +
.../SearchContentSharingSettings.yaml | 6 +-
...LocalNetworkAccessRestrictionsEnabled.yaml | 8 +-
...workAccessRestrictionsTemporaryOptOut.yaml | 6 +-
.../Miscellaneous/BrowserSignin.yaml | 3 +-
.../DeveloperToolsAvailability.yaml | 6 +-
.../DeveloperToolsAvailabilityAllowlist.yaml | 8 +-
.../DeveloperToolsAvailabilityBlocklist.yaml | 6 +-
.../Miscellaneous/ForceBrowserSignin.yaml | 3 +-
.../Miscellaneous/HttpsOnlyMode.yaml | 29 +-
.../Miscellaneous/IncognitoModeAllowlist.yaml | 34 -
.../IncognitoModeAvailability.yaml | 2 +-
.../IncognitoModeUrlAllowlist.yaml | 34 +
...st.yaml => IncognitoModeUrlBlocklist.yaml} | 2 +-
.../LensDesktopNTPSearchEnabled.yaml | 2 +
.../Miscellaneous/LensOverlaySettings.yaml | 2 +
.../LensRegionSearchEnabled.yaml | 2 +
.../ManagedAccountsSigninRestriction.yaml | 4 +-
...ionManagedClientCertificateForBrowser.yaml | 2 +
...visionManagedClientCertificateForUser.yaml | 2 +
...PdfSaveToGoogleDriveAccountsToPattern.yaml | 21 +
.../StaticStorageQuotaEnabled.yaml | 2 +-
.../Miscellaneous/UserAgentReduction.yaml | 6 +-
.../WebAppInstallByUserEnabled.yaml | 29 +
.../Printing/CloudPrintProxyEnabled.yaml | 3 +-
...andboxFingerprintingProtectionEnabled.yaml | 9 +-
.../PrivacySandboxIpProtectionEnabled.yaml | 9 +-
.../EnableProxyOverrideRulesForAllUsers.yaml | 7 +-
.../PasswordProtectionChangePasswordURL.yaml | 4 -
.../PasswordProtectionLoginURLs.yaml | 4 -
.../SafeBrowsingAllowlistDomains.yaml | 4 -
.../SafeBrowsing/SafeBrowsingEnabled.yaml | 4 -
.../ExtensibleEnterpriseSSOBlocklist.yaml | 9 +-
.../Signin/LocalAuthFactors.yaml | 4 +-
.../Signin/LocalAuthFactorsComplexity.yaml | 2 +
.../Startup/HomepageIsNewTabPage.yaml | 4 -
.../Startup/HomepageLocation.yaml | 4 -
.../Startup/NewTabPageLocation.yaml | 4 -
.../browser/web_contents/web_contents_impl.cc | 233 +-
.../src/content/child/runtime_features.cc | 22 +-
.../public/browser/content_browser_client.cc | 45 +-
.../common/api/chrome_url_overrides.idl | 25 -
.../src/extensions/common/api/clipboard.idl | 55 -
.../extensions/common/api/content_scripts.idl | 2 +-
.../common/api/cross_origin_isolation.idl | 16 -
.../common/api/declarative_net_request.idl | 95 +-
.../extensions/common/api/file_handlers.idl | 55 -
.../extensions/common/api/icon_variants.idl | 2 +-
.../src/extensions/common/api/oauth2.idl | 22 -
.../src/extensions/common/api/offscreen.idl | 11 +-
.../common/api/protocol_handlers.idl | 27 -
.../extensions/common/api/shared_module.idl | 32 -
.../extensions/common/api/system_display.idl | 457 ---
.../src/extensions/common/api/usb.idl | 423 --
.../extensions/common/api/user_scripts.idl | 24 +-
.../common/api/web_accessible_resources.idl | 35 -
.../api/web_accessible_resources_mv2.idl | 12 -
tools/under-control/src/gin/v8_initializer.cc | 5 +-
.../src/services/network/network_context.cc | 68 +-
.../variations/fieldtrial_testing_config.json | 3638 +++++++++--------
.../use_counter/metrics/web_feature.mojom | 69 +-
.../webpreferences/web_preferences.mojom | 4 +
.../core/animation/keyframe_effect.idl | 2 +
.../animation/keyframe_effect_options.idl | 2 +-
.../core/animation/timeline_trigger.idl | 20 +-
.../renderer/core/css/css_navigation_rule.idl | 8 +
.../renderer/core/css/css_route_rule.idl | 4 +-
.../core/css/cssom/css_math_random.idl | 15 +
.../core/css/cssom/css_math_value.idl | 1 +
.../blink/renderer/core/dom/document.idl | 1 +
.../blink/renderer/core/dom/element.idl | 9 +-
.../core/dom/element_creation_options.idl | 2 +-
.../blink/renderer/core/dom/events/event.idl | 2 -
.../core/dom/global_event_handlers.idl | 1 +
.../blink/renderer/core/dom/parent_node.idl | 5 -
.../blink/renderer/core/dom/shadow_root.idl | 1 +
.../renderer/core/events/animation_event.idl | 2 +
.../core/events/email_verified_event.idl | 2 +-
.../core/events/event_type_names.json5 | 1 +
.../renderer/core/events/focus_event.idl | 2 +
.../renderer/core/events/keyboard_event.idl | 2 +
.../renderer/core/events/mouse_event.idl | 2 +
.../renderer/core/events/touch_event.idl | 2 +
.../renderer/core/events/transition_event.idl | 2 +
.../renderer/core/exported/web_view_impl.cc | 195 +-
...t_storage.idl => crash_report_context.idl} | 5 +-
.../blink/renderer/core/frame/navigator.idl | 8 +-
.../blink/renderer/core/frame/settings.json5 | 7 +-
.../blink/renderer/core/frame/window.idl | 2 +-
.../html/custom/custom_element_registry.idl | 2 +-
.../renderer/core/html/focus_options.idl | 1 +
.../core/html/html_install_element.idl | 5 +-
.../core/html/html_menu_item_element.idl | 9 +
.../navigation_precommit_controller.idl | 1 +
.../origin_trials/origin_trial_context.cc | 21 +-
.../blink/renderer/core/patching/patch.idl | 5 -
.../renderer/core/patching/patch_event.idl | 11 -
.../core/patching/patch_event_init.idl | 8 -
.../core/script_tools/model_context.idl | 5 +-
.../script_tools/model_context_testing.idl | 8 +-
.../timing/performance_container_timing.idl | 14 +-
.../timing/performance_navigation_timing.idl | 2 +-
.../renderer/core/xml/xslt_processor.idl | 2 +-
.../canvas2d/canvas_rendering_context_2d.idl | 60 +-
.../renderer/modules/crypto/window_crypto.idl | 37 -
.../window_or_worker_global_scope_crypto.idl | 2 +-
.../direct_sockets/socket_connection.idl | 9 +-
.../modules/payments/payment_request.idl | 3 +
.../rtc_transport/rtc_received_packet.idl | 4 +-
.../rtc_transport/rtc_transport.idl | 3 +-
.../permissions/permission_descriptor.idl | 2 +
.../webaudio/audio_worklet_global_scope.idl | 2 +-
.../modules/webaudio/base_audio_context.idl | 2 +-
.../modules/webcodecs/video_frame.idl | 2 +-
.../webgl/webgl2_rendering_context_webgpu.idl | 5 -
.../webgl/webgl_rendering_context_base.idl | 18 +
.../webgl/webgl_rendering_context_webgpu.idl | 5 -
.../renderer/modules/webgpu/gpu_buffer.idl | 9 +
.../renderer/modules/webgpu/gpu_queue.idl | 4 +
.../renderer/modules/webgpu/gpu_texture.idl | 1 +
.../modules/webgpu/gpu_texture_usage.idl | 3 +
.../webgpu/gpu_texture_view_descriptor.idl | 4 +-
.../blink/renderer/modules/xr/xr_plane.idl | 1 +
.../blink/renderer/modules/xr/xr_session.idl | 3 +
.../platform/runtime_enabled_features.json5 | 444 +-
.../global-interface-listing-expected.txt | 46 +
174 files changed, 4347 insertions(+), 5104 deletions(-)
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml
delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAllowlist.yaml
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml
rename tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/{IncognitoModeBlocklist.yaml => IncognitoModeUrlBlocklist.yaml} (53%)
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml
create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebAppInstallByUserEnabled.yaml
delete mode 100755 tools/under-control/src/extensions/common/api/chrome_url_overrides.idl
delete mode 100755 tools/under-control/src/extensions/common/api/clipboard.idl
delete mode 100755 tools/under-control/src/extensions/common/api/cross_origin_isolation.idl
delete mode 100755 tools/under-control/src/extensions/common/api/file_handlers.idl
delete mode 100755 tools/under-control/src/extensions/common/api/oauth2.idl
delete mode 100755 tools/under-control/src/extensions/common/api/protocol_handlers.idl
delete mode 100755 tools/under-control/src/extensions/common/api/shared_module.idl
delete mode 100755 tools/under-control/src/extensions/common/api/system_display.idl
delete mode 100755 tools/under-control/src/extensions/common/api/usb.idl
delete mode 100755 tools/under-control/src/extensions/common/api/web_accessible_resources.idl
delete mode 100755 tools/under-control/src/extensions/common/api/web_accessible_resources_mv2.idl
create mode 100755 tools/under-control/src/third_party/blink/renderer/core/css/css_navigation_rule.idl
create mode 100755 tools/under-control/src/third_party/blink/renderer/core/css/cssom/css_math_random.idl
rename tools/under-control/src/third_party/blink/renderer/core/frame/{crash_report_storage.idl => crash_report_context.idl} (82%)
delete mode 100755 tools/under-control/src/third_party/blink/renderer/core/patching/patch.idl
delete mode 100755 tools/under-control/src/third_party/blink/renderer/core/patching/patch_event.idl
delete mode 100755 tools/under-control/src/third_party/blink/renderer/core/patching/patch_event_init.idl
delete mode 100755 tools/under-control/src/third_party/blink/renderer/modules/crypto/window_crypto.idl
diff --git a/tools/under-control/src/RELEASE b/tools/under-control/src/RELEASE
index e2cef69a..d7ac38bb 100644
--- a/tools/under-control/src/RELEASE
+++ b/tools/under-control/src/RELEASE
@@ -1 +1 @@
-144.0.7559.97
+145.0.7632.46
diff --git a/tools/under-control/src/android_webview/browser/aw_content_browser_client.cc b/tools/under-control/src/android_webview/browser/aw_content_browser_client.cc
index 7373dc28..ab54428a 100755
--- a/tools/under-control/src/android_webview/browser/aw_content_browser_client.cc
+++ b/tools/under-control/src/android_webview/browser/aw_content_browser_client.cc
@@ -323,10 +323,13 @@ AwContentBrowserClient::CreateBrowserMainParts(bool /* is_integration_test */) {
return std::make_unique(this);
}
-bool IsAnyStartupTaskExperimentEnabled() {
+bool AwContentBrowserClient::IsAnyStartupTaskExperimentEnabled() {
return AwBrowserMainParts::isWebViewStartupTasksExperimentEnabled() ||
AwBrowserMainParts::isWebViewStartupTasksExperimentEnabledP2() ||
- AwBrowserMainParts::isStartupTaskYieldToNativeExperimentEnabled();
+ AwBrowserMainParts::isStartupTaskYieldToNativeExperimentEnabled() ||
+ startup_tasks_logic_enabled_for_testing_ ||
+ startup_tasks_logic_p2_enabled_for_testing_ ||
+ startup_tasks_yield_to_native_experiment_enabled_for_testing_;
}
void AwContentBrowserClient::PostAfterStartupTask(
@@ -356,7 +359,8 @@ void AwContentBrowserClient::OnStartupComplete() {
DCHECK(!startup_info_.startup_complete);
startup_info_.startup_complete = true;
- if (AwBrowserMainParts::isStartupTaskYieldToNativeExperimentEnabled()) {
+ if (AwBrowserMainParts::isStartupTaskYieldToNativeExperimentEnabled() ||
+ startup_tasks_yield_to_native_experiment_enabled_for_testing_) {
YieldToLooperChecker::GetInstance().SetStartupRunning(false);
}
@@ -383,7 +387,8 @@ void AwContentBrowserClient::OnUiTaskRunnerReady(
startup_info_.enable_native_task_execution_callback =
std::move(enable_native_task_execution_callback);
- if (AwBrowserMainParts::isStartupTaskYieldToNativeExperimentEnabled()) {
+ if (AwBrowserMainParts::isStartupTaskYieldToNativeExperimentEnabled() ||
+ startup_tasks_yield_to_native_experiment_enabled_for_testing_) {
YieldToLooperChecker::GetInstance().SetStartupRunning(true);
}
}
diff --git a/tools/under-control/src/android_webview/browser/aw_field_trials.cc b/tools/under-control/src/android_webview/browser/aw_field_trials.cc
index 093dadfd..cd6baf2e 100755
--- a/tools/under-control/src/android_webview/browser/aw_field_trials.cc
+++ b/tools/under-control/src/android_webview/browser/aw_field_trials.cc
@@ -13,11 +13,11 @@
#include "base/metrics/persistent_histogram_allocator.h"
#include "base/path_service.h"
#include "components/history/core/browser/features.h"
+#include "components/input/features.h"
#include "components/metrics/persistent_histograms.h"
#include "components/payments/content/android/payment_feature_map.h"
#include "components/permissions/features.h"
#include "components/safe_browsing/core/common/features.h"
-#include "components/translate/core/common/translate_util.h"
#include "components/variations/feature_overrides.h"
#include "components/viz/common/features.h"
#include "content/public/common/content_features.h"
@@ -32,6 +32,7 @@
#include "third_party/blink/public/common/features_generated.h"
#include "ui/android/ui_android_features.h"
#include "ui/base/ui_base_features.h"
+#include "ui/events/features.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_switches.h"
@@ -65,10 +66,10 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
aw_feature_overrides.DisableFeature(
blink::features::kAboutBlankPageRespectsDarkModeOnUserAction);
- // TODO(crbug.com/433304196): Remove this once webview experiment has
+ // TODO(crbug.com/444669046): Remove this once webview experiment has
// concluded.
aw_feature_overrides.DisableFeature(
- blink::features::kAsyncTouchMovesImmediatelyAfterScroll);
+ input::features::kUpdateScrollPredictorInputMapping);
// Disable enforcing `noopener` on Blob URL navigations on WebView.
aw_feature_overrides.DisableFeature(
@@ -81,6 +82,10 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// HDR does not support webview yet. See crbug.com/1493153 for an explanation.
aw_feature_overrides.DisableFeature(ui::kAndroidHDR);
+ // TODO(crbug.com/450845471): Remove this once webview experiment has
+ // concluded.
+ aw_feature_overrides.DisableFeature(ui::kCompensateGestureDetectorTimeouts);
+
// Disable launch_handler on WebView.
aw_feature_overrides.DisableFeature(::features::kAndroidWebAppLaunchHandler);
@@ -194,12 +199,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// Disable Web Serial API on WebView.
aw_feature_overrides.DisableFeature(blink::features::kWebSerialAPI);
- // Disable TFLite based language detection on webview until webview supports
- // ML model delivery via Optimization Guide component.
- // TODO(crbug.com/40819484): Enable the feature on Webview.
- aw_feature_overrides.DisableFeature(
- ::translate::kTFLiteLanguageDetectionEnabled);
-
// Disable key pinning enforcement on webview.
aw_feature_overrides.DisableFeature(
net::features::kStaticKeyPinningEnforcement);
@@ -207,6 +206,9 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// FedCM is not yet supported on WebView.
aw_feature_overrides.DisableFeature(::features::kFedCm);
+ // Email Verification Protocol is not yet supported on WebView.
+ aw_feature_overrides.DisableFeature(::features::kEmailVerificationProtocol);
+
// Disable Digital Credentials API on WebView.
aw_feature_overrides.DisableFeature(
::features::kWebIdentityDigitalCredentials);
@@ -288,26 +290,31 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
aw_feature_overrides.DisableFeature(
features::kAAudioPerStreamDeviceSelection);
- // WebView exposes text autosizing to apps via setLayoutAlgorithm(), so
- // we keep text autosizing support in WebView for now. Further WebView
- // work will take place in https://crbug.com/391990606.
- aw_feature_overrides.DisableFeature(blink::features::kForceOffTextAutosizing);
-
// Local Network Access restrictions should not be enforced in WebView.
// The LNA permission is auto-granted in WebView, but the permission
// policy currently blocks iframes from using it. crbug.com/442879527
aw_feature_overrides.DisableFeature(
network::features::kLocalNetworkAccessChecks);
+ aw_feature_overrides.DisableFeature(
+ network::features::kLocalNetworkAccessChecksSplitPermissions);
// Disable background media for WebView, until we have consensus on long-term
// behavior crbug.com/453706851
aw_feature_overrides.DisableFeature(
features::kAndroidEnableBackgroundMediaLargeFormFactors);
+ // Disable ExtendedReportingRemovePrefDependency for WebView, because WebView
+ // doesn't support ESB
+ aw_feature_overrides.DisableFeature(
+ safe_browsing::kExtendedReportingRemovePrefDependency);
+
// SystemTracing is enabled by default only in WebView for now.
aw_feature_overrides.EnableFeature(features::kEnablePerfettoSystemTracing);
// Deemed that performance benefit is not worth the stability cost.
// See crbug.com/1309151.
aw_feature_overrides.DisableFeature(::features::kGpuShaderDiskCache);
+
+ // Don't pass the data about browser window position on screen to WebView.
+ aw_feature_overrides.DisableFeature(ui::kAndroidUseCorrectWindowBounds);
}
diff --git a/tools/under-control/src/chrome/android/java/AndroidManifest.xml b/tools/under-control/src/chrome/android/java/AndroidManifest.xml
index bd02a9b4..030736d4 100755
--- a/tools/under-control/src/chrome/android/java/AndroidManifest.xml
+++ b/tools/under-control/src/chrome/android/java/AndroidManifest.xml
@@ -229,6 +229,9 @@ by a child template that "extends" this file.
android:allowAudioPlaybackCapture="false"
android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
android:enableOnBackInvokedCallback="true"
+ {% if javaless_renderers is defined %}
+ android:zygotePreloadNativeLib="lib{{ library_name }}.so"
+ {% endif %}
{% block extra_application_attributes %}{% endblock %}>
{% if channel in ['canary', 'dev', 'default'] %}
@@ -292,6 +295,13 @@ by a child template that "extends" this file.
+
+
+
+
+
+
+
@@ -544,6 +554,9 @@ by a child template that "extends" this file.
android:theme="@style/Theme.Chromium.TabbedMode"
android:exported="true"
android:launchMode="singleTask"
+ {% if is_desktop_android == "true" %}
+ android:persistableMode="persistAcrossReboots"
+ {% endif %}
{# We can only use blocks once in Jinja, for future substitutions we use
self.supports_video_persistence(). #}
{% block supports_video_persistence %}
@@ -1158,9 +1171,6 @@ by a child template that "extends" this file.
-
-
{% for i in range(2) %}
-
-
-
-
+
+
{% endfor %}
{% endif %}
diff --git a/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
index 6cac92f3..c983ec7d 100755
--- a/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
+++ b/tools/under-control/src/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -1860,7 +1860,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
if (displayMode instanceof TrustedWebActivityDisplayMode.BrowserMode) {
return !isDisplayOverride;
}
- if (WebAppHeaderUtils.isMinimalUiFlagEnabled()
+ if (WebAppHeaderUtils.isMinimalUiEnabled()
&& displayMode instanceof TrustedWebActivityDisplayMode.MinimalUiMode) {
return true;
}
@@ -1905,7 +1905,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
boolean shouldUseMinimalUi =
displayMode instanceof TrustedWebActivityDisplayMode.MinimalUiMode
|| displayMode instanceof TrustedWebActivityDisplayMode.BrowserMode;
- if (WebAppHeaderUtils.isMinimalUiFlagEnabled() && shouldUseMinimalUi) {
+ if (WebAppHeaderUtils.isMinimalUiEnabled() && shouldUseMinimalUi) {
return DisplayMode.MINIMAL_UI;
}
diff --git a/tools/under-control/src/chrome/browser/about_flags.cc b/tools/under-control/src/chrome/browser/about_flags.cc
index 74b1c0a6..ba5ddf7d 100755
--- a/tools/under-control/src/chrome/browser/about_flags.cc
+++ b/tools/under-control/src/chrome/browser/about_flags.cc
@@ -2,11 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifdef UNSAFE_BUFFERS_BUILD
-// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
-#pragma allow_unsafe_buffers
-#endif
-
// Instructions for adding new entries to this file:
// https://chromium.googlesource.com/chromium/src/+/main/docs/how_to_add_your_feature_flag.md#step-2_adding-the-feature-flag-to-the-chrome_flags-ui
@@ -16,6 +11,7 @@
#include
// |details|: The certificates to set. Invalid certificates will be ignored.
- // |callback|: Called upon completion.
+ // |callback|: Returns a Promise which resolves upon completion.
static void setCertificates(
SetCertificatesDetails details,
optional SetCertificatesCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/document_scan.idl b/tools/under-control/src/chrome/common/extensions/api/document_scan.idl
index 1395312d..58ecb02b 100755
--- a/tools/under-control/src/chrome/common/extensions/api/document_scan.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/document_scan.idl
@@ -549,7 +549,7 @@ namespace documentScan {
// with a $(ref:ScanResults) object. If a callback is passed to
// this function, the returned data is passed to it instead.
// |options| : An object containing scan parameters.
- // |callback| : Called with the result and data from the scan.
+ // |callback| : Returns a Promise which resolves with the scan results.
static void scan(
ScanOptions options,
ScanCallback callback);
@@ -559,7 +559,8 @@ namespace documentScan {
// is passed to this function, returned data is passed to it instead.
// |filter| : A $(ref:DeviceFilter) indicating which types of scanners
// should be returned.
- // |callback| : Called with the result and list of scanners.
+ // |callback| : Returns a Promise which resolves with the result and list of
+ // scanners.
static void getScannerList(
DeviceFilter filter, GetScannerListCallback callback);
@@ -568,7 +569,7 @@ namespace documentScan {
// is passed to this function, returned data is passed to it instead.
// |scannerId| : The ID of a scanner to be opened. This value is one
// returned from a previous call to $(ref:getScannerList).
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void openScanner(
DOMString scannerId, OpenScannerCallback callback);
@@ -578,7 +579,7 @@ namespace documentScan {
// is passed to this function, returned data is passed to it instead.
// |scannerHandle| : The handle of an open scanner returned from a call
// to $(ref:openScanner).
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void getOptionGroups(
DOMString scannerHandle, GetOptionGroupsCallback callback);
@@ -589,7 +590,7 @@ namespace documentScan {
// used for further operations.
// |scannerHandle| : Specifies the handle of an open scanner that was
// previously returned from a call to $(ref:openScanner).
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void closeScanner(
DOMString scannerHandle, CloseScannerCallback callback);
@@ -602,7 +603,7 @@ namespace documentScan {
// should be a value previously returned from a call to $(ref:openScanner).
// |options| : A list of OptionSetting objects to be applied to
// the scanner.
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void setOptions(
DOMString scannerHandle, OptionSetting[] options,
SetOptionsCallback callback);
@@ -618,7 +619,7 @@ namespace documentScan {
// be used for the scan. The StartScanOptions.format property
// must match one of the entries returned in the scanner's
// ScannerInfo.
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void startScan(
DOMString scannerHandle, StartScanOptions options,
StartScanCallback callback);
@@ -628,7 +629,7 @@ namespace documentScan {
// is passed to it instead.
// |job| : The handle of an active scan job previously returned from a
// call to $(ref:startScan).
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void cancelScan(
DOMString job, CancelScanCallback callback);
@@ -647,7 +648,7 @@ namespace documentScan {
//
// |job| : Active job handle previously returned from
// $(ref:startScan).
- // |callback| : Called with the result.
+ // |callback| : Returns a Promise which resolves with the result.
static void readScanData(
DOMString job, ReadScanDataCallback callback);
};
diff --git a/tools/under-control/src/chrome/common/extensions/api/downloads.idl b/tools/under-control/src/chrome/common/extensions/api/downloads.idl
index 5b52c53e..a5e3b08d 100755
--- a/tools/under-control/src/chrome/common/extensions/api/downloads.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/downloads.idl
@@ -467,7 +467,8 @@ namespace downloads {
// a descriptive string. The error strings are not guaranteed to remain
// backwards compatible between releases. Extensions must not parse it.
// |options|: What to download and how.
- // |callback|: Called with the id of the new $(ref:DownloadItem).
+ // |callback|: Returns a Promise which resolves with the id of the new
+ // $(ref:DownloadItem).
static void download(
DownloadOptions options,
optional DownloadCallback callback);
@@ -486,7 +487,8 @@ namespace downloads {
// paused state. Otherwise $(ref:runtime.lastError) contains an error message.
// The request will fail if the download is not active.
// |downloadId|: The id of the download to pause.
- // |callback|: Called when the pause request is completed.
+ // |callback|: Returns a Promise which resolves when the pause request is
+ // completed.
static void pause(
long downloadId,
optional NullCallback callback);
@@ -495,7 +497,8 @@ namespace downloads {
// in progress and unpaused. Otherwise $(ref:runtime.lastError) contains an
// error message. The request will fail if the download is not active.
// |downloadId|: The id of the download to resume.
- // |callback|: Called when the resume request is completed.
+ // |callback|: Returns a Promise which resolves when the resume request is
+ // completed.
static void resume(
long downloadId,
optional NullCallback callback);
@@ -503,7 +506,8 @@ namespace downloads {
// Cancel a download. When callback is run, the download is
// cancelled, completed, interrupted or doesn't exist anymore.
// |downloadId|: The id of the download to cancel.
- // |callback|: Called when the cancel request is completed.
+ // |callback|: Returns a Promise which resolves when the cancel request is
+ // completed.
static void cancel(
long downloadId,
optional NullCallback callback);
@@ -518,7 +522,8 @@ namespace downloads {
// registered file types and visual theme. If a file icon cannot be
// determined, $(ref:runtime.lastError) will contain an error message.
// |downloadId|: The identifier for the download.
- // |callback|: A URL to an image that represents the download.
+ // |callback|: Returns a Promise which resolves with a URL to an image that
+ // represents the download.
static void getFileIcon(
long downloadId,
optional GetFileIconOptions options,
@@ -564,7 +569,8 @@ namespace downloads {
// temporary file is renamed to the target filename, the |state| changes to
// 'complete', and $(ref:onChanged) fires.
// |downloadId|: The identifier for the $(ref:DownloadItem).
- // |callback|: Called when the danger prompt dialog closes.
+ // |callback|: Returns a Promise which resolves when the danger prompt
+ // dialog closes.
static void acceptDanger(
long downloadId,
optional NullCallback callback);
@@ -586,7 +592,8 @@ namespace downloads {
// $(ref:runtime.lastError). Requires the "downloads.ui"
// permission in addition to the "downloads" permission.
// |options|: Encapsulate a change to the download UI.
- // |callback|: Called when the UI update is completed.
+ // |callback|: Returns a Promise which resolves when the UI update is
+ // completed.
static void setUiOptions(
UiOptions options,
optional NullCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl
index d9892039..fcbda81d 100755
--- a/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_device_attributes.idl
@@ -23,8 +23,8 @@ namespace enterprise.deviceAttributes {
// that is generated by the server and identifies the cloud record of the
// device for querying in the cloud directory API.
// If the current user is not affiliated, returns an empty string.
- // |callback| : Called with the device identifier of the directory API when
- // received.
+ // |callback| : Returns a Promise which resolves with the device identifier
+ // of the directory API.
void getDirectoryDeviceId(
GetDirectoryDeviceIdCallback callback);
@@ -33,27 +33,31 @@ namespace enterprise.deviceAttributes {
// for device-wide certificates). This API may not be used for tracking
// devices without the consent of the device's administrator.
// If the current user is not affiliated, returns an empty string.
- // |callback| : Called with the serial number of the device.
+ // |callback| : Returns a Promise which resolves with the serial number of
+ // the device.
void getDeviceSerialNumber(
GetDeviceSerialNumberCallback callback);
// Fetches the administrator-annotated Asset Id.
// If the current user is not affiliated or no Asset Id has been set by the
// administrator, returns an empty string.
- // |callback| : Called with the Asset ID of the device.
+ // |callback| : Returns a Promise which resolves with the Asset ID of the
+ // device.
void getDeviceAssetId(GetDeviceAssetIdCallback callback);
// Fetches the administrator-annotated Location.
// If the current user is not affiliated or no Annotated Location has been
// set by the administrator, returns an empty string.
- // |callback| : Called with the Annotated Location of the device.
+ // |callback| : Returns a Promise which resolves with the Annotated
+ // Location of the device.
void getDeviceAnnotatedLocation(
GetDeviceAnnotatedLocationCallback callback);
// Fetches the device's hostname as set by DeviceHostnameTemplate policy.
// If the current user is not affiliated or no hostname has been set by the
// enterprise policy, returns an empty string.
- // |callback| : Called with hostname of the device.
+ // |callback| : Returns a Promise which resolves with the hostname of the
+ // device.
void getDeviceHostname(
GetDeviceHostnameCallback callback);
};
diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl
index e3b1adb8..3b3772f8 100755
--- a/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_hardware_platform.idl
@@ -17,7 +17,8 @@ namespace enterprise.hardwarePlatform {
interface Functions {
// Obtains the manufacturer and model for the hardware platform and, if
// the extension is authorized, returns it via |callback|.
- // |callback|: Called with the hardware platform info.
+ // |callback|: Returns a Promise which resolves with the hardware platform
+ // info.
static void getHardwarePlatformInfo(
HardwarePlatformInfoCallback callback);
};
diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl
index de3ec93d..a6d2dc08 100755
--- a/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_kiosk_input.idl
@@ -26,8 +26,8 @@ namespace enterprise.kioskInput {
// $(ref:runtime.lastError) will be set with a failure reason.
// |options|: Object containing the fields defined in
// $(ref:SetCurrentInputMethodOptions).
- // |callback|: Called when the input method is changed or if
- // there is an error.
+ // |callback|: Returns a Promise which resolves when the input method is
+ // changed, or rejects if there is an error.
static void setCurrentInputMethod(
SetCurrentInputMethodOptions options,
SetCurrentInputMethodCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl
index bae34e28..5b1cdccd 100755
--- a/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_networking_attributes.idl
@@ -26,8 +26,8 @@ namespace enterprise.networkingAttributes {
// Retrieves the network details of the device's default network.
// If the user is not affiliated or the device is not connected to a
// network, $(ref:runtime.lastError) will be set with a failure reason.
- // |callback| : Called with the device's default network's
- // $(ref:NetworkDetails).
+ // |callback| : Returns a Promise which resolves with the device's default
+ // network's $(ref:NetworkDetails).
void getNetworkDetails(
GetNetworkDetailsCallback callback);
};
diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl
index c9f36b39..aef421d1 100755
--- a/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_platform_keys.idl
@@ -115,7 +115,8 @@ namespace enterprise.platformKeys {
// token. Can be used to check for the existence and expiration of client
// certificates that are usable for a certain authentication.
// |tokenId|: The id of a Token returned by getTokens.
- // |callback|: Called back with the list of the available certificates.
+ // |callback|: Returns a Promise which resolves with the list of the
+ // available certificates.
static void getCertificates(DOMString tokenId,
GetCertificatesCallback callback);
@@ -126,7 +127,8 @@ namespace enterprise.platformKeys {
// system and browser for authentication.
// |tokenId|: The id of a Token returned by getTokens.
// |certificate|: The DER encoding of a X.509 certificate.
- // |callback|: Called back when this operation is finished.
+ // |callback|: Returns a Promise which resolves when this operation is
+ // finished.
static void importCertificate(DOMString tokenId,
ArrayBuffer certificate,
optional DoneCallback callback);
@@ -137,7 +139,8 @@ namespace enterprise.platformKeys {
// choice. Should be used to free storage in the certificate store.
// |tokenId|: The id of a Token returned by getTokens.
// |certificate|: The DER encoding of a X.509 certificate.
- // |callback|: Called back when this operation is finished.
+ // |callback|: Returns a Promise which resolves when this operation is
+ // finished.
static void removeCertificate(DOMString tokenId,
ArrayBuffer certificate,
optional DoneCallback callback);
@@ -167,7 +170,7 @@ namespace enterprise.platformKeys {
// "user" token and is not accessible by any other API.
// |options|: Object containing the fields defined in
// $(ref:ChallengeKeyOptions).
- // |callback|: Called back with the challenge response.
+ // |callback|: Returns a Promise which resolves with the challenge response.
static void challengeKey(ChallengeKeyOptions options,
ChallengeCallback callback);
@@ -199,7 +202,7 @@ namespace enterprise.platformKeys {
// signing key. This key is 2048-bit RSA. Subsequent calls
// to this function will then generate a new Enterprise
// Machine Key.
- // |callback|: Called back with the challenge response.
+ // |callback|: Returns a Promise which resolves with the challenge response.
[deprecated="Use $(ref:challengeKey) instead."]
static void challengeMachineKey(ArrayBuffer challenge,
optional boolean registerKey,
@@ -232,7 +235,7 @@ namespace enterprise.platformKeys {
// with a certificate and used like any other signing key.
// This key is 2048-bit RSA. Subsequent calls to this
// function will then generate a new Enterprise User Key.
- // |callback|: Called back with the challenge response.
+ // |callback|: Returns a Promise which resolves with the challenge response.
[deprecated="Use $(ref:challengeKey) instead."]
static void challengeUserKey(ArrayBuffer challenge,
boolean registerKey,
diff --git a/tools/under-control/src/chrome/common/extensions/api/file_manager_private.idl b/tools/under-control/src/chrome/common/extensions/api/file_manager_private.idl
index 1980bb21..fadfebf9 100755
--- a/tools/under-control/src/chrome/common/extensions/api/file_manager_private.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/file_manager_private.idl
@@ -100,13 +100,6 @@ enum FormatFileSystemType { vfat, exfat, ntfs };
// File transfer progress state.
enum TransferState { in_progress, queued, completed, failed };
-// The response when starting installing a Linux package.
-enum InstallLinuxPackageStatus {
- started,
- failed,
- install_already_active
-};
-
// Specifies type of event that is raised.
enum FileWatchEventType { changed, error };
@@ -997,17 +990,6 @@ dictionary FileSystemProviderAction {
DOMString? title;
};
-// Information about a Linux package in response to GetLinuxPackageInfo.
-dictionary LinuxPackageInfo {
- DOMString name;
- DOMString version;
-
- // A one-line summary of the project. Almost always present.
- DOMString? summary;
- // A longer description of the project. Almost always present.
- DOMString? description;
-};
-
// Payload data for crostini event.
dictionary CrostiniEvent {
// Is the event raised for enable, disable, share, or unshare.
@@ -1510,12 +1492,6 @@ callback GetVolumeRootCallback =
callback GetCrostiniSharedPathsCallback =
void(CrostiniSharedPathResponse response);
-// |linux_package_info| Package info for the queried package.
-callback GetLinuxPackageInfoCallback =
- void(LinuxPackageInfo linux_package_info);
-
-callback InstallLinuxPackageCallback = void(InstallLinuxPackageStatus status);
-
// |apps| List of Android picker apps.
callback GetAndroidPickerAppsCallback = void(AndroidApp[] apps);
@@ -1931,16 +1907,6 @@ interface Functions {
DOMString vmName,
GetCrostiniSharedPathsCallback callback);
- // Requests information about a Linux package. |entry| is a .deb file.
- [nocompile, doesNotSupportPromises]
- static void getLinuxPackageInfo([instanceOf=Entry] object entry,
- GetLinuxPackageInfoCallback callback);
-
- // Starts installation of a Linux package.
- [nocompile, doesNotSupportPromises]
- static void installLinuxPackage([instanceOf=Entry] object entry,
- InstallLinuxPackageCallback callback);
-
// Imports a Crostini Image File (.tini). This overrides the existing Linux
// apps and files.
[nocompile]
diff --git a/tools/under-control/src/chrome/common/extensions/api/file_manager_private_internal.idl b/tools/under-control/src/chrome/common/extensions/api/file_manager_private_internal.idl
index e1841a6b..efa22b48 100755
--- a/tools/under-control/src/chrome/common/extensions/api/file_manager_private_internal.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/file_manager_private_internal.idl
@@ -61,10 +61,6 @@ namespace fileManagerPrivateInternal {
callback GetRecentFilesCallback = void(EntryDescription[] entries);
callback GetCrostiniSharedPathsCallback =
void(CrostiniSharedPathResponse response);
- callback GetLinuxPackageInfoCallback =
- void(fileManagerPrivate.LinuxPackageInfo linux_package_info);
- callback InstallLinuxPackageCallback =
- void(fileManagerPrivate.InstallLinuxPackageStatus status);
callback GetThumbnailCallback = void(DOMString ThumbnailDataUrl);
callback BooleanCallback = void(boolean result);
callback GetVolumeRootCallback = void(EntryDescription rootDir);
@@ -158,12 +154,6 @@ namespace fileManagerPrivateInternal {
boolean observeFirstForSession,
DOMString vmName,
GetCrostiniSharedPathsCallback callback);
- static void getLinuxPackageInfo(
- DOMString url,
- GetLinuxPackageInfoCallback callback);
- static void installLinuxPackage(
- DOMString url,
- InstallLinuxPackageCallback callback);
static void importCrostiniImage(DOMString url);
static void toggleAddedToHoldingSpace(
DOMString[] urls, boolean add,
diff --git a/tools/under-control/src/chrome/common/extensions/api/identity.idl b/tools/under-control/src/chrome/common/extensions/api/identity.idl
index 471462c6..6c1a3ac0 100755
--- a/tools/under-control/src/chrome/common/extensions/api/identity.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/identity.idl
@@ -154,8 +154,8 @@ namespace identity {
// the callback.
//
// |details| : Token options.
- // |callback| : Called with an OAuth2 access token as specified by the
- // manifest, or undefined if there was an error. The
+ // |callback| : Returns a Promise which resolves with an OAuth2 access token
+ // as specified by the manifest, or rejects if there was an error. The
// grantedScopes parameter is populated since Chrome 87. When
// available, this parameter contains the list of granted scopes
// corresponding with the returned token.
@@ -174,9 +174,10 @@ namespace identity {
// only applies to the primary account for the profile.
//
// |details|: Profile options.
- // |callback|: Called with the ProfileUserInfo of the primary
- // Chrome account, of an empty ProfileUserInfo if the account
- // with given details doesn't exist.
+ // |callback|: Returns a Promise which resolves with the
+ // ProfileUserInfo of the primary Chrome account, or an empty
+ // ProfileUserInfo if the account with given
+ // details doesn't exist.
static void getProfileUserInfo(
optional ProfileDetails details,
GetProfileUserInfoCallback callback);
@@ -189,7 +190,8 @@ namespace identity {
// getAuthToken.
//
// |details| : Token information.
- // |callback| : Called when the token has been removed from the cache.
+ // |callback| : Returns a Promise which resolves when the token has been
+ // removed from the cache.
static void removeCachedAuthToken(
InvalidTokenDetails details,
optional InvalidateAuthTokenCallback callback);
@@ -201,7 +203,8 @@ namespace identity {
//
De-authorizes the user from all auth flows
//
//
- // |callback| : Called when the state has been cleared.
+ // |callback| : Returns a Promise which resolves when the state has been
+ // cleared.
static void clearAllCachedAuthTokens(
ClearAllCachedAuthTokensCallback callback);
@@ -222,7 +225,8 @@ namespace identity {
// when your app is first launched.
//
// |details| : WebAuth flow options.
- // |callback| : Called with the URL redirected back to your application.
+ // |callback| : Returns a Promise which resolves with the URL redirected
+ // back to your application.
static void launchWebAuthFlow(
WebAuthFlowDetails details,
LaunchWebAuthFlowCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/notifications.idl b/tools/under-control/src/chrome/common/extensions/api/notifications.idl
index fd6d6b69..3977446e 100755
--- a/tools/under-control/src/chrome/common/extensions/api/notifications.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/notifications.idl
@@ -153,10 +153,9 @@ namespace notifications {
//
// The notificationId parameter is required before Chrome 42.
// |options|: Contents of the notification.
- // |callback|: Returns the notification id (either supplied or generated)
- // that represents the created notification.
- //
- // The callback is required before Chrome 42.
+ // |callback|: Returns a Promise which resolves with the notification id
+ // (either supplied or generated) that represents the created
+ // notification.
static void create(
optional DOMString notificationId,
NotificationOptions options,
@@ -166,9 +165,8 @@ namespace notifications {
// |notificationId|: The id of the notification to be updated. This is
// returned by $(ref:notifications.create) method.
// |options|: Contents of the notification to update to.
- // |callback|: Called to indicate whether a matching notification existed.
- //
- // The callback is required before Chrome 42.
+ // |callback|: Returns a Promise which resolves to indicate whether a
+ // matching notification existed.
static void update(
DOMString notificationId,
NotificationOptions options,
@@ -177,20 +175,21 @@ namespace notifications {
// Clears the specified notification.
// |notificationId|: The id of the notification to be cleared. This is
// returned by $(ref:notifications.create) method.
- // |callback|: Called to indicate whether a matching notification existed.
- //
- // The callback is required before Chrome 42.
+ // |callback|: Returns a Promise which resolves to indicate whether a
+ // matching notification existed.
static void clear(
DOMString notificationId,
optional ClearCallback callback);
// Retrieves all the notifications of this app or extension.
- // |callback|: Returns the set of notification_ids currently in the system.
+ // |callback|: Returns a Promise which resolves with the set of
+ // notification_ids currently in the system.
static void getAll(GetAllCallback callback);
// Retrieves whether the user has enabled notifications from this app
// or extension.
- // |callback|: Returns the current permission level.
+ // |callback|: Returns a Promise which resolves with the current permission
+ // level.
static void getPermissionLevel(
PermissionLevelCallback callback);
};
diff --git a/tools/under-control/src/chrome/common/extensions/api/scripting.idl b/tools/under-control/src/chrome/common/extensions/api/scripting.idl
index e8924d63..ed2eb02f 100755
--- a/tools/under-control/src/chrome/common/extensions/api/scripting.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/scripting.idl
@@ -190,9 +190,9 @@ namespace scripting {
// the script evaluates to a promise, the browser will wait for the promise to
// settle and return the resulting value.
// |injection|: The details of the script which to inject.
- // |callback|: Invoked upon completion of the injection. The resulting
- // array contains the result of execution for each frame where the
- // injection succeeded.
+ // |callback|: Returns a Promise which resolves upon completion of the
+ // injection. The resulting array contains the result of execution for each
+ // frame where the injection succeeded.
static void executeScript(
ScriptInjection injection,
optional ScriptInjectionCallback callback);
@@ -200,7 +200,8 @@ namespace scripting {
// Inserts a CSS stylesheet into a target context.
// If multiple frames are specified, unsuccessful injections are ignored.
// |injection|: The details of the styles to insert.
- // |callback|: Invoked upon completion of the insertion.
+ // |callback|: Returns a Promise which resolves upon completion of the
+ // insertion.
static void insertCSS(
CSSInjection injection,
optional CSSInjectionCallback callback);
@@ -211,7 +212,8 @@ namespace scripting {
// css, files, and origin properties
// must exactly match the stylesheet inserted through $(ref:insertCSS).
// Attempting to remove a non-existent stylesheet is a no-op.
- // |callback|: A callback to be invoked upon the completion of the removal.
+ // |callback|: Returns a Promise which resolves upon the completion of the
+ // removal.
static void removeCSS(
CSSInjection injection,
optional CSSInjectionCallback callback);
@@ -220,8 +222,8 @@ namespace scripting {
// |scripts|: Contains a list of scripts to be registered. If there are
// errors during script parsing/file validation, or if the IDs specified
// already exist, then no scripts are registered.
- // |callback|: A callback to be invoked once scripts have been fully
- // registered or if an error has occurred.
+ // |callback|: Returns a Promise which resolves once scripts have been
+ // fully registered or rejects if an error has occurred.
static void registerContentScripts(
RegisteredContentScript[] scripts,
optional RegisterContentScriptsCallback callback);
@@ -238,8 +240,8 @@ namespace scripting {
// |filter|: If specified, only unregisters dynamic content scripts which
// match the filter. Otherwise, all of the extension's dynamic content
// scripts are unregistered.
- // |callback|: A callback to be invoked once scripts have been unregistered
- // or if an error has occurred.
+ // |callback|: Returns a Promise which resolves once scripts have been
+ // unregistered or rejects if an error has occurred.
static void unregisterContentScripts(
optional ContentScriptFilter filter,
optional UnregisterContentScriptsCallback callback);
@@ -250,8 +252,8 @@ namespace scripting {
// there are errors during script parsing/file validation, or if the IDs
// specified do not correspond to a fully registered script, then no scripts
// are updated.
- // |callback|: A callback to be invoked once scripts have been updated or
- // if an error has occurred.
+ // |callback|: Returns a Promise which resolves once scripts have been
+ // updated or rejects if an error has occurred.
static void updateContentScripts(
RegisteredContentScript[] scripts,
optional RegisterContentScriptsCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/side_panel.idl b/tools/under-control/src/chrome/common/extensions/api/side_panel.idl
index 00198796..08f9b615 100755
--- a/tools/under-control/src/chrome/common/extensions/api/side_panel.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/side_panel.idl
@@ -11,7 +11,7 @@ namespace sidePanel {
};
dictionary ManifestKeys {
- SidePanel side_panel;
+ SidePanel? side_panel;
};
// Defines the possible alignment for the side panel in the browser UI.
@@ -132,14 +132,16 @@ namespace sidePanel {
interface Functions {
// Configures the side panel.
// |options|: The configuration options to apply to the panel.
- // |callback|: Invoked when the options have been set.
+ // |callback|: Returns a Promise which resolves when the options have been
+ // set.
static void setOptions(
PanelOptions options,
optional VoidCallback callback);
// Returns the active panel configuration.
// |options|: Specifies the context to return the configuration for.
- // |callback|: Called with the active panel configuration.
+ // |callback|: Returns a Promise which resolves with the active panel
+ // configuration.
static void getOptions(
GetPanelOptions options,
PanelOptionsCallback callback);
@@ -147,32 +149,36 @@ namespace sidePanel {
// Configures the extension's side panel behavior. This is an upsert
// operation.
// |behavior|: The new behavior to be set.
- // |callback|: Called when the new behavior has been set.
+ // |callback|: Returns a Promise which resolves when the new behavior has
+ // been set.
static void setPanelBehavior(
PanelBehavior behavior,
optional VoidCallback callback);
// Returns the extension's current side panel behavior.
- // |callback|: Called with the extension's side panel behavior.
+ // |callback|: Returns a Promise which resolves with the extension's side
+ // panel behavior.
static void getPanelBehavior(
PanelBehaviorCallback callback);
// Opens the side panel for the extension.
// This may only be called in response to a user action.
// |options|: Specifies the context in which to open the side panel.
- // |callback|: Called when the side panel has been opened.
+ // |callback|: Returns a Promise which resolves when the side panel has been
+ // opened.
static void open(
OpenOptions options,
VoidCallback callback);
// Returns the side panel's current layout.
- // |callback|: Called with a $(ref:PanelLayout) containing the side value.
+ // |callback|: Returns a Promise which resolves with a $(ref:PanelLayout).
static void getLayout(PanelLayoutCallback callback);
// Closes the extension's side panel.
// This is a no-op if the panel is already closed.
// |options|: Specifies the context in which to close the side panel.
- // |callback|: Called when the side panel has been closed.
+ // |callback|: Returns a Promise which resolves when the side panel has been
+ // closed.
[nodoc] static void close(
CloseOptions options,
VoidCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/system_log.idl b/tools/under-control/src/chrome/common/extensions/api/system_log.idl
index f9e7328c..b6947dd2 100755
--- a/tools/under-control/src/chrome/common/extensions/api/system_log.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/system_log.idl
@@ -18,7 +18,8 @@ namespace systemLog {
interface Functions {
// Adds a new log record.
// |options|: The logging options.
- // |callback|: A callback to invoke once the log has been added.
+ // |callback|: Returns a Promise which resolves once the log has been
+ // added.
static void add(
MessageOptions options,
optional VoidCallback callback);
diff --git a/tools/under-control/src/chrome/common/extensions/api/tab_capture.idl b/tools/under-control/src/chrome/common/extensions/api/tab_capture.idl
index 4eb3a4a2..7fefaffa 100755
--- a/tools/under-control/src/chrome/common/extensions/api/tab_capture.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/tab_capture.idl
@@ -100,7 +100,8 @@ namespace tabCapture {
// This allows extensions to inform the user that there is an existing
// tab capture that would prevent a new tab capture from succeeding (or
// to prevent redundant requests for the same tab).
- // |callback| : Callback invoked with CaptureInfo[] for captured tabs.
+ // |callback| : Returns a Promise which resolves with CaptureInfo[] for
+ // captured tabs.
static void getCapturedTabs(
GetCapturedTabsCallback callback);
@@ -109,8 +110,8 @@ namespace tabCapture {
// stream ID, instead of a media stream, to the consumer tab.
//
// |GetMediaStreamOptions| : Options for the media stream id to retrieve.
- // |callback| : Callback to invoke with the result. If successful, the
- // result is an opaque string that can be passed to the
+ // |callback| : Returns a Promise which resolves with the result. If
+ // successful, the result is an opaque string that can be passed to the
// getUserMedia() API to generate a media stream that
// corresponds to the target tab. The created streamId can
// only be used once and expires after a few seconds if it is not used.
diff --git a/tools/under-control/src/chrome/common/extensions/api/vpn_provider.idl b/tools/under-control/src/chrome/common/extensions/api/vpn_provider.idl
index eb0a2d01..5622929a 100755
--- a/tools/under-control/src/chrome/common/extensions/api/vpn_provider.idl
+++ b/tools/under-control/src/chrome/common/extensions/api/vpn_provider.idl
@@ -121,16 +121,16 @@ namespace vpnProvider {
// Creates a new VPN configuration that persists across multiple login
// sessions of the user.
// |name|: The name of the VPN configuration.
- // |callback|: Called when the configuration is created or if there is an
- // error.
+ // |callback|: Returns a Promise which resolves when the configuration is
+ // created or rejects if there is an error.
static void createConfig(
DOMString name,
CreateConfigCompleteCallback callback);
// Destroys a VPN configuration created by the extension.
// |id|: ID of the VPN configuration to destroy.
- // |callback|: Called when the configuration is destroyed or if there is an
- // error.
+ // |callback|: Returns a Promise which resolves when the configuration is
+ // destroyed or rejects if there is an error.
static void destroyConfig(
DOMString id,
optional CallCompleteCallback callback);
@@ -139,7 +139,8 @@ namespace vpnProvider {
// immediately after "connected" is received from the platform.
// This will succeed only when the VPN session is owned by the extension.
// |parameters|: The parameters for the VPN session.
- // |callback|: Called when the parameters are set or if there is an error.
+ // |callback|: Returns a Promise which resolves when the parameters are set
+ // or rejects if there is an error.
static void setParameters(
Parameters parameters,
CallCompleteCallback callback);
@@ -147,7 +148,8 @@ namespace vpnProvider {
// Sends an IP packet through the tunnel created for the VPN session.
// This will succeed only when the VPN session is owned by the extension.
// |data|: The IP packet to be sent to the platform.
- // |callback|: Called when the packet is sent or if there is an error.
+ // |callback|: Returns a Promise which resolves when the packet is sent or
+ // rejects if there is an error.
static void sendPacket(
ArrayBuffer data,
optional CallCompleteCallback callback);
@@ -155,8 +157,8 @@ namespace vpnProvider {
// Notifies the VPN session state to the platform.
// This will succeed only when the VPN session is owned by the extension.
// |state|: The VPN session state of the VPN client.
- // |callback|: Called when the notification is complete or if there is an
- // error.
+ // |callback|: Returns a Promise which resolves when the notification is
+ // complete or rejects if there is an error.
static void notifyConnectionStateChanged(
VpnConnectionState state,
optional CallCompleteCallback callback);
diff --git a/tools/under-control/src/chrome/renderer/chrome_content_renderer_client.cc b/tools/under-control/src/chrome/renderer/chrome_content_renderer_client.cc
index 35dd0c2f..1a0da18e 100755
--- a/tools/under-control/src/chrome/renderer/chrome_content_renderer_client.cc
+++ b/tools/under-control/src/chrome/renderer/chrome_content_renderer_client.cc
@@ -814,9 +814,7 @@ bool ChromeContentRendererClient::IsPluginHandledExternally(
// necessary here (see https://crbug.com/965747). For now, returning false
// should take us to CreatePlugin after HTMLPlugInElement which is called
// through HTMLPlugInElement::LoadPlugin code path.
- if (plugin_info->status != chrome::mojom::PluginStatus::kAllowed &&
- plugin_info->status !=
- chrome::mojom::PluginStatus::kPlayImportantContent) {
+ if (plugin_info->status != chrome::mojom::PluginStatus::kAllowed) {
// We could get here when a MimeHandlerView is loaded inside a
// which is using permissions API (see WebViewPluginTests).
ChromeExtensionsRendererClient::DidBlockMimeHandlerViewForDisallowedPlugin(
@@ -1000,8 +998,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
case chrome::mojom::PluginStatus::kNotFound: {
NOTREACHED();
}
- case chrome::mojom::PluginStatus::kAllowed:
- case chrome::mojom::PluginStatus::kPlayImportantContent: {
+ case chrome::mojom::PluginStatus::kAllowed: {
if (info.path.value() == ChromeContentClient::kPDFExtensionPluginPath) {
// Report PDF load metrics. Since the PDF plugin is comprised of an
// extension that loads a second plugin, avoid double counting by
diff --git a/tools/under-control/src/components/policy/resources/templates/common_schemas.yaml b/tools/under-control/src/components/policy/resources/templates/common_schemas.yaml
index 34fe3b02..719c8822 100755
--- a/tools/under-control/src/components/policy/resources/templates/common_schemas.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/common_schemas.yaml
@@ -179,7 +179,7 @@ ExtensionInstallSources:
type: array
ListOfPermissions:
items:
- pattern: ^[a-z][a-zA-Z0-9.]*$
+ pattern: ^[a-z][a-zA-Z0-9._]*$
type: string
type: array
ListOfUrlPatterns:
diff --git a/tools/under-control/src/components/policy/resources/templates/policies.yaml b/tools/under-control/src/components/policy/resources/templates/policies.yaml
index 939136c3..295deafc 100755
--- a/tools/under-control/src/components/policy/resources/templates/policies.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policies.yaml
@@ -1390,8 +1390,8 @@ policies:
1389: AutoSignOutEnabled
1390: ExtensionInstallCloudPolicyChecksEnabled
1391: DevToolsGoogleDeveloperProgramProfileAvailability
- 1392: IncognitoModeBlocklist
- 1393: IncognitoModeAllowlist
+ 1392: IncognitoModeUrlBlocklist
+ 1393: IncognitoModeUrlAllowlist
1394: PreferSlowKexAlgorithms
1395: ExtensionForceInstallWithNonMalwareViolationsEnabled
1396: CacheEncryptionEnabled
@@ -1416,6 +1416,13 @@ policies:
1415: DeviceLoginScreenPreferSlowCiphers
1416: SearchContentSharingSettings
1417: StaticStorageQuotaEnabled
+ 1418: SaaSReportDomainUrlsForBrowser
+ 1419: SaaSReportDomainUrlsForProfile
+ 1420: GeminiActOnWebAllowedForURLs
+ 1421: GeminiActOnWebBlockedForURLs
+ 1422: WebAppInstallByUserEnabled
+ 1423: ''
+ 1424: RestrictPdfSaveToGoogleDriveAccountsToPattern
atomic_groups:
1: Homepage
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml
new file mode 100755
index 00000000..db48b5d4
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForBrowser.yaml
@@ -0,0 +1,39 @@
+caption: Specifies a list of SaaS domains that will be reported for managed browser
+desc: |-
+ This policy controls $1Google Chrome reporting of SaaS domain visits and content transfers for a managed browser.
+
+ When the policy is set, the URLs matching SaaS domains will be used to generate report and uploaded. Unmatched URLs will be ignored.
+
+ When the policy is not set or set to an empty list, no report will be generated.
+
+ The matching patterns use a similar format to those for the 'URLBlocklist' policy, which are documented at https://support.google.com/chrome/a?p=url_blocklist_filter_format. With a few exceptions below:
+
+ * URL host must match the hostname or be a subdomain of the hostname of one of the domains from the SaaS sites list.
+
+ * URL path must start with the path from the matched SaaS sites list entry.
+
+ * The URL scheme, port, query are disregarded during the matching process.
+
+ This policy value is populated by the cloud policy infrastructure and admins can't set it directly.
+example_value:
+- google.com
+- example.com/path
+default: []
+features:
+ dynamic_refresh: true
+ per_profile: false
+ cloud_only: true
+future_on:
+- chrome.*
+owners:
+- janzarzycki@google.com
+- igorruvinov@chromium.org
+- file://components/enterprise/browser/reporting/OWNERS
+schema:
+ items:
+ type: string
+ type: array
+tags:
+- admin-sharing
+- google-sharing
+type: list
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml
new file mode 100755
index 00000000..3d3e3a72
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/CloudReporting/SaaSReportDomainUrlsForProfile.yaml
@@ -0,0 +1,42 @@
+caption: Specifies a list of SaaS domains that will be reported for managed profile
+desc: |-
+ This policy controls $1Google Chrome reporting of SaaS domain visits and content transfers for a managed profile.
+
+ When the policy is set, the URLs matching SaaS domains will be used to generate report and uploaded. Unmatched URLs will be ignored.
+
+ When the policy is not set or set to an empty list, no report will be generated.
+
+ The matching patterns use a similar format to those for the 'URLBlocklist' policy, which are documented at https://support.google.com/chrome/a?p=url_blocklist_filter_format. With a few exceptions below:
+
+ * URL host must match the hostname or be a subdomain of the hostname of one of the domains from the SaaS sites list.
+
+ * URL path must start with the path from the matched SaaS sites list entry.
+
+ * The URL scheme, port, query are disregarded during the matching process.
+
+ This policy can only be set as a cloud user policy.
+
+ This policy value is populated by the cloud policy infrastructure and admins can't set it directly.
+example_value:
+- google.com
+- example.com/path
+default: []
+features:
+ dynamic_refresh: true
+ per_profile: true
+ user_only: true
+ cloud_only: true
+future_on:
+- chrome.*
+owners:
+- janzarzycki@google.com
+- igorruvinov@chromium.org
+- file://components/enterprise/browser/reporting/OWNERS
+schema:
+ items:
+ type: string
+ type: array
+tags:
+- admin-sharing
+- google-sharing
+type: list
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml
index 7921f1c6..b701eec4 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/AutoSelectCertificateForUrls.yaml
@@ -26,6 +26,7 @@ features:
per_profile: true
future_on:
- fuchsia
+- ios
owners:
- chromeos-commercial-networking-team@google.com
- miersh@google.com
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/DefaultSearchProvider/DefaultSearchProviderEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/DefaultSearchProvider/DefaultSearchProviderEnabled.yaml
index 69b09136..2b588180 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/DefaultSearchProvider/DefaultSearchProviderEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/DefaultSearchProvider/DefaultSearchProviderEnabled.yaml
@@ -4,10 +4,6 @@ desc: |-
Setting the policy to Enabled means a default search is performed when a user enters non-URL text in the address bar. To specify the default search provider, set the rest of the default search policies. If you leave those policies empty, the user can choose the default provider. Setting the policy to Disabled means there's no search when the user enters non-URL text in the address bar. The Disabled value is not supported by the Google Admin console.
If you set the policy, users can't change it in $1Google Chrome. If not set, the default search provider is on, and users can set the search provider list.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value: true
features:
can_be_recommended: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml
index ca369341..e0bd24e4 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/BlockExternalExtensions.yaml
@@ -13,6 +13,8 @@ example_value: true
features:
dynamic_refresh: false
per_profile: true
+future_on:
+- android
items:
- caption: Block installation of external extensions
value: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml
index e3d92463..a5d7038e 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionAllowedTypes.yaml
@@ -28,6 +28,8 @@ example_value:
features:
dynamic_refresh: true
per_profile: true
+future_on:
+- android
items:
- caption: Extension
name: extension
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionForceInstallWithNonMalwareViolationsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionForceInstallWithNonMalwareViolationsEnabled.yaml
index 3f1e7994..bdfeb033 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionForceInstallWithNonMalwareViolationsEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionForceInstallWithNonMalwareViolationsEnabled.yaml
@@ -19,15 +19,15 @@ desc: |-
Setting the policy to Disabled or not setting the policy will cause force-installed extensions with non-malware violations to be disabled.
- This policy will be available for 3 milestones.
+ This policy was removed in M145. Starting that version, force-installed extensions with non-malware violations will be disabled in low-trust environments.
owners:
- richche@google.com
- file://extensions/OWNERS
supported_on:
-- chrome.mac:142-
-- chrome.win:142-
+- chrome.mac:142-144
+- chrome.win:142-144
features:
dynamic_refresh: true
@@ -46,6 +46,8 @@ items:
default: false
+deprecated: true
+
example_value: false
tags: []
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml
index 47ef3289..6233a889 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionInstallSources.yaml
@@ -10,6 +10,8 @@ example_value:
features:
dynamic_refresh: true
per_profile: true
+future_on:
+- android
label: URL patterns to allow extension, app, and user script installs from
owners:
- dbertoni@chromium.org
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionUnpublishedAvailability.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionUnpublishedAvailability.yaml
index 7d68a38e..d7dea441 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionUnpublishedAvailability.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/ExtensionUnpublishedAvailability.yaml
@@ -19,6 +19,8 @@ desc: |-
supported_on:
- chrome.*:115-
- chrome_os:115-
+future_on:
+- android
features:
dynamic_refresh: true
per_profile: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml
index dd0cf04c..d5b9dbee 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/policy_atomic_groups.yaml
@@ -11,4 +11,3 @@ Extensions:
- ExtensionManifestV2Availability
- ExtensionUnpublishedAvailability
- ExtensionExtendedBackgroundLifetimeForPortConnectionsToUrls
- - ExtensionForceInstallWithNonMalwareViolationsEnabled
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsEnabled.yaml
index 6b04ce71..32b34578 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsEnabled.yaml
@@ -1,8 +1,8 @@
caption: Enable First-Party Sets.
default: true
-# TODO(b/313073098): Deprecate policy.
+deprecated: true
desc: |-
- This policy is provided as a way to opt-out of the First-Party Sets feature.
+ This policy is provided as a way to opt-out of the First-Party Sets feature (which was later renamed Related Website Sets feature).
When this policy is unset or set to Enabled, the First-Party Sets feature is enabled.
@@ -11,8 +11,8 @@ desc: |-
It controls whether Chrome supports First-Party Sets related integrations.
This is the equivalent of the RelatedWebsiteSetsEnabled policy.
- Either policy may be used, but this one will be deprecated soon so the RelatedWebsiteSetsEnabled policy is preferred.
- They both have the same effect on the browser's behavior.
+ Either policy may be used with the same effect on the browser's behavior.
+ Both these policies are deprecated following Related Website Sets feature deprecation in $1Google Chrome version 144.
example_value: false
features:
dynamic_refresh: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml
index 7c65bc15..9cff845f 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FirstPartySets/FirstPartySetsOverrides.yaml
@@ -1,8 +1,8 @@
caption: Override First-Party Sets.
default: {}
-# TODO(b/313073098): Deprecate policy.
+deprecated: true
desc: |-
- This policy provides a way to override the list of sets the browser uses for First-Party Sets features.
+ This policy provides a way to override the list of sets the browser uses for First-Party Sets features (which was later renamed Related Website Sets feature).
Each set in the browser's list of First-Party Sets must meet the requirements of a First-Party Set.
A First-Party Set must contain a primary site and one or more member sites.
@@ -38,8 +38,8 @@ desc: |-
On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
This is the equivalent of the RelatedWebsiteSetsOverrides policy.
- Either policy may be used, but this one will be deprecated soon so the RelatedWebsiteSetsOverrides policy is preferred.
- They both have the same effect on the browser's behavior.
+ Either policy may be used with the same effect on the browser's behavior.
+ Both these policies are deprecated following Related Website Sets feature deprecation in $1Google Chrome version 144.
example_value:
additions:
- associatedSites:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml
new file mode 100755
index 00000000..daa80d7c
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebAllowedForURLs.yaml
@@ -0,0 +1,33 @@
+caption: Allow Gemini app integrations to directly act on specified sites
+desc: |-
+ Allows to set a list of URL patterns that specify on which sites Gemini app integrations can directly act on web pages.
+
+ URLs matching neither the allowlist or the blocklist use GeminiActOnWebSettings.
+
+ URLs matching both the allowlist and the blocklist are allowed.
+
+ For detailed information on valid url patterns, please see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
+
+owners:
+- liuwilliam@chromium.org
+- mcnee@chromium.org
+- file://chrome/browser/glic/OWNERS
+example_value:
+- example.com
+- https://ssl.server.com
+- hosting.com/good_path
+- https://server:8080/path
+- .exact.hostname.com
+future_on:
+- chrome.*
+- chrome_os
+- android
+features:
+ dynamic_refresh: true
+ per_profile: true
+type: list
+schema:
+ items:
+ type: string
+ type: array
+tags: []
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml
new file mode 100755
index 00000000..de788674
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebBlockedForURLs.yaml
@@ -0,0 +1,33 @@
+caption: Block Gemini app integrations to directly act on specified sites
+desc: |-
+ Allows to set a list of URL patterns that specify on which sites Gemini app integrations cannot directly act on web pages.
+
+ URLs matching neither the allowlist or the blocklist use GeminiActOnWebSettings.
+
+ URLs matching both the allowlist and the blocklist are allowed.
+
+ For detailed information on valid url patterns, please see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
+
+owners:
+- liuwilliam@chromium.org
+- mcnee@chromium.org
+- file://chrome/browser/glic/OWNERS
+example_value:
+- example.com
+- https://ssl.server.com
+- hosting.com/bad_path
+- https://server:8080/path
+- .exact.hostname.com
+future_on:
+- chrome.*
+- chrome_os
+- android
+features:
+ dynamic_refresh: true
+ per_profile: true
+type: list
+schema:
+ items:
+ type: string
+ type: array
+tags: []
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebSettings.yaml
index b33ba4dd..4f0ef76e 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebSettings.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/GeminiActOnWebSettings.yaml
@@ -16,6 +16,8 @@ owners:
- liuwilliam@chromium.org
- file://chrome/browser/glic/OWNERS
example_value: 0
+future_on:
+- android
features:
dynamic_refresh: true
per_profile: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml
index d6ea8d5e..74946466 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/SearchContentSharingSettings.yaml
@@ -1,7 +1,7 @@
-caption: Enable content sharing with Google AI Mode integrations
+caption: Enable content sharing with Google AI Mode and Lens integrations
desc: |-
- This policy controls sharing of page and file content with Google AI Mode through Google Chrome side panel or tabs.
+ This policy controls sharing of page and file content with Google AI Mode and Lens through Google Chrome side panel or tabs.
Note that this policy doesn't affect Google AI Mode on the web. It only controls how users can share information with it when using Google Chrome.
@@ -15,6 +15,8 @@ desc: |-
This policy also doesn't control Google Gemini integration which can be disabled by GeminiSettings.
+ If this policy is unset, its behavior is determined by the GenAiDefaultSettings policy.
+
For more information on data handling for generative AI features, please see https://support.google.com/chrome/a?p=generative_ai_settings.
default: 0
example_value: 1
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsEnabled.yaml
index 8b45016e..dd784d73 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsEnabled.yaml
@@ -21,14 +21,12 @@ desc: |-
See https://wicg.github.io/local-network-access/ for Local Network Access restrictions.
- This policy is deprecated because Local Network Access
- has launched by default. The policy will be removed in a future release.
default: false
supported_on:
-- chrome.*:138-
-- chrome_os:138-
-- android:139-
+- chrome.*:138-144
+- chrome_os:138-144
+- android:139-144
features:
dynamic_refresh: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsTemporaryOptOut.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsTemporaryOptOut.yaml
index 5a29914d..720e9caa 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsTemporaryOptOut.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/LocalNetworkAccessSettings/LocalNetworkAccessRestrictionsTemporaryOptOut.yaml
@@ -19,16 +19,12 @@ desc: |-
See https://wicg.github.io/local-network-access/ for Local Network Access restrictions.
- This enterprise policy is temporary, and will be removed after M146.
+ This enterprise policy is temporary, and will be removed after M152.
Long term, the policy LocalNetworkAccessAllowedForUrls
can be used to allowlist URL patterns that should be automatically granted
the Local Network Access permission.
-
- Note that if the policy LocalNetworkAccessRestrictionsEnabled
- is enabled, it will take precedence over this policy.
default: false
supported_on:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserSignin.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserSignin.yaml
index c4cb769a..45de5a97 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserSignin.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/BrowserSignin.yaml
@@ -6,7 +6,7 @@ desc: |-
If the policy is set to "Enable browser sign-in," then the user is allowed to sign in to the browser. On all platforms except iOS, the user is automatically signed in to the browser when signed in to Google web services like Gmail. Being signed in to the browser means the user's account information will be kept by the browser. However, it does not mean that $1Google Chrome Sync will be turned on by default; the user must separately opt-in to use this feature. Enabling this policy will prevent the user from turning off the setting that allows browser sign-in. To control the availability of $1Google Chrome Sync, use the SyncDisabled policy.
- If the policy is set to "Force browser sign-in" the user is presented with an account selection dialog and has to choose and sign in to an account to use the browser. This ensures that for managed accounts the policies associated with the account are applied and enforced. The default value of BrowserGuestModeEnabled will be set to disabled. Note that existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help center article: https://support.google.com/chrome/a/answer/7572556 . This option is not supported on Linux nor Android, where it will fall back to "Enable browser sign-in" if used.
+ If the policy is set to "Force browser sign-in" the user is presented with an account selection dialog and has to choose and sign in to an account to use the browser. This ensures that for managed accounts the policies associated with the account are applied and enforced. The default value of BrowserGuestModeEnabled will be set to disabled. Note that existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help center article: https://support.google.com/chrome/?p=force_browser_signin . This option is not supported on $2Google ChromeOS nor Android, where it will fall back to "Enable browser sign-in" if used.
If this policy is not set then the user can decide if they want to enable browser sign-in in the $1Google Chrome settings and use it as they see fit.
example_value: 2
@@ -28,6 +28,7 @@ items:
- chrome.win:70-
- chrome.mac:70-
- ios:97-
+ - chrome.linux:145-
value: 2
owners:
- file://components/policy/OWNERS
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailability.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailability.yaml
index e3521a5d..3d1ccf67 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailability.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailability.yaml
@@ -15,7 +15,11 @@ desc: |-
As of $1Google Chrome version 128, this setting will not control developer mode on extensions page if ExtensionDeveloperModeSettings policy is set.
- If you want to restrict Developer Tools access based on the page URL, use the DeveloperToolsAvailabilityBlocklist and DeveloperToolsAvailabilityAllowlist policies.
+ The availability of Developer Tools is determined in the following order of precedence:
+ 1. If a URL matches a pattern in the DeveloperToolsAvailabilityAllowlist policy, Developer Tools are allowed.
+ 2. If the DeveloperToolsAvailabilityAllowlist is set and the DeveloperToolsAvailabilityBlocklist is not, any URL not on the allowlist is blocked.
+ 3. If a URL matches a pattern in the DeveloperToolsAvailabilityBlocklist policy, Developer Tools are blocked.
+ 4. If a URL is not covered by the allowlist or blocklist, this policy (DeveloperToolsAvailability) is the fallback.
default: 0
example_value: 2
features:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml
index 39cb8173..256af535 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityAllowlist.yaml
@@ -4,9 +4,13 @@ desc: |-
URL patterns are matched against the URL of the page being inspected. If a match is found, the Chrome DevTools are allowed. This applies even if the URL also matches the DeveloperToolsAvailabilityBlocklist policy, even if the DeveloperToolsAvailability policy is set to disallow (value 2). For information on the URL format, see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
- Leaving the policy unset means this allowlist has no effect. Since Chrome DevTools are available by default, they will only be blocked if specified in the DeveloperToolsAvailabilityBlocklist policy.
+ Leaving the policy unset means this allowlist has no effect.
- Unmatched URLs will follow the DeveloperToolsAvailability policy.
+ If this policy is set and DeveloperToolsAvailabilityBlocklist is not, any URL not on this list will be blocked.
+
+ If both this and the DeveloperToolsAvailabilityBlocklist policies are set, this allowlist takes precedence. If a URL matches a pattern on the allowlist, it will be allowed. If it matches a pattern on the blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the DeveloperToolsAvailability policy will be used as a fallback.
+
+ If neither policy is set, the availability is determined by the DeveloperToolsAvailability policy.
This policy also applies to Chrome DevTools opened for extensions and web applications.
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml
index e1182cec..ed79ba71 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/DeveloperToolsAvailabilityBlocklist.yaml
@@ -2,9 +2,11 @@ caption: List of URL patterns for which Chrome D
desc: |-
URL patterns are matched against the URL of the page being inspected. If a match is found, the Chrome DevTools are blocked. For information on the URL format, see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
- The DeveloperToolsAvailabilityAllowlist policy takes precedence over DeveloperToolsAvailabilityBlocklist.
+ If the DeveloperToolsAvailabilityAllowlist policy is set and this policy is not, any URL not on the allowlist will be blocked.
- Unmatched URLs will follow the DeveloperToolsAvailability policy.
+ If both this and the DeveloperToolsAvailabilityAllowlist are set, the allowlist takes precedence. If a URL matches a pattern on the allowlist, it will be allowed. If it matches a pattern on this blocklist (but not the allowlist), it will be blocked. If a URL matches neither, the DeveloperToolsAvailability policy will be used as a fallback.
+
+ If neither policy is set, the availability is determined by the DeveloperToolsAvailability policy.
This policy also applies to Chrome DevTools opened for extensions and web applications.
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceBrowserSignin.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceBrowserSignin.yaml
index 70a74e3e..9c26932a 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceBrowserSignin.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ForceBrowserSignin.yaml
@@ -11,8 +11,6 @@ example_value: false
features:
dynamic_refresh: false
per_profile: false
-future_on:
-- chrome.linux
items:
- caption: Force the user to sign in before using the browser
value: true
@@ -26,6 +24,7 @@ schema:
supported_on:
- chrome.win:64-
- chrome.mac:66-
+- chrome.linux:145-
- android:65-
tags: []
type: main
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml
index 43e6673d..e9b5af50 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml
@@ -2,12 +2,22 @@ caption: Allow HTTPS-Only Mode to be enabled
default: allowed
desc: |-
This policy controls whether users can enable HTTPS-Only Mode (Always Use Secure Connections) in Settings. HTTPS-Only Mode upgrades all navigations to HTTPS.
- If this setting is not set or set to allowed, users will be allowed to enable HTTPS-Only Mode.
- If this setting is set to disallowed, users will not be allowed to enable HTTPS-Only Mode.
- If this setting is set to force_enabled, HTTPS-Only Mode will be enabled in Strict mode and users will not be able to disable it.
- If this setting is set to force_balanced_enabled, HTTPS-Only Mode will be enabled in Balanced mode and users will not be able to disable it.
- force_enabled is supported from M112 onwards, force_balanced_enabled is supported from M129 onwards.
- If you set this policy to a value that is not supported by the version of Chrome that receives the policy, Chrome will default to the allowed setting.
+
+ If this setting is not set or set to "allowed", users will be allowed to enable HTTPS-Only Mode.
+
+ If this setting is set to "disallowed", HTTPS-Only Mode will be disabled.
+
+ If this setting is set to "force_enabled", HTTPS-Only Mode will be enabled in Strict mode.
+
+ If this setting is set to "force_balanced_enabled", HTTPS-Only Mode will be enabled in Balanced mode.
+
+ "force_enabled" is supported from M112 onwards, "force_balanced_enabled" is supported from M129 onwards.
+
+ "force_enabled" and "force_balanced_enabled" can be recommended to users too.
+ HTTPS-Only Mode will be set Strict or Balanced initially but users are allowed to
+ change it.
+
+ If you set this policy to a value that is not supported by the version of Chrome that receives the policy, Chrome will default to the allowed setting.
The separate HttpAllowlist policy
can be used to exempt specific hostnames or hostname patterns from being
@@ -17,17 +27,18 @@ example_value: disallowed
features:
dynamic_refresh: true
per_profile: true
+ can_be_recommended: true
items:
- caption: Do not restrict users' HTTPS-Only Mode setting
name: allowed
value: allowed
-- caption: Do not allow users to enable any HTTPS-Only Mode
+- caption: Disable HTTPS-Only Mode
name: disallowed
value: disallowed
-- caption: Force enable HTTPS-Only Mode in Strict mode
+- caption: Enable HTTPS-Only Mode in Strict mode
name: force_enabled
value: force_enabled
-- caption: Force enable HTTPS-Only Mode in Balanced Mode
+- caption: Enable HTTPS-Only Mode in Balanced Mode
name: force_balanced_enabled
value: force_balanced_enabled
owners:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAllowlist.yaml
deleted file mode 100755
index be709ed3..00000000
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAllowlist.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-caption: Allow access to a list of URLs in Incognito mode.
-desc: |-
- Setting the policy provides access to the listed URLs in Incognito mode, as exceptions to IncognitoModeBlocklist. For example, setting IncognitoModeBlocklist to * will block all requests in Incognito mode, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ). The IncognitoModeAllowlist policy takes precedence over IncognitoModeBlocklist. This policy is limited to 1,000 entries.
-
- Leaving the policy unset allows no exceptions to IncognitoModeBlocklist.
-
- This policy only affects Incognito mode. To allow URLs for all user profiles, please use the URLAllowlist policy.
-example_value:
-- example.com
-- https://ssl.server.com
-- hosting.com/bad_path
-- https://server:8080/path
-- .exact.hostname.com
-- file://*
-- custom_scheme:*
-- '*'
-future_on:
-- chrome.*
-- chrome_os
-- ios
-- android
-owners:
-- file://components/policy/OWNERS
-- mwalachowski@google.com
-features:
- dynamic_refresh: true
- per_profile: true
-schema:
- items:
- type: string
- type: array
-tags:
-- filtering
-type: list
\ No newline at end of file
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml
index de2c1846..b591368c 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeAvailability.yaml
@@ -12,7 +12,7 @@ desc: |-
default: 0
example_value: 1
features:
- dynamic_refresh: true
+ dynamic_refresh: false
per_profile: true
future_on:
- fuchsia
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml
new file mode 100755
index 00000000..7843f412
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlAllowlist.yaml
@@ -0,0 +1,34 @@
+caption: Allow access to a list of URLs in Incognito mode.
+desc: |-
+ Setting the policy provides access to the listed URLs in Incognito mode, as exceptions to IncognitoModeUrlBlocklist. For example, setting IncognitoModeUrlBlocklist to * will block all requests in Incognito mode, and you can use this policy to allow access to a limited list of URLs. Use it to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths, using the format specified at ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ). The IncognitoModeUrlAllowlist policy takes precedence over IncognitoModeUrlBlocklist. This policy is limited to 1,000 entries.
+
+ Leaving the policy unset allows no exceptions to IncognitoModeUrlBlocklist.
+
+ This policy only affects Incognito mode. To allow URLs for all user profiles, please use the URLAllowlist policy.
+example_value:
+- example.com
+- https://ssl.server.com
+- hosting.com/bad_path
+- https://server:8080/path
+- .exact.hostname.com
+- file://*
+- custom_scheme:*
+- '*'
+future_on:
+- chrome.*
+- chrome_os
+- ios
+- android
+owners:
+- file://components/policy/OWNERS
+- mwalachowski@google.com
+features:
+ dynamic_refresh: true
+ per_profile: true
+schema:
+ items:
+ type: string
+ type: array
+tags:
+- filtering
+type: list
\ No newline at end of file
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml
similarity index 53%
rename from tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeBlocklist.yaml
rename to tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml
index 3917a7b0..ee342f40 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeBlocklist.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/IncognitoModeUrlBlocklist.yaml
@@ -1,6 +1,6 @@
caption: Block access to a list of URLs in Incognito mode.
desc: |-
- Setting the IncognitoModeBlocklist policy stops web pages with prohibited URLs from loading in Incognito mode. Administrators can specify the list of URL patterns to be blocked. If left unset, no URLs are blocked in the Incognito mode. Up to 1,000 exceptions can be defined in IncognitoModeAllowlist. See how to format a URL pattern ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ).
+ Setting the IncognitoModeUrlBlocklist policy stops web pages with prohibited URLs from loading in Incognito mode. Administrators can specify the list of URL patterns to be blocked. If left unset, no URLs are blocked in the Incognito mode. Up to 1,000 exceptions can be defined in IncognitoModeUrlAllowlist. See how to format a URL pattern ( https://support.google.com/chrome/a?p=url_blocklist_filter_format ).
This policy only affects Incognito mode. To block URLs for all user profiles, please use the URLBlocklist policy.
example_value:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml
index 8157dc9b..80e6dc86 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensDesktopNTPSearchEnabled.yaml
@@ -6,6 +6,8 @@ desc: Leaving the policy unset or setting it to Enabled allows users to view and
search box on the New Tab page. Setting the policy to Disabled means users
will not see the Google Lens button
in the search box on the New Tab page.
+
+ Starting in $1Google Chrome 147, this policy will be deprecated. IT Admins can use SearchContentSharingSettings to control this feature going forward.
example_value: true
features:
dynamic_refresh: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml
index 2700cf70..8a34fef0 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensOverlaySettings.yaml
@@ -9,6 +9,8 @@ desc: |-
When policy is set to 1 - Do not allow, the feature will not be available.
Starting in $1Google Chrome 140, if the policy is unset, its behavior is determined by the GenAiDefaultSettings policy.
+
+ Starting in $1Google Chrome 147, this policy will be deprecated. IT Admins can use SearchContentSharingSettings to control this feature going forward.
default: 0
example_value: 1
features:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml
index a5771b18..effdfb81 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/LensRegionSearchEnabled.yaml
@@ -7,6 +7,8 @@ desc: Leaving the policy unset or setting it to Enabled allows users to view and
Google Lens region search menu item in
the context menu when Google Lens region
search is supported.
+
+ Starting in $1Google Chrome 147, this policy will be deprecated. IT Admins can use SearchContentSharingSettings to control this feature going forward.
example_value: true
features:
dynamic_refresh: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ManagedAccountsSigninRestriction.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ManagedAccountsSigninRestriction.yaml
index d867eb49..c6c36986 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ManagedAccountsSigninRestriction.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ManagedAccountsSigninRestriction.yaml
@@ -1,6 +1,7 @@
caption: Add restrictions on managed accounts
default: none
-desc: |2-
+desc: |-
+ This policy is deprecated. Please use ProfileSeparationSettings instead.
Default behavior (Policy unset)
When an account is added in the content area a small dialog may appear asking the user to create a new profile. This dialog is dismissable.
@@ -22,6 +23,7 @@ desc: |2-
ManagedAccountsSigninRestriction = 'primary_account_strict_keep_existing_data'
This is the same behavior as 'primary_account_keep_existing_data' except the newly created profile is not allowed to have secondary accounts.
+deprecated: true
example_value: primary_account
features:
dynamic_refresh: false
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml
index 3614cc21..10fd9e6a 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForBrowser.yaml
@@ -11,6 +11,8 @@ desc: |-
supported_on:
- chrome.*:136-
- android:143-
+future_on:
+- ios
features:
dynamic_refresh: true
per_profile: false
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml
index 3afa09eb..f7389545 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ProvisionManagedClientCertificateForUser.yaml
@@ -12,6 +12,8 @@ supported_on:
- chrome.mac:126-
- chrome.linux:128-
- android:143-
+future_on:
+- ios
features:
dynamic_refresh: true
per_profile: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml
new file mode 100755
index 00000000..e2f76b27
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/RestrictPdfSaveToGoogleDriveAccountsToPattern.yaml
@@ -0,0 +1,21 @@
+caption: Restrict eligible Google accounts for saving PDF files to Google Drive from the
+ $1Google Chrome PDF Viewer
+desc: |-
+ Contains a regular expression to determine eligible Google accounts for saving PDF files to Google Drive from the $1Google Chrome PDF Viewer.
+
+ An error is displayed if a user tries to upload a PDF file to Google Drive using an account that does not match this pattern.
+
+ If this policy is left not set or blank, then the user can use any Google account to save PDF files to Google Drive.
+example_value: .*@example\.com
+features:
+ dynamic_refresh: false
+ per_profile: false
+owners:
+- file://components/policy/OWNERS
+- faizur@chromium.org
+schema:
+ type: string
+supported_on:
+- chrome.*:145-
+tags: []
+type: string
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/StaticStorageQuotaEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/StaticStorageQuotaEnabled.yaml
index 82020f5c..51f6ad82 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/StaticStorageQuotaEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/StaticStorageQuotaEnabled.yaml
@@ -3,7 +3,7 @@ default: null
desc: |-
When enabled, the storage quota APIs will return a static value equal to usage + min(10 GiB, disk rounded up to the nearest 1 GiB).
When disabled, the storage quota APIs will generally return a dynamic value proportional to the total space available on the device, regardless of usage.
- If unset, the predictable reported storage quota feature launch or flags will determine behavior.
+ If unset, the storage quota APIs will use the default Chrome behavior.
Sites with unlimited storage permissions are unaffected by this setting. Enforced quota is also unaffected.
example_value: true
features:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/UserAgentReduction.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/UserAgentReduction.yaml
index 3d3359e0..0bf10ea8 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/UserAgentReduction.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/UserAgentReduction.yaml
@@ -35,9 +35,9 @@ schema:
- 2
type: integer
supported_on:
-- chrome_os:98-
-- chrome.*:98-
-- android:98-
+- chrome_os:98-144
+- chrome.*:98-144
+- android:98-144
tags:
- website-sharing
type: int-enum
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebAppInstallByUserEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebAppInstallByUserEnabled.yaml
new file mode 100755
index 00000000..c538888c
--- /dev/null
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebAppInstallByUserEnabled.yaml
@@ -0,0 +1,29 @@
+caption: Enable User Web App Install From Browser
+
+desc: |-
+ This policy controls whether users can install web apps through the browser.
+ If you enable or don’t configure this policy, users can install web apps through the browser.
+ If you disable this policy, users can’t install web apps through the browser and the "apps" data type will be excluded from synchronization for Chrome Sync.
+ This policy doesn't support dynamic refresh. Any changes, whether enabling, disabling or unsetting, become effective only after the browser is restarted.
+ This policy doesn't affect the 'WebAppInstallForceList' policy.
+default: true
+example_value: false
+features:
+ dynamic_refresh: false
+ per_profile: true
+owners:
+- file://chrome/browser/web_applications/OWNERS
+- ishikapatel@microsoft.com
+- liahiscock@microsoft.com
+supported_on:
+- chrome.*:145-
+- chrome_os:145-
+type: main
+schema:
+ type: boolean
+items:
+- caption: Users can install web apps through the browser.
+ value: true
+- caption: Users can’t install web apps through the browser.
+ value: false
+tags: []
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Printing/CloudPrintProxyEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Printing/CloudPrintProxyEnabled.yaml
index abb33bd0..b3881c4e 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Printing/CloudPrintProxyEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Printing/CloudPrintProxyEnabled.yaml
@@ -4,6 +4,7 @@ desc: |-
Setting the policy to Disabled means users can't turn on the proxy, and the machine can't share its printers with Google Cloud Print.
default: true
+deprecated: true
example_value: true
features:
dynamic_refresh: true
@@ -21,6 +22,6 @@ owners:
schema:
type: boolean
supported_on:
-- chrome.*:17-
+- chrome.*:17-144
tags: []
type: main
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxFingerprintingProtectionEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxFingerprintingProtectionEnabled.yaml
index 9f4214e5..726a6cd7 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxFingerprintingProtectionEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxFingerprintingProtectionEnabled.yaml
@@ -1,4 +1,6 @@
+# This policy is deprecated and should be removed in M146 (crbug.com/454935785).
caption: Choose whether the Privacy Sandbox Fingerprinting Protection feature is to be enabled in Incognito mode.
+deprecated: true
default: null
desc: |-
A policy to control whether the Privacy Sandbox Fingerprinting Protection setting is to be enabled in Incognito mode or disabled for your users.
@@ -11,9 +13,9 @@ features:
dynamic_refresh: true
per_profile: true
supported_on:
- - android:140-
- - chrome.*:140-
- - chrome_os:140-
+- android:140-145
+- chrome.*:140-145
+- chrome_os:140-145
items:
- caption: Enable the Privacy Sandbox Fingerprinting Protection feature in Incognito mode.
value: true
@@ -25,6 +27,7 @@ owners:
- aabeshouse@google.com
- johnykim@google.com
- rizvis@google.com
+- thesalsa@google.com
- file://components/privacy_sandbox/OWNERS
schema:
type: boolean
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml
index 1d19f718..673356b7 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivacySandbox/PrivacySandboxIpProtectionEnabled.yaml
@@ -1,6 +1,7 @@
caption: Choose whether the Privacy Sandbox IP Protection feature should be enabled.
default: null
-desc: |- # TODO(b/416726104): Move the considerations and other details to a help center article.
+deprecated: true
+desc: |-
A policy to control whether the Privacy SandboxIP Protection feature should be enabled.
IP Protection is a feature that limits availability of a user's original IP address for certain third-party network requests made while browsing in Incognito mode, enhancing protections against cross-site tracking during Incognito browsing sessions.
@@ -28,9 +29,9 @@ features:
dynamic_refresh: true
per_profile: true
supported_on:
-- android:138-
-- chrome.*:138-
-- chrome_os:138-
+- android:138-143
+- chrome.*:138-143
+- chrome_os:138-143
items:
- caption: Disable the IP Protection feature.
value: false
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/EnableProxyOverrideRulesForAllUsers.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/EnableProxyOverrideRulesForAllUsers.yaml
index 12673a5c..400ed79f 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/EnableProxyOverrideRulesForAllUsers.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Proxy/EnableProxyOverrideRulesForAllUsers.yaml
@@ -4,15 +4,13 @@ desc:
When this policy is set to 1, the ProxyOverrideRules policy will be applied at the user scope, even that user is unaffiliated.
- When this policy is set to 2, the ProxyOverrideRules policy will never be applied when its source is a user.
-
example_value: 1
default: 0
features:
dynamic_refresh: true
per_profile: false
-future_on:
-- chrome.*
+supported_on:
+- chrome.*:145-
owners:
- seblalancette@chromium.org
- domfc@chromium.org
@@ -21,7 +19,6 @@ schema:
enum:
- 0
- 1
- - 2
type: integer
tags:
- system-security
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionChangePasswordURL.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionChangePasswordURL.yaml
index 6e1dc806..dd2f170c 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionChangePasswordURL.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionChangePasswordURL.yaml
@@ -3,10 +3,6 @@ desc: |-
Setting the policy sets the URL for users to change their password after seeing a warning in the browser. The password protection service sends users to the URL (HTTP and HTTPS protocols only) you designate through this policy. For $1Google Chrome to correctly capture the salted hash of the new password on this change password page, make sure your change password page follows these guidelines ( https://www.chromium.org/developers/design-documents/create-amazing-password-forms ).
Turning the policy off or leaving it unset means the service sends users to https://myaccount.google.com to change their password.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value: https://mydomain.com/change_password.html
features:
dynamic_refresh: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionLoginURLs.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionLoginURLs.yaml
index 41555365..88f41e4d 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionLoginURLs.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/PasswordProtectionLoginURLs.yaml
@@ -4,10 +4,6 @@ desc: |-
Setting the policy sets the list of enterprise login URLs (HTTP and HTTPS protocols only). Password protection service will capture salted hashes of passwords on these URLs and use them for password reuse detection. For $1Google Chrome to correctly capture password salted hashes, ensure your sign-in pages follow these guidelines ( https://www.chromium.org/developers/design-documents/create-amazing-password-forms ).
Turning this setting off or leaving it unset means the password protection service only captures the password salted hashes on https://accounts.google.com.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value:
- https://mydomain.com/login.html
- https://login.mydomain.com
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingAllowlistDomains.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingAllowlistDomains.yaml
index 7be21c56..ca02a1f6 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingAllowlistDomains.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingAllowlistDomains.yaml
@@ -5,10 +5,6 @@ desc: |-
Leaving the policy unset means default Safe Browsing protection applies to all resources.
This policy does not support regular expressions; however, subdomains of a given domain are allowlisted. Fully qualified domain names (FQDNs) are not required.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value:
- mydomain.com
- myuniversity.edu
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingEnabled.yaml
index 25a7288c..0b3896a0 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingEnabled.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/SafeBrowsing/SafeBrowsingEnabled.yaml
@@ -10,10 +10,6 @@ desc: |-
See more about Safe Browsing ( https://developers.google.com/safe-browsing ).
If the policy SafeBrowsingProtectionLevel is set, the value of the policy SafeBrowsingEnabled is ignored.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
default: null
example_value: true
features:
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/ExtensibleEnterpriseSSOBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/ExtensibleEnterpriseSSOBlocklist.yaml
index bcba8b66..b1806fdb 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/ExtensibleEnterpriseSSOBlocklist.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/ExtensibleEnterpriseSSOBlocklist.yaml
@@ -15,12 +15,13 @@ desc: |-
$1Google Chrome does not support Single Sign-on using Extensible Enterprise SSO in Incognito or Guest modes.
- $1Google Chrome only supports Single Sign-on using Extensible Enterprise SSO for the following identity providers: Microsoft.
+ $1Google Chrome only supports Single Sign-on using Extensible Enterprise SSO for the following identity providers: Microsoft, Okta.
This feature is available starting in macOS 10.15.
owners:
- ydago@chromium.org
+- ssolarewicz@chromium.org
- file://components/policy/OWNERS
supported_on:
@@ -35,6 +36,7 @@ schema:
enum:
- all
- microsoft
+ - okta
type: string
type: array
items:
@@ -44,6 +46,11 @@ items:
- caption: Microsoft® cloud identity provider
name: microsoft
value: microsoft
+- caption: Okta® cloud identity provider
+ name: okta
+ value: okta
+ supported_on:
+ - chrome.mac:146-
example_value:
- all
tags: []
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml
index 671fd683..6661a0ad 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactors.yaml
@@ -40,9 +40,9 @@ schema:
type: string
type: array
# LINT.ThenChange(//chromeos/ash/components/osauth/public/auth_policy_utils.cc:LocalAuthFactorsPolicyMap)
-
+default_for_enterprise_users: []
future_on:
- chrome_os
tags: []
-type: string-enum-list
\ No newline at end of file
+type: string-enum-list
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactorsComplexity.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactorsComplexity.yaml
index a205fe2a..c7e7ad22 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactorsComplexity.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Signin/LocalAuthFactorsComplexity.yaml
@@ -27,6 +27,7 @@ features:
type: int-enum
+# LINT.IfChange
schema:
type: integer
enum:
@@ -34,6 +35,7 @@ schema:
- 2
- 3
- 4
+# LINT.ThenChange(//chromeos/ash/services/auth_factor_config/public/mojom/auth_factor_config.mojom:LocalAuthFactorsComplexity)
items:
- caption: No Complexity
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageIsNewTabPage.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageIsNewTabPage.yaml
index dc8f94f7..85114aec 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageIsNewTabPage.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageIsNewTabPage.yaml
@@ -4,10 +4,6 @@ desc: |-
Setting the policy to Enabled makes the New Tab page the user's homepage, ignoring any homepage URL location. Setting the policy to Disabled means that their homepage is never the New Tab page, unless the user's homepage URL is set to chrome://newtab.
If you set the policy, users can't change their homepage type in $1Google Chrome. If not set, the user decides whether or not the New Tab page is their homepage.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value: true
features:
can_be_recommended: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageLocation.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageLocation.yaml
index 28d1c812..ddb2d256 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageLocation.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/HomepageLocation.yaml
@@ -7,10 +7,6 @@ desc: |-
The URL needs a standard scheme, such as http://example.com or https://example.com. When this policy is set, users can't change their homepage URL in $1Google Chrome.
Leaving both HomepageLocation and HomepageIsNewTabPage unset lets users choose their homepage.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value: https://www.chromium.org
features:
can_be_recommended: true
diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml
index dfa754d0..f4e30c70 100755
--- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml
+++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/NewTabPageLocation.yaml
@@ -9,10 +9,6 @@ desc: |-
It is a best practice to provide fully canonicalized URL, if the URL is not fully canonicalized $1Google Chrome will default to https://.
Leaving the policy unset or empty puts the default New Tab page in use.
-
- On Microsoft® Windows®, this policy is only available on instances that are joined to a Microsoft® Active Directory® domain, joined to Microsoft® Azure® Active Directory® or enrolled in Chrome Enterprise Core.
-
- On macOS, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in Chrome Enterprise Core.
example_value: https://www.chromium.org
features:
dynamic_refresh: true
diff --git a/tools/under-control/src/content/browser/web_contents/web_contents_impl.cc b/tools/under-control/src/content/browser/web_contents/web_contents_impl.cc
index dc9e636c..395ba8bf 100755
--- a/tools/under-control/src/content/browser/web_contents/web_contents_impl.cc
+++ b/tools/under-control/src/content/browser/web_contents/web_contents_impl.cc
@@ -41,6 +41,7 @@
#include "base/no_destructor.h"
#include "base/observer_list.h"
#include "base/process/process.h"
+#include "base/strings/strcat.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
@@ -208,7 +209,6 @@
#include "third_party/blink/public/mojom/frame/fullscreen.mojom.h"
#include "third_party/blink/public/mojom/image_downloader/image_downloader.mojom.h"
#include "third_party/blink/public/mojom/input/input_handler.mojom-shared.h"
-#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
#include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h"
#include "third_party/blink/public/mojom/page/draggable_region.mojom.h"
#include "third_party/blink/public/mojom/window_features/window_features.mojom.h"
@@ -1953,9 +1953,6 @@ std::vector WebContentsImpl::GetOutermostMainFrames() {
// sometimes exceed 1. For example, for WebUIBrowser, when a prerendering code
// path is triggered, a prerender frame tree is generated, but the path to
// activate or discard it does not run before this point.
- //
- // TODO(webium): Fix prerendering and bfcache for WebUIBrowser, which are not
- // yet fully enabled.
DCHECK(
!GetOuterWebContents() || (result.size() == 1) ||
base::FeatureList::IsEnabled(features::kAttachUnownedInnerWebContents));
@@ -1963,6 +1960,37 @@ std::vector WebContentsImpl::GetOutermostMainFrames() {
return result;
}
+std::vector
+WebContentsImpl::GetOutermostMainFramesForViewChange() {
+ // Do nothing if the WebContents is currently being initialized or destroyed.
+ if (!GetPrimaryMainFrame()) {
+ return {};
+ }
+
+ std::vector result;
+
+ result.push_back(GetPrimaryMainFrame());
+
+ if (auto* speculative_rfh = GetPrimaryFrameTree()
+ .root()
+ ->render_manager()
+ ->speculative_frame_host()) {
+ result.push_back(speculative_rfh);
+ }
+
+ for (FrameTree* prerender_frame_tree :
+ GetPrerenderHostRegistry()->GetPrerenderFrameTrees()) {
+ DCHECK(prerender_frame_tree->GetMainFrame());
+ result.push_back(prerender_frame_tree->GetMainFrame());
+ }
+
+ for (const auto& entry : GetController().GetBackForwardCache().GetEntries()) {
+ result.push_back(entry->render_frame_host());
+ }
+
+ return result;
+}
+
#if BUILDFLAG(IS_MAC) && BUILDFLAG(USE_EXTERNAL_POPUP_MENU)
void WebContentsImpl::DecrementForbidExternalPopupMenus() {
DCHECK_GE(external_popup_menus_forbid_counter_, 1);
@@ -3252,13 +3280,6 @@ void WebContentsImpl::AttachInnerWebContentsImpl(
inner_web_contents_impl->GetRenderManager();
RenderFrameHostImpl* inner_main_frame =
inner_render_manager->current_frame_host();
- RenderViewHostImpl* inner_render_view_host =
- inner_main_frame->render_view_host();
- RenderFrameHostImpl* inner_speculative_frame =
- inner_render_manager->speculative_frame_host();
- RenderViewHostImpl* inner_speculative_render_view_host =
- inner_speculative_frame ? inner_speculative_frame->render_view_host()
- : nullptr;
auto* outer_render_manager =
render_frame_host_impl->frame_tree_node()->render_manager();
@@ -3273,52 +3294,36 @@ void WebContentsImpl::AttachInnerWebContentsImpl(
GetContentClient()->browser()->GetWebContentsViewDelegate(
inner_web_contents_impl),
&inner_web_contents_impl->render_view_host_delegate_view_);
- // On platforms where destroying the WebContents' view does not also destroy
- // the platform RenderWidgetHostView, we need to destroy it if it exists.
- // TODO(mcnee): Should all platforms' WebContentsView destroy the platform
- // RWHV?
- if (RenderWidgetHostViewBase* prev_rwhv =
- inner_render_manager->GetRenderWidgetHostView()) {
- if (!prev_rwhv->IsRenderWidgetHostViewChildFrame()) {
- prev_rwhv->Destroy();
- }
- }
- // Do the same for speculative render frame host's view.
- if (inner_speculative_frame) {
- RenderWidgetHostViewBase* prev_speculative_rwhv =
- static_cast(
- inner_speculative_frame->GetView());
- if (prev_speculative_rwhv &&
- !prev_speculative_rwhv->IsRenderWidgetHostViewChildFrame()) {
- prev_speculative_rwhv->Destroy();
- }
- }
- // When the WebContents being initialized has not already navigated, the
- // browser side Render{View,Frame}Host must be initialized and the
- // RenderWidgetHostView created. This is needed because the usual
- // initialization happens during the first navigation, but not all guest types
- // navigate before attaching. If the browser side is already initialized, the
- // calls below will just early return.
- inner_render_manager->InitRenderView(
- inner_main_frame->GetSiteInstance()->group(), inner_render_view_host,
- /*proxy=*/nullptr, /*navigation_metrics_token=*/std::nullopt);
- if (!inner_render_manager->GetRenderWidgetHostView()) {
- inner_web_contents_impl->CreateRenderWidgetHostViewForRenderManager(
- inner_render_view_host);
- }
- // Do the same for speculative render frame host.
- if (inner_speculative_render_view_host) {
- inner_render_manager->InitRenderView(
- inner_speculative_frame->GetSiteInstance()->group(),
- inner_speculative_render_view_host,
- /*proxy=*/nullptr, /*navigation_metrics_token=*/std::nullopt);
- RenderWidgetHostViewBase* speculative_rwhv =
- static_cast(
- inner_speculative_frame->GetView());
- if (!speculative_rwhv) {
- inner_web_contents_impl->CreateRenderWidgetHostViewForRenderManager(
- inner_speculative_render_view_host);
+ // Update views for all outermost main frames impacted by the view change of
+ // the inner WebContents, including speculative render frame host and the
+ // ones in prerender and BFCache.
+ for (auto* rfh :
+ inner_web_contents_impl->GetOutermostMainFramesForViewChange()) {
+ // On platforms where destroying the WebContents' view does not also destroy
+ // the platform RenderWidgetHostView, we need to destroy it if it exists.
+ // TODO(mcnee): Should all platforms' WebContentsView destroy the platform
+ // RWHV?
+ if (RenderWidgetHostViewBase* prev_rwhv =
+ static_cast(rfh->GetView())) {
+ if (prev_rwhv && !prev_rwhv->IsRenderWidgetHostViewChildFrame()) {
+ prev_rwhv->Destroy();
+ }
+ }
+
+ // When the WebContents being initialized has not already navigated, the
+ // browser side Render{View,Frame}Host must be initialized and the
+ // RenderWidgetHostView created. This is needed because the usual
+ // initialization happens during the first navigation, but not all guest
+ // types navigate before attaching. If the browser side is already
+ // initialized, the calls below will just early return.
+ auto* render_manager = rfh->frame_tree_node()->render_manager();
+ RenderViewHostImpl* rvh = rfh->render_view_host();
+ render_manager->InitRenderView(rfh->GetSiteInstance()->group(), rvh,
+ /*proxy=*/nullptr,
+ /*navigation_metrics_token=*/std::nullopt);
+ if (!rfh->GetView()) {
+ inner_web_contents_impl->CreateRenderWidgetHostViewForRenderManager(rvh);
}
}
@@ -3391,21 +3396,24 @@ void WebContentsImpl::DetachUnownedInnerWebContents(
// RenderWidgetHostView are of type RenderWidgetHostViewChildFrame and they
// need to be re-created with appropriate platform views.
+ // Do this for all outermost main frames including speculative render frame
+ // host and the ones in prerender and BFCache.
std::vector list_of_rvh_with_rwhv;
- inner_web_contents_impl->GetPrimaryFrameTree().ForEachRenderViewHost(
- [&list_of_rvh_with_rwhv](RenderViewHostImpl* rvh) {
- if (rvh->GetWidget() && rvh->GetWidget()->GetView()) {
- // While in theory only child frame RWHVs should exist at this stage,
- // in practice, a race with navigation cleanup could result in a main
- // frame RWHV that is pending deletion still existing here.
- // This might happen when a WebContents is destroyed immediately
- // after it navigates and then attaches to an outer WebContents.
- if (rvh->GetWidget()->GetView()->IsRenderWidgetHostViewChildFrame()) {
- list_of_rvh_with_rwhv.push_back(rvh);
- }
- rvh->GetWidget()->GetView()->Destroy();
- }
- });
+ for (auto* rfh :
+ inner_web_contents_impl->GetOutermostMainFramesForViewChange()) {
+ RenderViewHostImpl* rvh = rfh->render_view_host();
+ if (rvh->GetWidget() && rvh->GetWidget()->GetView()) {
+ // While in theory only child frame RWHVs should exist at this stage,
+ // in practice, a race with navigation cleanup could result in a main
+ // frame RWHV that is pending deletion still existing here.
+ // This might happen when a WebContents is destroyed immediately
+ // after it navigates and then attaches to an outer WebContents.
+ if (rvh->GetWidget()->GetView()->IsRenderWidgetHostViewChildFrame()) {
+ list_of_rvh_with_rwhv.push_back(rvh);
+ }
+ rvh->GetWidget()->GetView()->Destroy();
+ }
+ }
// Destroy WebContentsViewChildFrame.
inner_web_contents_impl->render_view_host_delegate_view_ = nullptr;
@@ -3854,14 +3862,18 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences(
prefs.main_frame_resizes_are_orientation_changes = false;
break;
case ui::DEVICE_FORM_FACTOR_TABLET:
- // Specific to large tablets (10"), by default they request desktop
- // site, but can per-site optionally override it to request mobile
- // instead.
+ case ui::DEVICE_FORM_FACTOR_XR:
+ // Specific to large tablets (10") and XR devices, by default they
+ // request desktop site, but can per-site optionally override it to
+ // request mobile instead.
if (is_request_android_desktop_site) {
apply_desktop_common_settings = true;
}
break;
- default:
+ case ui::DEVICE_FORM_FACTOR_AUTOMOTIVE:
+ case ui::DEVICE_FORM_FACTOR_TV:
+ case ui::DEVICE_FORM_FACTOR_FOLDABLE:
+ case ui::DEVICE_FORM_FACTOR_PHONE:
break;
}
@@ -4299,12 +4311,16 @@ void WebContentsImpl::OnRenderWidgetHostDestroyed(
DCHECK_EQ(1u, num_erased);
}
+PrerenderHostId WebContentsImpl::GetPrerenderHostId() {
+ return PrerenderHostId();
+}
+
void WebContentsImpl::AddWebContentsDestructionObserver(
WebContentsImpl* web_contents) {
OPTIONAL_TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"),
"WebContentsImpl::AddWebContentsDestructionObserver");
- if (!base::Contains(web_contents_destruction_observers_, web_contents)) {
+ if (!web_contents_destruction_observers_.contains(web_contents)) {
web_contents_destruction_observers_[web_contents] =
std::make_unique(this, web_contents);
}
@@ -4324,8 +4340,8 @@ void WebContentsImpl::AddRenderWidgetHostDestructionObserver(
TRACE_DISABLED_BY_DEFAULT("content.verbose"),
"WebContentsImpl::AddRenderWidgetHostDestructionObserver");
- DCHECK(!base::Contains(render_widget_host_destruction_observers_,
- render_widget_host));
+ DCHECK(
+ !render_widget_host_destruction_observers_.contains(render_widget_host));
render_widget_host_destruction_observers_.insert(
{render_widget_host,
@@ -4356,16 +4372,26 @@ void WebContentsImpl::RemoveObserver(WebContentsObserver* observer) {
std::set
WebContentsImpl::GetRenderWidgetHostViewsInWebContentsTree() {
std::set result;
- // Views for speculative render frame host could also be frame sink id owner
- // and should move frame sink id registration from inner WebContents to outer
- // WebContents when WebContents is attached/detached.
- GetPrimaryMainFrame()->ForEachRenderFrameHostImplIncludingSpeculative(
- [&result](RenderFrameHostImpl* rfh) {
- if (auto* view =
- static_cast(rfh->GetView())) {
- result.insert(view);
- }
- });
+ // Views for speculative render frame host, prerender and BFCache could also
+ // be frame sink id owner and should move frame sink id registration from
+ // inner WebContents to outer WebContents when WebContents is
+ // attached/detached.
+ auto* speculative_main_frame =
+ GetPrimaryFrameTree().root()->render_manager()->speculative_frame_host();
+ for (auto* main_frame : GetOutermostMainFramesForViewChange()) {
+ if (main_frame == speculative_main_frame) {
+ // Skip speculative main frame host as it will be handled by
+ // main_frame->ForEachRenderFrameHostImplIncludingSpeculative.
+ continue;
+ }
+ main_frame->ForEachRenderFrameHostImplIncludingSpeculative(
+ [&result](RenderFrameHostImpl* rfh) {
+ if (auto* view =
+ static_cast(rfh->GetView())) {
+ result.insert(view);
+ }
+ });
+ }
return result;
}
@@ -8999,7 +9025,7 @@ void WebContentsImpl::RunFileChooser(
// Do not allow background tab to open file chooser.
return;
}
- if (!delegate_->IsContentsActive(this)) {
+ if (delegate_ && !delegate_->IsContentsActive(this)) {
// Do not allow inactive tabs to open file chooser.
return;
}
@@ -9333,8 +9359,7 @@ void WebContentsImpl::RenderViewTerminated(RenderViewHost* rvh,
// Cancel any visible dialogs so they are not left dangling over the sad tab.
CancelActiveAndPendingDialogs();
- audio_stream_monitor_.RenderProcessGone(
- rvh_impl->GetProcess()->GetDeprecatedID());
+ audio_stream_monitor_.RenderProcessGone(rvh_impl->GetProcess()->GetID());
// Reset the loading progress. TODO(avi): What does it mean to have a
// "renderer crash" when there is more than one renderer process serving a
@@ -10209,6 +10234,20 @@ void WebContentsImpl::DidReceiveInputEvent(
WindowOpenDisposition::CURRENT_TAB);
}
+ HandleUserInteractionForInputEvent(render_widget_host, event);
+}
+
+void WebContentsImpl::SimulateUserInteraction(
+ RenderWidgetHostImpl* render_widget_host,
+ const blink::WebInputEvent& event) {
+ CHECK(IsUserInteractionInputType(event.GetType()));
+
+ HandleUserInteractionForInputEvent(render_widget_host, event);
+}
+
+void WebContentsImpl::HandleUserInteractionForInputEvent(
+ RenderWidgetHostImpl* render_widget_host,
+ const blink::WebInputEvent& event) {
if (!IsUserInteractionInputType(event.GetType())) {
return;
}
@@ -12142,13 +12181,13 @@ std::unique_ptr WebContentsImpl::StartPrerendering(
#endif // BUILDFLAG(IS_ANDROID)
attributes.holdback_status_override = holdback_status_override;
- FrameTreeNodeId frame_tree_node_id =
+ PrerenderHostId prerender_host_id =
GetPrerenderHostRegistry()->CreateAndStartHost(attributes,
preloading_attempt);
- if (frame_tree_node_id) {
+ if (prerender_host_id) {
return std::make_unique(
- GetPrerenderHostRegistry()->GetWeakPtr(), frame_tree_node_id,
+ GetPrerenderHostRegistry()->GetWeakPtr(), prerender_host_id,
prerendering_url, std::move(no_vary_search_hint));
}
return nullptr;
@@ -12232,8 +12271,14 @@ bool WebContentsImpl::CancelPrerendering(FrameTreeNode* frame_tree_node,
return frame_tree_node->GetParentOrOuterDocumentOrEmbedder()
->CancelPrerendering(PrerenderCancellationReason(final_status));
}
+ PrerenderHost* prerender_host =
+ GetPrerenderHostRegistry()->FindNonReservedHostById(
+ frame_tree_node->frame_tree_node_id());
+ if (!prerender_host) {
+ return false;
+ }
return GetPrerenderHostRegistry()->CancelHost(
- frame_tree_node->frame_tree_node_id(), final_status);
+ prerender_host->prerender_host_id(), final_status);
}
ui::mojom::VirtualKeyboardMode WebContentsImpl::GetVirtualKeyboardMode() const {
diff --git a/tools/under-control/src/content/child/runtime_features.cc b/tools/under-control/src/content/child/runtime_features.cc
index ee190396..7a04e274 100755
--- a/tools/under-control/src/content/child/runtime_features.cc
+++ b/tools/under-control/src/content/child/runtime_features.cc
@@ -25,7 +25,7 @@
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "device/base/features.h"
-#include "device/fido/features.h"
+#include "device/fido/public/features.h"
#include "device/gamepad/public/cpp/gamepad_features.h"
#include "device/vr/buildflags/buildflags.h"
#include "gpu/config/gpu_finch_features.h"
@@ -206,6 +206,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
kSetOnlyIfOverridden},
{wf::EnableDocumentPolicyNegotiation,
raw_ref(features::kDocumentPolicyNegotiation)},
+ {wf::EnableEmailVerificationProtocol,
+ raw_ref(features::kEmailVerificationProtocol), kDefault},
{wf::EnableEyeDropperAPI, raw_ref(features::kEyeDropper),
kSetOnlyIfOverridden},
{wf::EnableFedCm, raw_ref(features::kFedCm), kSetOnlyIfOverridden},
@@ -357,8 +359,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
#endif
{"CompressionDictionaryTransport",
raw_ref(network::features::kCompressionDictionaryTransport)},
- {"CookieDeprecationFacilitatedTesting",
- raw_ref(features::kCookieDeprecationFacilitatedTesting)},
{"CookieStoreAPIMaxAge",
raw_ref(blink::features::kCookieStoreAPIMaxAge)},
{"DocumentPolicyIncludeJSCallStacksInCrashReports",
@@ -415,7 +415,10 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
{"WebAppLaunchQueue", raw_ref(features::kAndroidWebAppLaunchHandler)},
#endif
{"LocalNetworkAccessPermissionPolicy",
- raw_ref(network::features::kLocalNetworkAccessChecks)}};
+ raw_ref(network::features::kLocalNetworkAccessChecks)},
+ {"LocalNetworkAccessSplitPermissions",
+ raw_ref(
+ network::features::kLocalNetworkAccessChecksSplitPermissions)}};
for (const auto& mapping : runtimeFeatureNameToChromiumFeatureMapping) {
SetRuntimeFeatureFromChromiumFeature(
*mapping.chromium_feature, mapping.option, [&mapping](bool enabled) {
@@ -645,6 +648,17 @@ void ResolveInvalidConfigurations() {
WebRuntimeFeatures::EnablePermissionElement(false);
}
+ // UserMediaElement cannot be enabled without the support of the
+ // browser process.
+ if (!base::FeatureList::IsEnabled(blink::features::kUserMediaElement)) {
+ LOG_IF(WARNING,
+ WebRuntimeFeatures::IsUserMediaElementEnabledByRuntimeFlag())
+ << "UserMediaElement cannot be enabled in this configuration. Use --"
+ << switches::kEnableFeatures << "="
+ << blink::features::kUserMediaElement.name << " instead.";
+ WebRuntimeFeatures::EnableUserMediaElement(false);
+ }
+
// CSP Hashes in V1 cannot be enabled without the support of the network
// service.
if (!base::FeatureList::IsEnabled(
diff --git a/tools/under-control/src/content/public/browser/content_browser_client.cc b/tools/under-control/src/content/public/browser/content_browser_client.cc
index a8ea6bdd..e6bd8b31 100755
--- a/tools/under-control/src/content/public/browser/content_browser_client.cc
+++ b/tools/under-control/src/content/public/browser/content_browser_client.cc
@@ -50,7 +50,6 @@
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/responsiveness_calculator_delegate.h"
#include "content/public/browser/sms_fetcher.h"
-#include "content/public/browser/speculation_host_delegate.h"
#include "content/public/browser/tracing_delegate.h"
#include "content/public/browser/url_loader_request_interceptor.h"
#include "content/public/browser/web_authentication_delegate.h"
@@ -725,18 +724,6 @@ bool ContentBrowserClient::IsPrivateAggregationDebugModeAllowed(
return true;
}
-bool ContentBrowserClient::IsCookieDeprecationLabelAllowed(
- content::BrowserContext* browser_context) {
- return false;
-}
-
-bool ContentBrowserClient::IsCookieDeprecationLabelAllowedForContext(
- content::BrowserContext* browser_context,
- const url::Origin& top_frame_origin,
- const url::Origin& context_origin) {
- return false;
-}
-
bool ContentBrowserClient::IsFullCookieAccessAllowed(
content::BrowserContext* browser_context,
content::WebContents* web_contents,
@@ -1227,7 +1214,7 @@ void ContentBrowserClient::ConfigureNetworkContextParams(
network::mojom::NetworkContextParams* network_context_params,
cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params) {
- network_context_params->user_agent = GetUserAgentBasedOnPolicy(context);
+ network_context_params->user_agent = GetUserAgent();
network_context_params->accept_language = "en-us,en";
}
@@ -1413,8 +1400,8 @@ bool ContentBrowserClient::CanAcceptUntrustedExchangesIfNeeded() {
void ContentBrowserClient::OnNetworkServiceDataUseUpdate(
GlobalRenderFrameHostId render_frame_host_id,
int32_t network_traffic_annotation_id_hash,
- int64_t recv_bytes,
- int64_t sent_bytes) {}
+ base::ByteSize recv_bytes,
+ base::ByteSize sent_bytes) {}
base::FilePath ContentBrowserClient::GetSandboxedStorageServiceDataDirectory() {
return base::FilePath();
@@ -1451,11 +1438,6 @@ std::string ContentBrowserClient::GetUserAgent() {
return std::string();
}
-std::string ContentBrowserClient::GetUserAgentBasedOnPolicy(
- content::BrowserContext* content) {
- return GetUserAgent();
-}
-
blink::UserAgentMetadata ContentBrowserClient::GetUserAgentMetadata() {
return blink::UserAgentMetadata();
}
@@ -1642,6 +1624,10 @@ bool ContentBrowserClient::DisallowV8FeatureFlagOverridesForSite(
return false;
}
+bool ContentBrowserClient::IsAndroidAdvancedProtectionEnabled() {
+ return false;
+}
+
ukm::UkmService* ContentBrowserClient::GetUkmService() {
return nullptr;
}
@@ -1693,12 +1679,6 @@ ContentBrowserClient::CreateAnchorElementPreconnectDelegate(
return nullptr;
}
-std::unique_ptr
-ContentBrowserClient::CreateSpeculationHostDelegate(
- RenderFrameHost& render_frame_host) {
- return nullptr;
-}
-
std::unique_ptr
ContentBrowserClient::CreatePrefetchServiceDelegate(
BrowserContext* browser_context) {
@@ -1775,14 +1755,6 @@ bool ContentBrowserClient::IsThirdPartyStoragePartitioningAllowed(
return true;
}
-bool ContentBrowserClient::IsUnpartitionedStorageAccessAllowedByUserPreference(
- content::BrowserContext* browser_context,
- const GURL& url,
- const net::SiteForCookies& site_for_cookies,
- const url::Origin& top_frame_origin) {
- return true;
-}
-
bool ContentBrowserClient::AreDeprecatedAutomaticBeaconCredentialsAllowed(
content::BrowserContext* browser_context,
const GURL& destination_url,
@@ -2041,5 +2013,8 @@ std::optional ContentBrowserClient::GetOverrideValueForStaticStorageQuota(
BrowserContext* browser_context) {
return std::nullopt;
}
+std::string ContentBrowserClient::GetDnsTxtResolverUrlPrefix() {
+ return std::string();
+}
} // namespace content
diff --git a/tools/under-control/src/extensions/common/api/chrome_url_overrides.idl b/tools/under-control/src/extensions/common/api/chrome_url_overrides.idl
deleted file mode 100755
index 94246b77..00000000
--- a/tools/under-control/src/extensions/common/api/chrome_url_overrides.idl
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Stub namespace for the "chrome_url_overrides" manifest key.
-namespace chrome_url_overrides {
- dictionary UrlOverrideInfo {
- // Override for the chrome://newtab page.
- DOMString? newtab;
-
- // Override for the chrome://bookmarks page.
- DOMString? bookmarks;
-
- // Override for the chrome://history page.
- DOMString? history;
-
- [nodoc] DOMString? activationmessage;
- [nodoc] DOMString? keyboard;
- };
-
- dictionary ManifestKeys {
- // Chrome url overrides. Note that an extension can override only one page.
- UrlOverrideInfo chrome_url_overrides;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/clipboard.idl b/tools/under-control/src/extensions/common/api/clipboard.idl
deleted file mode 100755
index 695876db..00000000
--- a/tools/under-control/src/extensions/common/api/clipboard.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2016 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// The chrome.clipboard API is provided to allow users to
-// access data of the clipboard. This is a temporary solution for
-// chromeos platform apps until open-web alternative is available. It will be
-// deprecated once open-web solution is available, which could be in 2017 Q4.
-[platforms=("chromeos"),
- implemented_in="extensions/browser/api/clipboard/clipboard_api.h"]
-namespace clipboard {
- // Supported image types.
- enum ImageType {png, jpeg};
-
- enum DataItemType {textPlain, textHtml};
-
- // Additional data item to be added along with the |image_data| to describe
- // the |image_data|.
- dictionary AdditionalDataItem {
- // Type of the additional data item.
- DataItemType type;
-
- // Content of the additional data item. Either the plain text string if
- // |type| is "textPlain" or markup string if |type| is "textHtml". The
- // data can not exceed 2MB.
- DOMString data;
- };
-
- interface Events {
- // Fired when clipboard data changes.
- // Requires clipboard and clipboardRead permissions for adding listener to
- // chrome.clipboard.onClipboardDataChanged event.
- // After this event fires, the clipboard data is available by calling
- // document.execCommand('paste').
- static void onClipboardDataChanged();
- };
-
- callback SetImageDataCallback = void();
-
- interface Functions {
- // Sets image data to clipboard.
- //
- // |imageData|: The encoded image data.
- // |type|: The type of image being passed.
- // |additionalItems|: Additional data items for describing image data.
- // The callback is called with chrome.runtime.lastError
- // set to error code if there is an error.
- // Requires clipboard and clipboardWrite permissions.
- static void setImageData(
- ArrayBuffer imageData,
- ImageType type,
- optional AdditionalDataItem[] additionalItems,
- optional SetImageDataCallback callback);
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/content_scripts.idl b/tools/under-control/src/extensions/common/api/content_scripts.idl
index a20b3322..adfd63d8 100755
--- a/tools/under-control/src/extensions/common/api/content_scripts.idl
+++ b/tools/under-control/src/extensions/common/api/content_scripts.idl
@@ -61,6 +61,6 @@ namespace contentScripts {
};
dictionary ManifestKeys {
- ContentScript[] content_scripts;
+ ContentScript[]? content_scripts;
};
};
diff --git a/tools/under-control/src/extensions/common/api/cross_origin_isolation.idl b/tools/under-control/src/extensions/common/api/cross_origin_isolation.idl
deleted file mode 100755
index 60b14525..00000000
--- a/tools/under-control/src/extensions/common/api/cross_origin_isolation.idl
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Stub namespace for manifest keys relating to the cross origin isolation
-// response headers.
-namespace crossOriginIsolation {
- dictionary ResponseHeader {
- DOMString? value;
- };
-
- dictionary ManifestKeys {
- ResponseHeader? cross_origin_embedder_policy;
- ResponseHeader? cross_origin_opener_policy;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/declarative_net_request.idl b/tools/under-control/src/extensions/common/api/declarative_net_request.idl
index 4f3f780a..4c08c0c1 100755
--- a/tools/under-control/src/extensions/common/api/declarative_net_request.idl
+++ b/tools/under-control/src/extensions/common/api/declarative_net_request.idl
@@ -92,6 +92,32 @@ namespace declarativeNetRequest {
memoryLimitExceeded
};
+ //
+ enum RuleConditionKeys {
+ urlFilter,
+ regexFilter,
+ isUrlFilterCaseSensitive,
+ initiatorDomains,
+ excludedInitiatorDomains,
+ requestDomains,
+ excludedRequestDomains,
+ topDomains,
+ excludedTopDomains,
+ domains,
+ excludedDomains,
+ resourceTypes,
+ excludedResourceTypes,
+ requestMethods,
+ excludedRequestMethods,
+ domainType,
+ tabIds,
+ excludedTabIds,
+ responseHeaders,
+ excludedResponseHeaders
+ };
+
// Describes a single static ruleset.
dictionary Ruleset {
// A non-empty string uniquely identifying the ruleset. IDs beginning with
@@ -190,6 +216,8 @@ namespace declarativeNetRequest {
DOMString[]? excludedValues;
};
+ //
dictionary RuleCondition {
// The pattern which is matched against the network request url.
@@ -321,7 +349,7 @@ namespace declarativeNetRequest {
// initiated requests, the request initiator's domain is considered
// instead.
//
- [nodoc] DOMString[]? topDomains;
+ DOMString[]? topDomains;
// The rule will not match network requests when the associated top-level
// frame's domain matches one from the list of
@@ -339,7 +367,7 @@ namespace declarativeNetRequest {
// initiated requests, the request initiator's domain is considered
// instead.
//
- [nodoc] DOMString[]? excludedTopDomains;
+ DOMString[]? excludedTopDomains;
// The rule will only match network requests originating from the list of
// domains.
@@ -587,7 +615,7 @@ namespace declarativeNetRequest {
long? tabId;
// The associated top-level frame URL (if any) for the request.
- [nodoc] DOMString? topUrl;
+ DOMString? topUrl;
// The headers provided by a hypothetical response if the request does not
// get blocked or redirected before it is sent. Represented as an object
@@ -611,7 +639,7 @@ namespace declarativeNetRequest {
};
[nodoc] dictionary ManifestKeys {
- DNRInfo declarative_net_request;
+ DNRInfo? declarative_net_request;
};
dictionary RegexOptions {
@@ -715,11 +743,11 @@ namespace declarativeNetRequest {
// unsafe rules must not exceed
// $(ref:MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES).
//
- // |callback|: Called once the update is complete or has failed. In case of
- // an error, $(ref:runtime.lastError) will be set and no change will be made
- // to the rule set. This can happen for multiple reasons, such as invalid
- // rule format, duplicate rule ID, rule count limit exceeded, internal
- // errors, and others.
+ // |callback|: Promise that resolves once the update is complete.
+ // In case of an error, the promise will be rejected and no change will be
+ // made to the rule set. This can happen for multiple reasons, such as
+ // invalid rule format, duplicate rule ID, rule count limit exceeded,
+ // internal errors, and others.
static void updateDynamicRules(
UpdateRuleOptions options,
optional EmptyCallback callback);
@@ -728,8 +756,8 @@ namespace declarativeNetRequest {
// optionally filter the list of fetched rules by specifying a
// filter.
// |filter|: An object to filter the list of fetched rules.
- // |callback|: Called with the set of dynamic rules. An error might be
- // raised in case of transient internal errors.
+ // |callback|: Promise that resolves with the set of dynamic rules. The
+ // Promise may be rejected in case of transient internal errors.
static void getDynamicRules(
optional GetRulesFilter filter,
GetRulesCallback callback);
@@ -746,10 +774,11 @@ namespace declarativeNetRequest {
//
$(ref:MAX_NUMBER_OF_SESSION_RULES) is the maximum number
// of session rules an extension can add.
//
- // |callback|: Called once the update is complete or has failed. In case of
- // an error, $(ref:runtime.lastError) will be set and no change will be made
- // to the rule set. This can happen for multiple reasons, such as invalid
- // rule format, duplicate rule ID, rule count limit exceeded, and others.
+ // |callback|: Promise that resolves once the update is complete. In case
+ // of an error, the promise will be rejected and no change will be
+ // made to the rule set. This can happen for multiple reasons, such as
+ // invalid rule format, duplicate rule ID, rule count limit exceeded, and
+ // others.
static void updateSessionRules(
UpdateRuleOptions options,
optional EmptyCallback callback);
@@ -758,7 +787,7 @@ namespace declarativeNetRequest {
// Callers can optionally filter the list of fetched rules by specifying a
// filter.
// |filter|: An object to filter the list of fetched rules.
- // |callback|: Called with the set of session scoped rules.
+ // |callback|: Promise that resolves with the set of session scoped rules.
static void getSessionRules(
optional GetRulesFilter filter,
GetRulesCallback callback);
@@ -771,25 +800,25 @@ namespace declarativeNetRequest {
// but not across extension updates, i.e. the rule_resources
// manifest key will determine the set of enabled static rulesets on each
// extension update.
- // |callback|: Called once the update is complete. In case of an error,
- // $(ref:runtime.lastError) will be set and no change will be made to set of
- // enabled rulesets. This can happen for multiple reasons, such as invalid
- // ruleset IDs, rule count limit exceeded, or internal errors.
+ // |callback|: Promise that resolves once the update is complete. In case of
+ // an error, the promise will be rejected and no change will be made to the
+ // set of enabled rulesets. This can happen for multiple reasons, such as
+ // invalid ruleset IDs, rule count limit exceeded, or internal errors.
static void updateEnabledRulesets(
UpdateRulesetOptions options,
optional EmptyCallback callback);
// Returns the ids for the current set of enabled static rulesets.
- // |callback|: Called with a list of ids, where each id corresponds to an
- // enabled static $(ref:Ruleset).
+ // |callback|: Promise that resolves with a list of ids, where each id
+ // corresponds to an enabled static $(ref:Ruleset).
static void getEnabledRulesets(
GetEnabledRulesetsCallback callback);
// Disables and enables individual static rules in a $(ref:Ruleset).
// Changes to rules belonging to a disabled $(ref:Ruleset) will take
// effect the next time that it becomes enabled.
- // |callback|: Called once the update is complete. In case of an error,
- // $(ref:runtime.lastError) will be set and no change will be made to the
+ // |callback|: Promise that resolves when the update is complete. In case of
+ // an error, the promise will be rejected and no change will be made to the
// enabled static rules.
static void updateStaticRules(
UpdateStaticRulesOptions options,
@@ -798,8 +827,8 @@ namespace declarativeNetRequest {
// Returns the list of static rules in the given $(ref:Ruleset) that are
// currently disabled.
// |options|: Specifies the ruleset to query.
- // |callback|: Called with a list of ids that correspond to the disabled
- // rules in that ruleset.
+ // |callback|: Promise that resolves with a list of ids that correspond to
+ // the disabled rules in that ruleset.
static void getDisabledRuleIds(
GetDisabledRuleIdsOptions options,
GetDisabledRuleIdsCallback callback);
@@ -813,10 +842,10 @@ namespace declarativeNetRequest {
// Note: Rules not associated with an active document that were matched more
// than five minutes ago will not be returned.
// |filter|: An object to filter the list of matched rules.
- // |callback|: Called once the list of matched rules has been fetched. In
- // case of an error, $(ref:runtime.lastError) will be set and no rules will
- // be returned. This can happen for multiple reasons, such as insufficient
- // permissions, or exceeding the quota.
+ // |callback|: Promise that resolves once the list of matched rules has been
+ // fetched. In case of an error, the Promise will be rejected. This can
+ // happen for multiple reasons, such as insufficient permissions, or
+ // exceeding the quota.
static void getMatchedRules(
optional MatchedRulesFilter filter,
GetMatchedRulesCallback callback);
@@ -831,8 +860,8 @@ namespace declarativeNetRequest {
// Checks if the given regular expression will be supported as a
// regexFilter rule condition.
// |regexOptions|: The regular expression to check.
- // |callback|: Called with details consisting of whether the regular
- // expression is supported and the reason if not.
+ // |callback|: Promise that resolves with details consisting of whether the
+ // regular expression is supported and the reason if not.
static void isRegexSupported(
RegexOptions regexOptions,
IsRegexSupportedCallback callback);
@@ -848,7 +877,7 @@ namespace declarativeNetRequest {
// Note: Only available for unpacked extensions as this is only intended to
// be used during extension development.
// |requestDetails|: The request details to test.
- // |callback|: Called with the details of matched rules.
+ // |callback|: Promise that resolves with the details of matched rules.
static void testMatchOutcome(
TestMatchRequestDetails request,
TestMatchOutcomeCallback callback);
diff --git a/tools/under-control/src/extensions/common/api/file_handlers.idl b/tools/under-control/src/extensions/common/api/file_handlers.idl
deleted file mode 100755
index 32708700..00000000
--- a/tools/under-control/src/extensions/common/api/file_handlers.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// `file_handlers` manifest key defintion. File Handlers allow developers to
-// let extensions interact with files on the operating system. This manifest key
-// can be used by developers to register an extension to a given file type.
-[generate_error_messages] namespace fileHandlers {
-
- // Icon specification similar to an ImageResource.
- dictionary Icon {
- // TODO(crbug.com/40238266) Add `DOMString? label;` for accessibility.
-
- // URL from which a user agent can fetch image data.
- DOMString src;
-
- // Multiple space-separated size values to also accommodate image formats
- // that can act as containers for multiple images of varying dimensions:
- // e.g. "16x16", "16x16 32x32".
- DOMString? sizes;
-
- // MIME type is purely advisory with no default value.
- DOMString? type;
- };
-
- // A FileHandler registers the ability to read, stream, or edit files of given
- // MIME types and/or file extensions.
- dictionary FileHandler {
- // A mapping of one or more MIME types to one or more file extensions.
- // e.g. "accept": {"text/csv": ".csv"} or {"text/csv": [".csv", ".txt"]}.
- object accept;
-
- // Specifies the url after the origin that is the navigation destination for
- // file handling launches.
- DOMString action;
-
- // Description of the file type.
- DOMString name;
-
- // Array of ImageResources. Only icons declared at the manifest level are
- // currently supported. The icon for the extension will appear in the "Open"
- // menu.
- Icon[]? icons;
-
- // Whether multiple files should be opened in a single client or multiple.
- // Defaults to `single-client`, which makes all files available in only one
- // tab. `multiple-client` opens a new tab for each file.
- DOMString? launch_type;
- };
-
- dictionary ManifestKeys {
- // File Handlers to register onto the target system.
- FileHandler[] file_handlers;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/icon_variants.idl b/tools/under-control/src/extensions/common/api/icon_variants.idl
index f5dfda89..26be02f6 100755
--- a/tools/under-control/src/extensions/common/api/icon_variants.idl
+++ b/tools/under-control/src/extensions/common/api/icon_variants.idl
@@ -18,6 +18,6 @@
};
dictionary ManifestKeys {
- IconVariant[] icon_variants;
+ IconVariant[]? icon_variants;
};
};
diff --git a/tools/under-control/src/extensions/common/api/oauth2.idl b/tools/under-control/src/extensions/common/api/oauth2.idl
deleted file mode 100755
index 41fc9a17..00000000
--- a/tools/under-control/src/extensions/common/api/oauth2.idl
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Stub namespace for the "oauth2" manifest key.
-namespace oauth2 {
- dictionary OAuth2Info {
- // Whether the approval UI should be skipped. Only available to allowlisted
- // extensions/apps.
- [nodoc] boolean? auto_approve;
-
- // Client ID of the corresponding extension/app.
- DOMString? client_id;
-
- // Scopes the extension/app needs access to.
- DOMString[] scopes;
- };
-
- dictionary ManifestKeys {
- OAuth2Info oauth2;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/offscreen.idl b/tools/under-control/src/extensions/common/api/offscreen.idl
index 1a4d399e..9b3ef62c 100755
--- a/tools/under-control/src/extensions/common/api/offscreen.idl
+++ b/tools/under-control/src/extensions/common/api/offscreen.idl
@@ -66,14 +66,15 @@ namespace offscreen {
interface Functions {
// Creates a new offscreen document for the extension.
// |parameters|: The parameters describing the offscreen document to create.
- // |callback|: Invoked when the offscreen document is created and has
- // completed its initial page load.
+ // |callback|: Promise that resolves when the offscreen document is created
+ // and has completed its initial page load.
static void createDocument(
CreateParameters parameters,
VoidCallback callback);
// Closes the currently-open offscreen document for the extension.
- // |callback|: Invoked when the offscreen document has been closed.
+ // |callback|: Promise that resolves when the offscreen document has been
+ // closed.
static void closeDocument(VoidCallback callback);
// Determines whether the extension has an active document.
@@ -81,8 +82,8 @@ namespace offscreen {
// ship in its current form (hence the nodoc). Instead of this, we should
// integrate offscreen documents into a service worker-compatible getViews()
// alternative. But this is pretty useful in testing environments.
- // |callback|: Invoked with the result of whether the extension has an
- // active offscreen document.
+ // |callback|: Promise that resolves with the result of whether the
+ // extension has an active offscreen document.
[nodoc] static void hasDocument(BooleanCallback callback);
};
};
diff --git a/tools/under-control/src/extensions/common/api/protocol_handlers.idl b/tools/under-control/src/extensions/common/api/protocol_handlers.idl
deleted file mode 100755
index d25ed298..00000000
--- a/tools/under-control/src/extensions/common/api/protocol_handlers.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2025 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// `protocol_handlers` manifest key defintion. Protocol Handlers allow developers
-// to let extensions register Custom Handlers for URL's schemes unknown to the
-// Browser. This manifest key provides a similar behavior than the Web API
-// implementing the Custom Handlers section of the HTML specification.
-// https://html.spec.whatwg.org/#custom-handlers
-[generate_error_messages] namespace protocolHandlers {
-
- // A ProtocolHandler registers the register a Custom Hanlder for an unknown
- // URL scheme.
- // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers
- dictionary ProtocolHandler {
- // A string definition of the protocol to handle.
- DOMString protocol;
- // A string representation of the protocol handlers, displayed to the user when prompting for permissions.
- DOMString name;
- // A string representing the URL of the protocol handler (must be a localizable property).
- DOMString uriTemplate;
- };
-
- dictionary ManifestKeys {
- ProtocolHandler[] protocol_handlers;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/shared_module.idl b/tools/under-control/src/extensions/common/api/shared_module.idl
deleted file mode 100755
index 4125f8da..00000000
--- a/tools/under-control/src/extensions/common/api/shared_module.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Stub namespace for the "import" and "export" manifest keys.
-[generate_error_messages]
-namespace sharedModule {
- dictionary Import {
- // Extension ID of the shared module this extension or app depends on.
- DOMString id;
-
- // Minimum supported version of the shared module.
- DOMString? minimum_version;
- };
-
- dictionary Export {
- // Optional list of extension IDs explicitly allowed to import this Shared
- // Module's resources. If no allowlist is given, all extensions are allowed
- // to import it.
- DOMString[]? allowlist;
- };
-
- dictionary ManifestKeys {
- // The import field is used by extensions and apps to declare that they
- // depend on the resources from particular Shared Modules.
- Import[]? import;
-
- // The export field indicates an extension is a Shared Module that exports
- // its resources.
- Export? export;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/system_display.idl b/tools/under-control/src/extensions/common/api/system_display.idl
deleted file mode 100755
index 990086c1..00000000
--- a/tools/under-control/src/extensions/common/api/system_display.idl
+++ /dev/null
@@ -1,457 +0,0 @@
-// Copyright 2013 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Use the system.display API to query display metadata.
-namespace system.display {
-
- dictionary Bounds {
- // The x-coordinate of the upper-left corner.
- long left;
-
- // The y-coordinate of the upper-left corner.
- long top;
-
- // The width of the display in pixels.
- long width;
-
- // The height of the display in pixels.
- long height;
- };
-
- dictionary Insets {
- // The x-axis distance from the left bound.
- long left;
-
- // The y-axis distance from the top bound.
- long top;
-
- // The x-axis distance from the right bound.
- long right;
-
- // The y-axis distance from the bottom bound.
- long bottom;
- };
-
- dictionary Point {
- // The x-coordinate of the point.
- long x;
-
- // The y-coordinate of the point.
- long y;
- };
-
- dictionary TouchCalibrationPair {
- // The coordinates of the display point.
- Point displayPoint;
-
- // The coordinates of the touch point corresponding to the display point.
- Point touchPoint;
- };
-
- dictionary TouchCalibrationPairQuad {
- // First pair of touch and display point required for touch calibration.
- TouchCalibrationPair pair1;
-
- // Second pair of touch and display point required for touch calibration.
- TouchCalibrationPair pair2;
-
- // Third pair of touch and display point required for touch calibration.
- TouchCalibrationPair pair3;
-
- // Fourth pair of touch and display point required for touch calibration.
- TouchCalibrationPair pair4;
- };
-
- dictionary DisplayMode {
- // The display mode width in device independent (user visible) pixels.
- long width;
-
- // The display mode height in device independent (user visible) pixels.
- long height;
-
- // The display mode width in native pixels.
- long widthInNativePixels;
-
- // The display mode height in native pixels.
- long heightInNativePixels;
-
- // The display mode UI scale factor.
- [deprecated="Use $(ref: displayZoomFactor)"] double? uiScale;
-
- // The display mode device scale factor.
- double deviceScaleFactor;
-
- // The display mode refresh rate in hertz.
- double refreshRate;
-
- // True if the mode is the display's native mode.
- boolean isNative;
-
- // True if the display mode is currently selected.
- boolean isSelected;
-
- // True if this mode is interlaced, false if not provided.
- boolean? isInterlaced;
- };
-
- // Layout position, i.e. edge of parent that the display is attached to.
- enum LayoutPosition { top, right, bottom, left };
-
- dictionary DisplayLayout {
- // The unique identifier of the display.
- DOMString id;
-
- // The unique identifier of the parent display. Empty if this is the root.
- DOMString parentId;
-
- // The layout position of this display relative to the parent. This will
- // be ignored for the root.
- LayoutPosition position;
-
- // The offset of the display along the connected edge. 0 indicates that
- // the topmost or leftmost corners are aligned.
- long offset;
- };
-
- // EDID extracted parameters. Field description refers to "VESA ENHANCED
- // EXTENDED DISPLAY IDENTIFICATION DATA STANDARD (Defines EDID Structure
- // Version 1, Revision 4)" Release A, Revision 2 September 25, 2006.
- // https://www.vesa.org/vesa-standards
- dictionary Edid {
- // 3 character manufacturer code. See Sec. 3.4.1 page 21. Required in v1.4.
- DOMString manufacturerId;
-
- // 2 byte manufacturer-assigned code, Sec. 3.4.2 page 21. Required in v1.4.
- DOMString productId;
-
- // Year of manufacturer, Sec. 3.4.4 page 22. Required in v1.4.
- long yearOfManufacture;
- };
-
- // An enum to tell if the display is detected and used by the
- // system. The display is considered 'inactive', if it is not
- // detected by the system (maybe disconnected, or considered
- // disconnected due to sleep mode, etc). This state is used to keep
- // existing display when the all displays are disconnected, for
- // example.
- enum ActiveState { active, inactive };
-
- dictionary DisplayUnitInfo {
- // The unique identifier of the display.
- DOMString id;
-
- // The user-friendly name (e.g. "HP LCD monitor").
- DOMString name;
-
- // NOTE: This is only available to ChromeOS Kiosk apps and Web UI.
- Edid? edid;
-
- // ChromeOS only. Identifier of the display that is being mirrored if
- // mirroring is enabled, otherwise empty. This will be set for all displays
- // (including the display being mirrored).
- DOMString mirroringSourceId;
-
- // ChromeOS only. Identifiers of the displays to which the source display
- // is being mirrored. Empty if no displays are being mirrored. This will be
- // set to the same value for all displays. This must not include
- // |mirroringSourceId|.
- DOMString[] mirroringDestinationIds;
-
- // True if this is the primary display.
- boolean isPrimary;
-
- // True if this is an internal display.
- boolean isInternal;
-
- // True if this display is enabled.
- boolean isEnabled;
-
- // Active if the display is detected and used by the system.
- ActiveState activeState;
-
- // True for all displays when in unified desktop mode. See documentation
- // for $(ref:enableUnifiedDesktop).
- boolean isUnified;
-
- // True when the auto-rotation is allowed. It happens when the device is in
- // a tablet physical state or kSupportsClamshellAutoRotation is set.
- // Provided for ChromeOS Settings UI only. TODO(stevenjb): Remove when
- // Settings switches to a mojo API.
- [nodoc] boolean? isAutoRotationAllowed;
-
- // The number of pixels per inch along the x-axis.
- double dpiX;
-
- // The number of pixels per inch along the y-axis.
- double dpiY;
-
- // The display's clockwise rotation in degrees relative to the vertical
- // position.
- // Currently exposed only on ChromeOS. Will be set to 0 on other platforms.
- // A value of -1 will be interpreted as auto-rotate when the device is in
- // a physical tablet state.
- long rotation;
-
- // The display's logical bounds.
- Bounds bounds;
-
- // The display's insets within its screen's bounds.
- // Currently exposed only on ChromeOS. Will be set to empty insets on
- // other platforms.
- Insets overscan;
-
- // The usable work area of the display within the display bounds. The work
- // area excludes areas of the display reserved for OS, for example taskbar
- // and launcher.
- Bounds workArea;
-
- // The list of available display modes. The current mode will have
- // isSelected=true. Only available on ChromeOS. Will be set to an empty
- // array on other platforms.
- DisplayMode[] modes;
-
- // True if this display has a touch input device associated with it.
- boolean hasTouchSupport;
-
- // True if this display has an accelerometer associated with it.
- // Provided for ChromeOS Settings UI only. TODO(stevenjb): Remove when
- // Settings switches to a mojo API. NOTE: The name of this may change.
- [nodoc] boolean hasAccelerometerSupport;
-
- // A list of zoom factor values that can be set for the display.
- double[] availableDisplayZoomFactors;
-
- // The ratio between the display's current and default zoom.
- // For example, value 1 is equivalent to 100% zoom, and value 1.5 is
- // equivalent to 150% zoom.
- double displayZoomFactor;
- };
-
- dictionary DisplayProperties {
- // ChromeOS only. If set to true, changes the display mode to unified
- // desktop (see $(ref:enableUnifiedDesktop) for details). If set to false,
- // unified desktop mode will be disabled. This is only valid for the
- // primary display. If provided, mirroringSourceId must not be provided and
- // other properties will be ignored. This is has no effect if not provided.
- boolean? isUnified;
-
- // ChromeOS only. If set and not empty, enables mirroring for this display
- // only. Otherwise disables mirroring for all displays. This value should
- // indicate the id of the source display to mirror, which must not be the
- // same as the id passed to setDisplayProperties. If set, no other property
- // may be set.
- [deprecated="Use $(ref:setMirrorMode)."] DOMString? mirroringSourceId;
-
- // If set to true, makes the display primary. No-op if set to false.
- // Note: If set, the display is considered primary for all other properties
- // (i.e. $(ref:isUnified) may be set and bounds origin may not).
- boolean? isPrimary;
-
- // If set, sets the display's overscan insets to the provided values. Note
- // that overscan values may not be negative or larger than a half of the
- // screen's size. Overscan cannot be changed on the internal monitor.
- Insets? overscan;
-
- // If set, updates the display's rotation.
- // Legal values are [0, 90, 180, 270]. The rotation is set clockwise,
- // relative to the display's vertical position.
- long? rotation;
-
- // If set, updates the display's logical bounds origin along the x-axis.
- // Applied together with $(ref:boundsOriginY). Defaults to the current value
- // if not set and $(ref:boundsOriginY) is set. Note that when updating the
- // display origin, some constraints will be applied, so the final bounds
- // origin may be different than the one set. The final bounds can be
- // retrieved using $(ref:getInfo). The bounds origin cannot be changed on
- // the primary display.
- long? boundsOriginX;
-
- // If set, updates the display's logical bounds origin along the y-axis.
- // See documentation for $(ref:boundsOriginX) parameter.
- long? boundsOriginY;
-
- // If set, updates the display mode to the mode matching this value.
- // If other parameters are invalid, this will not be applied. If the
- // display mode is invalid, it will not be applied and an error will be
- // set, but other properties will still be applied.
- DisplayMode? displayMode;
-
- // If set, updates the zoom associated with the display. This zoom performs
- // re-layout and repaint thus resulting in a better quality zoom than just
- // performing a pixel by pixel stretch enlargement.
- double? displayZoomFactor;
- };
-
- dictionary GetInfoFlags {
- // If set to true, only a single $(ref:DisplayUnitInfo) will be returned
- // by $(ref:getInfo) when in unified desktop mode (see
- // $(ref:enableUnifiedDesktop)). Defaults to false.
- boolean? singleUnified;
- };
-
- // Mirror mode, i.e. different ways of how a display is mirrored to other
- // displays.
- enum MirrorMode {
- // Specifies the default mode (extended or unified desktop).
- off,
-
- // Specifies that the default source display will be mirrored to all other
- // displays.
- normal,
-
- // Specifies that the specified source display will be mirrored to the
- // provided destination displays. All other connected displays will be
- // extended.
- mixed
- };
-
- dictionary MirrorModeInfo {
- // The mirror mode that should be set.
- MirrorMode mode;
-
- // The id of the mirroring source display. This is only valid for 'mixed'.
- DOMString? mirroringSourceId;
-
- // The ids of the mirroring destination displays. This is only valid for
- // 'mixed'.
- DOMString[]? mirroringDestinationIds;
- };
-
- callback DisplayInfoCallback = void (DisplayUnitInfo[] displayInfo);
- callback DisplayLayoutCallback = void (DisplayLayout[] layouts);
- callback SetDisplayUnitInfoCallback = void();
- callback SetDisplayLayoutCallback = void();
- callback NativeTouchCalibrationCallback = void(boolean success);
- callback SetMirrorModeCallback = void();
-
- interface Functions {
- // Requests the information for all attached display devices.
- // |flags|: Options affecting how the information is returned.
- // |callback|: The callback to invoke with the results.
- static void getInfo(
- optional GetInfoFlags flags,
- DisplayInfoCallback callback);
-
- // Requests the layout info for all displays.
- // NOTE: This is only available to ChromeOS Kiosk apps and Web UI.
- // |callback|: The callback to invoke with the results.
- static void getDisplayLayout(
- DisplayLayoutCallback callback);
-
- // Updates the properties for the display specified by |id|, according to
- // the information provided in |info|. On failure, $(ref:runtime.lastError)
- // will be set.
- // NOTE: This is only available to ChromeOS Kiosk apps and Web UI.
- // |id|: The display's unique identifier.
- // |info|: The information about display properties that should be changed.
- // A property will be changed only if a new value for it is specified in
- // |info|.
- // |callback|: Empty function called when the function finishes. To find out
- // whether the function succeeded, $(ref:runtime.lastError) should be
- // queried.
- static void setDisplayProperties(
- DOMString id,
- DisplayProperties info,
- optional SetDisplayUnitInfoCallback callback);
-
- // Set the layout for all displays. Any display not included will use the
- // default layout. If a layout would overlap or be otherwise invalid it
- // will be adjusted to a valid layout. After layout is resolved, an
- // onDisplayChanged event will be triggered.
- // NOTE: This is only available to ChromeOS Kiosk apps and Web UI.
- // |layouts|: The layout information, required for all displays except
- // the primary display.
- // |callback|: Empty function called when the function finishes. To find out
- // whether the function succeeded, $(ref:runtime.lastError) should be
- // queried.
- static void setDisplayLayout(
- DisplayLayout[] layouts,
- optional SetDisplayLayoutCallback callback);
-
- // Enables/disables the unified desktop feature. If enabled while mirroring
- // is active, the desktop mode will not change until mirroring is turned
- // off. Otherwise, the desktop mode will switch to unified immediately.
- // NOTE: This is only available to ChromeOS Kiosk apps and Web UI.
- // |enabled|: True if unified desktop should be enabled.
- static void enableUnifiedDesktop(boolean enabled);
-
- // Starts overscan calibration for a display. This will show an overlay
- // on the screen indicating the current overscan insets. If overscan
- // calibration for display |id| is in progress this will reset calibration.
- // |id|: The display's unique identifier.
- static void overscanCalibrationStart(DOMString id);
-
- // Adjusts the current overscan insets for a display. Typically this should
- // either move the display along an axis (e.g. left+right have the same
- // value) or scale it along an axis (e.g. top+bottom have opposite values).
- // Each Adjust call is cumulative with previous calls since Start.
- // |id|: The display's unique identifier.
- // |delta|: The amount to change the overscan insets.
- static void overscanCalibrationAdjust(DOMString id, Insets delta);
-
- // Resets the overscan insets for a display to the last saved value (i.e
- // before Start was called).
- // |id|: The display's unique identifier.
- static void overscanCalibrationReset(DOMString id);
-
- // Complete overscan adjustments for a display by saving the current values
- // and hiding the overlay.
- // |id|: The display's unique identifier.
- static void overscanCalibrationComplete(DOMString id);
-
- // Displays the native touch calibration UX for the display with |id| as
- // display id. This will show an overlay on the screen with required
- // instructions on how to proceed. The callback will be invoked in case of
- // successful calibration only. If the calibration fails, this will throw an
- // error.
- // |id|: The display's unique identifier.
- // |callback|: Optional callback to inform the caller that the touch
- // calibration has ended. The argument of the callback informs if the
- // calibration was a success or not.
- static void showNativeTouchCalibration(
- DOMString id,
- optional NativeTouchCalibrationCallback callback);
-
- // Starts custom touch calibration for a display. This should be called when
- // using a custom UX for collecting calibration data. If another touch
- // calibration is already in progress this will throw an error.
- // |id|: The display's unique identifier.
- static void startCustomTouchCalibration(DOMString id);
-
- // Sets the touch calibration pairs for a display. These |pairs| would be
- // used to calibrate the touch screen for display with |id| called in
- // startCustomTouchCalibration(). Always call |startCustomTouchCalibration|
- // before calling this method. If another touch calibration is already in
- // progress this will throw an error.
- // |pairs|: The pairs of point used to calibrate the display.
- // |bounds|: Bounds of the display when the touch calibration was performed.
- // |bounds.left| and |bounds.top| values are ignored.
- static void completeCustomTouchCalibration(TouchCalibrationPairQuad pairs,
- Bounds bounds);
-
- // Resets the touch calibration for the display and brings it back to its
- // default state by clearing any touch calibration data associated with the
- // display.
- // |id|: The display's unique identifier.
- static void clearTouchCalibration(DOMString id);
-
- // Sets the display mode to the specified mirror mode. Each call resets the
- // state from previous calls. Calling setDisplayProperties() will fail for
- // the mirroring destination displays.
- // NOTE: This is only available to ChromeOS Kiosk apps and Web UI.
- // |info|: The information of the mirror mode that should be applied to the
- // display mode.
- // |callback|: Empty function called when the function finishes. To find out
- // whether the function succeeded, $(ref:runtime.lastError) should be
- // queried.
- static void setMirrorMode(
- MirrorModeInfo info,
- optional SetMirrorModeCallback callback);
- };
-
- interface Events {
- // Fired when anything changes to the display configuration.
- static void onDisplayChanged();
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/usb.idl b/tools/under-control/src/extensions/common/api/usb.idl
deleted file mode 100755
index 38a413bd..00000000
--- a/tools/under-control/src/extensions/common/api/usb.idl
+++ /dev/null
@@ -1,423 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Use the chrome.usb API to interact with connected USB
-// devices. This API provides access to USB operations from within the context
-// of an app. Using this API, apps can function as drivers for hardware devices.
-//
-// Errors generated by this API are reported by setting
-// $(ref:runtime.lastError) and executing the function's regular callback. The
-// callback's regular parameters will be undefined in this case.
-namespace usb {
-
- // Direction, Recipient, RequestType, and TransferType all map to their
- // namesakes within the USB specification.
- enum Direction {in, out};
- enum Recipient {device, _interface, endpoint, other};
- enum RequestType {standard, class, vendor, reserved};
- enum TransferType {control, interrupt, isochronous, bulk};
-
- // For interrupt and isochronous modes, SynchronizationType and UsageType map
- // to their namesakes within the USB specification.
- enum SynchronizationType {asynchronous, adaptive, synchronous};
- enum UsageType {data, feedback, explicitFeedback, periodic, notification};
-
- dictionary Device {
- // An opaque ID for the USB device. It remains unchanged until the device is
- // unplugged.
- long device;
- // The device vendor ID.
- long vendorId;
- // The product ID.
- long productId;
- // The device version (bcdDevice field).
- long version;
- // The iProduct string read from the device, if available.
- DOMString productName;
- // The iManufacturer string read from the device, if available.
- DOMString manufacturerName;
- // The iSerialNumber string read from the device, if available.
- DOMString serialNumber;
- };
-
- dictionary ConnectionHandle {
- // An opaque handle representing this connection to the USB device and all
- // associated claimed interfaces and pending transfers. A new handle is
- // created each time the device is opened. The connection handle is
- // different from $(ref:Device.device).
- long handle;
- // The device vendor ID.
- long vendorId;
- // The product ID.
- long productId;
- };
-
- dictionary EndpointDescriptor {
- // Endpoint address.
- long address;
- // Transfer type.
- TransferType type;
- // Transfer direction.
- Direction direction;
- // Maximum packet size.
- long maximumPacketSize;
- // Transfer synchronization mode (isochronous only).
- SynchronizationType? synchronization;
- // Endpoint usage hint.
- UsageType? usage;
- // Polling interval (interrupt and isochronous only).
- long? pollingInterval;
- // Extra descriptor data associated with this endpoint.
- ArrayBuffer extra_data;
- };
-
- dictionary InterfaceDescriptor {
- // The interface number.
- long interfaceNumber;
- // The interface alternate setting number (defaults to 0"in" or "out").
- Direction direction;
-
- // The transfer target. The target given by index must be
- // claimed if "interface" or "endpoint".
- Recipient recipient;
-
- // The request type.
- RequestType requestType;
-
- // The bRequest field, see Universal Serial Bus
- // Specification Revision 1.1 § 9.3.
- long request;
- // The wValue field, see Ibid.
- long value;
- // The wIndex field, see Ibid.
- long index;
-
- // The maximum number of bytes to receive (required only by input
- // transfers).
- long? length;
-
- // The data to transmit (required only by output transfers).
- ArrayBuffer? data;
-
- // Request timeout (in milliseconds). The default value 0
- // indicates no timeout.
- long? timeout;
- };
-
- dictionary GenericTransferInfo {
- // The transfer direction ("in" or "out").
- Direction direction;
-
- // The target endpoint address. The interface containing this endpoint must
- // be claimed.
- long endpoint;
-
- // The maximum number of bytes to receive (required only by input
- // transfers).
- long? length;
-
- // The data to transmit (required only by output transfers).
- ArrayBuffer? data;
-
- // Request timeout (in milliseconds). The default value 0
- // indicates no timeout.
- long? timeout;
- };
-
- dictionary IsochronousTransferInfo {
- // Transfer parameters. The transfer length or data buffer specified in this
- // parameter block is split along packetLength boundaries to
- // form the individual packets of the transfer.
- GenericTransferInfo transferInfo;
-
- // The total number of packets in this transfer.
- long packets;
-
- // The length of each of the packets in this transfer.
- long packetLength;
- };
-
- dictionary TransferResultInfo {
- // A value of 0 indicates that the transfer was a success.
- // Other values indicate failure.
- long? resultCode;
-
- // The data returned by an input transfer. undefined for output
- // transfers.
- ArrayBuffer? data;
- };
-
- dictionary DeviceFilter {
- // Device vendor ID.
- long? vendorId;
- // Device product ID, checked only if the vendor ID matches.
- long? productId;
- // USB interface class, matches any interface on the device.
- long? interfaceClass;
- // USB interface sub-class, checked only if the interface class matches.
- long? interfaceSubclass;
- // USB interface protocol, checked only if the interface sub-class matches.
- long? interfaceProtocol;
- };
-
- dictionary EnumerateDevicesOptions {
- [deprecated="Equivalent to setting $(ref:DeviceFilter.vendorId)."]
- long? vendorId;
- [deprecated="Equivalent to setting $(ref:DeviceFilter.productId)."]
- long? productId;
- // A device matching any given filter will be returned. An empty filter list
- // will return all devices the app has permission for.
- DeviceFilter[]? filters;
- };
-
- dictionary EnumerateDevicesAndRequestAccessOptions {
- // The device vendor ID.
- long vendorId;
- // The product ID.
- long productId;
- // The interface ID to request access to.
- // Only available on Chrome OS. It has no effect on other platforms.
- long? interfaceId;
- };
-
- dictionary DevicePromptOptions {
- // Allow the user to select multiple devices.
- boolean? multiple;
- // Filter the list of devices presented to the user. If multiple filters are
- // provided devices matching any filter will be displayed.
- DeviceFilter[]? filters;
- };
-
- callback VoidCallback = void ();
- callback GetDevicesCallback = void (Device[] devices);
- callback GetConfigurationsCallback = void (ConfigDescriptor[] configs);
- callback RequestAccessCallback = void (boolean success);
- callback OpenDeviceCallback = void (ConnectionHandle handle);
- callback FindDevicesCallback = void (ConnectionHandle[] handles);
- callback GetConfigurationCallback = void (ConfigDescriptor config);
- callback ListInterfacesCallback = void (InterfaceDescriptor[] descriptors);
- callback CloseDeviceCallback = void ();
- callback TransferCallback = void (TransferResultInfo info);
- callback ResetDeviceCallback = void(boolean success);
-
- interface Functions {
- // Enumerates connected USB devices.
- // |options|: The properties to search for on target devices.
- static void getDevices(
- EnumerateDevicesOptions options,
- GetDevicesCallback callback);
-
- // Presents a device picker to the user and returns the $(ref:Device)s
- // selected.
- // If the user cancels the picker devices will be empty. A user gesture
- // is required for the dialog to display. Without a user gesture, the
- // callback will run as though the user cancelled.
- // |options|: Configuration of the device picker dialog box.
- // |callback|: Invoked with a list of chosen $(ref:Device)s.
- static void getUserSelectedDevices(
- DevicePromptOptions options,
- GetDevicesCallback callback);
-
- // Returns the full set of device configuration descriptors.
- // |device|: The $(ref:Device) to fetch descriptors from.
- static void getConfigurations(
- Device device,
- GetConfigurationsCallback callback);
-
- // Requests access from the permission broker to a device claimed by
- // Chrome OS if the given interface on the device is not claimed.
- //
- // |device|: The $(ref:Device) to request access to.
- // |interfaceId|: The particular interface requested.
- [deprecated="This function was Chrome OS specific and calling it on other
- platforms would fail. This operation is now implicitly performed as part of
- $(ref:openDevice) and this function will return true on all
- platforms."]
- static void requestAccess(Device device,
- long interfaceId,
- RequestAccessCallback callback);
-
- // Opens a USB device returned by $(ref:getDevices).
- // |device|: The $(ref:Device) to open.
- static void openDevice(
- Device device,
- OpenDeviceCallback callback);
-
- // Finds USB devices specified by the vendor, product and (optionally)
- // interface IDs and if permissions allow opens them for use.
- //
- // If the access request is rejected or the device fails to be opened a
- // connection handle will not be created or returned.
- //
- // Calling this method is equivalent to calling $(ref:getDevices) followed
- // by $(ref:openDevice) for each device.
- //
- // |options|: The properties to search for on target devices.
- static void findDevices(
- EnumerateDevicesAndRequestAccessOptions options,
- FindDevicesCallback callback);
-
- // Closes a connection handle. Invoking operations on a handle after it
- // has been closed is a safe operation but causes no action to be taken.
- // |handle|: The $(ref:ConnectionHandle) to close.
- static void closeDevice(
- ConnectionHandle handle,
- optional CloseDeviceCallback callback);
-
- // Select a device configuration.
- //
- // This function effectively resets the device by selecting one of the
- // device's available configurations. Only configuration values greater
- // than 0 are valid however some buggy devices have a working
- // configuration 0 and so this value is allowed.
- // |handle|: An open connection to the device.
- static void setConfiguration(
- ConnectionHandle handle,
- long configurationValue,
- VoidCallback callback);
-
- // Gets the configuration descriptor for the currently selected
- // configuration.
- // |handle|: An open connection to the device.
- static void getConfiguration(
- ConnectionHandle handle,
- GetConfigurationCallback callback);
-
- // Lists all interfaces on a USB device.
- // |handle|: An open connection to the device.
- static void listInterfaces(
- ConnectionHandle handle,
- ListInterfacesCallback callback);
-
- // Claims an interface on a USB device.
- // Before data can be transfered to an interface or associated endpoints the
- // interface must be claimed. Only one connection handle can claim an
- // interface at any given time. If the interface is already claimed, this
- // call will fail.
- //
- // $(ref:releaseInterface) should be called when the interface is no longer
- // needed.
- //
- // |handle|: An open connection to the device.
- // |interfaceNumber|: The interface to be claimed.
- static void claimInterface(
- ConnectionHandle handle,
- long interfaceNumber,
- VoidCallback callback);
-
- // Releases a claimed interface.
- // |handle|: An open connection to the device.
- // |interfaceNumber|: The interface to be released.
- static void releaseInterface(
- ConnectionHandle handle,
- long interfaceNumber,
- VoidCallback callback);
-
- // Selects an alternate setting on a previously claimed interface.
- // |handle|: An open connection to the device where this interface has been
- // claimed.
- // |interfaceNumber|: The interface to configure.
- // |alternateSetting|: The alternate setting to configure.
- static void setInterfaceAlternateSetting(
- ConnectionHandle handle,
- long interfaceNumber,
- long alternateSetting,
- VoidCallback callback);
-
- // Performs a control transfer on the specified device.
- //
- // Control transfers refer to either the device, an interface or an
- // endpoint. Transfers to an interface or endpoint require the interface to
- // be claimed.
- //
- // |handle|: An open connection to the device.
- static void controlTransfer(
- ConnectionHandle handle,
- ControlTransferInfo transferInfo,
- TransferCallback callback);
-
- // Performs a bulk transfer on the specified device.
- // |handle|: An open connection to the device.
- // |transferInfo|: The transfer parameters.
- static void bulkTransfer(
- ConnectionHandle handle,
- GenericTransferInfo transferInfo,
- TransferCallback callback);
-
- // Performs an interrupt transfer on the specified device.
- // |handle|: An open connection to the device.
- // |transferInfo|: The transfer parameters.
- static void interruptTransfer(
- ConnectionHandle handle,
- GenericTransferInfo transferInfo,
- TransferCallback callback);
-
- // Performs an isochronous transfer on the specific device.
- // |handle|: An open connection to the device.
- static void isochronousTransfer(
- ConnectionHandle handle,
- IsochronousTransferInfo transferInfo,
- TransferCallback callback);
-
- // Tries to reset the USB device.
- // If the reset fails, the given connection handle will be closed and the
- // USB device will appear to be disconnected then reconnected.
- // In this case $(ref:getDevices) or $(ref:findDevices) must be called again
- // to acquire the device.
- //
- // |handle|: A connection handle to reset.
- static void resetDevice(
- ConnectionHandle handle,
- ResetDeviceCallback callback);
- };
-
- interface Events {
- // Event generated when a device is added to the system. Events are only
- // broadcast to apps and extensions that have permission to access the
- // device. Permission may have been granted at install time, when the user
- // accepted an optional permission (see $(ref:permissions.request)), or
- // through $(ref:getUserSelectedDevices).
- static void onDeviceAdded(Device device);
-
- // Event generated when a device is removed from the system. See
- // $(ref:onDeviceAdded) for which events are delivered.
- static void onDeviceRemoved(Device device);
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/user_scripts.idl b/tools/under-control/src/extensions/common/api/user_scripts.idl
index a18f0f3b..d6eed152 100755
--- a/tools/under-control/src/extensions/common/api/user_scripts.idl
+++ b/tools/under-control/src/extensions/common/api/user_scripts.idl
@@ -164,8 +164,8 @@ namespace userScripts {
interface Functions {
// Registers one or more user scripts for this extension.
// |scripts|: Contains a list of user scripts to be registered.
- // |callback|: Called once scripts have been fully registered or if an error
- // has ocurred.
+ // |callback|: Promise that resolves once scripts have been fully
+ // registered. The promise will be rejected if an error occurs.
static void register(
RegisteredUserScript[] scripts,
optional RegisterCallback callback);
@@ -173,8 +173,8 @@ namespace userScripts {
// Returns all dynamically-registered user scripts for this extension.
// |filter|: If specified, this method returns only the user scripts that
// match it.
- // |callback|: Called once scripts have been fully registered or if an error
- // occurs.
+ // |callback|: Promise that resolves with the registered scripts.
+ // The promise will be rejected if an error occurs.
static void getScripts(
optional UserScriptFilter filter,
GetScriptsCallback callback);
@@ -182,8 +182,8 @@ namespace userScripts {
// Unregisters all dynamically-registered user scripts for this extension.
// |filter|: If specified, this method unregisters only the user scripts
// that match it.
- // |callback|: Called once scripts have been fully unregistered or if an
- // error ocurs
+ // |callback|: Promise that resolves once scripts have been fully
+ // unregistered. The promise will be rejected if an error occurs.
static void unregister(
optional UserScriptFilter filter,
UnregisterCallback callback);
@@ -194,8 +194,8 @@ namespace userScripts {
// If there are errors during script parsing/file validation, or if the IDs
// specified do not correspond to a fully registered script, then no scripts
// are updated.
- // |callback|: Called once scripts have been fully updated or if an error
- // occurs.
+ // |callback|: Promise that resolves once scripts have been fully updated.
+ // The promise will be rejected if an error occurs.
static void update(
RegisteredUserScript[] scripts,
optional UpdateCallback callback);
@@ -212,13 +212,15 @@ namespace userScripts {
// Configures the `USER_SCRIPT` execution environment.
// |properties|: Contains the user script world configuration.
- // |callback|: Called once world hase been configured.
+ // |callback|: Promise that resolves once the world has been
+ // configured.
static void configureWorld(
WorldProperties properties,
optional ConfigureWorldCallback callback);
// Retrieves all registered world configurations.
- // |callback|: Called with the registered world configurations.
+ // |callback|: Promise that resolves with the registered world
+ // configurations.
static void getWorldConfigurations(
GetAllWorldConfigurationsCallback callback);
@@ -227,7 +229,7 @@ namespace userScripts {
// configuration.
// |worldId|: The ID of the user script world to reset. If omitted, resets
// the default world's configuration.
- // |callback|: Called when the configuration is reset.
+ // |callback|: Promise that resolves when the configuration is reset.
static void resetWorldConfiguration(
optional DOMString worldId,
ResetWorldConfigurationCallback callback);
diff --git a/tools/under-control/src/extensions/common/api/web_accessible_resources.idl b/tools/under-control/src/extensions/common/api/web_accessible_resources.idl
deleted file mode 100755
index af93f41e..00000000
--- a/tools/under-control/src/extensions/common/api/web_accessible_resources.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Stub namespace for the "web_accessible_resources" manifest key.
-[generate_error_messages] namespace webAccessibleResources {
- dictionary WebAccessibleResource {
- // Relative paths within the extension package representing web accessible
- // resources.
- DOMString[] resources;
-
- // List of
- // match patterns to which "resources" are accessible. These patterns should
- // have an effective path of "*". Each match will be checked against the
- // initiating origin.
- DOMString[]? matches;
-
- // List of extension IDs the "resources" are accessible to. A wildcard can
- // be used, denoted by "*".
- DOMString[]? extension_ids;
-
- // If true, the web accessible resources will only be accessible through a
- // dynamic ID. This is an identifier that uniquely identifies the extension
- // and is generated each session. The corresponding dynamic extension URL
- // is available through $(ref:runtime.getURL).
- // Dynamic resources can be loaded regardless of the value. However, if
- // true, resources can only be loaded using the dynamic URL.
- boolean? use_dynamic_url;
- };
-
- dictionary ManifestKeys {
- WebAccessibleResource[] web_accessible_resources;
- };
-};
diff --git a/tools/under-control/src/extensions/common/api/web_accessible_resources_mv2.idl b/tools/under-control/src/extensions/common/api/web_accessible_resources_mv2.idl
deleted file mode 100755
index 42b15d33..00000000
--- a/tools/under-control/src/extensions/common/api/web_accessible_resources_mv2.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Stub namespace for the "web_accessible_resources" manifest key.
-[generate_error_messages] namespace webAccessibleResourcesMv2 {
- dictionary ManifestKeys {
- // Relative paths within the extension package representing web accessible
- // resources.
- DOMString[] web_accessible_resources;
- };
-};
diff --git a/tools/under-control/src/gin/v8_initializer.cc b/tools/under-control/src/gin/v8_initializer.cc
index 0b14695a..83317535 100755
--- a/tools/under-control/src/gin/v8_initializer.cc
+++ b/tools/under-control/src/gin/v8_initializer.cc
@@ -197,7 +197,7 @@ void SetV8FlagsFormatted(const char* format, ...) {
char buffer[128];
va_list args;
va_start(args, format);
- int length = base::VSpanPrintf(buffer, format, args);
+ int length = UNSAFE_TODO(base::VSpanPrintf(buffer, format, args));
if (length <= 0 || sizeof(buffer) <= static_cast(length)) {
PLOG(ERROR) << "Invalid formatted V8 flag: " << format;
return;
@@ -460,9 +460,6 @@ void SetFeatureFlags() {
features::kV8SingleThreadedGCInBackgroundNoIncrementalMarking,
"--no-incremental-marking-for-gc-in-background",
"--incremental-marking-for-gc-in-background");
- SetV8FlagsIfOverridden(features::kV8DecommitPooledPages,
- "--decommit-pooled-pages",
- "--no-decommit-pooled-pages");
if (base::FeatureList::IsEnabled(features::kV8ConcurrentSparkplug)) {
if (int max_threads = features::kV8ConcurrentSparkplugMaxThreads.Get()) {
diff --git a/tools/under-control/src/services/network/network_context.cc b/tools/under-control/src/services/network/network_context.cc
index 48d5d5c0..32a30604 100755
--- a/tools/under-control/src/services/network/network_context.cc
+++ b/tools/under-control/src/services/network/network_context.cc
@@ -110,9 +110,9 @@
#include "services/network/cookie_manager.h"
#include "services/network/data_remover_util.h"
#include "services/network/device_bound_session_manager.h"
-#include "services/network/devtools_durable_msg_collector.h"
#include "services/network/disk_cache/mojo_backend_file_operations_factory.h"
#include "services/network/enterprise/encryption/encrypted_backend_file_operations_factory.h"
+#include "services/network/enterprise/encryption/os_crypt_cache_encryption_delegate.h"
#include "services/network/host_resolver.h"
#include "services/network/http_auth_cache_proxy_copier.h"
#include "services/network/http_server_properties_pref_delegate.h"
@@ -1767,28 +1767,6 @@ void NetworkContext::SetNetworkConditions(
std::move(network_conditions));
}
-void NetworkContext::OnDevToolsDurableMessageClientsDisconnected(
- const base::UnguessableToken& throttling_profile_id) {
- devtools_profile_to_durable_message_collectors_.erase(throttling_profile_id);
-}
-
-void NetworkContext::EnableDurableMessageCollector(
- const base::UnguessableToken& throttling_profile_id,
- mojo::PendingReceiver receiver) {
- auto [it, inserted] =
- devtools_profile_to_durable_message_collectors_.try_emplace(
- throttling_profile_id);
- if (inserted) {
- auto disconnect_callback = base::BindOnce(
- &NetworkContext::OnDevToolsDurableMessageClientsDisconnected,
- base::Unretained(this), throttling_profile_id);
- it->second = std::make_unique(
- std::move(disconnect_callback));
- }
-
- it->second->AddReceiver(std::move(receiver));
-}
-
void NetworkContext::SetAcceptLanguage(const std::string& new_accept_language) {
// This may only be called on NetworkContexts created with the constructor
// that calls MakeURLRequestContext().
@@ -2391,7 +2369,7 @@ void NetworkContext::PreconnectSockets(
std::move(connection_change_observer_client), this);
request_info.connection_management_config->connection_change_observer =
- change_observer.get();
+ change_observer->GetWeakPtr();
connection_change_observers_.insert(std::move(change_observer));
}
}
@@ -2826,7 +2804,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
base::MakeRefCounted();
}
cache_params.file_operations_factory = base::MakeRefCounted<
- enterprise::EncryptedBackendFileOperationsFactory>(
+ enterprise_encryption::EncryptedBackendFileOperationsFactory>(
std::move(cache_params.file_operations_factory));
}
}
@@ -2838,6 +2816,15 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
cache_params.app_status_listener_getter));
#endif // BUILDFLAG(IS_ANDROID)
builder.EnableHttpCache(cache_params);
+
+ std::unique_ptr cache_encryption_delegate;
+ if (params_->encryption_provider) {
+ cache_encryption_delegate = std::make_unique<
+ enterprise_encryption::OSCryptCacheEncryptionDelegate>(
+ std::move(params_->encryption_provider));
+ }
+
+ builder.set_cache_encryption_delegate(std::move(cache_encryption_delegate));
}
std::unique_ptr ssl_config_service =
@@ -2984,9 +2971,6 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
*base::CommandLine::ForCurrentProcess(), is_quic_force_disabled,
&session_params, quic_context->params());
- session_params.disable_idle_sockets_close_on_memory_pressure =
- params_->disable_idle_sockets_close_on_memory_pressure;
-
session_params.key_auth_cache_server_entries_by_network_anonymization_key =
params_->split_auth_cache_by_network_anonymization_key;
@@ -3055,6 +3039,8 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
if (params_->device_bound_sessions_enabled) {
builder.set_has_device_bound_session_service(true);
+ builder.set_device_bound_sessions_restricted_sites(
+ params_->device_bound_sessions_restricted_sites);
#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
if (params_->bound_sessions_unexportable_key_service.is_valid()) {
@@ -3473,6 +3459,15 @@ void NetworkContext::FlushMatchingCachedClientCert(
}
}
+void NetworkContext::FlushClientCertCache() {
+ net::HttpNetworkSession* http_session =
+ url_request_context_->http_transaction_factory()->GetSession();
+ DCHECK(http_session);
+ if (http_session->ssl_client_context()) {
+ http_session->ssl_client_context()->OnClientCertStoreChanged();
+ }
+}
+
void NetworkContext::RevokeNetworkForNonces(
std::vector nonces_to_patterns,
RevokeNetworkForNoncesCallback callback) {
@@ -3646,21 +3641,4 @@ void NetworkContext::InitializePrefetchURLLoaderFactory() {
CreateURLLoaderFactoryParamsForPrefetch());
}
-base::WeakPtr NetworkContext::MaybeCreateDurableMessage(
- const std::optional& throttling_profile_id,
- const std::optional& devtools_request_id) {
- if (!throttling_profile_id.has_value() || !devtools_request_id.has_value()) {
- return nullptr;
- }
-
- auto collector_it = devtools_profile_to_durable_message_collectors_.find(
- throttling_profile_id.value());
- if (collector_it == devtools_profile_to_durable_message_collectors_.end()) {
- return nullptr;
- }
-
- return collector_it->second->CreateDurableMessage(
- devtools_request_id.value());
-}
-
} // namespace network
diff --git a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json
index d326724f..92f9392d 100755
--- a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json
+++ b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json
@@ -1,4 +1,36 @@
{
+ "AAPMBlocksWebGPU": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AAPMBlocksWebGPU"
+ ]
+ }
+ ]
+ }
+ ],
+ "AIFuseboxIOS": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ComposeboxCompactMode",
+ "ComposeboxForceTop",
+ "ComposeboxIOS"
+ ]
+ }
+ ]
+ }
+ ],
"AIMHintText": [
{
"platforms": [
@@ -63,7 +95,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -131,6 +162,22 @@
]
}
],
+ "AccessibilityAtomicLiveRegions": [
+ {
+ "platforms": [
+ "android",
+ "android_webview"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AccessibilityAtomicLiveRegions"
+ ]
+ }
+ ]
+ }
+ ],
"AccessibilityCheckJavaNodeCacheFreshness": [
{
"platforms": [
@@ -207,6 +254,21 @@
]
}
],
+ "AccessibilityExtendedSelection": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AccessibilityExtendedSelection"
+ ]
+ }
+ ]
+ }
+ ],
"AccessibilityImproveLiveRegionAnnounce": [
{
"platforms": [
@@ -340,6 +402,28 @@
]
}
],
+ "AccessibilitySequentialFocus": [
+ {
+ "platforms": [
+ "android",
+ "android_webview"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AccessibilitySequentialFocus"
+ ]
+ },
+ {
+ "name": "Disabled",
+ "disable_features": [
+ "AccessibilitySequentialFocus"
+ ]
+ }
+ ]
+ }
+ ],
"AccessibilitySerializationSizeMetrics": [
{
"platforms": [
@@ -429,7 +513,6 @@
"android_weblayer",
"android_webview",
"chromeos",
- "chromeos_lacros",
"fuchsia",
"ios",
"linux",
@@ -516,21 +599,6 @@
]
}
],
- "AllowlistScopesForMdmErrors": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AllowlistScopesForMdmErrors"
- ]
- }
- ]
- }
- ],
"AlwaysUseAudioManagerOutputFramesPerBuffer": [
{
"platforms": [
@@ -584,7 +652,10 @@
],
"experiments": [
{
- "name": "Enabled_WithVisualUpdate",
+ "name": "Enabled_WithVisualUpdate_60fps",
+ "params": {
+ "fps_cap": "60"
+ },
"enable_features": [
"AndroidAnimatedProgressBarInBrowser",
"AndroidProgressBarVisualUpdate"
@@ -608,28 +679,25 @@
]
}
],
- "AndroidAutofillForwardIframeOrigin": [
- {
- "platforms": [
- "android",
- "android_webview"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AndroidAutofillForwardIframeOrigin"
- ]
- }
- ]
- }
- ],
"AndroidBookmarkBar": [
{
"platforms": [
"android"
],
"experiments": [
+ {
+ "name": "Enabled_V2",
+ "params": {
+ "show_bookmark_bar": "false"
+ },
+ "enable_features": [
+ "AndroidAppearanceSettings",
+ "AndroidBookmarkBar",
+ "IPH_BookmarksBar",
+ "TopControlsRefactor",
+ "TopControlsRefactorV2"
+ ]
+ },
{
"name": "Enabled",
"params": {
@@ -719,7 +787,7 @@
]
}
],
- "AndroidComposeplateLFF": [
+ "AndroidCaretBrowsing": [
{
"platforms": [
"android"
@@ -728,7 +796,7 @@
{
"name": "Enabled",
"enable_features": [
- "AndroidComposeplateLFF"
+ "AndroidCaretBrowsing"
]
}
]
@@ -764,6 +832,36 @@
"enable_features": [
"AndroidDesktopZoomScaling"
]
+ },
+ {
+ "name": "EnabledSmall",
+ "params": {
+ "desktop-zoom-scaling-factor": "109",
+ "monitor-zoom-scaling-factor": "120"
+ },
+ "enable_features": [
+ "AndroidDesktopZoomScaling"
+ ]
+ },
+ {
+ "name": "EnabledMedium",
+ "params": {
+ "desktop-zoom-scaling-factor": "115",
+ "monitor-zoom-scaling-factor": "125"
+ },
+ "enable_features": [
+ "AndroidDesktopZoomScaling"
+ ]
+ },
+ {
+ "name": "EnabledLarge",
+ "params": {
+ "desktop-zoom-scaling-factor": "120",
+ "monitor-zoom-scaling-factor": "130"
+ },
+ "enable_features": [
+ "AndroidDesktopZoomScaling"
+ ]
}
]
}
@@ -823,6 +921,22 @@
]
}
],
+ "AndroidMediaCapture": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AndroidMediaPicker",
+ "UserMediaScreenCapturing"
+ ]
+ }
+ ]
+ }
+ ],
"AndroidMediaPickerAdoption": [
{
"platforms": [
@@ -877,17 +991,17 @@
]
}
],
- "AndroidPauseMutedBackgroundAudio": [
+ "AndroidOpenIncognitoAsWindow": [
{
"platforms": [
- "android",
- "android_webview"
+ "android"
],
"experiments": [
{
- "name": "Enabled",
+ "name": "Enabled_20251208",
"enable_features": [
- "PauseMutedBackgroundAudio"
+ "AndroidOpenIncognitoAsWindow",
+ "TabStripIncognitoMigration"
]
}
]
@@ -899,23 +1013,35 @@
"android"
],
"experiments": [
+ {
+ "name": "Enabled_MovementAndSquish",
+ "params": {
+ "search_box_movement": "true",
+ "search_box_squish_animation": "true"
+ },
+ "enable_features": [
+ "AndroidPinnedTabs"
+ ]
+ },
+ {
+ "name": "Enabled_Tablet_WithGTS",
+ "params": {
+ "search_box_movement": "true",
+ "search_box_squish_animation": "true"
+ },
+ "enable_features": [
+ "AndroidPinnedTabs",
+ "AndroidPinnedTabsTabletTabStrip"
+ ]
+ },
{
"name": "Enabled",
"enable_features": [
"AndroidPinnedTabs"
]
- }
- ]
- }
- ],
- "AndroidPinnedTabsTabletTabStrip": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
+ },
{
- "name": "Enabled",
+ "name": "Enabled_Tablet",
"enable_features": [
"AndroidPinnedTabsTabletTabStrip"
]
@@ -948,12 +1074,10 @@
{
"name": "EnabledReadabilityDistillerWithNoTriggering",
"params": {
- "heuristic_min_content_length": "160",
- "heuristic_min_score": "50",
"min_content_length": "100",
"show_cpa": "true",
"use_distiller": "true",
- "use_heuristic": "true"
+ "use_heuristic": "false"
},
"enable_features": [
"ReaderModeDistillInApp",
@@ -1054,12 +1178,29 @@
"enable_features": [
"AndroidWarmUpSpareRendererWithTimeout",
"OverrideAndroidOmniboxSpareRendererDelay",
+ "ReportStuckThrottle",
+ "ResumeNavigationWithSpeculativeRFHProcessGone",
"SpareRendererProcessPriority"
]
}
]
}
],
+ "AndroidSwipeToSwitchPane": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled_20260106",
+ "enable_features": [
+ "EnableSwipeToSwitchPane"
+ ]
+ }
+ ]
+ }
+ ],
"AndroidSystemTracing": [
{
"platforms": [
@@ -1121,21 +1262,6 @@
]
}
],
- "AndroidTabHighlighting": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AndroidTabHighlighting"
- ]
- }
- ]
- }
- ],
"AndroidTipsNotifications": [
{
"platforms": [
@@ -1217,21 +1343,6 @@
]
}
],
- "AndroidUseFrameIntervalDeciderAdaptiveFrameRate": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "UseFrameIntervalDeciderAdaptiveFrameRate"
- ]
- }
- ]
- }
- ],
"AndroidWebAppLaunchHandler": [
{
"platforms": [
@@ -1348,26 +1459,6 @@
]
}
],
- "AnimationTrigger": [
- {
- "platforms": [
- "android",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "AnimationTriggerOn_LimitTriggerAttachmentUpdatesOn_20251111",
- "enable_features": [
- "AnimationTrigger",
- "LimitTriggerAttachmentUpdates"
- ]
- }
- ]
- }
- ],
"AnnotatedPageContentExtraction": [
{
"platforms": [
@@ -1499,14 +1590,14 @@
],
"experiments": [
{
- "name": "Enabled_horizontal_plain_v1",
+ "name": "Enabled_horizontal_image_text",
"params": {
"probability": "1.0",
- "prompt_arm": "1",
+ "prompt_arm": "3",
"prompt_disposition_reason_filter": "DefaultFallback",
"request_type_filter": "Geolocation",
"survey_display_time": "OnPromptResolved",
- "trigger_id": "wLrmhfRxr0tK1KeaPYj0R4gRD5YC"
+ "trigger_id": "ioWWWfMDk0tK1KeaPYj0VG5mEaQt"
},
"enable_features": [
"ApproximateGeolocationPermission",
@@ -1850,21 +1941,6 @@
]
}
],
- "AskGeminiChip": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AskGeminiChip"
- ]
- }
- ]
- }
- ],
"AssistMultiWord": [
{
"platforms": [
@@ -1990,63 +2066,6 @@
]
}
],
- "AttributionReportNavigationBasedRetry": [
- {
- "platforms": [
- "android",
- "chromeos",
- "chromeos_lacros",
- "fuchsia",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled_third_retry",
- "params": {
- "navigation_retry_attempt": "third_retry"
- },
- "enable_features": [
- "AttributionReportNavigationBasedRetry"
- ]
- },
- {
- "name": "Enabled_second_retry",
- "params": {
- "navigation_retry_attempt": "second_retry"
- },
- "enable_features": [
- "AttributionReportNavigationBasedRetry"
- ]
- },
- {
- "name": "Enabled_first_retry",
- "params": {
- "navigation_retry_attempt": "first_retry"
- },
- "enable_features": [
- "AttributionReportNavigationBasedRetry"
- ]
- }
- ]
- }
- ],
- "AttributionReportObserveAppState": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AttributionReportObserveAppState"
- ]
- }
- ]
- }
- ],
"AudioDecoderAudioFileReader": [
{
"platforms": [
@@ -2088,7 +2107,6 @@
"android",
"android_webview",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -2175,22 +2193,11 @@
],
"experiments": [
{
- "name": "EnabledLookback1d",
- "params": {
- "AutoRevokeSuspiciousNotificationEngagementScoreCutOff": "50.0",
- "AutoRevokeSuspiciousNotificationLookBackPeriod": "1",
- "AutoRevokeSuspiciousNotificationMinNotificationCount": "2"
- },
- "enable_features": [
- "AutoRevokeSuspiciousNotification"
- ]
- },
- {
- "name": "EnabledLookback7d",
+ "name": "EnabledLookback7dHigherThreshold",
"params": {
"AutoRevokeSuspiciousNotificationEngagementScoreCutOff": "50.0",
"AutoRevokeSuspiciousNotificationLookBackPeriod": "7",
- "AutoRevokeSuspiciousNotificationMinNotificationCount": "4"
+ "AutoRevokeSuspiciousNotificationMinNotificationCount": "9"
},
"enable_features": [
"AutoRevokeSuspiciousNotification"
@@ -2270,7 +2277,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2455,11 +2461,30 @@
]
}
],
+ "AutofillEnableBuyNowPayLaterAndroid": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillEnableAmountExtraction",
+ "AutofillEnableBuyNowPayLater",
+ "AutofillEnableBuyNowPayLaterForExternallyLinked",
+ "AutofillEnableBuyNowPayLaterForKlarna",
+ "AutofillEnableBuyNowPayLaterUpdatedSuggestionSecondLineString",
+ "AutofillEnableTouchToFillReshowForBnpl"
+ ]
+ }
+ ]
+ }
+ ],
"AutofillEnableBuyNowPayLaterDesktop": [
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2479,7 +2504,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2498,7 +2522,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2517,7 +2540,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2670,7 +2692,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2748,26 +2769,6 @@
]
}
],
- "AutofillEnableSyntheticSelectMetricsLogging": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AutofillEnableSyntheticSelectMetricsLogging"
- ]
- }
- ]
- }
- ],
"AutofillExtendZipCodeValidation": [
{
"platforms": [
@@ -2789,10 +2790,32 @@
]
}
],
+ "AutofillFixCivilStateMisclassificationForESPT": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillFixCivilStateMisclassificationForESPT"
+ ]
+ }
+ ]
+ }
+ ],
"AutofillFixFormEquality": [
{
"platforms": [
"android",
+ "android_webview",
"chromeos",
"ios",
"linux",
@@ -2829,6 +2852,27 @@
]
}
],
+ "AutofillFixStateCountryMisclassification": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillFixStateCountryMisclassification"
+ ]
+ }
+ ]
+ }
+ ],
"AutofillI18nINAddressModel": [
{
"platforms": [
@@ -2916,7 +2960,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -2978,6 +3021,48 @@
]
}
],
+ "AutofillMoveSmallFormLogicToClient": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillMoveSmallFormLogicToClient"
+ ]
+ }
+ ]
+ }
+ ],
+ "AutofillOptimizeCacheUpdates": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillOptimizeCacheUpdates"
+ ]
+ }
+ ]
+ }
+ ],
"AutofillPageLanguageDetection": [
{
"platforms": [
@@ -3074,6 +3159,24 @@
]
}
],
+ "AutofillPreferBuyNowPayLaterBlocklists": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillPreferBuyNowPayLaterBlocklists"
+ ]
+ }
+ ]
+ }
+ ],
"AutofillPrioritizeSaveCardOverMandatoryReauth": [
{
"platforms": [
@@ -3094,10 +3197,29 @@
]
}
],
+ "AutofillReintroduceHybridPasskeyDropdownItem": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AutofillReintroduceHybridPasskeyDropdownItem"
+ ]
+ }
+ ]
+ }
+ ],
"AutofillServerExperimentalSignatures": [
{
"platforms": [
"android",
+ "android_webview",
"chromeos",
"ios",
"linux",
@@ -3360,7 +3482,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -3379,7 +3500,7 @@
]
}
],
- "AutomatedPasswordChangeStudyV3": [
+ "AutomatedPasswordChangeStudyModelUsage": [
{
"platforms": [
"chromeos",
@@ -3391,12 +3512,7 @@
{
"name": "Enabled",
"enable_features": [
- "CheckVisibilityInChangePasswordFormWaiter",
- "DisableFillingOnPageLoadForLeakedCredentials",
- "StopLoginCheckOnFailedLogin"
- ],
- "disable_features": [
- "DownloadModelForPasswordChange"
+ "ProactivelyDownloadModelForPasswordChange"
]
}
]
@@ -3414,7 +3530,8 @@
{
"name": "Enabled",
"enable_features": [
- "ReduceRequirementsForPasswordChange"
+ "ReduceRequirementsForPasswordChange",
+ "UseActionablesForImprovedPasswordChange"
]
}
]
@@ -3495,13 +3612,33 @@
]
}
],
+ "AvoidForcedLayoutOnInvisibleDocumentClose": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "AvoidForcedLayoutOnInvisibleDocumentClose"
+ ]
+ }
+ ]
+ }
+ ],
"AvoidTrustedParamsCopies": [
{
"platforms": [
"android",
"android_webview",
"chromeos",
- "chromeos_lacros",
"fuchsia",
"ios",
"linux",
@@ -3718,7 +3855,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -4202,7 +4338,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -4446,6 +4581,24 @@
]
}
],
+ "BrowsingHistoryActorIntegrationM3": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "BrowsingHistoryActorIntegrationM3"
+ ]
+ }
+ ]
+ }
+ ],
"BubbleMetricsApi": [
{
"platforms": [
@@ -4482,6 +4635,21 @@
]
}
],
+ "CADisplayLinkInBrowser": [
+ {
+ "platforms": [
+ "mac"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "CADisplayLinkInBrowser"
+ ]
+ }
+ ]
+ }
+ ],
"CCTAdaptiveButton": [
{
"platforms": [
@@ -4489,7 +4657,10 @@
],
"experiments": [
{
- "name": "EnabledDefault",
+ "name": "EnabledModelVariantD_20250825",
+ "params": {
+ "show_open_in_browser_menu_top": "true"
+ },
"enable_features": [
"CCTAdaptiveButton"
]
@@ -4664,7 +4835,6 @@
"android",
"android_webview",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -4891,26 +5061,6 @@
]
}
],
- "CheckHTMLParserBudgetLessOften": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled_Nonstable_20230320",
- "enable_features": [
- "CheckHTMLParserBudgetLessOften"
- ]
- }
- ]
- }
- ],
"ChromeCompose": [
{
"platforms": [
@@ -4929,258 +5079,6 @@
]
}
],
- "ChromeIdentitySurveyAddressBubbleSignin": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "QLEtVmyw80ugnJ3q1cK0UGdNayod",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyAddressBubbleSignin"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyDiceWebSigninAccepted": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "xEt7e5g7R0ugnJ3q1cK0VZ7N4MUU",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyDiceWebSigninAccepted"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyDiceWebSigninDeclined": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "2LBpsLxW40ugnJ3q1cK0YRjYGpmV",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyDiceWebSigninDeclined"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyFirstRunSignin": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "RyaBY3Nkt0ugnJ3q1cK0NsYdHNN6",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyFirstRunSignin"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyPasswordBubbleSignin": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "Y6Y4fzSar0ugnJ3q1cK0WNKdFDWW",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyPasswordBubbleSignin"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyProfileMenuDismissed": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "AHS3hpM2h0ugnJ3q1cK0TTUsr4mM",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyProfileMenuDismissed"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyProfileMenuSignin": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "5BV1ygFHd0ugnJ3q1cK0WVqeKyud",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyProfileMenuSignin"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveyProfilePickerAddProfileSignin": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "dQhvVytAT0ugnJ3q1cK0WmcCsZxn",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveyProfilePickerAddProfileSignin"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveySigninInterceptProfileSeparation": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "EpkbgSho80ugnJ3q1cK0XfvvYoum",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveySigninInterceptProfileSeparation"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveySigninPromoBubbleDismissed": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "LSwnpVNg60ugnJ3q1cK0Uj5JGisJ",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveySigninPromoBubbleDismissed"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveySwitchProfileFromProfileMenu": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "buPSkStWM0ugnJ3q1cK0RmiQgzK1",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveySwitchProfileFromProfileMenu"
- ]
- }
- ]
- }
- ],
- "ChromeIdentitySurveySwitchProfileFromProfilePicker": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "en_site_id": "b5zoUGRaf0ugnJ3q1cK0RaxK8yrp",
- "probability": "0.008"
- },
- "enable_features": [
- "ChromeIdentitySurveySwitchProfileFromProfilePicker"
- ]
- }
- ]
- }
- ],
"ChromeOSARCVMLmkPerceptibleMinState": [
{
"platforms": [
@@ -6031,24 +5929,6 @@
]
}
],
- "ChromnientOptimizationFilter": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "LensOverlayOptimizationFilter"
- ]
- }
- ]
- }
- ],
"ChromnientReinvocationAffordance": [
{
"platforms": [
@@ -6214,27 +6094,6 @@
]
}
],
- "ChromnientUploadChunking": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "upload-chunk-retries": "2"
- },
- "enable_features": [
- "LensOverlayUploadChunking"
- ]
- }
- ]
- }
- ],
"ChromnientVideoCitations": [
{
"platforms": [
@@ -6418,11 +6277,11 @@
{
"name": "Enabled",
"params": {
- "HCAcceptanceRate": "1.0",
+ "HCAcceptanceRate": "1",
"MaxLength": "1000",
"MinLength": "50",
- "ProcessPayload": "false",
- "SampleRate": "1.0"
+ "ProcessPayload": "true",
+ "SampleRate": "1"
},
"enable_features": [
"ClientSideDetectionClipboardCopyApi"
@@ -6453,6 +6312,24 @@
]
}
],
+ "ClientSideDetectionImageEmbeddingMatch": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "params": {
+ "CsdImageEmbeddingMatchWithIntelligentScan": "false"
+ },
+ "enable_features": [
+ "ClientSideDetectionImageEmbeddingMatch"
+ ]
+ }
+ ]
+ }
+ ],
"ClientSideDetectionRetryLimit": [
{
"platforms": [
@@ -6513,6 +6390,24 @@
]
}
],
+ "ClientSideDetectionServerModelForScamDetectionAndroid": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "params": {
+ "MaxIntelligentScansPerDay": "5"
+ },
+ "enable_features": [
+ "ClientSideDetectionServerModelForScamDetectionAndroid"
+ ]
+ }
+ ]
+ }
+ ],
"ClientSideDetectionShowScamVerdictWarningAndroid": [
{
"platforms": [
@@ -6537,6 +6432,25 @@
]
}
],
+ "ClientSideDetectionSkipErrorPage": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ClientSideDetectionSkipErrorPage"
+ ]
+ }
+ ]
+ }
+ ],
"ClipboardDeemphasisAndroid": [
{
"platforms": [
@@ -6574,6 +6488,21 @@
]
}
],
+ "CloudProfileReporting": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "CloudProfileReporting"
+ ]
+ }
+ ]
+ }
+ ],
"CoalesceSelectionchangeEvent": [
{
"platforms": [
@@ -6971,7 +6900,6 @@
"android_weblayer",
"android_webview",
"chromeos",
- "chromeos_lacros",
"fuchsia",
"linux",
"mac",
@@ -7106,6 +7034,47 @@
]
}
],
+ "ConnectionKeepAliveForHttp2": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "EnabledWithBindReceiversEverytime_20251111_CanaryDev",
+ "params": {
+ "kRebindReceiverEvent": "kOnlyOnConnectionClosedOrFailed"
+ },
+ "enable_features": [
+ "ConnectionKeepAliveForHttp2",
+ "RebindPreconnectReceivers"
+ ]
+ }
+ ]
+ }
+ ],
+ "ContentVerifierCacheIncludesExtensionRoot": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ContentVerifierCacheIncludesExtensionRoot"
+ ]
+ }
+ ]
+ }
+ ],
"ContentVerifyJobUseJobVersionForHashing": [
{
"platforms": [
@@ -7177,7 +7146,26 @@
]
}
],
- "ContextualTasks": [
+ "ContextualTasksContext": [
+ {
+ "platforms": [
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ContextualTasksContext",
+ "ContextualTasksContextLogging",
+ "ContextualTasksContextMqlsLogging"
+ ]
+ }
+ ]
+ }
+ ],
+ "ContextualTasksDesktop": [
{
"platforms": [
"chromeos",
@@ -7193,25 +7181,7 @@
},
"enable_features": [
"ContextualTasks",
- "TabbedBrowserUseNewLayout"
- ]
- }
- ]
- }
- ],
- "ContextualTasksContext": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ContextualTasksContext"
+ "HappinessTrackingSurveysForDesktopNextPanel"
]
}
]
@@ -7260,8 +7230,6 @@
"version": "2"
},
"enable_features": [
- "AttributionDebugReportingCookieDeprecationTesting",
- "CookieDeprecationFacilitatedTesting",
"SkipTpcdMitigationsForAds",
"TPCDAdHeuristicSubframeRequestTagging"
]
@@ -7890,7 +7858,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -8111,12 +8078,26 @@
]
}
],
+ "DBSCMacUKSInBrowserProcess": [
+ {
+ "platforms": [
+ "mac"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled_20251217",
+ "enable_features": [
+ "UseUnexportableKeyServiceInBrowserProcess"
+ ]
+ }
+ ]
+ }
+ ],
"DSEPreconnect2": [
{
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -8447,7 +8428,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -8590,7 +8570,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -8688,6 +8667,46 @@
]
}
],
+ "DesktopNtpSimplification": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled_Dev_Canary_Beta",
+ "params": {
+ "ModuleMinStalenessUpdateTimeInterval": "1d",
+ "ShortcutsMinStalenessUpdateTimeInterval": "1d",
+ "StaleModulesCountThreshold": "1",
+ "StaleShortcutsCountThreshold": "3"
+ },
+ "enable_features": [
+ "NtpFeatureOptimizationDismissModulesRemoval",
+ "NtpFeatureOptimizationModuleRemoval",
+ "NtpFeatureOptimizationShortcutsRemoval"
+ ]
+ },
+ {
+ "name": "Enabled_Stable",
+ "params": {
+ "ModuleMinStalenessUpdateTimeInterval": "1d",
+ "ShortcutsMinStalenessUpdateTimeInterval": "1d",
+ "StaleModulesCountThreshold": "14",
+ "StaleShortcutsCountThreshold": "60"
+ },
+ "enable_features": [
+ "NtpFeatureOptimizationDismissModulesRemoval",
+ "NtpFeatureOptimizationModuleRemoval",
+ "NtpFeatureOptimizationShortcutsRemoval"
+ ]
+ }
+ ]
+ }
+ ],
"DesktopNtpTabResumption": [
{
"platforms": [
@@ -8732,7 +8751,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -8858,39 +8876,6 @@
]
}
],
- "DestroyOTRProfileEarly": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "DestroyOTRProfileEarly"
- ]
- }
- ]
- }
- ],
- "DestroySystemProfiles": [
- {
- "platforms": [
- "fuchsia",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "DestroySystemProfiles",
- "enable_features": [
- "DestroySystemProfiles"
- ]
- }
- ]
- }
- ],
"DevToolsConsoleInsightsTeasers": [
{
"platforms": [
@@ -9036,25 +9021,6 @@
]
}
],
- "DisableCookieDeprecationFacilitatedTestingLabels": [
- {
- "platforms": [
- "android",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "LabelsOff",
- "disable_features": [
- "CookieDeprecationFacilitatedTestingLabels"
- ]
- }
- ]
- }
- ],
"DisableGeoLanguageModel": [
{
"platforms": [
@@ -9205,7 +9171,7 @@
]
}
],
- "DiscardPageWithCrashedSubframePolicy": [
+ "DiscardPageWithCrashedSubframeRelaxedEligibility": [
{
"platforms": [
"android"
@@ -9214,8 +9180,7 @@
{
"name": "Enabled",
"enable_features": [
- "DiscardPageWithCrashedSubframePolicy",
- "WebContentsDiscard"
+ "DiscardPageWithCrashedSubframeRelaxedEligibility"
]
}
]
@@ -9264,42 +9229,7 @@
"backend": "sql"
},
"enable_features": [
- "DiskCacheBackendExperiment",
- "HttpCacheInitializeDiskCacheBackendEarly"
- ]
- }
- ]
- }
- ],
- "DisplayEdgeToEdgeFullscreen": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "DisplayEdgeToEdgeFullscreen"
- ]
- }
- ]
- }
- ],
- "DisplayMediaPickerLongDomains": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "DesktopMediaPickerMultiLineTitle",
- "DisplayMediaRejectLongDomains"
+ "DiskCacheBackendExperiment"
]
}
]
@@ -9514,47 +9444,6 @@
]
}
],
- "DropInputEventsWhilePaintHolding": [
- {
- "platforms": [
- "android",
- "android_weblayer",
- "android_webview",
- "chromeos",
- "chromeos_lacros",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "DropInputEventsWhilePaintHolding"
- ]
- }
- ]
- }
- ],
- "DropMetricsFromNonProducedFramesOnlyIfTheyHadNoDamage": [
- {
- "platforms": [
- "android",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "DropMetricsFromNonProducedFramesOnlyIfTheyHadNoDamage"
- ]
- }
- ]
- }
- ],
"DumpOnOOBFontDataServiceCache": [
{
"platforms": [
@@ -9630,37 +9519,6 @@
]
}
],
- "EffectiveBindingState": [
- {
- "platforms": [
- "android",
- "android_webview"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "EffectiveBindingState"
- ]
- }
- ]
- }
- ],
- "En840AndFstDecoderParamsUpdate": [
- {
- "platforms": [
- "chromeos"
- ],
- "experiments": [
- {
- "name": "Enable_Model_And_Params_20230602",
- "enable_features": [
- "ImeUsEnglishModelUpdate"
- ]
- }
- ]
- }
- ],
"EnableA2APayments": [
{
"platforms": [
@@ -9677,6 +9535,36 @@
]
}
],
+ "EnableADPFBoostRateLimit": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "EnableADPFBoostRateLimit"
+ ]
+ }
+ ]
+ }
+ ],
+ "EnableADPFScrollNoRendererMain": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "EnableADPFScrollNoRendererMain"
+ ]
+ }
+ ]
+ }
+ ],
"EnableADPFSeparateRendererMainSession": [
{
"platforms": [
@@ -9964,6 +9852,24 @@
]
}
],
+ "EnableForceDownloadToCloud": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "EnableForceDownloadToCloud"
+ ]
+ }
+ ]
+ }
+ ],
"EnableFullscreenToAnyScreenAndroid": [
{
"platforms": [
@@ -10241,6 +10147,24 @@
]
}
],
+ "EnableShouldShowPromotion": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "EnableShouldShowPromotion"
+ ]
+ }
+ ]
+ }
+ ],
"EnableSinglePageAppDataProtection": [
{
"platforms": [
@@ -10348,26 +10272,6 @@
]
}
],
- "EnforceManagementDisclaimer": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "PolicyDisclaimerRegistrationRetryDelay": "6h"
- },
- "enable_features": [
- "EnforceManagementDisclaimer"
- ]
- }
- ]
- }
- ],
"EnhancedFieldsForSecOps": [
{
"platforms": [
@@ -10430,7 +10334,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -10445,6 +10348,24 @@
]
}
],
+ "EnterpriseFileObfuscationArchiveAnalyzer": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "EnterpriseFileObfuscationArchiveAnalyzer"
+ ]
+ }
+ ]
+ }
+ ],
"EnterpriseFileSystemAccessDeepScan": [
{
"platforms": [
@@ -10481,31 +10402,11 @@
]
}
],
- "EsbAsASyncedSetting": [
- {
- "platforms": [
- "chromeos",
- "chromeos_lacros",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "EsbAsASyncedSetting"
- ]
- }
- ]
- }
- ],
"EventTimingIgnorePresentationTimeFromUnexpectedFrameSource": [
{
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"fuchsia",
"linux",
"mac",
@@ -10541,60 +10442,6 @@
]
}
],
- "ExportFrameTimingAfterFrameDoneExperiment": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "fuchsia",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ExportFrameTimingAfterFrameDone"
- ]
- }
- ]
- }
- ],
- "ExtendedReportingRemovePrefDependency": [
- {
- "platforms": [
- "android",
- "chromeos",
- "chromeos_lacros",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "EnabledRemovePrefDependency",
- "enable_features": [
- "ExtendedReportingRemovePrefDependency"
- ],
- "disable_features": [
- "SafeBrowsingHashPrefixRealTimeLookupsSamplePing"
- ]
- },
- {
- "name": "EnabledRemovePrefDependencyAndHprtSamplePing",
- "params": {
- "HashPrefixRealTimeLookupsSampleRate": "50"
- },
- "enable_features": [
- "ExtendedReportingRemovePrefDependency",
- "SafeBrowsingHashPrefixRealTimeLookupsSamplePing"
- ]
- }
- ]
- }
- ],
"ExtensionManifestV2Deprecation": [
{
"platforms": [
@@ -10799,6 +10646,21 @@
]
}
],
+ "FRESignInSecondaryActionLabelUpdate": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled_StaySignedOut",
+ "enable_features": [
+ "FRESignInAlternativeSecondaryButtonText"
+ ]
+ }
+ ]
+ }
+ ],
"FastPairAdvertisingFormat2025": [
{
"platforms": [
@@ -11490,7 +11352,8 @@
"platforms": [
"linux",
"mac",
- "windows"
+ "windows",
+ "chromeos"
],
"experiments": [
{
@@ -11507,23 +11370,6 @@
]
}
],
- "GlicActorUiNudgeRedesign": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "GlicActorUiNudgeRedesign"
- ]
- }
- ]
- }
- ],
"GlicActorUiTabIndicatorSpinnerIgnoreReducedMotion": [
{
"platforms": [
@@ -11541,23 +11387,6 @@
]
}
],
- "GlicAppendModelQualityClientId": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "GlicAppendModelQualityClientId"
- ]
- }
- ]
- }
- ],
"GlicButtonAltLabel": [
{
"platforms": [
@@ -11592,6 +11421,12 @@
"enable_features": [
"GlicButtonAltLabel"
]
+ },
+ {
+ "name": "Control",
+ "disable_features": [
+ "GlicButtonAltLabel"
+ ]
}
]
}
@@ -11631,30 +11466,12 @@
]
}
],
- "GlicDefaultTabContextSetting": [
- {
- "platforms": [
- "mac",
- "windows",
- "linux"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "GlicDefaultTabContextSetting"
- ]
- }
- ]
- }
- ],
"GlicDogfood": [
{
"platforms": [
"mac",
"windows",
- "linux",
- "chromeos"
+ "linux"
],
"experiments": [
{
@@ -11669,6 +11486,7 @@
"GlicEnableMultiInstanceBasedOnTier": [
{
"platforms": [
+ "linux",
"mac",
"windows"
],
@@ -11676,7 +11494,12 @@
{
"name": "Enabled",
"enable_features": [
- "GlicEnableMultiInstanceBasedOnTier"
+ "GlicDaisyChainNewTabs",
+ "GlicDefaultTabContextSetting",
+ "GlicEnableMultiInstanceBasedOnTier",
+ "GlicMultiInstance",
+ "GlicMultiTab",
+ "GlicMultitabUnderlines"
]
}
]
@@ -11838,6 +11661,23 @@
]
}
],
+ "GlicGeminiInstructions": [
+ {
+ "platforms": [
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "GlicGeminiInstructions"
+ ]
+ }
+ ]
+ }
+ ],
"GlicHandoffButtonHiddenClientControl": [
{
"platforms": [
@@ -11873,20 +11713,18 @@
]
}
],
- "GlicMultiInstance": [
+ "GlicPersonalContext": [
{
"platforms": [
- "mac",
"linux",
+ "mac",
"windows"
],
"experiments": [
{
"name": "Enabled",
"enable_features": [
- "GlicMultiInstance",
- "GlicMultiTab",
- "GlicMultitabUnderlines"
+ "GlicPersonalContext"
]
}
]
@@ -11943,6 +11781,26 @@
]
}
],
+ "GlicTeamfoodAllowlistedChromeOS": [
+ {
+ "platforms": [
+ "chromeos"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ContextualCueing",
+ "Glic",
+ "GlicRollout",
+ "GlicUseNonClient",
+ "GlicUserStatusCheck",
+ "GlicZeroStateSuggestions"
+ ]
+ }
+ ]
+ }
+ ],
"GlicTieredRollout": [
{
"platforms": [
@@ -12804,7 +12662,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -12812,10 +12669,41 @@
],
"experiments": [
{
- "name": "EnabledBloomFilter_20250925",
- "enable_features": [
+ "//0": "Gathers metrics on the Heap Profiler, which has known overhead that affects benchmarks.",
+ "//1": "HeapProfilerReporting is an existing feature that forces the profiler on/off.",
+ "//2": "UseLockFreeBloomFilter is a new feature that modifies the profiler behaviour, so needs it to be on.",
+ "//3": "HeapProfilerReporting will never go beyond 1% stable, so the control group should come first.",
+ "name": "DisabledControl_20251203",
+ "disable_features": [
+ "HeapProfilerReporting",
"UseLockFreeBloomFilter"
]
+ },
+ {
+ "name": "EnabledBloomFilter_20251203",
+ "params": {
+ "nonstable-probability": "1.0",
+ "stable-probability": "1.0"
+ },
+ "enable_features": [
+ "HeapProfilerReporting",
+ "UseLockFreeBloomFilter"
+ ],
+ "disable_benchmarking": "true"
+ },
+ {
+ "name": "EnabledNoBloomFilter_20251203",
+ "params": {
+ "nonstable-probability": "1.0",
+ "stable-probability": "1.0"
+ },
+ "enable_features": [
+ "HeapProfilerReporting"
+ ],
+ "disable_features": [
+ "UseLockFreeBloomFilter"
+ ],
+ "disable_benchmarking": "true"
}
]
}
@@ -12844,7 +12732,8 @@
{
"name": "Enabled",
"enable_features": [
- "GeminiFullChatHistory"
+ "GeminiFullChatHistory",
+ "GeminiLoadingStateRedesign"
]
}
]
@@ -12865,7 +12754,7 @@
]
}
],
- "HeliosLoadingRedesign": [
+ "HeliosOnboardingCards": [
{
"platforms": [
"ios"
@@ -12874,7 +12763,43 @@
{
"name": "Enabled",
"enable_features": [
- "GeminiLoadingStateRedesign"
+ "GeminiOnboardingCards"
+ ]
+ }
+ ]
+ }
+ ],
+ "HeliosWithReaderMode": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "EnableReaderModeInUS"
+ ],
+ "disable_features": [
+ "EnableReaderModeOmniboxEntryPointInUS"
+ ]
+ }
+ ]
+ }
+ ],
+ "HeliosZeroStateSuggestions": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "params": {
+ "ZeroStateSuggestionsPlacementAskGemini": "true"
+ },
+ "enable_features": [
+ "ZeroStateSuggestions"
]
}
]
@@ -12967,6 +12892,26 @@
]
}
],
+ "HistoryQueryOnlyLocalFirst": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "HistoryQueryOnlyLocalFirst"
+ ]
+ }
+ ]
+ }
+ ],
"HistorySyncAlternativeIllustration": [
{
"platforms": [
@@ -12982,6 +12927,21 @@
]
}
],
+ "HomeModulePrefRefactor": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "HomeModulePrefRefactor"
+ ]
+ }
+ ]
+ }
+ ],
"Hotspot": [
{
"platforms": [
@@ -13003,6 +12963,26 @@
]
}
],
+ "HttpCacheInitializeDiskCacheBackendEarly": [
+ {
+ "platforms": [
+ "android_webview",
+ "android",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "HttpCacheInitializeDiskCacheBackendEarly"
+ ]
+ }
+ ]
+ }
+ ],
"HttpCacheNoVarySearch": [
{
"platforms": [
@@ -13170,21 +13150,6 @@
]
}
],
- "IOSAutofillBottomSheetNewBlur": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AutofillBottomSheetNewBlur"
- ]
- }
- ]
- }
- ],
"IOSAutofillPaymentsSheetV3": [
{
"platforms": [
@@ -13200,21 +13165,6 @@
]
}
],
- "IOSAutofillRefillForForms": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "AutofillRefillForFormsIos"
- ]
- }
- ]
- }
- ],
"IOSAutofillReportFormSubmissionErrors": [
{
"platforms": [
@@ -13245,24 +13195,6 @@
]
}
],
- "IOSBestFeaturesScreenInFirstRun": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled_GeneralScreenAfterDBP",
- "params": {
- "BestFeaturesScreenInFirstRunParam": "1"
- },
- "enable_features": [
- "BestFeaturesScreenInFirstRunExperience"
- ]
- }
- ]
- }
- ],
"IOSBottomMultilineOmnibox": [
{
"platforms": [
@@ -13270,27 +13202,7 @@
],
"experiments": [
{
- "name": "EnabledWithEditStateFollowSteadyState",
- "params": {
- "kBottomOmniboxEvolutionParam": "kBottomOmniboxEvolutionParamEditStateFollowSteadyState"
- },
- "enable_features": [
- "BottomOmniboxEvolution",
- "MultilineBrowserOmnibox"
- ]
- },
- {
- "name": "EnabledWithForceBottomOmniboxEditState",
- "params": {
- "kBottomOmniboxEvolutionParam": "kBottomOmniboxEvolutionParamForceBottomOmniboxEditState"
- },
- "enable_features": [
- "BottomOmniboxEvolution",
- "MultilineBrowserOmnibox"
- ]
- },
- {
- "name": "EnabledWithoutBottomOmniboxOnFocus",
+ "name": "EnabledMultilineTop",
"enable_features": [
"MultilineBrowserOmnibox"
]
@@ -13539,6 +13451,21 @@
]
}
],
+ "IOSExpandedTips": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "IOSExpandedTips"
+ ]
+ }
+ ]
+ }
+ ],
"IOSExplicitUITraitRegistration": [
{
"platforms": [
@@ -13787,6 +13714,25 @@
]
}
],
+ "IOSLensTripleCameraWith90Zoom": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "LensCameraNoStillOutputRequired",
+ "LensCameraUnbinnedCaptureFormatsPreferred",
+ "LensContinuousZoomEnabled",
+ "LensInitialLvfZoomLevel90Percent",
+ "LensTripleCameraEnabled"
+ ]
+ }
+ ]
+ }
+ ],
"IOSLogApplicationStorageSizeMetrics": [
{
"platforms": [
@@ -13862,6 +13808,21 @@
]
}
],
+ "IOSMostVisitedTilesCustomization": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "MostVisitedTilesCustomizationIOS"
+ ]
+ }
+ ]
+ }
+ ],
"IOSNewTabGridTransitions": [
{
"platforms": [
@@ -13925,6 +13886,25 @@
]
}
],
+ "IOSOneTapMiniMapRestrictions": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "EnabledSectionImprovement",
+ "params": {
+ "ios-one-tap-minimap-longest-word-min-chars": "5",
+ "ios-one-tap-minimap-max-section": "5"
+ },
+ "enable_features": [
+ "IOSOneTapMiniMapRestrictions"
+ ]
+ }
+ ]
+ }
+ ],
"IOSOneTimeDefaultBrowserNotification": [
{
"platforms": [
@@ -14018,7 +13998,14 @@
"experiments": [
{
"name": "Enabled",
+ "params": {
+ "data_extracted": "0",
+ "extraction_timing": "0",
+ "storage_implementation": "1",
+ "ttl_days": "7"
+ },
"enable_features": [
+ "PageContentCache",
"PersistTabContext"
]
}
@@ -14040,7 +14027,7 @@
]
}
],
- "IOSProactiveSuggestionsFramework": [
+ "IOSReaderModeWithTranslateSettings": [
{
"platforms": [
"ios"
@@ -14049,45 +14036,7 @@
{
"name": "Enabled",
"enable_features": [
- "IOSProactiveSuggestionsFramework"
- ]
- }
- ]
- }
- ],
- "IOSReaderMode": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "EnableReaderMode",
- "EnableReaderModeOmniboxEntryPoint",
- "ReaderModeUseReadability"
- ],
- "disable_features": [
- "EnableReadabilityHeuristic",
- "EnableReaderModeDefaultBrowserPromo",
- "EnableReaderModeInUS",
- "EnableReaderModePageEligibilityForToolsMenu"
- ]
- }
- ]
- }
- ],
- "IOSReaderModeWithTranslate": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "EnableReaderModeTranslation"
+ "EnableReaderModeTranslationWithInfobar"
]
}
]
@@ -14101,7 +14050,7 @@
"experiments": [
{
"name": "Enabled",
- "enable_features": [
+ "disable_features": [
"ImportPasswordsFromSafari"
]
}
@@ -14228,43 +14177,6 @@
]
}
],
- "IOSStartTimeBrowserBackgroundRemediations": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "EnabledWithUpdateFeedRefresh",
- "params": {
- "ios-startup-remediations-avoid-ntp-cleanup": "false",
- "ios-startup-remediations-update-feed-refresh": "true"
- },
- "enable_features": [
- "IOSStartTimeBrowserBackgroundRemediations"
- ]
- }
- ]
- }
- ],
- "IOSStartTimeStartupRemediations": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "EnabledWithSaveNTPWebState",
- "params": {
- "ios-startup-remediations-save-ntp-web-state": "true"
- },
- "enable_features": [
- "IOSStartTimeStartupRemediations"
- ]
- }
- ]
- }
- ],
"IOSStatelessFormSuggestionController": [
{
"platforms": [
@@ -14332,6 +14244,24 @@
]
}
],
+ "IOSTabGroupEntryPoints": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "TabGroupInOverflowMenu",
+ "TabGroupInTabIconContextMenu",
+ "TabRecallNewTabGroupButton",
+ "TabSwitcherOverflowMenu"
+ ]
+ }
+ ]
+ }
+ ],
"IOSTabResumptionShopCard": [
{
"platforms": [
@@ -14339,31 +14269,22 @@
],
"experiments": [
{
- "name": "Enabled_20251013",
- "params": {
- "ShopCardVariant": "arm_3"
- },
- "enable_features": [
- "TabResumptionShopCard"
- ]
- },
- {
- "name": "Enabled_20251013",
- "params": {
- "ShopCardVariant": "arm_4"
- },
- "enable_features": [
- "TabResumptionShopCard"
- ]
- },
- {
- "name": "Enabled_20251013",
+ "name": "Enabled_20261204",
"params": {
"ShopCardVariant": "arm_6"
},
"enable_features": [
"TabResumptionShopCard"
]
+ },
+ {
+ "name": "Enabled_20261204",
+ "params": {
+ "ShopCardVariant": "arm_3"
+ },
+ "enable_features": [
+ "TabResumptionShopCard"
+ ]
}
]
}
@@ -14483,44 +14404,6 @@
]
}
],
- "IOSiPadGhostCards": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "EnableiPadFeedGhostCards"
- ]
- }
- ]
- }
- ],
- "IdbPrioritizeForegroundClients": [
- {
- "platforms": [
- "windows",
- "mac",
- "chromeos",
- "fuchsia",
- "linux",
- "ios",
- "android",
- "android_weblayer",
- "android_webview"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "IdbPrioritizeForegroundClients"
- ]
- }
- ]
- }
- ],
"IdbSqliteBackingStoreInMemoryContexts": [
{
"platforms": [
@@ -14636,6 +14519,19 @@
"ImmersiveReadAnything"
]
},
+ {
+ "name": "Enabled_Dogfood",
+ "enable_features": [
+ "ImmersiveReadAnything"
+ ]
+ },
+ {
+ "name": "Enabled_Dogfood_WithReadability",
+ "enable_features": [
+ "ImmersiveReadAnything",
+ "ReadAnythingWithReadability"
+ ]
+ },
{
"name": "Disabled",
"disable_features": [
@@ -14713,25 +14609,7 @@
]
}
],
- "InfobarPrioritization": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "InfobarPrioritization"
- ]
- }
- ]
- }
- ],
- "InfobarRefresh": [
+ "InfoBarPrioritizationAndUIRefresh": [
{
"platforms": [
"chromeos",
@@ -14742,7 +14620,14 @@
"experiments": [
{
"name": "Enabled",
+ "params": {
+ "kMaxLowQueued": "1",
+ "kMaxVisibleCritical": "2",
+ "kMaxVisibleDefault": "1",
+ "kMaxVisibleLow": "1"
+ },
"enable_features": [
+ "InfobarPrioritization",
"InfobarRefresh"
]
}
@@ -14799,6 +14684,45 @@
]
}
],
+ "InitFeatureListEarly": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled_InitFeatureListEarly",
+ "params": {
+ "init_feature_list_early": "true"
+ },
+ "enable_features": [
+ "LoadNativeEarly"
+ ]
+ },
+ {
+ "name": "Enabled_InitFeatureListLate",
+ "enable_features": [
+ "LoadNativeEarly"
+ ]
+ }
+ ]
+ }
+ ],
+ "InitializePoliciesForSignedInUserInNewEntryPoints": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "InitializePoliciesForSignedInUserInNewEntryPoints"
+ ]
+ }
+ ]
+ }
+ ],
"InlineFullscreenPerfExperiment": [
{
"platforms": [
@@ -14888,9 +14812,9 @@
],
"experiments": [
{
- "name": "EnabledJustInTime",
+ "name": "EnabledRetroactive",
"params": {
- "is_retroactive": "false"
+ "is_retroactive": "true"
},
"enable_features": [
"InvalidateSearchEngineChoiceOnDeviceRestoreDetection"
@@ -14915,6 +14839,26 @@
]
}
],
+ "IsolatesPriorityUseProcessPriority": [
+ {
+ "platforms": [
+ "android_webview",
+ "android",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "IsolatesPriorityUseProcessPriority"
+ ]
+ }
+ ]
+ }
+ ],
"JavaScriptPermissionBasedAPIMetricsEnabled": [
{
"platforms": [
@@ -14930,6 +14874,43 @@
]
}
],
+ "JavalessRenderers": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "JavalessRenderers"
+ ]
+ }
+ ]
+ }
+ ],
+ "JobPriorityBoosting": [
+ {
+ "platforms": [
+ "android",
+ "android_weblayer",
+ "android_webview",
+ "chromeos",
+ "fuchsia",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "JobPriorityBoosting"
+ ]
+ }
+ ]
+ }
+ ],
"JumpStartOmnibox": [
{
"platforms": [
@@ -15365,22 +15346,16 @@
]
}
],
- "LanguageDetectionAPI": [
+ "LaunchCauseScreenOffFix": [
{
"platforms": [
- "android_webview",
- "android",
- "chromeos",
- "ios",
- "linux",
- "mac",
- "windows"
+ "android"
],
"experiments": [
{
"name": "Enabled",
"enable_features": [
- "LanguageDetectionAPI"
+ "LaunchCauseScreenOffFix"
]
}
]
@@ -15443,6 +15418,26 @@
]
}
],
+ "LevelDBCacheSize": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows",
+ "android_webview"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "LevelDBCacheSize"
+ ]
+ }
+ ]
+ }
+ ],
"LibraryPrefetcherMadvise": [
{
"platforms": [
@@ -15546,21 +15541,6 @@
]
}
],
- "LoadNativeEarly": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "LoadNativeEarly"
- ]
- }
- ]
- }
- ],
"LoadingPredictorLimitPreconnectSocketCount": [
{
"platforms": [
@@ -15672,6 +15652,25 @@
]
}
],
+ "LocationBarBadge": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "params": {
+ "PopupBlocker": "false"
+ },
+ "enable_features": [
+ "AskGeminiChip",
+ "ProactiveSuggestionsFramework"
+ ]
+ }
+ ]
+ }
+ ],
"LofnPermissiveUsbPassthrough": [
{
"platforms": [
@@ -15757,20 +15756,17 @@
]
}
],
- "LowPriorityAsyncScriptExecution": [
+ "LowerPriorityForCompositorGestures": [
{
"platforms": [
"android",
- "android_webview",
- "linux",
- "mac",
- "windows"
+ "android_webview"
],
"experiments": [
{
"name": "Enabled",
"enable_features": [
- "LowPriorityAsyncScriptExecution"
+ "LowerPriorityForCompositorGestures"
]
}
]
@@ -15860,6 +15856,27 @@
]
}
],
+ "MainIdleBypassSchedulerExperiment": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "fuchsia",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "MainIdleBypassScheduler"
+ ]
+ }
+ ]
+ }
+ ],
"MainNodeAnnotationsRollout": [
{
"platforms": [
@@ -15893,27 +15910,6 @@
]
}
],
- "MakeMemoryPressureListenerSync": [
- {
- "platforms": [
- "android_webview",
- "android",
- "chromeos",
- "ios",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "MakeMemoryPressureListenerSync"
- ]
- }
- ]
- }
- ],
"MaliciousApkDownloadCheck": [
{
"platforms": [
@@ -16050,18 +16046,21 @@
"android"
],
"experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "MediaIndicatorsAndroid"
- ]
- },
{
"name": "EnabledWithEnhancedAudioResponsiveness",
"enable_features": [
"EnableAudioMonitoringOnAndroid",
"MediaIndicatorsAndroid"
]
+ },
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "MediaIndicatorsAndroid"
+ ],
+ "disable_features": [
+ "EnableAudioMonitoringOnAndroid"
+ ]
}
]
}
@@ -16124,7 +16123,7 @@
{
"name": "Enabled",
"enable_features": [
- "MemoryCoordinatorLastChanceGC"
+ "MemoryCoordinatorLastResortGC"
]
}
]
@@ -16316,7 +16315,39 @@
]
}
],
- "MobilePromoOnDesktop": [
+ "MobilePromoOnDesktopDataCollection": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "MobilePromoOnDesktopRecordActiveDays"
+ ]
+ }
+ ]
+ }
+ ],
+ "MobilePromoOnDesktopWithQRCode": [
+ {
+ "platforms": [
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "MobilePromoOnDesktopWithQRCode"
+ ]
+ }
+ ]
+ }
+ ],
+ "MobilePromoOnDesktopWithReminder": [
{
"platforms": [
"ios",
@@ -16328,22 +16359,7 @@
{
"name": "Enabled",
"enable_features": [
- "MobilePromoOnDesktop"
- ]
- }
- ]
- }
- ],
- "MobilePromoOnDesktopDataCollection": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "MobilePromoOnDesktopRecordActiveDays"
+ "MobilePromoOnDesktopWithReminder"
]
}
]
@@ -16370,27 +16386,6 @@
]
}
],
- "MojoInlineMessagePayloads2": [
- {
- "platforms": [
- "android",
- "chromeos",
- "fuchsia",
- "ios",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "MojoInlineMessagePayloads"
- ]
- }
- ]
- }
- ],
"MojoUseEventFd": [
{
"platforms": [
@@ -16421,6 +16416,21 @@
]
}
],
+ "MoveToFrontInLaunchIntentDispatcher": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "MoveToFrontInLaunchIntentDispatcher"
+ ]
+ }
+ ]
+ }
+ ],
"MultiCalendarSupport": [
{
"platforms": [
@@ -16498,7 +16508,10 @@
"name": "Version7",
"params": {
"version": "7"
- }
+ },
+ "enable_features": [
+ "NTPPopularSites"
+ ]
}
]
}
@@ -16910,6 +16923,7 @@
"name": "Enabled",
"params": {
"NotificationTelemetrySwbPollingInterval": "60",
+ "NotificationTelemetrySwbReportingProbability": "1.0",
"NotificationTelemetrySwbSendReports": "true"
},
"enable_features": [
@@ -16961,7 +16975,7 @@
{
"name": "Enabled",
"params": {
- "promo-type": "setuplist"
+ "promo-type": "simple"
},
"enable_features": [
"EnableNtpBrowserPromos"
@@ -16974,7 +16988,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -17046,7 +17059,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -17056,7 +17068,19 @@
"name": "Enabled",
"params": {
"CyclingPlaceholders": "true",
- "RealboxLayoutMode": "TallBottomContext"
+ "RealboxLayoutMode": "TallTopContext"
+ },
+ "enable_features": [
+ "IPH_DesktopRealboxContextualSearchFeature",
+ "NtpRealboxNext"
+ ]
+ },
+ {
+ "name": "Enabled_Compact_Multiline",
+ "params": {
+ "CyclingPlaceholders": "true",
+ "MultiLineEnabled": "true",
+ "RealboxLayoutMode": "Compact"
},
"enable_features": [
"NtpRealboxNext"
@@ -17477,21 +17501,6 @@
]
}
],
- "OmniboxMobileParityUpdateV3": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "OmniboxMobileParityUpdateV3"
- ]
- }
- ]
- }
- ],
"OmniboxMultimodalInput": [
{
"platforms": [
@@ -17585,6 +17594,24 @@
]
}
],
+ "OnBeginFrameThrottleVideoDesktop": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "OnBeginFrameThrottleVideo"
+ ]
+ }
+ ]
+ }
+ ],
"OnDeviceNotificationContentDetectionModelv2": [
{
"platforms": [
@@ -17961,6 +17988,7 @@
"params": {
"ai_mode": "true",
"autofill_address": "true",
+ "bookmark_star": "true",
"click_to_call": "true",
"collaboration_messaging": "true",
"cookie_controls": "true",
@@ -17978,6 +18006,7 @@
"price_insights": "true",
"price_tracking": "true",
"pwa_install": "true",
+ "reading_mode": "true",
"save_payments": "true",
"sharing_hub": "true",
"translate": "true",
@@ -18079,7 +18108,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -18455,7 +18483,7 @@
]
}
],
- "PasskeyUnlockErrorUi": [
+ "PasskeyUnlockManager": [
{
"platforms": [
"chromeos",
@@ -18463,35 +18491,11 @@
"mac",
"windows"
],
- "experiments": [
- {
- "name": "Enabled_with_unlock_wording_20251209",
- "params": {
- "passkey_unlock_ui_experiment_arm": "text_with_unlock_wording"
- },
- "enable_features": [
- "PasskeyUnlockErrorUi",
- "PasskeyUnlockManager"
- ]
- }
- ]
- }
- ],
- "PasswordFormGroupedAffiliations": [
- {
- "platforms": [
- "android",
- "chromeos",
- "chromeos_lacros",
- "linux",
- "mac",
- "windows"
- ],
"experiments": [
{
"name": "Enabled",
"enable_features": [
- "PasswordFormGroupedAffiliations"
+ "PasskeyUnlockManager"
]
}
]
@@ -18628,10 +18632,7 @@
"PdfOutOfProcessIframe": [
{
"platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
+ "chromeos"
],
"experiments": [
{
@@ -18712,6 +18713,9 @@
"experiments": [
{
"name": "Enabled",
+ "params": {
+ "premultiplied-alpha": "true"
+ },
"enable_features": [
"PdfUseSkiaRenderer"
]
@@ -19166,6 +19170,36 @@
]
}
],
+ "PermissionsAndroidClapperLoud": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "PermissionsAndroidClapperLoud"
+ ]
+ }
+ ]
+ }
+ ],
+ "PermissionsAndroidClapperQuiet": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "PermissionsAndroidClapperQuiet"
+ ]
+ }
+ ]
+ }
+ ],
"PersistentDefaultBrowserPromo": [
{
"platforms": [
@@ -19572,7 +19606,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -19604,25 +19637,6 @@
]
}
],
- "PreconnectNonSearchOmniboxSuggestions": [
- {
- "platforms": [
- "android",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "PreconnectNonSearchOmniboxSuggestions"
- ]
- }
- ]
- }
- ],
"PreconnectToSearchDesktop": [
{
"platforms": [
@@ -19737,29 +19751,6 @@
]
}
],
- "PrefetchScheduler": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "kPrefetchSchedulerProgressSyncBestEffort": "true"
- },
- "enable_features": [
- "PrefetchScheduler"
- ]
- }
- ]
- }
- ],
"PrefetchServiceWorkerNoFetchHandlerFix": [
{
"platforms": [
@@ -19964,26 +19955,6 @@
]
}
],
- "PrerenderSiteInstanceProcessPerDSE": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ConsiderDSEWarmUpPageAsSRP",
- "CreatePrerenderSiteInstanceWithURL"
- ],
- "disable_features": []
- }
- ]
- }
- ],
"PreserveDiscardableImageMapQuality": [
{
"platforms": [
@@ -20171,25 +20142,6 @@
]
}
],
- "PrivacySandboxDisableNotices": [
- {
- "platforms": [
- "linux",
- "windows",
- "android",
- "mac",
- "chromeos"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "DisablePrivacySandboxPrompts"
- ]
- }
- ]
- }
- ],
"PrivacySandboxInternalsDevUI": [
{
"platforms": [
@@ -20209,24 +20161,6 @@
]
}
],
- "PrivacySandboxNoticeQueue": [
- {
- "platforms": [
- "linux",
- "windows",
- "mac",
- "chromeos"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "PrivacySandboxNoticeQueue"
- ]
- }
- ]
- }
- ],
"PrivacySandboxSentimentSurvey": [
{
"platforms": [
@@ -20254,7 +20188,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"fuchsia",
"linux",
"mac",
@@ -20290,6 +20223,22 @@
]
}
],
+ "PrivateUserMetricsForRegionalCapabilities": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "PrivateMetricsPuma",
+ "PrivateMetricsPumaRc"
+ ]
+ }
+ ]
+ }
+ ],
"ProbeStylusWritingInBackground": [
{
"platforms": [
@@ -20450,7 +20399,7 @@
]
}
],
- "ProfileExperimentsM1Usability": [
+ "ProfileExperimentsM1UsabilityHypothesis": [
{
"platforms": [
"linux",
@@ -20520,6 +20469,29 @@
]
}
],
+ "ProgressiveAccessibility2": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "params": {
+ "progressive_accessibility_mode": "disable_on_hide"
+ },
+ "enable_features": [
+ "ProgressiveAccessibility"
+ ]
+ }
+ ]
+ }
+ ],
"PropagateWebViewNetworkingSignals": [
{
"platforms": [
@@ -20627,26 +20599,6 @@
]
}
],
- "PurgeVariationsSeedFromMemory": [
- {
- "platforms": [
- "android",
- "ios",
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "PurgeVariationsSeedFromMemory"
- ]
- }
- ]
- }
- ],
"PushMessagingDisallowSenderIDs": [
{
"platforms": [
@@ -20875,6 +20827,57 @@
]
}
],
+ "ReadAnythingLineFocusExperiment": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ReadAnythingLineFocus"
+ ]
+ },
+ {
+ "name": "Enabled_Dogfood",
+ "enable_features": [
+ "ReadAnythingLineFocus"
+ ]
+ },
+ {
+ "name": "Disabled",
+ "disable_features": [
+ "ReadAnythingLineFocus"
+ ]
+ }
+ ]
+ }
+ ],
+ "ReadAnythingMenuShuffleExperiment": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "EnabledWithSeparation",
+ "params": {
+ "read_anything_menu_shuffle_group_name": "MenuShuffleSeparation"
+ },
+ "enable_features": [
+ "ReadAnythingMenuShuffleExperiment"
+ ]
+ }
+ ]
+ }
+ ],
"ReadAnythingReadAloudPhraseHighlighting": [
{
"platforms": [
@@ -20923,52 +20926,10 @@
]
}
],
- "ReclaimOldPrepaintTiles": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "fuchsia",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ReclaimOldPrepaintTiles"
- ]
- }
- ]
- }
- ],
- "ReclaimPrepaintTilesWhenIdle": [
- {
- "platforms": [
- "android",
- "chromeos",
- "fuchsia",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ReclaimPrepaintTilesWhenIdle"
- ]
- }
- ]
- }
- ],
"RedWarningSurvey": [
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -21189,6 +21150,21 @@
]
}
],
+ "RemoveCachedProcessFromBindingManager": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "RemoveCachedProcessFromBindingManager"
+ ]
+ }
+ ]
+ }
+ ],
"RemoveDataUrlInSvgUse": [
{
"platforms": [
@@ -21223,6 +21199,26 @@
]
}
],
+ "RemoveGraphicsUKMs": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Disabled",
+ "disable_features": [
+ "ReportUkm"
+ ]
+ }
+ ]
+ }
+ ],
"RemoveGreySnapshot": [
{
"platforms": [
@@ -21340,22 +21336,25 @@
]
}
],
- "RenderDocumentWithNavigationQueueing_WebView": [
+ "RenderDocument_WebView": [
{
"platforms": [
"android_webview"
],
"experiments": [
{
- "name": "EnabledAllFrames",
+ "name": "EnabledAllFrames_SkipThrottle_20251216",
"params": {
- "level": "all-frames",
- "queueing_level": "full"
+ "level": "all-frames"
},
"enable_features": [
"RenderDocument",
+ "SkipRendererCancellationThrottle",
"WebViewAsyncDrawOnly",
"WebViewRenderDocument"
+ ],
+ "disable_features": [
+ "RendererCancellationThrottleImprovements"
]
}
]
@@ -21463,22 +21462,6 @@
]
}
],
- "ResetTamperedDefaultSearchEngine": [
- {
- "platforms": [
- "windows",
- "mac"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ResetTamperedDefaultSearchEngine"
- ]
- }
- ]
- }
- ],
"ResolutionBasedDecoderPriority": [
{
"platforms": [
@@ -21536,6 +21519,22 @@
]
}
],
+ "RestrictMainThreadBigCoreAffinity": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "RestrictBigCoreThreadAffinity",
+ "RestrictMainThreadBigCoreAffinity"
+ ]
+ }
+ ]
+ }
+ ],
"RestrictPendingInputEventTypeToBlockMainThread": [
{
"platforms": [
@@ -21649,7 +21648,6 @@
"ResumeNavigationWithSpeculativeRFHProcessGone": [
{
"platforms": [
- "android",
"android_webview",
"chromeos",
"linux",
@@ -21698,21 +21696,6 @@
]
}
],
- "ReturnDeniedForNotificationsWhenNoAppLevelSettings": [
- {
- "platforms": [
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "ReturnDeniedForNotificationsWhenNoAppLevelSettings"
- ]
- }
- ]
- }
- ],
"RichInlineAutocompleteIOS": [
{
"platforms": [
@@ -21806,21 +21789,6 @@
]
}
],
- "SafeBrowsingExtendedReportingRemovePrefDependencyIos": [
- {
- "platforms": [
- "ios"
- ],
- "experiments": [
- {
- "name": "EnabledRemovePrefDependencyIos",
- "enable_features": [
- "ExtendedReportingRemovePrefDependencyIos"
- ]
- }
- ]
- }
- ],
"SafeBrowsingExtensionTelemetrySearchHijackingSignal": [
{
"platforms": [
@@ -21921,15 +21889,15 @@
],
"experiments": [
{
- "name": "Enabled_Moderate_v1",
+ "name": "Enabled_Conservative_14d",
"params": {
- "experiment_version": "1",
+ "experiment_version": "2",
"max_engagement_score": "0.0",
"min_engagement_score_delta": "3.0",
- "min_notification_count": "4",
+ "min_notification_count": "6",
"shadow_run": "false",
"waiting_for_metrics_days": "1",
- "waiting_time_as_proposed": "1d"
+ "waiting_time_as_proposed": "14d"
},
"enable_features": [
"SafetyHubDisruptiveNotificationRevocation"
@@ -21964,7 +21932,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"fuchsia",
"linux",
"mac",
@@ -22031,7 +21998,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -23266,12 +23232,30 @@
]
}
],
+ "SeamlessSigninClank": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "EnabledCompactContinue",
+ "params": {
+ "seamless-signin-promo-type": "compact",
+ "seamless-signin-string-type": "continueButton"
+ },
+ "enable_features": [
+ "EnableSeamlessSignin"
+ ]
+ }
+ ]
+ }
+ ],
"SearchEngineChoiceClearInvalidPref": [
{
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -23292,7 +23276,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -23378,11 +23361,26 @@
]
}
],
+ "SecurePaymentConfirmationUxRefresh": [
+ {
+ "platforms": [
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "SecurePaymentConfirmationUxRefresh"
+ ]
+ }
+ ]
+ }
+ ],
"SecurityPageHats": [
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -23464,29 +23462,6 @@
]
}
],
- "SendTabToSelfIOSPushNotifications": [
- {
- "platforms": [
- "android",
- "chromeos",
- "ios",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "params": {
- "variant_with_magic_stack_card": "true"
- },
- "enable_features": [
- "SendTabToSelfIOSPushNotifications"
- ]
- }
- ]
- }
- ],
"SensitiveContent": [
{
"platforms": [
@@ -23541,27 +23516,6 @@
]
}
],
- "SeparateDeferModuleScriptTasks": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "fuchsia",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "SeparateDeferModuleScriptTasks"
- ]
- }
- ]
- }
- ],
"ServerBasedTranscriptionForScreencast": [
{
"platforms": [
@@ -23595,10 +23549,9 @@
"enable_only_when_service_worker_not_running": "true",
"enable_subresource_preload": "false",
"has_web_request_api_proxy": "true",
- "respect_navigation_preload": "true",
- "use_allowlist": "false"
+ "respect_navigation_preload": "true"
},
- "disable_features": [
+ "enable_features": [
"ServiceWorkerAutoPreload"
]
}
@@ -23691,12 +23644,31 @@
]
}
],
+ "ServiceWorkerSubresourceCancelPendingCallbacksBeforeFetchRestart": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "fuchsia",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "CancelPendingCallbacksBeforeFetchRestart"
+ ]
+ }
+ ]
+ }
+ ],
"ServiceWorkerSyntheticResponse": [
{
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"fuchsia",
"linux",
"mac",
@@ -23831,30 +23803,6 @@
]
}
],
- "SharedDictionaryCache": [
- {
- "platforms": [
- "android",
- "android_webview",
- "chromeos",
- "chromeos_lacros",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled2_20250520",
- "params": {
- "cache_size": "2"
- },
- "enable_features": [
- "SharedDictionaryCache"
- ]
- }
- ]
- }
- ],
"SharedHighlightingIphClank": [
{
"platforms": [
@@ -24045,7 +23993,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"ios",
"linux",
"mac",
@@ -24106,36 +24053,6 @@
]
}
],
- "SideBySide": [
- {
- "platforms": [
- "chromeos"
- ],
- "experiments": [
- {
- "name": "Enabled_WithClose",
- "params": {
- "drop_target_nudge_to_full_max_width": "360",
- "drop_target_nudge_to_full_min_width": "120",
- "drop_target_nudge_to_full_width_percentage": "15",
- "drop_target_show_delay": "1400ms",
- "drop_target_width_percentage": "15",
- "mini_toolbar_active_config": "showclose"
- },
- "enable_features": [
- "CloseActiveTabInSplitViewViaHotkey",
- "IPH_SideBySidePinnableFeature",
- "IPH_SideBySideTabSwitchFeature",
- "ReloadSelectionModel",
- "SideBySide",
- "SideBySideDropTargetNudge",
- "SideBySideLinkMenuNewBadge",
- "SideBySideSessionRestore"
- ]
- }
- ]
- }
- ],
"SidePanelCompanionDesktopM116Plus": [
{
"platforms": [
@@ -24234,6 +24151,25 @@
]
}
],
+ "SimdutfBase64Encode": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "SimdutfBase64Encode"
+ ]
+ }
+ ]
+ }
+ ],
"SimpleCachePrioritizedCaching": [
{
"platforms": [
@@ -24473,6 +24409,9 @@
"experiments": [
{
"name": "Enabled",
+ "params": {
+ "delay": "100ms"
+ },
"enable_features": [
"SkipPagehideInCommitForDSENavigation"
]
@@ -24515,7 +24454,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -24554,6 +24492,21 @@
]
}
],
+ "SmoothBrowserControlsScrollAnimation": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled_20260106",
+ "enable_features": [
+ "BrowserControlsSmoothScroll"
+ ]
+ }
+ ]
+ }
+ ],
"SnapshotInSwift": [
{
"platforms": [
@@ -24688,7 +24641,6 @@
"platforms": [
"android",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -24843,6 +24795,27 @@
]
}
],
+ "StaticStorageQuota": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "StaticStorageQuota"
+ ]
+ }
+ ]
+ }
+ ],
"StickyActivationTest": [
{
"platforms": [
@@ -25080,6 +25053,26 @@
]
}
],
+ "SymphoniaAudioDecoding": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "SymphoniaAudioDecoding"
+ ]
+ }
+ ]
+ }
+ ],
"SyncBookmarksLimit": [
{
"platforms": [
@@ -25146,26 +25139,6 @@
]
}
],
- "SyncUseOsCryptAsync": [
- {
- "platforms": [
- "android",
- "chromeos",
- "ios",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "SyncUseOsCryptAsync"
- ]
- }
- ]
- }
- ],
"SysPkJPandVKMv3": [
{
"platforms": [
@@ -25391,13 +25364,16 @@
],
"experiments": [
{
- "name": "Enabled_20250430",
+ "name": "Enabled",
"params": {
"consecutive_computation_delay_sec": "0",
"create_suggestions_promotion_ui": "false",
"group_suggestion_enable_similar_source": "true",
"group_suggestion_enable_switch_between": "true",
- "group_suggestion_trigger_calculation_on_page_load": "false"
+ "group_suggestion_enable_tab_switcher_only": "false",
+ "group_suggestion_trigger_calculation_on_page_load": "false",
+ "show_when_not_clicked_in_last_day": "false",
+ "throttle_on_new_tab": "false"
},
"enable_features": [
"ContextualPageActionTabGrouping",
@@ -25701,24 +25677,22 @@
{
"name": "ThreeButtonPasswordSaveDialog",
"enable_features": [
- "ThreeButtonPasswordSaveDialog"
- ],
- "disable_features": [
"IPH_PasswordsSavePrimingPromo",
- "IPH_PasswordsSaveRecoveryPromo"
+ "IPH_PasswordsSaveRecoveryPromo",
+ "ThreeButtonPasswordSaveDialog"
]
}
]
}
],
- "ThrottleMainFrameTo60HzV2": [
+ "ThrottleMainFrameTo60HzMacV2": [
{
"platforms": [
- "android"
+ "mac"
],
"experiments": [
{
- "name": "ThrottledUrgentInput_20250325",
+ "name": "Enabled",
"enable_features": [
"ThrottleMainFrameTo60Hz",
"UrgentMainFrameForInput"
@@ -25727,6 +25701,22 @@
]
}
],
+ "ThrottleMainFrameTo60HzWebView": [
+ {
+ "platforms": [
+ "android_webview"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "ThrottleMainFrameTo60HzWebView",
+ "UrgentMainFrameForInput"
+ ]
+ }
+ ]
+ }
+ ],
"TokenHandleRefactoring": [
{
"platforms": [
@@ -26182,37 +26172,22 @@
]
}
],
- "UnimportantFramePolicy": [
+ "UnlockDuringGpuImageOperations": [
{
"platforms": [
- "android_webview",
"android",
+ "android_webview",
"chromeos",
+ "fuchsia",
"linux",
"mac",
"windows"
],
"experiments": [
{
- "name": "IsolatesPriority",
+ "name": "Enabled",
"enable_features": [
- "IsolatesPriorityBestEffortWhenHidden",
- "IsolatesPriorityUseProcessPriority",
- "UnimportantFramesPriority"
- ],
- "disable_features": [
- "RestrictThreadPoolInBackground",
- "UserVisibleProcessPriority"
- ]
- },
- {
- "name": "All",
- "enable_features": [
- "IsolatesPriorityBestEffortWhenHidden",
- "IsolatesPriorityUseProcessPriority",
- "RestrictThreadPoolInBackground",
- "UnimportantFramesPriority",
- "UserVisibleProcessPriority"
+ "UnlockDuringGpuImageOperations"
]
}
]
@@ -26256,6 +26231,21 @@
]
}
],
+ "UpdateInstanceLimitDefinition": [
+ {
+ "platforms": [
+ "android"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "RobustWindowManagement"
+ ]
+ }
+ ]
+ }
+ ],
"UpdateIsMainFrameOriginRecentlyAccessedStudy": [
{
"platforms": [
@@ -26308,22 +26298,6 @@
]
}
],
- "UseAdHocSigningForWebAppShims": [
- {
- "platforms": [
- "mac"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "MachPortRendezvousValidatePeerRequirements",
- "UseAdHocSigningForWebAppShims"
- ]
- }
- ]
- }
- ],
"UseBoringSSLForRandBytes": [
{
"platforms": [
@@ -26490,39 +26464,6 @@
]
}
],
- "UseIsUnboundCheck": [
- {
- "platforms": [
- "android",
- "android_webview"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "UseIsUnboundCheck"
- ]
- }
- ]
- }
- ],
- "UseIssueTokenToFetchAccessTokens": [
- {
- "platforms": [
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "UseIssueTokenToFetchAccessTokens"
- ]
- }
- ]
- }
- ],
"UseLastVisitedFallbackURLFavicon": [
{
"platforms": [
@@ -26542,6 +26483,22 @@
]
}
],
+ "UseLockFreeX509Verification": [
+ {
+ "platforms": [
+ "android",
+ "android_webview"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "UseLockFreeX509Verification"
+ ]
+ }
+ ]
+ }
+ ],
"UsePersistentCacheForCodeCache": [
{
"platforms": [
@@ -26561,6 +26518,24 @@
]
}
],
+ "UsePrimaryAndTonalButtonsForPromos": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "UsePrimaryAndTonalButtonsForPromos"
+ ]
+ }
+ ]
+ }
+ ],
"UseSCContentSharingPicker": [
{
"platforms": [
@@ -26616,21 +26591,6 @@
]
}
],
- "UseTerminationStatusMemoryExhaustion": [
- {
- "platforms": [
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "UseTerminationStatusMemoryExhaustion"
- ]
- }
- ]
- }
- ],
"UserBypassUI": [
{
"platforms": [
@@ -26653,27 +26613,6 @@
]
}
],
- "UserEducationExperienceVersion2Point5": [
- {
- "platforms": [
- "chromeos",
- "linux",
- "mac",
- "windows"
- ],
- "experiments": [
- {
- "name": "EnabledWithMediumIdleTimeout",
- "params": {
- "idle_before_heavyweight": "2s"
- },
- "enable_features": [
- "UserEducationExperienceVersion2Point5"
- ]
- }
- ]
- }
- ],
"UserLevelMemoryPressureSignal": [
{
"platforms": [
@@ -26705,6 +26644,23 @@
]
}
],
+ "UserValueDefaultBrowserStrings": [
+ {
+ "platforms": [
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "UserValueDefaultBrowserStrings"
+ ]
+ }
+ ]
+ }
+ ],
"V8CodeFlushing": [
{
"platforms": [
@@ -26731,6 +26687,26 @@
]
}
],
+ "V8DisableEagerAllocationFailures": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "fuchsia",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "V8Flag_disable_eager_allocation_failures"
+ ]
+ }
+ ]
+ }
+ ],
"V8DisableScavengerUpdatesAllocationLimit": [
{
"platforms": [
@@ -26806,9 +26782,8 @@
],
"experiments": [
{
- "name": "HighSizeAndCpuThreshold",
+ "name": "HighSizeThreshold",
"params": {
- "ineffective_gc_mutator_utilization_threshold": "0.2",
"ineffective_gc_size_threshold": "0.95"
},
"enable_features": [
@@ -26866,6 +26841,7 @@
{
"platforms": [
"android",
+ "android_webview",
"chromeos",
"linux",
"mac",
@@ -27128,6 +27104,30 @@
]
}
],
+ "VariationsStickyPersistence": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "PersistViaCommitWrite_20260107",
+ "params": {
+ "persistence_type": "commit"
+ },
+ "enable_features": [
+ "VariationsStickyPersistence"
+ ]
+ }
+ ]
+ }
+ ],
"VerifyDidCommitParams": [
{
"platforms": [
@@ -27280,6 +27280,26 @@
]
}
],
+ "VisitedLinksOn404": [
+ {
+ "platforms": [
+ "android",
+ "chromeos",
+ "ios",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "VisitedLinksOn404"
+ ]
+ }
+ ]
+ }
+ ],
"VisitedURLRankingService": [
{
"platforms": [
@@ -27485,30 +27505,6 @@
]
}
],
- "WebGPU": [
- {
- "platforms": [
- "chromeos",
- "mac",
- "windows",
- "android"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "WebGPUService"
- ]
- },
- {
- "name": "Disabled",
- "disable_features": [
- "WebGPUService"
- ]
- }
- ]
- }
- ],
"WebGPUEnableRangeAnalysisForRobustness": [
{
"platforms": [
@@ -27651,6 +27647,21 @@
]
}
],
+ "WebRTC-Agc2MaxSpeechLevelExperimental": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled"
+ }
+ ]
+ }
+ ],
"WebRTC-Agc2SpeechLevelEstimatorExperimental": [
{
"platforms": [
@@ -27818,7 +27829,6 @@
"android",
"android_webview",
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -27833,6 +27843,21 @@
]
}
],
+ "WebRTC-EncoderSpeed": [
+ {
+ "platforms": [
+ "chromeos",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "dynamic_speed:true,av1_camera:higher"
+ }
+ ]
+ }
+ ],
"WebRTC-IPv6NetworkResolutionFixes": [
{
"platforms": [
@@ -27882,6 +27907,24 @@
]
}
],
+ "WebRTC-RFC8888CongestionControlFeedback": [
+ {
+ "platforms": [
+ "android",
+ "android_webview",
+ "chromeos",
+ "fuchsia",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled,_20251209"
+ }
+ ]
+ }
+ ],
"WebRTC-SendBufferSizeBytes": [
{
"platforms": [
@@ -27938,7 +27981,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -28469,6 +28511,21 @@
]
}
],
+ "WebViewNewInvalidateHeuristicForTV": [
+ {
+ "platforms": [
+ "android_webview"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "WebViewNewInvalidateHeuristicForTV"
+ ]
+ }
+ ]
+ }
+ ],
"WebViewOptInToGmsBindServiceOptimization": [
{
"platforms": [
@@ -28659,7 +28716,7 @@
]
}
],
- "WebViewSurfaceControlForTV": [
+ "WebViewStopBrowserStartupInIsMultiProcessEnabled": [
{
"platforms": [
"android_webview"
@@ -28667,14 +28724,8 @@
"experiments": [
{
"name": "Enabled",
- "params": {
- "RelaxLimitAImageReaderMaxSizeToOneBlocklist": "*Broadcom*|*Google*",
- "RelaxLimitAImageReaderMaxSizeToOneManufacturerBlocklist": "*Broadcom*|*Google*",
- "RelaxLimitAImageReaderMaxSizeToOneSoCBlocklist": "*Broadcom*"
- },
"enable_features": [
- "RelaxLimitAImageReaderMaxSizeToOne",
- "WebViewSurfaceControlForTV"
+ "WebViewStopBrowserStartupInIsMultiProcessEnabled"
]
}
]
@@ -28835,6 +28886,27 @@
]
}
],
+ "WelcomeBack": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "params": {
+ "WelcomeBackParam": "1"
+ },
+ "enable_features": [
+ "WelcomeBack"
+ ],
+ "disable_features": [
+ "BestFeaturesScreenInFirstRunExperience"
+ ]
+ }
+ ]
+ }
+ ],
"WhatsNewHats": [
{
"platforms": [
@@ -28931,7 +29003,6 @@
{
"platforms": [
"chromeos",
- "chromeos_lacros",
"linux",
"mac",
"windows"
@@ -28962,21 +29033,6 @@
]
}
],
- "WinSboxNoDbghelpWarmup": [
- {
- "platforms": [
- "windows"
- ],
- "experiments": [
- {
- "name": "Enabled",
- "enable_features": [
- "WinSboxNoDbghelpWarmup"
- ]
- }
- ]
- }
- ],
"WinSboxNoFakeGdiInit": [
{
"platforms": [
@@ -29036,8 +29092,11 @@
"experiments": [
{
"name": "Disabled",
- "disable_features": [
+ "enable_features": [
"XSLTSpecialTrial"
+ ],
+ "disable_features": [
+ "XSLT"
]
}
]
@@ -29091,7 +29150,6 @@
{
"name": "Enable",
"enable_features": [
- "AutofillAiIgnoresWhetherAddressPrefIsEnabled",
"YourSavedInfoSettingsPage"
]
}
diff --git a/tools/under-control/src/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/tools/under-control/src/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
index 5d47e6bd..abdc88b6 100755
--- a/tools/under-control/src/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
+++ b/tools/under-control/src/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3435,7 +3435,7 @@ enum WebFeature {
kOBSOLETE_BlobStoreAccessAcrossTopLevelSite = 4169,
kOBSOLETE_BlobStoreAccessUnknownTopLevelSite = 4170,
kCrossOriginAccessBasedOnDocumentDomain = 4171,
- kCookieWithTruncatingChar = 4172,
+ kOBSOLETE_CookieWithTruncatingChar = 4172,
kVideoTrackGenerator = 4173,
kMediaCapabilitiesDecodingInfoWebrtc = 4174,
kMediaCapabilitiesEncodingInfoWebrtc = 4175,
@@ -3994,7 +3994,7 @@ enum WebFeature {
kStorageAccessAPI_requestStorageAccess_BeyondCookies_locks_Use = 4707,
kOBSOLETE_RubyElementWithDisplayBlockAndRt = 4708,
kOBSOLETE_CSSDeclarationAfterNestedRule = 4709,
- kThirdPartyCookieAdAccessBlockByExperiment = 4710,
+ kOBSOLETE_ThirdPartyCookieAdAccessBlockByExperiment = 4710,
// The items above roughly this point are available in the M120 branch.
kServiceWorkerStaticRouter_AddRoutes = 4711,
kStorageAccessAPI_requestStorageAccess_BeyondCookies_caches = 4712,
@@ -4019,13 +4019,13 @@ enum WebFeature {
kStorageAccessAPI_requestStorageAccess_BeyondCookies_BroadcastChannel = 4729,
kStorageAccessAPI_requestStorageAccess_BeyondCookies_BroadcastChannel_Use =
4730,
- kThirdPartyCookieDeprecation_AllowByExplicitSetting = 4731,
- kThirdPartyCookieDeprecation_AllowByGlobalSetting = 4732,
- kThirdPartyCookieDeprecation_AllowBy3PCDMetadata = 4733,
- kThirdPartyCookieDeprecation_AllowBy3PCD = 4734,
- kThirdPartyCookieDeprecation_AllowBy3PCDHeuristics = 4735,
- kThirdPartyCookieDeprecation_AllowByStorageAccess = 4736,
- kThirdPartyCookieDeprecation_AllowByTopLevelStorageAccess = 4737,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowByExplicitSetting = 4731,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowByGlobalSetting = 4732,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowBy3PCDMetadata = 4733,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowBy3PCD = 4734,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowBy3PCDHeuristics = 4735,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowByStorageAccess = 4736,
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowByTopLevelStorageAccess = 4737,
kIframeAdAuctionHeadersAttribute = 4738,
kAutoSpeculationRulesOptedOut = 4739,
kOverrideFlashEmbedwithHTML = 4740,
@@ -4066,7 +4066,7 @@ enum WebFeature {
kEffectiveAlignContentForTableCell = 4774,
kUserFeatureNgOptimizedImage = 4775,
kCSSAtRulePageMargin = 4776,
- kThirdPartyCookieDeprecation_AllowByEnterprisePolicyCookieAllowedForUrls =
+ kOBSOLETE_ThirdPartyCookieDeprecation_AllowByEnterprisePolicyCookieAllowedForUrls =
4777,
kUserFeatureNgAfterRender = 4778,
kUserFeatureNgHydration = 4779,
@@ -4167,7 +4167,7 @@ enum WebFeature {
kDOMClobberedNotShadowedDocumentPropertyAccessed = 4873,
kDOMClobberedShadowedFormPropertyAccessed = 4874,
kDOMClobberedNotShadowedFormPropertyAccessed = 4875,
- kTpcdCookieReadBlockedByAdHeuristics = 4876,
+ kOBSOLETE_TpcdCookieReadBlockedByAdHeuristics = 4876,
kUsedColorSchemeRootScrollbarsDark = 4877,
kSerialPortConnected = 4878,
kDevicePostureMediaFeature = 4879,
@@ -4413,7 +4413,7 @@ enum WebFeature {
kOBSOLETE_MaxInterStageShaderComponentsRequiredLimit = 5111,
kShowPickerSelect = 5112,
kAudioContextPlayoutStats = 5113,
- kThirdPartyCookieBlocked = 5114,
+ kOBSOLETE_ThirdPartyCookieBlocked = 5114,
kV8PerformanceResourceTiming_WorkerRouterEvaluationStart_AttributeGetter =
5115,
kV8PerformanceResourceTiming_WorkerCacheLookupStart_AttributeGetter = 5116,
@@ -5036,7 +5036,7 @@ enum WebFeature {
kLcpCandidateRemovedWhilePaintTimePending = 5720,
kGetBBoxForElementWithZeroWidthOrHeight = 5721,
kGetBBoxForNestedSVGElementWithZeroWidthOrHeight = 5722,
- kXMLExternalResourceLoadEntitiesOnly = 5723,
+ kOBSOLETE_kXMLExternalResourceLoadEntitiesOnly = 5723,
kV8Origin_IsSameOrigin_Method = 5724,
kV8Origin_IsSameSite_Method = 5725,
kV8Origin_From_Method = 5726,
@@ -5046,6 +5046,49 @@ enum WebFeature {
kUseCssSizingProperties = 5730,
kSharedStorageAPIAll = 5731,
kGamepadRawInputChangeEventListener = 5732,
+ kLetterSpacingWithMargin = 5733,
+ kV8PerformanceContainerTiming_IntersectionRect_AttributeGetter = 5734,
+ kV8PerformanceContainerTiming_Size_AttributeGetter = 5735,
+ kV8PerformanceContainerTiming_RootElement_AttributeGetter = 5736,
+ kV8PerformanceContainerTiming_Identifier_AttributeGetter = 5737,
+ kV8PerformanceContainerTiming_LastPaintedElement_AttributeGetter = 5738,
+ kV8PerformanceContainerTiming_FirstRenderTime_AttributeGetter = 5739,
+ kV8Element_ContainerTiming_AttributeGetter = 5740,
+ kV8Element_ContainerTiming_AttributeSetter = 5741,
+ kV8Element_ContainerTimingIgnore_AttributeGetter = 5742,
+ kV8Element_ContainerTimingIgnore_AttributeSetter = 5743,
+ kContainerTimingObserverRegistered = 5744,
+ kContainerTimingObserverReportedEntries = 5745,
+ kCookieStoreMaxAge = 5746,
+ kSVGFEBlendElement = 5747,
+ kSVGFEColorMatrixElement = 5748,
+ kSVGFEComponentTransferElement = 5749,
+ kSVGFECompositeElement = 5750,
+ kSVGFEConvolveMatrixElement = 5751,
+ kSVGFEDiffuseLightingElement = 5752,
+ kSVGFEDisplacementMapElement = 5753,
+ kSVGFEDropShadowElement = 5754,
+ kSVGFEFloodElement = 5755,
+ kSVGFEGaussianBlurElement = 5756,
+ kSVGFEImageElement = 5757,
+ kSVGFEMergeElement = 5758,
+ kSVGFEMorphologyElement = 5759,
+ kSVGFEOffsetElement = 5760,
+ kSVGFESpecularLightingElement = 5761,
+ kSVGFETileElement = 5762,
+ kSVGFETurbulenceElement = 5763,
+ kUnframedIwa = 5764,
+ kDigitalCredentialsProtocolOpenId4VpUnsigned = 5765,
+ kDigitalCredentialsProtocolOpenId4VpSigned = 5766,
+ kDigitalCredentialsProtocolOpenId4VpMultisigned = 5767,
+ kDigitalCredentialsProtocolOrgIsoMdoc = 5768,
+ kDigitalCredentialsProtocolOpenId4Vci = 5769,
+ kDigitalCredentialsProtocolUnknown = 5770,
+ kSetCookieWithEmptyName = 5771,
+ kSetCookieWithEmptyNameAndAmbiguousValue = 5772,
+ kStorageAccessAPI_requestStorageAccessFor_Method_AsyncSuccess = 5773,
+ kWebAudioRenderSizeHint = 5774,
+ kWebAudioRenderQuantumSize = 5775,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots. Also don't add extra
diff --git a/tools/under-control/src/third_party/blink/public/mojom/webpreferences/web_preferences.mojom b/tools/under-control/src/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
index 7f44cff8..531cc01e 100755
--- a/tools/under-control/src/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
+++ b/tools/under-control/src/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
@@ -370,6 +370,10 @@ struct WebPreferences {
[EnableIf=is_android]
bool long_press_link_select_text;
+ // Support WebView font scaling behavior that differs from Chrome.
+ [EnableIf=is_android]
+ bool scale_all_fonts_if_no_meta_text_scale_tag;
+
// Disable the Web Authentication (WebAuthn) API.
// TODO(crbug.com/1284805): Remove once WebView supports WebAuthn.
[EnableIf=is_android]
diff --git a/tools/under-control/src/third_party/blink/renderer/core/animation/keyframe_effect.idl b/tools/under-control/src/third_party/blink/renderer/core/animation/keyframe_effect.idl
index 5077101b..c69316f5 100755
--- a/tools/under-control/src/third_party/blink/renderer/core/animation/keyframe_effect.idl
+++ b/tools/under-control/src/third_party/blink/renderer/core/animation/keyframe_effect.idl
@@ -31,6 +31,7 @@
// https://w3.org/TR/web-animations-1/#the-keyframeeffect-interface
enum CompositeOperation { "replace", "add", "accumulate" };
+enum IterationCompositeOperation { "replace", "accumulate" };
[
Exposed=Window
@@ -40,6 +41,7 @@ enum CompositeOperation { "replace", "add", "accumulate" };
attribute Element? target;
[RaisesException=Setter] attribute CSSOMString? pseudoElement;
attribute CompositeOperation composite;
+ [RuntimeEnabled=CSSAnimationIterationComposite] attribute IterationCompositeOperation iterationComposite;
[CallWith=ScriptState] sequence