From 264d8b8ef1584865a7d5681277160345541ba7bb Mon Sep 17 00:00:00 2001 From: uazo <29201891+uazo@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:30:25 +0000 Subject: [PATCH] [AUTO][FILECONTROL] - version 138.0.7204.50 --- tools/under-control/src/RELEASE | 2 +- .../browser/aw_content_browser_client.cc | 121 +- .../browser/aw_field_trials.cc | 11 +- .../chrome/android/java/AndroidManifest.xml | 11 +- .../chrome_browsing_data_remover_delegate.cc | 24 +- .../chrome_browser_interface_binders.cc | 14 +- .../browser/chrome_content_browser_client.cc | 1096 ++-- .../browser/flags/ChromeFeatureList.java | 250 +- .../src/chrome/browser/prefs/browser_prefs.cc | 102 +- .../src/chrome/browser/ui/tab_helpers.cc | 28 +- .../extensions/api/autofill_private.idl | 5 +- .../api/enterprise_reporting_private.idl | 1 - .../extensions/api/experimental_actor.idl | 6 +- .../chrome_content_renderer_client.cc | 28 +- .../policy/resources/templates/policies.yaml | 9 +- .../policy_definitions/Arc/ArcEnabled.yaml | 2 - ...rWindowNameForNewBrowsingContextGroup.yaml | 58 + .../PartitionedBlobUrlUsage.yaml | 13 +- .../Crostini/CrostiniAnsiblePlaybook.yaml | 3 +- ...atoryExtensionsForIncognitoNavigation.yaml | 3 +- .../FloatingSsoDomainBlocklist.yaml | 4 +- .../FloatingSsoDomainBlocklistExceptions.yaml | 4 +- .../FloatingSso/FloatingSsoEnabled.yaml | 4 +- .../AIModeSearchSuggestSettings.yaml | 40 + .../GenerativeAI/AIModeSettings.yaml | 38 + .../Kiosk/KioskChromeAppsForceAllowed.yaml | 6 +- .../AllowDeletingBrowserHistory.yaml | 1 + .../ChromeDataRegionSetting.yaml | 10 +- .../Miscellaneous/EditBookmarksEnabled.yaml | 4 +- .../EnterpriseRealTimeUrlCheckMode.yaml | 3 +- .../EnterpriseSearchAggregatorSettings.yaml | 4 +- .../FloatingWorkspaceV2Enabled.yaml | 12 +- .../NTPFooterExtensionAttributionEnabled.yaml | 29 + .../NTPFooterThemeAttributionEnabled.yaml | 26 - .../Miscellaneous/PdfAnnotationsEnabled.yaml | 1 + .../PrefetchWithServiceWorkerEnabled.yaml | 37 + .../SelectParserRelaxationEnabled.yaml | 12 +- .../Miscellaneous/TLS13EarlyDataEnabled.yaml | 41 + .../WebXRImmersiveArEnabled.yaml | 2 +- ...LocalNetworkAccessRestrictionsEnabled.yaml | 46 + .../PasswordManagerBlocklist.yaml | 28 + .../PasswordManager/policy_atomic_groups.yaml | 1 + .../PrivacySandboxIpProtectionEnabled.yaml | 39 +- ...InsecurePrivateNetworkRequestsAllowed.yaml | 9 +- ...ePrivateNetworkRequestsAllowedForUrls.yaml | 9 +- ...ivateNetworkAccessRestrictionsEnabled.yaml | 11 +- .../Sharing/TabGroupSharingSettings.yaml | 8 +- .../Startup/HomepageIsNewTabPage.yaml | 1 + .../Startup/ShowHomeButton.yaml | 1 + .../browser/web_contents/web_contents_impl.cc | 493 +- .../src/content/child/runtime_features.cc | 15 +- .../public/browser/content_browser_client.cc | 70 +- tools/under-control/src/gin/v8_initializer.cc | 2 +- .../src/services/network/network_context.cc | 51 +- .../variations/fieldtrial_testing_config.json | 5115 +++++++---------- .../use_counter/metrics/web_feature.mojom | 50 +- .../webpreferences/web_preferences.mojom | 7 +- .../core/css/css_view_transition_rule.idl | 3 +- .../core/css/parser/media_query_parser.cc | 100 + .../core/dom/quota_exceeded_error.idl | 18 + .../renderer/core/editing/ime/text_format.idl | 4 +- .../core/events/event_type_names.json5 | 1 + .../core/events/promise_rejection_event.idl | 2 +- .../renderer/core/events/toggle_event.idl | 1 + .../renderer/core/exported/web_view_impl.cc | 50 +- .../blink/renderer/core/fetch/request.idl | 4 +- .../renderer/core/fetch/request_init.idl | 3 +- .../renderer/core/fetch/retry_options.idl | 43 + .../frame/integrity_violation_report_body.idl | 16 + .../renderer/core/frame/navigator_ua_data.idl | 2 +- .../core/frame/scroll_into_view_options.idl | 4 +- .../blink/renderer/core/frame/settings.json5 | 4 + .../canvas/high_dynamic_range_options.idl | 2 +- .../core/html/canvas/html_canvas_element.idl | 2 + .../core/html/html_dialog_element.idl | 2 +- .../core/html/html_menu_bar_element.idl | 9 + .../core/html/html_menu_item_element.idl | 13 + .../core/html/html_menu_list_element.idl | 9 + .../origin_trials/origin_trial_context.cc | 21 +- .../blink/renderer/core/scroll/snap_event.idl | 1 + .../renderer/core/scroll/snap_event_init.idl | 10 + .../timing/back_forward_cache_restoration.idl | 2 +- .../view_transition/page_reveal_event.idl | 2 +- .../core/view_transition/page_swap_event.idl | 2 +- .../core/view_transition/view_transition.idl | 7 + .../core/workers/worker_global_scope.idl | 4 +- .../modules/ad_auction/auction_ad_config.idl | 4 +- .../blink/renderer/modules/ai/ai.idl | 13 - .../renderer/modules/ai/language_model.idl | 20 +- .../ai/language_model_create_options.idl | 44 +- .../modules/ai/language_model_factory.idl | 37 - .../modules/ai/language_model_params.idl | 1 + .../blink/renderer/modules/ai/proofreader.idl | 91 + .../blink/renderer/modules/ai/summarizer.idl | 2 +- .../ai/window_or_worker_global_scope_ai.idl | 16 - .../canvas2d/canvas_rendering_context_2d.idl | 9 +- .../htmlcanvas/html_canvas_element_module.idl | 2 + .../offscreen_canvas_module.idl | 2 + .../renderer/modules/clipboard/clipboard.idl | 2 + .../clipboard/clipboard_change_event.idl | 27 + .../clipboard/clipboard_change_event_init.idl | 7 + .../compute_pressure/pressure_record.idl | 1 + .../testing/internals_compute_pressure.idl | 2 +- ...nsions_payment_browser_bound_signature.idl | 2 +- ...hentication_extensions_payment_outputs.idl | 2 +- .../digital_credential_creation_options.idl | 8 +- .../digital_credential_request_options.idl | 4 +- .../identity_claim_requirement.idl | 21 - .../identity_credential_request_options.idl | 2 - .../identity_standard_claims.idl | 37 - .../media_track_constraint_set.idl | 1 + .../mediastream/media_track_settings.idl | 1 + .../media_track_supported_constraints.idl | 1 + .../blink/renderer/modules/ml/ml_context.idl | 17 + .../renderer/modules/ml/webnn/ml_graph.idl | 2 + .../modules/ml/webnn/ml_graph_builder.idl | 8 +- .../renderer/modules/ml/webnn/ml_tensor.idl | 3 +- .../modules/ml/webnn/ml_tensor_descriptor.idl | 2 +- .../secure_payment_confirmation_request.idl | 1 + .../rtc_encoded_audio_frame_metadata.idl | 1 - .../webcodecs/video_frame_metadata.idl | 3 + .../webgl/webgl2_rendering_context_base.idl | 1 + .../webgl/webgl2_rendering_context_webgpu.idl | 19 + .../webgl/webgl_rendering_context_base.idl | 4 + .../webgl/webgl_rendering_context_webgpu.idl | 21 + .../renderer/modules/webgpu/gpu_adapter.idl | 2 +- .../modules/webgpu/gpu_adapter_info.idl | 1 + .../modules/webgpu/gpu_bind_group_entry.idl | 2 +- .../webgpu/gpu_subgroup_matrix_config.idl | 26 + .../modules/webgpu/gpu_supported_features.idl | 2 + .../modules/webgpu/gpu_supported_limits.idl | 8 +- .../modules/webgpu/gpu_texture_descriptor.idl | 2 +- .../modules/xr/xr_depth_information.idl | 8 + .../modules/xr/xr_depth_state_init.idl | 1 + .../blink/renderer/modules/xr/xr_view.idl | 4 +- .../renderer/modules/xr/xr_view_geometry.idl | 14 + .../platform/runtime_enabled_features.json5 | 701 ++- .../global-interface-listing-expected.txt | 66 +- 138 files changed, 4847 insertions(+), 4793 deletions(-) create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ClearWindowNameForNewBrowsingContextGroup.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSearchSuggestSettings.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSettings.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterExtensionAttributionEnabled.yaml delete mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterThemeAttributionEnabled.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefetchWithServiceWorkerEnabled.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/TLS13EarlyDataEnabled.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/LocalNetworkAccessRestrictionsEnabled.yaml create mode 100755 tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/PasswordManagerBlocklist.yaml create mode 100755 tools/under-control/src/third_party/blink/renderer/core/dom/quota_exceeded_error.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/fetch/retry_options.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/frame/integrity_violation_report_body.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/html_menu_bar_element.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/html_menu_item_element.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/html/html_menu_list_element.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event_init.idl delete mode 100755 tools/under-control/src/third_party/blink/renderer/modules/ai/ai.idl delete mode 100755 tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_factory.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl delete mode 100755 tools/under-control/src/third_party/blink/renderer/modules/ai/window_or_worker_global_scope_ai.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event_init.idl delete mode 100755 tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_claim_requirement.idl delete mode 100755 tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_standard_claims.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_webgpu.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_webgpu.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_subgroup_matrix_config.idl create mode 100755 tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view_geometry.idl diff --git a/tools/under-control/src/RELEASE b/tools/under-control/src/RELEASE index a6d3b486..475ed1a8 100644 --- a/tools/under-control/src/RELEASE +++ b/tools/under-control/src/RELEASE @@ -1 +1 @@ -137.0.7151.104 +138.0.7204.50 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 f86f930a..65881e05 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 @@ -34,6 +34,7 @@ #include "android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h" #include "android_webview/browser/network_service/aw_proxying_url_loader_factory.h" #include "android_webview/browser/network_service/aw_url_loader_throttle.h" +#include "android_webview/browser/network_service/net_helpers.h" #include "android_webview/browser/prefetch/aw_prefetch_service_delegate.h" #include "android_webview/browser/safe_browsing/aw_safe_browsing_navigation_throttle.h" #include "android_webview/browser/safe_browsing/aw_url_checker_delegate_impl.h" @@ -94,6 +95,7 @@ #include "content/public/browser/frame_type.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_throttle.h" +#include "content/public/browser/navigation_throttle_registry.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/prefetch_service_delegate.h" #include "content/public/browser/render_frame_host.h" @@ -111,6 +113,7 @@ #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "net/android/network_library.h" +#include "net/cookies/cookie_setting_override.h" #include "net/cookies/site_for_cookies.h" #include "net/http/http_util.h" #include "net/net_buildflags.h" @@ -174,8 +177,8 @@ BASE_FEATURE(kWebViewOptimizeXrwNavigationFlow, // navigation, and forwards it to the proxying loader factory. class XrwNavigationThrottle : public content::NavigationThrottle { public: - explicit XrwNavigationThrottle(content::NavigationHandle* handle) - : NavigationThrottle(handle) {} + explicit XrwNavigationThrottle(content::NavigationThrottleRegistry& registry) + : NavigationThrottle(registry) {} ~XrwNavigationThrottle() override { AwProxyingURLLoaderFactory::ClearXrwResultForNavigation( navigation_handle()->GetNavigationId()); @@ -183,8 +186,12 @@ class XrwNavigationThrottle : public content::NavigationThrottle { ThrottleCheckResult WillStartRequest() override { auto* handle = navigation_handle(); + content::OriginTrialsControllerDelegate* delegate = + handle->GetWebContents() + ->GetBrowserContext() + ->GetOriginTrialsControllerDelegate(); AwProxyingURLLoaderFactory::SetXrwResultForNavigation( - handle->GetURL(), + delegate, handle->GetURL(), handle->IsInOutermostMainFrame() ? blink::mojom::ResourceType::kMainFrame : blink::mojom::ResourceType::kSubFrame, @@ -420,17 +427,12 @@ bool AwContentBrowserClient::IsHandledURL(const GURL& url) { const std::string scheme = url.scheme(); DCHECK_EQ(scheme, base::ToLowerASCII(scheme)); static const char* const kProtocolList[] = { - url::kHttpScheme, - url::kHttpsScheme, + url::kHttpScheme, url::kHttpsScheme, #if BUILDFLAG(ENABLE_WEBSOCKETS) - url::kWsScheme, - url::kWssScheme, + url::kWsScheme, url::kWssScheme, #endif // BUILDFLAG(ENABLE_WEBSOCKETS) - url::kDataScheme, - url::kBlobScheme, - url::kFileSystemScheme, - content::kChromeUIScheme, - url::kContentScheme, + url::kDataScheme, url::kBlobScheme, url::kFileSystemScheme, + content::kChromeUIScheme, url::kContentScheme, }; if (scheme == url::kFileScheme) { // Return false for the "special" file URLs, so they can be loaded @@ -490,15 +492,21 @@ gfx::ImageSkia AwContentBrowserClient::GetDefaultFavicon() { content::GeneratedCodeCacheSettings AwContentBrowserClient::GetGeneratedCodeCacheSettings( content::BrowserContext* context) { - // WebView limits the main HTTP cache to 20MB; we need to set a comparable - // limit for the code cache since the source file needs to be in the HTTP - // cache for the code cache entry to be used. There are two code caches that - // both use this value, so we pass 10MB to keep the total disk usage to - // roughly 2x what it was before the code cache was implemented. - // TODO(crbug.com/41419561): webview should have smarter cache sizing logic. AwBrowserContext* browser_context = static_cast(context); + // We need to set a comparable limit for the code cache since the source file + // needs to be in the HTTP cache for the code cache entry to be used. There + // are two code caches that both use this value, so we pass half the the HTTP + // cache size limit to keep the total cache usage to roughly 2x the HTTP cache + // limit. + int code_cache_limit = 0.5 * GetHttpCacheSize(); + if (base::FeatureList::IsEnabled( + features::kWebViewCacheSizeLimitDerivedFromAppCacheQuota)) { + code_cache_limit = features::kWebViewCodeCacheSizeLimitMultiplier.Get() * + GetHttpCacheSize(); + } + return content::GeneratedCodeCacheSettings( - true, 10 * 1024 * 1024, browser_context->GetHttpCachePath()); + true, code_cache_limit, browser_context->GetHttpCachePath()); } void AwContentBrowserClient::AllowCertificateError( @@ -661,62 +669,50 @@ void AwContentBrowserClient::OverrideWebPreferences( (delegate) ? delegate->isModalContextMenu() : false; } -std::vector> -AwContentBrowserClient::CreateThrottlesForNavigation( - content::NavigationHandle* navigation_handle) { - std::vector> throttles; +void AwContentBrowserClient::CreateThrottlesForNavigation( + content::NavigationThrottleRegistry& registry) { // We allow intercepting only navigations within main frames. This // is used to post onPageStarted. We handle shouldOverrideUrlLoading // via a sync IPC. - if (navigation_handle->IsInMainFrame()) { + content::NavigationHandle& navigation_handle = registry.GetNavigationHandle(); + if (navigation_handle.IsInMainFrame()) { // MetricsNavigationThrottle requires that it runs before // NavigationThrottles that may delay or cancel navigations, so only // NavigationThrottles that don't delay or cancel navigations (e.g. // throttles that are only observing callbacks without affecting navigation // behavior) should be added before MetricsNavigationThrottle. - throttles.push_back(page_load_metrics::MetricsNavigationThrottle::Create( - navigation_handle)); + // TODO(https://crbug.com/412524375): This assumption is fragile. This + // should be cared by adding an attribute flag to + // NavigationThrottleRegistry::AddThrottle(). + page_load_metrics::MetricsNavigationThrottle::CreateAndAdd(registry); } // Use Synchronous mode for the navigation interceptor, since this class // doesn't actually call into an arbitrary client, it just posts a task to // call onPageStarted. shouldOverrideUrlLoading happens earlier (see // ContentBrowserClient::ShouldOverrideUrlLoading). - std::unique_ptr intercept_navigation_throttle = - navigation_interception::InterceptNavigationDelegate:: - MaybeCreateThrottleFor(navigation_handle, - navigation_interception::SynchronyMode::kSync); - if (intercept_navigation_throttle) { - throttles.push_back(std::move(intercept_navigation_throttle)); - } + navigation_interception::InterceptNavigationDelegate::MaybeCreateAndAdd( + registry, navigation_interception::SynchronyMode::kSync); - throttles.push_back(std::make_unique( - navigation_handle, - AwBrowserContext::FromWebContents(navigation_handle->GetWebContents()))); + registry.AddThrottle(std::make_unique( + registry, + AwBrowserContext::FromWebContents(navigation_handle.GetWebContents()))); - std::unique_ptr safe_browsing_throttle = - AwSafeBrowsingNavigationThrottle::MaybeCreateThrottleFor( - navigation_handle); - if (safe_browsing_throttle) { - throttles.push_back(std::move(safe_browsing_throttle)); - } + AwSafeBrowsingNavigationThrottle::MaybeCreateAndAdd(registry); if (base::FeatureList::IsEnabled(kWebViewOptimizeXrwNavigationFlow)) { - throttles.push_back( - std::make_unique(navigation_handle)); + registry.AddThrottle(std::make_unique(registry)); } - if ((navigation_handle->GetNavigatingFrameType() == + if ((navigation_handle.GetNavigatingFrameType() == FrameType::kPrimaryMainFrame || - navigation_handle->GetNavigatingFrameType() == FrameType::kSubframe) && - navigation_handle->GetURL().SchemeIsHTTPOrHTTPS()) { + navigation_handle.GetNavigatingFrameType() == FrameType::kSubframe) && + navigation_handle.GetURL().SchemeIsHTTPOrHTTPS()) { AwSupervisedUserUrlClassifier* urlClassifier = AwSupervisedUserUrlClassifier::GetInstance(); if (urlClassifier->ShouldCreateThrottle()) { - throttles.push_back(std::make_unique( - navigation_handle, urlClassifier)); + registry.AddThrottle( + std::make_unique(registry, urlClassifier)); } } - - return throttles; } std::unique_ptr @@ -959,11 +955,9 @@ bool AwContentBrowserClient::HandleExternalProtocol( web_contents->GetBrowserContext())); // Pass WebContentsKey to look up AwContentsIoThreadClient in - // WebContentsToIoThreadClientMap later. Currently this is used only when a - // page is being prerendered. - // TODO(crbug.com/373474043): Use this even for non-prerendered pages. + // WebContentsToIoThreadClientMap later. std::optional web_contents_key; - if (web_contents && web_contents->IsPrerenderedFrame(frame_tree_node_id)) { + if (web_contents) { web_contents_key = GetWebContentsKey(*web_contents); } @@ -1167,13 +1161,9 @@ void AwContentBrowserClient::WillCreateURLLoaderFactory( } // Pass WebContentsKey to look up AwContentsIoThreadClient in - // WebContentsToIoThreadClientMap later. Currently this is used only when a - // page is being prerendered. - // TODO(crbug.com/373474043): Use this even for non-prerendered pages. + // WebContentsToIoThreadClientMap later. std::optional web_contents_key; - if (web_contents->IsPrerenderedFrame(frame->GetFrameTreeNodeId())) { - web_contents_key = GetWebContentsKey(*web_contents); - } + web_contents_key = GetWebContentsKey(*web_contents); auto xrw_allowlist_matcher = AwSettings::FromWebContents(web_contents)->xrw_allowlist_matcher(); @@ -1476,7 +1466,14 @@ bool AwContentBrowserClient::IsFullCookieAccessAllowed( content::BrowserContext* browser_context, content::WebContents* web_contents, const GURL& url, - const blink::StorageKey& storage_key) { + const blink::StorageKey& storage_key, + net::CookieSettingOverrides overrides) { + return AreThirdPartyCookiesGenerallyAllowed(browser_context, web_contents); +} + +bool AwContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed( + content::BrowserContext* browser_context, + content::WebContents* web_contents) { if (!web_contents) { // We do not allow third-party cookie access from service workers. return false; 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 23367a41..d9c002f4 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 @@ -14,6 +14,7 @@ #include "base/path_service.h" #include "components/history/core/browser/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" @@ -147,8 +148,9 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // kVulkan in case it becomes enabled by default. aw_feature_overrides.DisableFeature(::features::kVulkan); - aw_feature_overrides.DisableFeature(::features::kWebPayments); aw_feature_overrides.DisableFeature(::features::kServiceWorkerPaymentApps); + aw_feature_overrides.EnableFeature( + ::payments::android::kAndroidPaymentIntentsOmitDeprecatedParameters); // WebView does not support overlay fullscreen yet for video overlays. aw_feature_overrides.DisableFeature(media::kOverlayFullscreenVideo); @@ -217,8 +219,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // FedCM is not yet supported on WebView. aw_feature_overrides.DisableFeature(::features::kFedCm); - aw_feature_overrides.DisableFeature( - blink::features::kFedCmWithStorageAccessAPI); // TODO(crbug.com/40272633): Web MIDI permission prompt for all usage. aw_feature_overrides.DisableFeature(blink::features::kBlockMidiByDefault); @@ -322,4 +322,9 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) { // Disable draw cutout edge-to-edge on WebView. Safe area insets are not // handled correctly when WebView is drawing edge-to-edge. aw_feature_overrides.DisableFeature(features::kDrawCutoutEdgeToEdge); + + // This is enabled for WebView to improve crbug.com/418159642. + // TODO(crbug.com/422161917): Revert this for the ablation study. + aw_feature_overrides.EnableFeature( + features::kServiceWorkerBackgroundUpdateForRegisteredStorageKeys); } diff --git a/tools/under-control/src/chrome/android/java/AndroidManifest.xml b/tools/under-control/src/chrome/android/java/AndroidManifest.xml index 54244bbd..f8815b41 100755 --- a/tools/under-control/src/chrome/android/java/AndroidManifest.xml +++ b/tools/under-control/src/chrome/android/java/AndroidManifest.xml @@ -628,8 +628,13 @@ by a child template that "extends" this file. android:theme="@style/Theme.AppCompat.NoActionBar"> {% endif %} + @@ -1002,6 +1007,9 @@ by a child template that "extends" this file. + + + @@ -1010,6 +1018,7 @@ by a child template that "extends" this file. android:exported="false"> + @@ -1201,7 +1210,7 @@ by a child template that "extends" this file. {{ self.chrome_activity_common() }} android:excludeFromRecents="true" android:noHistory="true" - android:launchMode="singleTask" + android:launchMode="singleInstancePerTask" android:exported="false" android:resizeableActivity="false" android:screenOrientation="landscape" diff --git a/tools/under-control/src/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/tools/under-control/src/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index 6067f65e..e64d9720 100755 --- a/tools/under-control/src/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/tools/under-control/src/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc @@ -24,7 +24,6 @@ #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" -#include "base/not_fatal_until.h" #include "base/strings/strcat.h" #include "base/task/bind_post_task.h" #include "base/task/thread_pool.h" @@ -122,6 +121,8 @@ #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_store/password_store_interface.h" #include "components/password_manager/core/browser/password_store/smart_bubble_stats_store.h" +#include "components/payments/content/browser_binding/browser_bound_keys_deleter.h" +#include "components/payments/content/browser_binding/browser_bound_keys_deleter_factory.h" #include "components/payments/content/payment_manifest_web_data_service.h" #include "components/performance_manager/public/user_tuning/prefs.h" #include "components/permissions/permission_actions_history.h" @@ -753,6 +754,14 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( base::DoNothing()); } #endif // !BUILDFLAG(IS_ANDROID) + +#if BUILDFLAG(IS_ANDROID) + if (payments::BrowserBoundKeyDeleter* browser_bound_key_deleter = + payments::BrowserBoundKeyDeleterFactory::GetForBrowserContext( + profile_)) { + browser_bound_key_deleter->RemoveInvalidBBKs(); + } +#endif // BUILDFLAG(IS_ANDROID) } ////////////////////////////////////////////////////////////////////////////// @@ -908,6 +917,10 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( delete_end, website_settings_filter); #if !BUILDFLAG(IS_ANDROID) + host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( + ContentSettingsType::INITIALIZED_TRANSLATIONS, delete_begin_, + delete_end_, website_settings_filter); + host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( ContentSettingsType::INTENT_PICKER_DISPLAY, delete_begin_, delete_end_, website_settings_filter); @@ -928,6 +941,10 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( ContentSettingsType::ARE_SUSPICIOUS_NOTIFICATIONS_ALLOWLISTED_BY_USER, delete_begin_, delete_end_, website_settings_filter); + host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( + ContentSettingsType::SUSPICIOUS_NOTIFICATION_IDS, delete_begin_, + delete_end_, website_settings_filter); + PermissionDecisionAutoBlockerFactory::GetForProfile(profile_) ->RemoveEmbargoAndResetCounts(filter); } @@ -1035,8 +1052,7 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( kClearBrowsingData); } - CHECK(deferred_disable_passwords_auto_signin_cb_.is_null(), - base::NotFatalUntil::M125); + CHECK(deferred_disable_passwords_auto_signin_cb_.is_null()); if ((remove_mask & content::BrowsingDataRemover::DATA_TYPE_COOKIES) && !filter_builder->PartitionedCookiesOnly()) { // Unretained() is safe, this is only executed in OnTasksComplete() if the @@ -1600,7 +1616,7 @@ void ChromeBrowsingDataRemoverDelegate::OnTaskComplete( SyncServiceFactory::GetForProfile(profile_); sync_service) { sync_service->GetUserSettings()->KeepAccountSettingsPrefsOnlyForUsers( - base::ToVector(gaia_ids, &signin::GaiaIdHash::FromGaiaId)); + base::ToVector(gaia_ids)); } } #endif // !BUILDFLAG(IS_ANDROID) diff --git a/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc b/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc index cc98cea5..ce9a5553 100755 --- a/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc +++ b/tools/under-control/src/chrome/browser/chrome_browser_interface_binders.cc @@ -29,7 +29,6 @@ #include "chrome/browser/speech/on_device_speech_recognition_impl.h" #include "chrome/browser/translate/translate_frame_binder.h" #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" -#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/buildflags.h" #include "chrome/common/pref_names.h" #include "chrome/services/speech/buildflags/buildflags.h" @@ -47,7 +46,6 @@ #include "components/performance_manager/embedder/binders.h" #include "components/performance_manager/embedder/performance_manager_registry.h" #include "components/prefs/pref_service.h" -#include "components/reading_list/features/reading_list_switches.h" #include "components/security_state/content/content_utils.h" #include "components/security_state/content/security_state_tab_helper.h" #include "components/security_state/core/security_state.h" @@ -70,6 +68,7 @@ #include "third_party/blink/public/mojom/loader/navigation_predictor.mojom.h" #include "third_party/blink/public/mojom/payments/payment_request.mojom.h" #include "third_party/blink/public/mojom/payments/secure_payment_confirmation_service.mojom.h" +#include "third_party/blink/public/mojom/persistent_renderer_prefs.mojom.h" #include "third_party/blink/public/mojom/prerender/prerender.mojom.h" #include "third_party/blink/public/public_buildflags.h" #include "ui/accessibility/accessibility_features.h" @@ -98,6 +97,7 @@ #else #include "chrome/browser/badging/badge_manager.h" #include "chrome/browser/payments/payment_request_factory.h" +#include "chrome/browser/prefs/persistent_renderer_prefs_manager.h" #include "chrome/browser/ui/views/side_panel/customize_chrome/customize_chrome_utils.h" #include "chrome/browser/web_applications/web_install_service_impl.h" #endif // BUILDFLAG(IS_ANDROID) @@ -467,8 +467,6 @@ void PopulateChromeFrameBinders( map->Add(base::BindRepeating( &ForwardToJavaFrame)); } - map->Add(base::BindRepeating( - &ForwardToJavaWebContents)); #if BUILDFLAG(ENABLE_UNHANDLED_TAP) map->Add( @@ -478,6 +476,8 @@ void PopulateChromeFrameBinders( #else map->Add( base::BindRepeating(&badging::BadgeManager::BindFrameReceiverIfAllowed)); + map->Add( + base::BindRepeating(&PersistentRendererPrefsManager::BindFrameReceiver)); if (base::FeatureList::IsEnabled(features::kWebPayments)) { map->Add( base::BindRepeating(&payments::CreatePaymentRequest)); @@ -495,10 +495,12 @@ void PopulateChromeFrameBinders( #endif #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) - if (base::FeatureList::IsEnabled(features::kWebShare)) { map->Add( base::BindRepeating(&ShareServiceImpl::Create)); - } +#endif +#if BUILDFLAG(IS_ANDROID) + map->Add(base::BindRepeating( + &ForwardToJavaWebContents)); #endif map->Add( diff --git a/tools/under-control/src/chrome/browser/chrome_content_browser_client.cc b/tools/under-control/src/chrome/browser/chrome_content_browser_client.cc index 3ebb85bb..e856d9cf 100755 --- a/tools/under-control/src/chrome/browser/chrome_content_browser_client.cc +++ b/tools/under-control/src/chrome/browser/chrome_content_browser_client.cc @@ -61,16 +61,15 @@ #include "chrome/browser/browsing_topics/browsing_topics_service_factory.h" #include "chrome/browser/btm/btm_browser_signin_detector.h" #include "chrome/browser/btm/stateful_bounce_counter.h" -#include "chrome/browser/captive_portal/captive_portal_service_factory.h" #include "chrome/browser/child_process_host_flags.h" #include "chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.h" #include "chrome/browser/chrome_content_browser_client_binder_policies.h" +#include "chrome/browser/chrome_content_browser_client_navigation_throttles.h" #include "chrome/browser/chrome_content_browser_client_parts.h" #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" #include "chrome/browser/data_saver/data_saver.h" -#include "chrome/browser/data_sharing/data_sharing_navigation_throttle.h" #include "chrome/browser/defaults.h" #include "chrome/browser/device_api/device_service_impl.h" #include "chrome/browser/device_api/managed_configuration_service.h" @@ -82,7 +81,6 @@ #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/favicon/favicon_utils.h" -#include "chrome/browser/first_party_sets/first_party_sets_navigation_throttle.h" #include "chrome/browser/font_family_cache.h" #include "chrome/browser/gpu/chrome_browser_main_extra_parts_gpu.h" #include "chrome/browser/headless/headless_mode_util.h" @@ -92,7 +90,6 @@ #include "chrome/browser/language_detection/language_detection_model_service_factory.h" #include "chrome/browser/lifetime/browser_shutdown.h" #include "chrome/browser/loader/keep_alive_request_tracker.h" -#include "chrome/browser/lookalikes/lookalike_url_navigation_throttle.h" #include "chrome/browser/media/audio_service_util.h" #include "chrome/browser/media/prefs/capture_device_ranking.h" #include "chrome/browser/media/router/media_router_feature.h" @@ -116,17 +113,14 @@ #include "chrome/browser/performance_manager/public/chrome_browser_main_extra_parts_performance_manager.h" #include "chrome/browser/performance_manager/public/chrome_content_browser_client_performance_manager_part.h" #include "chrome/browser/performance_monitor/chrome_browser_main_extra_parts_performance_monitor.h" -#include "chrome/browser/plugins/pdf_iframe_navigation_throttle.h" #include "chrome/browser/plugins/plugin_utils.h" #include "chrome/browser/policy/policy_util.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/predictors/loading_predictor.h" #include "chrome/browser/predictors/loading_predictor_factory.h" -#include "chrome/browser/preloading/navigation_ablation_throttle.h" #include "chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h" #include "chrome/browser/preloading/prefetch/no_state_prefetch/chrome_speculation_host_delegate.h" #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h" -#include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_navigation_throttle.h" #include "chrome/browser/preloading/prefetch/prefetch_service/chrome_prefetch_service_delegate.h" #include "chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.h" #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader.h" @@ -148,7 +142,6 @@ #include "chrome/browser/profiling_host/chrome_browser_main_extra_parts_profiling.h" #include "chrome/browser/renderer_host/chrome_navigation_ui_data.h" #include "chrome/browser/renderer_preferences_util.h" -#include "chrome/browser/request_header_integrity/buildflags.h" #include "chrome/browser/safe_browsing/url_checker_delegate_impl.h" #include "chrome/browser/search/search.h" #include "chrome/browser/search_engines/template_url_service_factory.h" @@ -161,14 +154,9 @@ #include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" #include "chrome/browser/ssl/chrome_security_blocking_page_factory.h" #include "chrome/browser/ssl/chrome_security_state_tab_helper.h" -#include "chrome/browser/ssl/https_defaulted_callbacks.h" #include "chrome/browser/ssl/https_upgrades_interceptor.h" -#include "chrome/browser/ssl/https_upgrades_navigation_throttle.h" #include "chrome/browser/ssl/sct_reporting_service.h" #include "chrome/browser/ssl/ssl_client_certificate_selector.h" -#include "chrome/browser/ssl/typed_navigation_upgrade_throttle.h" -#include "chrome/browser/supervised_user/classify_url_navigation_throttle.h" -#include "chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.h" #include "chrome/browser/tab_group_sync/tab_group_sync_utils.h" #include "chrome/browser/task_manager/sampling/task_manager_impl.h" #include "chrome/browser/task_manager/task_manager_interface.h" @@ -178,20 +166,14 @@ #include "chrome/browser/translate/translate_service.h" #include "chrome/browser/ui/blocked_content/blocked_window_params.h" #include "chrome/browser/ui/blocked_content/chrome_popup_navigation_delegate.h" -#include "chrome/browser/ui/blocked_content/tab_under_navigation_throttle.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/chrome_select_file_policy.h" #include "chrome/browser/ui/color/chrome_color_id.h" -#include "chrome/browser/ui/lens/lens_overlay_side_panel_navigation_throttle.h" #include "chrome/browser/ui/login/http_auth_coordinator.h" -#include "chrome/browser/ui/login/login_navigation_throttle.h" -#include "chrome/browser/ui/passwords/password_manager_navigation_throttle.h" -#include "chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h" #include "chrome/browser/ui/prefs/pref_watcher.h" #include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" #include "chrome/browser/ui/ui_features.h" -#include "chrome/browser/ui/web_applications/navigation_capturing_redirection_throttle.h" #include "chrome/browser/ui/webid/identity_dialog_controller.h" #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" #include "chrome/browser/ui/webui/internal_debug_pages_disabled/internal_debug_pages_disabled_ui.h" @@ -221,6 +203,7 @@ #include "chrome/common/profiler/process_type.h" #include "chrome/common/profiler/thread_profiler_configuration.h" #include "chrome/common/renderer_configuration.mojom.h" +#include "chrome/common/request_header_integrity/buildflags.h" #include "chrome/common/secure_origin_allowlist.h" #include "chrome/common/url_constants.h" #include "chrome/common/webui_url_constants.h" @@ -234,7 +217,6 @@ #include "components/content_settings/core/browser/content_settings_utils.h" #include "components/content_settings/core/browser/cookie_settings.h" #include "components/content_settings/core/browser/host_content_settings_map.h" -#include "components/content_settings/core/browser/private_network_settings.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/cookie_settings_base.h" @@ -253,12 +235,8 @@ #include "components/error_page/common/error.h" #include "components/error_page/common/error_page_switches.h" #include "components/error_page/common/localized_error.h" -#include "components/error_page/content/browser/net_error_auto_reloader.h" -#include "components/fingerprinting_protection_filter/browser/throttle_manager.h" -#include "components/fingerprinting_protection_filter/common/fingerprinting_protection_filter_features.h" #include "components/google/core/common/google_switches.h" #include "components/heap_profiling/in_process/heap_profiler_controller.h" -#include "components/history/content/browser/visited_link_navigation_throttle.h" #include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h" #include "components/language/core/browser/pref_names.h" @@ -277,15 +255,11 @@ #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" #include "components/no_state_prefetch/common/no_state_prefetch_final_status.h" #include "components/no_state_prefetch/common/no_state_prefetch_url_loader_throttle.h" -#include "components/omnibox/common/omnibox_features.h" -#include "components/page_load_metrics/browser/metrics_navigation_throttle.h" #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" -#include "components/payments/content/payment_handler_navigation_throttle.h" #include "components/payments/content/payment_request_display_manager.h" #include "components/payments/content/secure_payment_confirmation_service_factory.h" #include "components/pdf/common/pdf_util.h" #include "components/permissions/permission_context_base.h" -#include "components/policy/content/policy_blocklist_navigation_throttle.h" #include "components/policy/content/policy_blocklist_service.h" #include "components/policy/core/common/management/management_service.h" #include "components/policy/core/common/policy_pref_names.h" @@ -300,7 +274,6 @@ #include "components/safe_browsing/content/browser/async_check_tracker.h" #include "components/safe_browsing/content/browser/browser_url_loader_throttle.h" #include "components/safe_browsing/content/browser/password_protection/password_protection_commit_deferring_condition.h" -#include "components/safe_browsing/content/browser/ui_manager.h" #include "components/safe_browsing/core/browser/hashprefix_realtime/hash_realtime_service.h" #include "components/safe_browsing/core/browser/realtime/policy_engine.h" #include "components/safe_browsing/core/browser/realtime/url_lookup_service.h" @@ -310,9 +283,6 @@ #include "components/safe_browsing/core/common/hashprefix_realtime/hash_realtime_utils.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" #include "components/search_engines/template_url_service.h" -#include "components/security_interstitials/content/insecure_form_navigation_throttle.h" -#include "components/security_interstitials/content/ssl_error_handler.h" -#include "components/security_interstitials/content/ssl_error_navigation_throttle.h" #include "components/security_state/core/security_state.h" #include "components/services/on_device_translation/buildflags/buildflags.h" #include "components/site_isolation/pref_names.h" @@ -326,7 +296,6 @@ #include "components/variations/variations_switches.h" #include "components/version_info/version_info.h" #include "components/webapps/common/web_app_id.h" -#include "components/webui/chrome_urls/features.h" #include "components/webui/chrome_urls/pref_names.h" #include "content/public/browser/attribution_data_model.h" #include "content/public/browser/browser_accessibility_state.h" @@ -343,10 +312,10 @@ #include "content/public/browser/client_certificate_delegate.h" #include "content/public/browser/digital_identity_provider.h" #include "content/public/browser/file_url_loader.h" +#include "content/public/browser/internal_webui_config.h" #include "content/public/browser/isolated_web_apps_policy.h" #include "content/public/browser/legacy_tech_cookie_issue_details.h" #include "content/public/browser/navigation_handle.h" -#include "content/public/browser/navigation_throttle.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/overlay_window.h" #include "content/public/browser/permission_controller.h" @@ -422,6 +391,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/page_transition_types.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/base/ui_base_features.h" #include "ui/color/color_provider.h" #include "ui/color/color_provider_key.h" #include "ui/gfx/color_utils.h" @@ -432,9 +402,6 @@ #include "url/third_party/mozilla/url_parse.h" #include "url/url_constants.h" -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) -#include "chrome/browser/enterprise/platform_auth/platform_auth_navigation_throttle.h" -#endif #if BUILDFLAG(IS_WIN) #include "base/files/file_util.h" #include "base/strings/string_tokenizer.h" @@ -453,7 +420,6 @@ #elif BUILDFLAG(IS_MAC) #include "chrome/browser/browser_process_platform_part_mac.h" #include "chrome/browser/chrome_browser_main_mac.h" -#include "chrome/browser/mac/auth_session_request.h" #include "chrome/browser/mac/chrome_browser_main_extra_parts_mac.h" #include "components/soda/constants.h" #include "sandbox/mac/sandbox_serializer.h" @@ -474,14 +440,11 @@ #include "chrome/app/chrome_crash_reporter_client.h" #include "chrome/browser/ash/arc/fileapi/arc_content_file_system_backend_delegate.h" #include "chrome/browser/ash/arc/fileapi/arc_documents_provider_backend_delegate.h" -#include "chrome/browser/ash/boca/on_task/on_task_locked_session_navigation_throttle.h" #include "chrome/browser/ash/drive/fileapi/drivefs_file_system_backend_delegate.h" #include "chrome/browser/ash/file_system_provider/fileapi/backend_delegate.h" #include "chrome/browser/ash/fileapi/external_file_url_loader_factory.h" #include "chrome/browser/ash/fileapi/file_system_backend.h" #include "chrome/browser/ash/fileapi/mtp_file_system_backend_delegate.h" -#include "chrome/browser/ash/login/signin/merge_session_navigation_throttle.h" -#include "chrome/browser/ash/login/signin/merge_session_throttling_utils.h" #include "chrome/browser/ash/login/signin_partition_manager.h" #include "chrome/browser/ash/login/startup_utils.h" #include "chrome/browser/ash/main_parts/chrome_browser_main_parts_ash.h" @@ -490,7 +453,6 @@ #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/ash/smb_client/fileapi/smbfs_file_system_backend_delegate.h" #include "chrome/browser/ash/system/input_device_settings.h" -#include "chrome/browser/chromeos/app_mode/kiosk_settings_navigation_throttle.h" #include "chrome/browser/speech/tts_chromeos.h" #include "chrome/browser/speech/tts_controller_delegate_impl.h" #include "chrome/browser/ui/ash/main_extra_parts/chrome_browser_main_extra_parts_ash.h" @@ -513,7 +475,6 @@ #include "base/android/application_status_listener.h" #include "base/android/build_info.h" #include "base/feature_list.h" -#include "chrome/android/features/dev_ui/buildflags.h" #include "chrome/browser/android/customtabs/client_data_header_web_contents_observer.h" #include "chrome/browser/android/devtools_manager_delegate_android.h" #include "chrome/browser/android/ntp/new_tab_page_url_handler.h" @@ -522,7 +483,6 @@ #include "chrome/browser/android/tab_web_contents_delegate_android.h" #include "chrome/browser/chrome_browser_main_android.h" #include "chrome/browser/digital_credentials/digital_identity_provider_android.h" -#include "chrome/browser/download/android/intercept_oma_download_navigation_throttle.h" #include "chrome/browser/flags/android/chrome_feature_list.h" #include "chrome/browser/safe_browsing/android/safe_browsing_referring_app_bridge_android.h" #include "chrome/browser/ui/android/tab_model/tab_model_list.h" @@ -530,7 +490,6 @@ #include "components/browser_ui/accessibility/android/font_size_prefs_android.h" #include "components/crash/content/browser/child_exit_observer_android.h" #include "components/crash/content/browser/crash_memory_metrics_collector_android.h" -#include "components/navigation_interception/intercept_navigation_delegate.h" #include "components/viz/common/features.h" #include "components/viz/common/viz_utils.h" #include "content/public/browser/android/java_interfaces.h" @@ -538,9 +497,6 @@ #include "ui/base/resource/resource_bundle_android.h" #include "ui/base/ui_base_paths.h" #include "ui/display/util/display_util.h" -#if BUILDFLAG(DFMIFY_DEV_UI) -#include "chrome/browser/dev_ui/android/dev_ui_loader_throttle.h" -#endif // BUILDFLAG(DFMIFY_DEV_UI) #elif BUILDFLAG(IS_POSIX) #include "chrome/browser/chrome_browser_main_posix.h" #endif @@ -548,10 +504,7 @@ #if !BUILDFLAG(IS_ANDROID) #include "chrome/browser/digital_credentials/digital_identity_provider_desktop.h" #include "chrome/browser/picture_in_picture/auto_picture_in_picture_tab_helper.h" -#include "chrome/browser/preloading/preview/preview_navigation_throttle.h" -#include "chrome/browser/ui/webui/ntp_microsoft_auth/ntp_microsoft_auth_response_capture_navigation_throttle.h" #include "chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h" -#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" #include "chrome/browser/web_applications/locks/app_lock.h" #include "chrome/browser/web_applications/proto/web_app_install_state.pb.h" @@ -564,10 +517,6 @@ #include "ash/multi_capture/multi_capture_service.h" #include "ash/shell.h" #include "base/debug/leak_annotations.h" -#include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -#include "chrome/browser/apps/intent_helper/chromeos_disabled_apps_throttle.h" -#include "chrome/browser/apps/link_capturing/chromeos_link_capturing_delegate.h" -#include "chrome/browser/apps/link_capturing/chromeos_reimpl_navigation_capturing_throttle.h" #include "chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h" #include "chrome/browser/chromeos/tablet_mode/chrome_content_browser_client_tablet_mode_part.h" #include "chrome/browser/file_system_access/cloud_identifier/cloud_identifier_util_cros.h" @@ -580,10 +529,9 @@ #include "chromeos/components/kiosk/kiosk_utils.h" #include "chromeos/constants/chromeos_features.h" #include "third_party/cros_system_api/switches/chrome_switches.h" -#endif +#endif // BUILDFLAG(IS_CHROMEOS) #if !BUILDFLAG(IS_ANDROID) -#include "chrome/browser/apps/link_capturing/link_capturing_navigation_throttle.h" #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" #include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/direct_sockets/chrome_direct_sockets_delegate.h" @@ -591,17 +539,12 @@ #include "chrome/browser/media/unified_autoplay_config.h" #include "chrome/browser/metrics/usage_scenario/chrome_responsiveness_calculator_delegate.h" #include "chrome/browser/new_tab_page/new_tab_page_util.h" -#include "chrome/browser/page_info/web_view_side_panel_throttle.h" #include "chrome/browser/search/instant_service.h" #include "chrome/browser/search/instant_service_factory.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/chrome_pages.h" -#include "chrome/browser/ui/search/new_tab_page_navigation_throttle.h" -#include "chrome/browser/ui/views/side_panel/read_anything/read_anything_side_panel_navigation_throttle.h" -#include "chrome/browser/ui/web_applications/tabbed_web_app_navigation_throttle.h" -#include "chrome/browser/ui/web_applications/webui_web_app_navigation_throttle.h" #include "chrome/browser/ui/webui/chrome_content_browser_client_webui_part.h" #include "chrome/browser/ui/webui/webui_util_desktop.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_error_page.h" @@ -615,16 +558,11 @@ #include "chrome/browser/webauthn/chrome_authenticator_request_delegate.h" #include "chrome/grit/chrome_unscaled_resources.h" // nogncheck crbug.com/1125897 #include "components/commerce/core/commerce_feature_list.h" -#include "components/lens/lens_features.h" #include "components/password_manager/content/common/web_ui_constants.h" #include "components/password_manager/core/common/password_manager_features.h" #include "services/network/public/mojom/permissions_policy/permissions_policy_feature.mojom.h" #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) -#include "chrome/browser/browser_switcher/browser_switcher_navigation_throttle.h" -#endif - #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #include "components/crash/core/app/crash_switches.h" #include "components/crash/core/app/crashpad.h" @@ -632,27 +570,12 @@ #if BUILDFLAG(IS_ANDROID) #include "components/crash/content/browser/crash_handler_host_linux.h" -#else -#include "chrome/browser/apps/link_capturing/web_app_link_capturing_delegate.h" #endif #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) #include "chrome/browser/enterprise/chrome_browser_main_extra_parts_enterprise.h" -#include "chrome/browser/enterprise/profile_management/oidc_auth_response_capture_navigation_throttle.h" -#include "chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.h" -#include "chrome/browser/enterprise/signin/managed_profile_required_navigation_throttle.h" -#include "chrome/browser/enterprise/webstore/chrome_web_store_navigation_throttle.h" -#include "chrome/browser/enterprise/webstore/features.h" -#include "chrome/browser/ui/webui/app_settings/web_app_settings_navigation_throttle.h" #endif -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ - BUILDFLAG(IS_CHROMEOS) -#include "chrome/browser/enterprise/connectors/device_trust/navigation_throttle.h" -#include "chrome/browser/enterprise/incognito/incognito_navigation_throttle.h" -#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || - // BUILDFLAG(IS_CHROMEOS) - #if defined(TOOLKIT_VIEWS) #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h" #endif @@ -679,7 +602,6 @@ #include "chrome/browser/extensions/chrome_content_browser_client_extensions_part.h" #include "chrome/browser/extensions/chrome_extension_cookies.h" #include "extensions/browser/api/web_request/web_request_api.h" -#include "extensions/browser/extension_navigation_throttle.h" #include "extensions/browser/extension_protocols.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_util.h" @@ -697,7 +619,6 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/accessibility/animation_policy_prefs.h" #include "chrome/browser/extensions/extension_util.h" -#include "chrome/browser/extensions/user_script_listener.h" #include "chrome/browser/speech/extension_api/tts_engine_extension_api.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/web_applications/web_app_utils.h" @@ -711,10 +632,6 @@ #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #endif -#if BUILDFLAG(ENABLE_PLATFORM_APPS) -#include "chrome/browser/apps/platform_apps/platform_app_navigation_redirector.h" -#endif - #if BUILDFLAG(ENABLE_PLUGINS) #include "chrome/browser/plugins/chrome_content_browser_client_plugins_part.h" #include "chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.h" @@ -722,13 +639,11 @@ #if BUILDFLAG(ENABLE_PDF) #include "chrome/browser/pdf/chrome_pdf_stream_delegate.h" -#include "components/pdf/browser/pdf_navigation_throttle.h" #include "components/pdf/browser/pdf_url_loader_request_interceptor.h" #include "components/pdf/common/constants.h" #include "pdf/pdf_features.h" #endif // BUILDFLAG(ENABLE_PDF) - #if BUILDFLAG(ENABLE_MEDIA_REMOTING) #include "chrome/browser/media/cast_remoting_connector.h" #endif @@ -739,25 +654,18 @@ #include "services/video_effects/public/mojom/video_effects_processor.mojom-forward.h" #endif // BUILDFLAG(ENABLE_VIDEO_EFFECTS) -#if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) -#include "chrome/browser/request_header_integrity/request_header_integrity_url_loader_throttle.h" // nogncheck crbug.com/1125897 -#endif - #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_factory.h" #include "chrome/browser/safe_browsing/chrome_password_protection_service.h" #include "chrome/browser/safe_browsing/chrome_ping_manager_factory.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" -#include "chrome/browser/safe_browsing/delayed_warning_navigation_throttle.h" #include "chrome/browser/safe_browsing/safe_browsing_service.h" #include "chrome/browser/safe_browsing/url_lookup_service_factory.h" -#include "components/safe_browsing/content/browser/safe_browsing_navigation_throttle.h" #include "components/safe_browsing/core/browser/realtime/chrome_enterprise_url_lookup_service.h" #endif #if BUILDFLAG(ENABLE_OFFLINE_PAGES) -#include "chrome/browser/offline_pages/offline_page_navigation_throttle.h" #include "chrome/browser/offline_pages/offline_page_tab_helper.h" #include "chrome/browser/offline_pages/offline_page_url_loader_request_interceptor.h" #endif @@ -819,6 +727,10 @@ #include "chrome/browser/on_device_translation/pref_names.h" #endif // BUILDFLAG(ENABLE_ON_DEVICE_TRANSLATION) +#if BUILDFLAG(ENABLE_REQUEST_HEADER_INTEGRITY) +#include "chrome/common/request_header_integrity/request_header_integrity_url_loader_throttle.h" // nogncheck crbug.com/1125897 +#endif + #include "base/win/windows_h_disallowed.h" using blink::mojom::EffectiveConnectionType; @@ -879,40 +791,6 @@ class ChromeBrowserMainExtraPartsThreadNotifier final base::OnceClosure threads_ready_closure_; }; -// Wrapper for SSLErrorHandler::HandleSSLError() that supplies //chrome-level -// parameters. -void HandleSSLErrorWrapper( - content::WebContents* web_contents, - int cert_error, - const net::SSLInfo& ssl_info, - const GURL& request_url, - SSLErrorHandler::BlockingPageReadyCallback blocking_page_ready_callback) { - DCHECK(request_url.SchemeIsCryptographic()); - - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - // Profile should always outlive a WebContents - DCHECK(profile); - - captive_portal::CaptivePortalService* captive_portal_service = nullptr; - -#if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) - captive_portal_service = CaptivePortalServiceFactory::GetForProfile(profile); -#endif - - const bool is_ssl_error_override_allowed_for_origin = - policy::IsOriginInAllowlist(request_url, profile->GetPrefs(), - prefs::kSSLErrorOverrideAllowedForOrigins, - prefs::kSSLErrorOverrideAllowed); - - SSLErrorHandler::HandleSSLError( - web_contents, cert_error, ssl_info, request_url, - std::move(blocking_page_ready_callback), - g_browser_process->network_time_tracker(), captive_portal_service, - std::make_unique(), - is_ssl_error_override_allowed_for_origin); -} - // Cached version of the locale so we can return the locale on the I/O // thread. std::string& GetIOThreadApplicationLocale() { @@ -943,13 +821,15 @@ bool HandleNewTabPageLocationOverride( Profile* profile = Profile::FromBrowserContext(browser_context); // Don't change the URL when incognito mode. - if (profile->IsOffTheRecord()) + if (profile->IsOffTheRecord()) { return false; + } std::string ntp_location = profile->GetPrefs()->GetString(prefs::kNewTabPageLocationOverride); - if (ntp_location.empty()) + if (ntp_location.empty()) { return false; + } url::Component scheme; if (!url::ExtractScheme(ntp_location.data(), static_cast(ntp_location.length()), &scheme)) { @@ -1147,8 +1027,9 @@ void LaunchURL( // If there is no longer a WebContents, the request may have raced with tab // closing. Don't fire the external request. (It may have been a prerender.) content::WebContents* web_contents = web_contents_getter.Run(); - if (!web_contents) + if (!web_contents) { return; + } // Do not launch external requests attached to unswapped no-state prefetchers. prerender::NoStatePrefetchContents* no_state_prefetch_contents = @@ -1165,8 +1046,9 @@ void LaunchURL( ProtocolHandlerRegistryFactory::GetForBrowserContext( web_contents->GetBrowserContext()); if (protocol_handler_registry && - protocol_handler_registry->IsHandledProtocol(url.scheme())) + protocol_handler_registry->IsHandledProtocol(url.scheme())) { return; + } // Sandbox flags // ============= @@ -1310,8 +1192,9 @@ base::FilePath GetModulePath(std::wstring_view module_name) { // expected location of modules for proper installs. const base::FilePath module_path = exe_dir.AppendASCII(chrome::kChromeVersion).Append(module_name); - if (base::PathExists(module_path)) + if (base::PathExists(module_path)) { return module_path; + } // Otherwise, return the path to the module in the current executable's // directory. This is the expected location of modules for dev builds. @@ -1320,49 +1203,23 @@ base::FilePath GetModulePath(std::wstring_view module_name) { #endif // BUILDFLAG(IS_WIN) && !defined(COMPONENT_BUILD) && // !defined(ADDRESS_SANITIZER) -void MaybeAddThrottle( - std::unique_ptr maybe_throttle, - std::vector>* throttles) { - if (maybe_throttle) - throttles->push_back(std::move(maybe_throttle)); -} - #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) void MaybeAddCondition( std::unique_ptr maybe_condition, std::vector>* conditions) { - if (maybe_condition) + if (maybe_condition) { conditions->push_back(std::move(maybe_condition)); + } } #endif -// Returns whether |web_contents| is within a hosted app. -bool IsInHostedApp(WebContents* web_contents) { -#if BUILDFLAG(ENABLE_EXTENSIONS) - Browser* browser = chrome::FindBrowserWithTab(web_contents); - return web_app::AppBrowserController::IsWebApp(browser); -#else - return false; -#endif -} - -bool IsErrorPageAutoReloadEnabled() { - const base::CommandLine& command_line = - *base::CommandLine::ForCurrentProcess(); - if (command_line.HasSwitch(switches::kEnableAutomation)) - return false; - if (command_line.HasSwitch(embedder_support::kEnableAutoReload)) - return true; - if (command_line.HasSwitch(embedder_support::kDisableAutoReload)) - return false; - return true; -} - #if BUILDFLAG(IS_CHROMEOS) void NotifyMultiCaptureStarted(const std::string& label, content::WebContents* web_contents, const webapps::AppId* app_id) { + const url::Origin origin = + url::Origin::Create(web_contents->GetLastCommittedURL()); if (app_id) { CHECK_DEREF(ash::Shell::Get()) .multi_capture_service() @@ -1370,14 +1227,14 @@ void NotifyMultiCaptureStarted(const std::string& label, label, *app_id, web_app::WebAppProvider::GetForWebContents(web_contents) ->registrar_unsafe() - .GetAppShortName(*app_id)); + .GetAppShortName(*app_id), + origin); } else { // TODO(b/319317165): Remove this case once the pivot to web apps is // complete. CHECK_DEREF(ash::Shell::Get()) .multi_capture_service() - ->NotifyMultiCaptureStarted( - label, url::Origin::Create(web_contents->GetLastCommittedURL())); + ->NotifyMultiCaptureStarted(label, origin); } } @@ -1420,35 +1277,6 @@ CreatePopupNavigationDelegate(NavigateParams params) { return std::make_unique(std::move(params)); } -// NOTE: MaybeCreateVisitedLinkNavigationThrottleFor is defined here due to -// usage of Profile code which lives in chrome/. The rest of the -// VisitedLinkNavigationThrottle class lives in components/, which cannot access -// chrome/ code due to layering. -std::unique_ptr -MaybeCreateVisitedLinkNavigationThrottleFor( - content::NavigationHandle* navigation_handle) { - if (!base::FeatureList::IsEnabled( - blink::features::kPartitionVisitedLinkDatabase) && - !base::FeatureList::IsEnabled( - blink::features::kPartitionVisitedLinkDatabaseWithSelfLinks)) { - return nullptr; - } - Profile* profile = Profile::FromBrowserContext( - navigation_handle->GetWebContents()->GetBrowserContext()); - // Off-the-record profiles do not record history or visited links. - if (profile->IsOffTheRecord()) { - return nullptr; - } - history::HistoryService* history_service = - HistoryServiceFactory::GetForProfile(profile, - ServiceAccessType::IMPLICIT_ACCESS); - if (!history_service) { - return nullptr; - } - return std::make_unique( - std::move(navigation_handle), history_service); -} - ChromeContentBrowserClient::PopupNavigationDelegateFactory g_popup_navigation_delegate_factory = &CreatePopupNavigationDelegate; @@ -1495,6 +1323,18 @@ ProfileSelections GetHumanProfileSelections() { .Build(); } +bool IsDefaultSearchEngine(Profile* profile, const GURL& url) { + auto* template_url_service = + TemplateURLServiceFactory::GetForProfile(profile); + + const TemplateURL* default_search_engine = + template_url_service->GetDefaultSearchProvider(); + + return default_search_engine && + template_url_service->IsSearchResultsPageFromDefaultSearchProvider( + url); +} + } // namespace // static @@ -1650,8 +1490,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterBooleanPref( policy::policy_prefs::kForcePermissionPolicyUnloadDefaultEnabled, false); -#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || \ - BUILDFLAG(IS_LINUX) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) registry->RegisterListPref(prefs::kMandatoryExtensionsForIncognitoNavigation); #endif @@ -1667,6 +1506,9 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterBooleanPref(prefs::kReduceAcceptLanguageEnabled, true); registry->RegisterBooleanPref(policy::policy_prefs::kBuiltInAIAPIsEnabled, true); + registry->RegisterBooleanPref( + prefs::kClearWindowNameForNewBrowsingContextGroup, true); + registry->RegisterBooleanPref(prefs::kPrefetchWithServiceWorkerEnabled, true); } // static @@ -1795,14 +1637,16 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { bool add_profiles_extra_parts = true; #if BUILDFLAG(IS_ANDROID) - if (startup_data_.HasBuiltProfilePrefService()) + if (startup_data_.HasBuiltProfilePrefService()) { add_profiles_extra_parts = false; + } #endif - if (add_profiles_extra_parts) + if (add_profiles_extra_parts) { AddProfilesExtraParts(main_parts.get()); + } - // Construct additional browser parts. Stages are called in the order in - // which they are added. + // Construct additional browser parts. Stages are called in the order in + // which they are added. #if defined(TOOLKIT_VIEWS) #if BUILDFLAG(IS_LINUX) main_parts->AddParts( @@ -1991,8 +1835,10 @@ void ChromeContentBrowserClient::RenderProcessWillLaunch( // The RendereUpdater might be null for some irregular profiles, e.g. the // System Profile. - if (RendererUpdater* service = RendererUpdaterFactory::GetForProfile(profile)) + if (RendererUpdater* service = + RendererUpdaterFactory::GetForProfile(profile)) { service->InitializeRenderer(host); + } for (auto& part : extra_parts_) { part->RenderProcessWillLaunch(host); @@ -2003,22 +1849,25 @@ GURL ChromeContentBrowserClient::GetEffectiveURL( content::BrowserContext* browser_context, const GURL& url) { Profile* profile = Profile::FromBrowserContext(browser_context); - if (!profile) + if (!profile) { return url; + } #if !BUILDFLAG(IS_ANDROID) // If the input |url| should be assigned to the Instant renderer, make its // effective URL distinct from other URLs on the search provider's domain. // This needs to happen even if |url| corresponds to an isolated origin; see // https://crbug.com/755595. - if (search::ShouldAssignURLToInstantRenderer(url, profile)) + if (search::ShouldAssignURLToInstantRenderer(url, profile)) { return search::GetEffectiveURLForInstant(url, profile); + } #endif #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (ChromeContentBrowserClientExtensionsPart::AreExtensionsDisabledForProfile( - profile)) + profile)) { return url; + } return ChromeContentBrowserClientExtensionsPart::GetEffectiveURL(profile, url); @@ -2055,8 +1904,9 @@ bool ChromeContentBrowserClient::ShouldUseProcessPerSite( content::BrowserContext* browser_context, const GURL& site_url) { Profile* profile = Profile::FromBrowserContext(browser_context); - if (!profile) + if (!profile) { return false; + } // NTP should use process-per-site. This is a performance optimization to // reduce process count associated with NTP tabs. @@ -2066,14 +1916,16 @@ bool ChromeContentBrowserClient::ShouldUseProcessPerSite( } #if !BUILDFLAG(IS_ANDROID) - if (search::ShouldUseProcessPerSiteForInstantSiteURL(site_url, profile)) + if (search::ShouldUseProcessPerSiteForInstantSiteURL(site_url, profile)) { return true; + } #endif #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (ChromeContentBrowserClientExtensionsPart::ShouldUseProcessPerSite( - profile, site_url)) + profile, site_url)) { return true; + } #endif // Non-extension, non-NTP URLs should generally use process-per-site-instance @@ -2081,6 +1933,22 @@ bool ChromeContentBrowserClient::ShouldUseProcessPerSite( return false; } +bool ChromeContentBrowserClient:: + ShouldReuseExistingProcessForNewMainFrameSiteInstance( + content::BrowserContext* browser_context, + const GURL& site_instance_original_url) { + // When `kProcessPerSiteForDSE` is disabled, + // `ProcessPerSiteUpToMainFrameThreshold` can be used for any site. + if (!base::FeatureList::IsEnabled(features::kProcessPerSiteForDSE)) { + return true; + } + + Profile* profile = Profile::FromBrowserContext(browser_context); + CHECK(profile); + + return IsDefaultSearchEngine(profile, site_instance_original_url); +} + bool ChromeContentBrowserClient::ShouldAllowProcessPerSiteForMultipleMainFrames( content::BrowserContext* browser_context) { #if !BUILDFLAG(IS_ANDROID) @@ -2113,14 +1981,15 @@ bool ChromeContentBrowserClient::ShouldAllowProcessPerSiteForMultipleMainFrames( return true; } -std::optional< - content::ContentBrowserClient::SpareProcessRefusedByEmbedderReason> -ChromeContentBrowserClient::ShouldUseSpareRenderProcessHost( +bool ChromeContentBrowserClient::ShouldUseSpareRenderProcessHost( content::BrowserContext* browser_context, - const GURL& site_url) { + const GURL& site_url, + std::optional& refused_reason) { + refused_reason = std::nullopt; Profile* profile = Profile::FromBrowserContext(browser_context); if (!profile) { - return SpareProcessRefusedByEmbedderReason::NoProfile; + refused_reason = SpareProcessRefusedByEmbedderReason::NoProfile; + return false; } #if !BUILDFLAG(IS_ANDROID) @@ -2132,17 +2001,20 @@ ChromeContentBrowserClient::ShouldUseSpareRenderProcessHost( // The NTP page chrome://new-tab-page and chrome://new-tab-page-third-party // are using WebUI and will not use instant renderer. // The only usecase is chrome-search:// URLs. - return SpareProcessRefusedByEmbedderReason::InstantRendererForNewTabPage; + refused_reason = + SpareProcessRefusedByEmbedderReason::InstantRendererForNewTabPage; + return false; } #endif #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (!ChromeContentBrowserClientExtensionsPart:: ShouldUseSpareRenderProcessHost(profile, site_url)) { - return SpareProcessRefusedByEmbedderReason::ExtensionProcess; + refused_reason = SpareProcessRefusedByEmbedderReason::ExtensionProcess; + return false; } #endif - return std::nullopt; + return true; } bool ChromeContentBrowserClient::DoesSiteRequireDedicatedProcess( @@ -2200,8 +2072,9 @@ bool ChromeContentBrowserClient::ShouldTreatURLSchemeAsFirstPartyWhenTopLevel( // intervening frames. For example, this is needed for browser UI to interact // with SameSite cookies on accounts.google.com, which is used for displaying // a list of available accounts on the NTP (chrome://new-tab-page), etc. - if (is_embedded_origin_secure && scheme == content::kChromeUIScheme) + if (is_embedded_origin_secure && scheme == content::kChromeUIScheme) { return true; + } #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) return scheme == extensions::kExtensionScheme; #else @@ -2232,8 +2105,9 @@ std::string ChromeContentBrowserClient::GetSiteDisplayNameForCdmProcess( extensions::ExtensionRegistry::Get(browser_context) ->enabled_extensions() .GetExtensionOrAppByURL(site_url); - if (extension) + if (extension) { name = extension->name(); + } } #endif // BUILDFLAG(ENABLE_EXTENSIONS_CORE) @@ -2285,13 +2159,16 @@ void ChromeContentBrowserClient::GetAdditionalViewSourceSchemes( network::mojom::IPAddressSpace ChromeContentBrowserClient::DetermineAddressSpaceFromURL(const GURL& url) { - if (url.SchemeIs(chrome::kChromeSearchScheme)) + if (url.SchemeIs(chrome::kChromeSearchScheme)) { return network::mojom::IPAddressSpace::kLocal; - if (url.SchemeIs(dom_distiller::kDomDistillerScheme)) + } + if (url.SchemeIs(dom_distiller::kDomDistillerScheme)) { return network::mojom::IPAddressSpace::kPublic; + } #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) - if (url.SchemeIs(extensions::kExtensionScheme)) + if (url.SchemeIs(extensions::kExtensionScheme)) { return network::mojom::IPAddressSpace::kLocal; + } #endif return network::mojom::IPAddressSpace::kUnknown; @@ -2402,8 +2279,9 @@ bool ChromeContentBrowserClient::IsSuitableHost( Profile::FromBrowserContext(process_host->GetBrowserContext()); // This may be nullptr during tests. In that case, just assume any site can // share any host. - if (!profile) + if (!profile) { return true; + } #if !BUILDFLAG(IS_ANDROID) // Instant URLs should only be in the instant process and instant process @@ -2415,8 +2293,9 @@ bool ChromeContentBrowserClient::IsSuitableHost( instant_service->IsInstantProcess(process_host->GetDeprecatedID()); bool should_be_in_instant_process = search::ShouldAssignURLToInstantRenderer(site_url, profile); - if (is_instant_process || should_be_in_instant_process) + if (is_instant_process || should_be_in_instant_process) { return is_instant_process && should_be_in_instant_process; + } } #endif @@ -2511,8 +2390,9 @@ void ChromeContentBrowserClient::SiteInstanceGotProcessAndSite( Profile* profile = Profile::FromBrowserContext(site_instance->GetBrowserContext()); - if (!profile) + if (!profile) { return; + } #if !BUILDFLAG(IS_ANDROID) // Remember the ID of the Instant process to signal the renderer process @@ -2521,8 +2401,9 @@ void ChromeContentBrowserClient::SiteInstanceGotProcessAndSite( profile)) { InstantService* instant_service = InstantServiceFactory::GetForProfile(profile); - if (instant_service) + if (instant_service) { instant_service->AddInstantProcess(site_instance->GetProcess()); + } } #endif @@ -2615,10 +2496,13 @@ bool ChromeContentBrowserClient::ShouldDisableOriginIsolation() { std::vector ChromeContentBrowserClient::GetAdditionalSiteIsolationModes() { std::vector modes; - if (site_isolation::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()) + if (site_isolation::SiteIsolationPolicy:: + IsIsolationForPasswordSitesEnabled()) { modes.push_back("Password Sites"); - if (site_isolation::SiteIsolationPolicy::IsIsolationForOAuthSitesEnabled()) + } + if (site_isolation::SiteIsolationPolicy::IsIsolationForOAuthSitesEnabled()) { modes.push_back("Logged-in Sites"); + } return modes; } @@ -2772,8 +2656,9 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( command_line->AppendSwitchASCII(switches::kEnableCrashReporter, switch_value); #endif - if (logging::DialogsAreSuppressed()) + if (logging::DialogsAreSuppressed()) { command_line->AppendSwitch(switches::kNoErrorDialogs); + } std::string process_type = command_line->GetSwitchValueASCII(switches::kProcessType); @@ -2831,8 +2716,9 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( command_line->AppendSwitch(switches::kDisable3DAPIs); } - if (prefs->GetBoolean(prefs::kPrintPreviewDisabled)) + if (prefs->GetBoolean(prefs::kPrintPreviewDisabled)) { command_line->AppendSwitch(switches::kDisablePrintPreview); + } if (prefs->GetBoolean(prefs::kDataUrlInSvgUseEnabled)) { command_line->AppendSwitch(blink::switches::kDataUrlInSvgUseEnabled); @@ -2897,8 +2783,9 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( switches::kSharedArrayBufferUnrestrictedAccessAllowed); } #endif - if (!prefs->GetBoolean(prefs::kSandboxExternalProtocolBlocked)) + if (!prefs->GetBoolean(prefs::kSandboxExternalProtocolBlocked)) { command_line->AppendSwitch(kDisableSandboxExternalProtocolSwitch); + } if (prefs->HasPrefPath(prefs::kAllowDinosaurEasterEgg) && !prefs->GetBoolean(prefs::kAllowDinosaurEasterEgg)) { @@ -3075,8 +2962,9 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( // If --ignore-gpu-blocklist is passed in, don't send in crash reports // because GPU is expected to be unreliable. if (browser_command_line.HasSwitch(switches::kIgnoreGpuBlocklist) && - !command_line->HasSwitch(switches::kDisableBreakpad)) + !command_line->HasSwitch(switches::kDisableBreakpad)) { command_line->AppendSwitch(switches::kDisableBreakpad); + } } #if BUILDFLAG(IS_CHROMEOS) @@ -3146,8 +3034,9 @@ ChromeContentBrowserClient::GetQuarantineConnectionCallback() { } std::string ChromeContentBrowserClient::GetApplicationLocale() { - if (BrowserThread::CurrentlyOn(BrowserThread::IO)) + if (BrowserThread::CurrentlyOn(BrowserThread::IO)) { return GetIOThreadApplicationLocale(); + } return g_browser_process->GetApplicationLocale(); } @@ -3163,8 +3052,9 @@ gfx::ImageSkia ChromeContentBrowserClient::GetDefaultFavicon() { bool ChromeContentBrowserClient::IsDataSaverEnabled( content::BrowserContext* browser_context) { - if (!browser_context || browser_context->IsOffTheRecord()) + if (!browser_context || browser_context->IsOffTheRecord()) { return false; + } return data_saver::IsDataSaverEnabled(); } @@ -3183,6 +3073,7 @@ ChromeContentBrowserClient::AllowServiceWorker( const GURL& scope, const net::SiteForCookies& site_for_cookies, const std::optional& top_frame_origin, + const blink::StorageKey& storage_key, const GURL& script_url, content::BrowserContext* context) { DCHECK(context); @@ -3206,7 +3097,8 @@ ChromeContentBrowserClient::AllowServiceWorker( scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile(profile); return embedder_support::AllowServiceWorker( - scope, site_for_cookies, top_frame_origin, cookie_settings.get(), + scope, site_for_cookies, top_frame_origin, storage_key, + cookie_settings.get(), HostContentSettingsMapFactory::GetForProfile(profile)); } @@ -3268,8 +3160,9 @@ bool ChromeContentBrowserClient::DoesSchemeAllowCrossOriginSharedWorker( const std::string& scheme) { #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) // Extensions are allowed to start cross-origin shared workers. - if (scheme == extensions::kExtensionScheme) + if (scheme == extensions::kExtensionScheme) { return true; + } #endif return false; @@ -3330,14 +3223,15 @@ void ChromeContentBrowserClient::AllowWorkerFileSystem( const GURL& url, content::BrowserContext* browser_context, const std::vector& render_frames, + const blink::StorageKey& storage_key, base::OnceCallback callback) { // An empty list is passed for render_frames here since we manually notify // PageSpecificContentSettings that the file system was accessed below. scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile( Profile::FromBrowserContext(browser_context)); - bool allow = - embedder_support::AllowWorkerFileSystem(url, {}, cookie_settings.get()); + bool allow = embedder_support::AllowWorkerFileSystem( + url, {}, cookie_settings.get(), storage_key); #if BUILDFLAG(ENABLE_GUEST_VIEW) GuestPermissionRequestHelper(url, render_frames, std::move(callback), allow); #else @@ -3356,13 +3250,15 @@ void ChromeContentBrowserClient::GuestPermissionRequestHelper( bool has_web_view_guest = false; // Record access to file system for potential display in UI. for (const auto& it : render_frames) { - if (process_map.find(it.child_id) != process_map.end()) + if (process_map.find(it.child_id) != process_map.end()) { continue; + } process_map.insert(std::pair(it.child_id, it.frame_routing_id)); - if (extensions::WebViewRendererState::GetInstance()->IsGuest(it.child_id)) + if (extensions::WebViewRendererState::GetInstance()->IsGuest(it.child_id)) { has_web_view_guest = true; + } } if (!has_web_view_guest) { FileSystemAccessed(url, render_frames, std::move(callback), allow); @@ -3404,33 +3300,37 @@ void ChromeContentBrowserClient::FileSystemAccessed( bool ChromeContentBrowserClient::AllowWorkerIndexedDB( const GURL& url, content::BrowserContext* browser_context, - const std::vector& render_frames) { + const std::vector& render_frames, + const blink::StorageKey& storage_key) { scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile( Profile::FromBrowserContext(browser_context)); - return embedder_support::AllowWorkerIndexedDB(url, render_frames, - cookie_settings.get()); + return embedder_support::AllowWorkerIndexedDB( + url, render_frames, cookie_settings.get(), storage_key); } bool ChromeContentBrowserClient::AllowWorkerCacheStorage( const GURL& url, content::BrowserContext* browser_context, - const std::vector& render_frames) { + const std::vector& render_frames, + const blink::StorageKey& storage_key) { scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile( Profile::FromBrowserContext(browser_context)); - return embedder_support::AllowWorkerCacheStorage(url, render_frames, - cookie_settings.get()); + return embedder_support::AllowWorkerCacheStorage( + url, render_frames, cookie_settings.get(), storage_key); } bool ChromeContentBrowserClient::AllowWorkerWebLocks( const GURL& url, content::BrowserContext* browser_context, - const std::vector& render_frames) { + const std::vector& render_frames, + const blink::StorageKey& storage_key) { scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile( Profile::FromBrowserContext(browser_context)); - return embedder_support::AllowWorkerWebLocks(url, cookie_settings.get()); + return embedder_support::AllowWorkerWebLocks(url, cookie_settings.get(), + storage_key); } ChromeContentBrowserClient::AllowWebBluetoothResult @@ -3551,8 +3451,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( auto* privacy_sandbox_settings = PrivacySandboxSettingsFactory::GetForProfile(profile); - if (!privacy_sandbox_settings) + if (!privacy_sandbox_settings) { return false; + } switch (operation) { case AttributionReportingOperation::kSource: @@ -3753,7 +3654,8 @@ bool ChromeContentBrowserClient::IsFullCookieAccessAllowed( content::BrowserContext* browser_context, content::WebContents* web_contents, const GURL& url, - const blink::StorageKey& storage_key) { + const blink::StorageKey& storage_key, + net::CookieSettingOverrides overrides) { Profile* profile = Profile::FromBrowserContext(browser_context); scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile(profile); @@ -3762,8 +3664,15 @@ bool ChromeContentBrowserClient::IsFullCookieAccessAllowed( } return cookie_settings->IsFullCookieAccessAllowed( url, storage_key.ToNetSiteForCookies(), - url::Origin::Create(storage_key.top_level_site().GetURL()), - cookie_settings->SettingOverridesForStorage()); + url::Origin::Create(storage_key.top_level_site().GetURL()), overrides, + storage_key.ToCookiePartitionKey()); +} + +bool ChromeContentBrowserClient::IsPrefetchWithServiceWorkerAllowed( + content::BrowserContext* browser_context) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + Profile* profile = Profile::FromBrowserContext(browser_context); + return profile->GetPrefs()->GetBoolean(prefs::kPrefetchWithServiceWorkerEnabled); } void ChromeContentBrowserClient::GrantCookieAccessDueToHeuristic( @@ -3784,6 +3693,21 @@ void ChromeContentBrowserClient::GrantCookieAccessDueToHeuristic( /*use_schemeless_patterns=*/ignore_schemes); } +bool ChromeContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed( + content::BrowserContext* browser_context, + content::WebContents* web_contents) { + Profile* profile = Profile::FromBrowserContext(browser_context); + scoped_refptr cookie_settings = + CookieSettingsFactory::GetForProfile(profile); + // If there are no cookie settings to block third-party cookies, they will be + // allowed by default. Cookie settings should always exist in Chrome, unless + // navigating through the profile picker. + if (!cookie_settings) { + return true; + } + return !cookie_settings->ShouldBlockThirdPartyCookies(); +} + bool ChromeContentBrowserClient::CanSendSCTAuditingReport( content::BrowserContext* browser_context) { return SCTReportingService::CanSendSCTAuditingReport(); @@ -3799,8 +3723,9 @@ ChromeContentBrowserClient::GetSystemSharedURLLoaderFactory() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || !BrowserThread::IsThreadInitialized(BrowserThread::UI)); - if (!SystemNetworkContextManager::GetInstance()) + if (!SystemNetworkContextManager::GetInstance()) { return nullptr; + } return SystemNetworkContextManager::GetInstance() ->GetSharedURLLoaderFactory(); @@ -3851,8 +3776,9 @@ ChromeContentBrowserClient::GetGeneratedCodeCacheSettings( size_in_bytes = local_state->GetInteger(prefs::kDiskCacheSize); base::FilePath disk_cache_dir = local_state->GetFilePath(prefs::kDiskCacheDir); - if (!disk_cache_dir.empty()) + if (!disk_cache_dir.empty()) { cache_path = disk_cache_dir.Append(cache_path.BaseName()); + } } return content::GeneratedCodeCacheSettings(true, size_in_bytes, cache_path); } @@ -3896,8 +3822,9 @@ void ChromeContentBrowserClient::AllowCertificateError( // have a context for making the right decision, so block the // request hard, without an info bar to allow showing the insecure // content. - if (!callback.is_null()) + if (!callback.is_null()) { std::move(callback).Run(content::CERTIFICATE_REQUEST_RESULT_TYPE_DENY); + } return; } @@ -4043,7 +3970,7 @@ bool UpdatePreferredColorScheme(WebPreferences* web_prefs, // Incognito contents follow the device color mode. if (profile->IsIncognitoProfile() && !content::HasWebUIScheme(url)) { web_prefs->preferred_color_scheme = - ToBlinkPreferredColorScheme(native_theme->GetPreferredColorScheme()); + ToBlinkPreferredColorScheme(native_theme->GetPreferredColorScheme()); } else { // WebUI and regular pages follow the browser theme color mode, provided by // the color provider. @@ -4125,8 +4052,9 @@ bool ShouldPromptOnMultipleMatchingCertificates(const Profile* profile) { DCHECK(prefs); const PrefService::Preference* pref = prefs->FindPreference(prefs::kPromptOnMultipleMatchingCertificates); - if (pref && pref->IsManaged() && pref->GetValue()->is_bool()) + if (pref && pref->IsManaged() && pref->GetValue()->is_bool()) { return pref->GetValue()->GetBool(); + } return false; } @@ -4343,8 +4271,9 @@ bool ChromeContentBrowserClient::CanCreateWindow( // just the origin. const Extension* extension = registry->enabled_extensions().GetExtensionOrAppByURL(opener_url); - if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) + if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) { *no_javascript_access = true; + } #endif return true; @@ -4410,9 +4339,10 @@ void ChromeContentBrowserClient::MaybeOverrideManifest( Profile* profile = Profile::FromBrowserContext(render_frame_host->GetBrowserContext()); auto* provider = web_app::WebAppProvider::GetForWebApps(profile); - if (provider) + if (provider) { provider->policy_manager().MaybeOverrideManifest(render_frame_host, manifest); + } #endif } @@ -4482,14 +4412,17 @@ void ChromeContentBrowserClient::OverrideWebPreferences( prefs->GetBoolean(prefs::kWebKitJavascriptCanAccessClipboard); web_prefs->tabs_to_links = prefs->GetBoolean(prefs::kWebkitTabsToLinks); - if (!prefs->GetBoolean(prefs::kWebKitJavascriptEnabled)) + if (!prefs->GetBoolean(prefs::kWebKitJavascriptEnabled)) { web_prefs->javascript_enabled = false; + } - if (!prefs->GetBoolean(prefs::kWebKitWebSecurityEnabled)) + if (!prefs->GetBoolean(prefs::kWebKitWebSecurityEnabled)) { web_prefs->web_security_enabled = false; + } - if (!prefs->GetBoolean(prefs::kWebKitPluginsEnabled)) + if (!prefs->GetBoolean(prefs::kWebKitPluginsEnabled)) { web_prefs->plugins_enabled = false; + } web_prefs->loads_images_automatically = prefs->GetBoolean(prefs::kWebKitLoadsImagesAutomatically); @@ -4597,8 +4530,9 @@ void ChromeContentBrowserClient::OverrideWebPreferences( // web_app_scope value is platform specific. #if BUILDFLAG(IS_ANDROID) - if (delegate) + if (delegate) { web_prefs->web_app_scope = delegate->GetManifestScope(); + } #elif BUILDFLAG(ENABLE_EXTENSIONS) { web_prefs->web_app_scope = GURL(); @@ -4723,13 +4657,18 @@ void ChromeContentBrowserClient::OverrideWebPreferences( prefs->GetBoolean(prefs::kWebXRImmersiveArEnabled); #endif + web_prefs->touch_drag_drop_enabled = + base::FeatureList::IsEnabled(features::kTouchDragAndDrop); + +#if BUILDFLAG(IS_WIN) + web_prefs->touch_dragend_context_menu = + base::FeatureList::IsEnabled(features::kTouchDragAndDrop); +#endif + for (auto& parts : extra_parts_) { parts->OverrideWebPreferences(web_contents, main_frame_site, web_prefs); } - // TODO(crbug.com/395838064): Cleanup WebSQL WebPreference. - web_prefs->databases_enabled = false; - web_prefs->prefers_default_scrollbar_styles = prefs->GetBoolean(prefs::kPrefersDefaultScrollbarStyles); #if BUILDFLAG(IS_ANDROID) @@ -5065,8 +5004,9 @@ std::wstring ChromeContentBrowserClient::GetAppContainerSidForSandboxType( // TODO(wfh): Add support for more process types here. crbug.com/499523 switch (sandbox_type) { case sandbox::mojom::Sandbox::kRenderer: - if (flags & AppContainerFlags::kAppContainerFlagDisableAppContainer) + if (flags & AppContainerFlags::kAppContainerFlagDisableAppContainer) { return std::wstring(); + } return std::wstring(install_static::GetSandboxSidPrefix()) + L"129201922"; case sandbox::mojom::Sandbox::kUtility: return std::wstring(); @@ -5118,8 +5058,9 @@ bool ChromeContentBrowserClient::IsAppContainerDisabled( const PrefService::Preference* pref = local_state->FindPreference(iter->second); // App Container is disabled if managed pref is set to false. - if (pref && pref->IsManaged() && !pref->GetValue()->GetBool()) + if (pref && pref->IsManaged() && !pref->GetValue()->GetBool()) { return true; + } return false; } @@ -5192,27 +5133,32 @@ bool ChromeContentBrowserClient::PreSpawnChild( break; } - if (!enforce_code_integrity) + if (!enforce_code_integrity) { return true; + } // Only enable signing mitigation if launching from chrome.exe. base::FilePath exe_path; - if (!base::PathService::Get(base::FILE_EXE, &exe_path)) + if (!base::PathService::Get(base::FILE_EXE, &exe_path)) { return true; - if (chrome::kBrowserProcessExecutableName != exe_path.BaseName().value()) + } + if (chrome::kBrowserProcessExecutableName != exe_path.BaseName().value()) { return true; + } sandbox::MitigationFlags mitigations = config->GetProcessMitigations(); mitigations |= sandbox::MITIGATION_FORCE_MS_SIGNED_BINS; sandbox::ResultCode result = config->SetProcessMitigations(mitigations); - if (result != sandbox::SBOX_ALL_OK) + if (result != sandbox::SBOX_ALL_OK) { return false; + } // Allow loading Chrome's DLLs. for (const auto* dll : {chrome::kBrowserResourcesDll, chrome::kElfDll}) { result = config->AllowExtraDll(GetModulePath(dll).value().c_str()); - if (result != sandbox::SBOX_ALL_OK) + if (result != sandbox::SBOX_ALL_OK) { return false; + } } #endif // !defined(COMPONENT_BUILD) && !defined(ADDRESS_SANITIZER) return true; @@ -5240,8 +5186,9 @@ bool ChromeContentBrowserClient::IsRendererCodeIntegrityEnabled() { // should be reviewed by the security team. bool ChromeContentBrowserClient::IsUtilityCetCompatible( const std::string& utility_sub_type) { - if (utility_sub_type == chrome::mojom::UtilWin::Name_) + if (utility_sub_type == chrome::mojom::UtilWin::Name_) { return false; + } return true; } @@ -5337,413 +5284,9 @@ void ChromeContentBrowserClient::RemovePresentationObserver( } } -std::vector> -ChromeContentBrowserClient::CreateThrottlesForNavigation( - content::NavigationHandle* handle) { - std::vector> throttles; - - // MetricsNavigationThrottle requires that it runs before NavigationThrottles - // that may delay or cancel navigations, so only NavigationThrottles that - // don't delay or cancel navigations (e.g. throttles that are only observing - // callbacks without affecting navigation behavior) should be added before - // MetricsNavigationThrottle. - if (handle->IsInMainFrame()) { - throttles.push_back( - page_load_metrics::MetricsNavigationThrottle::Create(handle)); - } - -#if BUILDFLAG(IS_ANDROID) - // TODO(davidben): This is insufficient to integrate with prerender properly. - // https://crbug.com/370595 - prerender::NoStatePrefetchContents* no_state_prefetch_contents = - prerender::ChromeNoStatePrefetchContentsDelegate::FromWebContents( - handle->GetWebContents()); - if (!no_state_prefetch_contents) { - MaybeAddThrottle( - navigation_interception::InterceptNavigationDelegate:: - MaybeCreateThrottleFor( - handle, navigation_interception::SynchronyMode::kAsync), - &throttles); - } - throttles.push_back(InterceptOMADownloadNavigationThrottle::Create(handle)); - -#if BUILDFLAG(DFMIFY_DEV_UI) - // If the DevUI DFM is already installed, then this is a no-op, except for the - // side effect of ensuring that the DevUI DFM is loaded. - MaybeAddThrottle(dev_ui::DevUiLoaderThrottle::MaybeCreateThrottleFor(handle), - &throttles); -#endif // BUILDFLAG(DFMIFY_DEV_UI) - -#elif BUILDFLAG(ENABLE_PLATFORM_APPS) - // Redirect some navigations to apps that have registered matching URL - // handlers ('url_handlers' in the manifest). - MaybeAddThrottle( - PlatformAppNavigationRedirector::MaybeCreateThrottleFor(handle), - &throttles); -#endif - -#if BUILDFLAG(IS_CHROMEOS) - // Check if we need to add merge session throttle. This throttle will postpone - // loading of main frames. - if (handle->IsInMainFrame()) { - // Add interstitial page while merge session process (cookie reconstruction - // from OAuth2 refresh token in ChromeOS login) is still in progress while - // we are attempting to load a google property. - if (ash::merge_session_throttling_utils::ShouldAttachNavigationThrottle() && - !ash::merge_session_throttling_utils::AreAllSessionMergedAlready() && - handle->GetURL().SchemeIsHTTPOrHTTPS()) { - throttles.push_back(ash::MergeSessionNavigationThrottle::Create(handle)); - } - } - - auto disabled_app_throttle = - apps::ChromeOsDisabledAppsThrottle::MaybeCreate(handle); - if (disabled_app_throttle) { - throttles.push_back(std::move(disabled_app_throttle)); - } -#endif // BUILDFLAG(IS_CHROMEOS) - -#if !BUILDFLAG(IS_ANDROID) - std::unique_ptr - link_capturing_delegate; - -#if BUILDFLAG(IS_CHROMEOS) - link_capturing_delegate = - std::make_unique(); -#else - link_capturing_delegate = - std::make_unique(); -#endif - std::unique_ptr url_to_apps_throttle = - apps::LinkCapturingNavigationThrottle::MaybeCreate( - handle, std::move(link_capturing_delegate)); - if (url_to_apps_throttle) { - throttles.push_back(std::move(url_to_apps_throttle)); - } - -#if BUILDFLAG(IS_CHROMEOS) - // TODO(crbug.com/366547977): This currently does nothing and allows all - // navigations to proceed if v2 is enabled on ChromeOS. Implement. - std::unique_ptr - chromeos_reimpl_navigation_throttle = - apps::ChromeOsReimplNavigationCapturingThrottle::MaybeCreate(handle); - if (chromeos_reimpl_navigation_throttle) { - // Verify the v1 throttle has not been created. - CHECK_EQ(url_to_apps_throttle, nullptr); - throttles.push_back(std::move(chromeos_reimpl_navigation_throttle)); - } -#endif // BUILDFLAG(IS_CHROMEOS) - - std::unique_ptr - navigation_capturing_redirection_throttle = - web_app::NavigationCapturingRedirectionThrottle::MaybeCreate(handle); - if (navigation_capturing_redirection_throttle) { - throttles.push_back(std::move(navigation_capturing_redirection_throttle)); - } -#endif // !BUILDFLAG(IS_ANDROID) - - Profile* profile = Profile::FromBrowserContext( - handle->GetWebContents()->GetBrowserContext()); - -#if BUILDFLAG(ENABLE_EXTENSIONS) - if (!ChromeContentBrowserClientExtensionsPart:: - AreExtensionsDisabledForProfile(profile)) { - throttles.push_back( - std::make_unique(handle)); - - MaybeAddThrottle(extensions::ExtensionsBrowserClient::Get() - ->GetUserScriptListener() - ->CreateNavigationThrottle(handle), - &throttles); - } -#endif - -#if BUILDFLAG(ENABLE_GUEST_VIEW) - MaybeAddThrottle( - extensions::WebViewGuest::MaybeCreateNavigationThrottle(handle), - &throttles); -#endif - - MaybeAddThrottle( - SupervisedUserGoogleAuthNavigationThrottle::MaybeCreate(handle), - &throttles); - - MaybeAddThrottle( - supervised_user::MaybeCreateClassifyUrlNavigationThrottleFor(handle), - &throttles); - - if (auto* throttle_manager = - subresource_filter::ContentSubresourceFilterThrottleManager:: - FromNavigationHandle(*handle)) { - throttle_manager->MaybeAppendNavigationThrottles(handle, &throttles); - } - - if (fingerprinting_protection_filter::features:: - IsFingerprintingProtectionEnabledForIncognitoState( - profile ? profile->IsIncognitoProfile() : false)) { - if (auto* throttle_manager = fingerprinting_protection_filter:: - ThrottleManager::FromNavigationHandle(*handle)) { - throttle_manager->MaybeAppendNavigationThrottles(handle, &throttles); - } - } - - MaybeAddThrottle( - LookalikeUrlNavigationThrottle::MaybeCreateNavigationThrottle(handle), - &throttles); - - MaybeAddThrottle(PDFIFrameNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); -#if BUILDFLAG(ENABLE_PDF) - throttles.push_back(std::make_unique( - handle, std::make_unique())); -#endif // BUILDFLAG(ENABLE_PDF) - - MaybeAddThrottle(TabUnderNavigationThrottle::MaybeCreate(handle), &throttles); - - MaybeAddThrottle( - WellKnownChangePasswordNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - - MaybeAddThrottle( - PasswordManagerNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - - throttles.push_back(std::make_unique( - handle, handle->GetWebContents()->GetBrowserContext())); - - // Before setting up SSL error detection, configure SSLErrorHandler to invoke - // the relevant extension API whenever an SSL interstitial is shown. - SSLErrorHandler::SetClientCallbackOnInterstitialsShown( - base::BindRepeating(&MaybeTriggerSecurityInterstitialShownEvent)); - throttles.push_back(std::make_unique( - handle, - base::BindOnce(&HandleSSLErrorWrapper), base::BindOnce(&IsInHostedApp), - base::BindOnce( - &ShouldIgnoreSslInterstitialBecauseNavigationDefaultedToHttps))); - - throttles.push_back(std::make_unique(handle)); - - if (base::FeatureList::IsEnabled(omnibox::kDefaultTypedNavigationsToHttps)) { - MaybeAddThrottle( - TypedNavigationUpgradeThrottle::MaybeCreateThrottleFor(handle), - &throttles); - } - -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) - MaybeAddThrottle( - WebAppSettingsNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - MaybeAddThrottle(profile_management::ProfileManagementNavigationThrottle:: - MaybeCreateThrottleFor(handle), - &throttles); - MaybeAddThrottle( - profile_management::OidcAuthResponseCaptureNavigationThrottle:: - MaybeCreateThrottleFor(handle), - &throttles); - MaybeAddThrottle( - ManagedProfileRequiredNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - - if (base::FeatureList::IsEnabled( - enterprise::webstore::kChromeWebStoreNavigationThrottle)) { - throttles.push_back( - std::make_unique( - handle)); - } -#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) - -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \ - BUILDFLAG(IS_CHROMEOS) - MaybeAddThrottle(enterprise_connectors::DeviceTrustNavigationThrottle:: - MaybeCreateThrottleFor(handle), - &throttles); -#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || - // BUILDFLAG(IS_CHROMEOS) - -#if !BUILDFLAG(IS_ANDROID) - MaybeAddThrottle(DevToolsWindow::MaybeCreateNavigationThrottle(handle), - &throttles); - - MaybeAddThrottle(NewTabPageNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - - MaybeAddThrottle( - web_app::TabbedWebAppNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - - MaybeAddThrottle( - web_app::WebUIWebAppNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); -#endif - -#if BUILDFLAG(SAFE_BROWSING_AVAILABLE) - // g_browser_process->safe_browsing_service() may be null in unittests. - safe_browsing::SafeBrowsingUIManager* ui_manager = - g_browser_process->safe_browsing_service() - ? g_browser_process->safe_browsing_service()->ui_manager().get() - : nullptr; - MaybeAddThrottle( - safe_browsing::SafeBrowsingNavigationThrottle::MaybeCreateThrottleFor( - handle, ui_manager), - &throttles); - - if (base::FeatureList::IsEnabled(safe_browsing::kDelayedWarnings)) { - throttles.push_back( - std::make_unique( - handle)); - } -#endif - -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) - MaybeAddThrottle(browser_switcher::BrowserSwitcherNavigationThrottle:: - MaybeCreateThrottleFor(handle), - &throttles); -#endif - -#if BUILDFLAG(IS_CHROMEOS) - MaybeAddThrottle( - chromeos::KioskSettingsNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); - - MaybeAddThrottle( - ash::OnTaskLockedSessionNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); - -#endif - -#if BUILDFLAG(IS_MAC) - MaybeAddThrottle(MaybeCreateAuthSessionThrottleFor(handle), &throttles); -#endif - - if (profile && profile->GetPrefs()) { - MaybeAddThrottle( - security_interstitials::InsecureFormNavigationThrottle:: - MaybeCreateNavigationThrottle( - handle, std::make_unique(), - profile->GetPrefs()), - &throttles); - } - - if (IsErrorPageAutoReloadEnabled()) { - MaybeAddThrottle( - error_page::NetErrorAutoReloader::MaybeCreateThrottleFor(handle), - &throttles); - } - - MaybeAddThrottle( - payments::PaymentHandlerNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); - - MaybeAddThrottle( - prerender::NoStatePrefetchNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); - -#if !BUILDFLAG(IS_ANDROID) - MaybeAddThrottle(ReadAnythingSidePanelNavigationThrottle::CreateFor(handle), - &throttles); - - if (lens::features::IsLensOverlayEnabled()) { - if (profile) { - if (ThemeService* theme_service = - ThemeServiceFactory::GetForProfile(profile)) { - MaybeAddThrottle( - lens::LensOverlaySidePanelNavigationThrottle::MaybeCreateFor( - handle, theme_service), - &throttles); - } - } - } - - MaybeAddThrottle( - NtpMicrosoftAuthResponseCaptureNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); -#endif - -#if BUILDFLAG(ENABLE_OFFLINE_PAGES) - MaybeAddThrottle( - offline_pages::OfflinePageNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); -#endif - - if (profile) { - MaybeAddThrottle( - HttpsUpgradesNavigationThrottle::MaybeCreateThrottleFor( - handle, std::make_unique(), - profile), - &throttles); - } - - MaybeAddThrottle(MaybeCreateNavigationAblationThrottle(handle), &throttles); - -#if !BUILDFLAG(IS_ANDROID) - MaybeAddThrottle(MaybeCreateWebViewSidePanelThrottleFor(handle), &throttles); -#endif - - auto* privacy_sandbox_settings = - PrivacySandboxSettingsFactory::GetForProfile(profile); - if (privacy_sandbox_settings && - privacy_sandbox_settings->AreRelatedWebsiteSetsEnabled()) { - MaybeAddThrottle(first_party_sets::FirstPartySetsNavigationThrottle:: - MaybeCreateNavigationThrottle(handle), - &throttles); - } - -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) - // Don't perform platform authentication in incognito and guest profiles. - if (profile && !profile->IsOffTheRecord()) { - MaybeAddThrottle( - enterprise_auth::PlatformAuthNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); - } -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) - -#if BUILDFLAG(IS_CHROMEOS) - // TODO(b:296844164) Handle captive portal signin properly. - if (profile && profile->IsIncognitoProfile() && profile->IsOffTheRecord() && - !profile->GetOTRProfileID().IsCaptivePortal()) { - MaybeAddThrottle(enterprise_incognito::IncognitoNavigationThrottle:: - MaybeCreateThrottleFor(handle), - &throttles); - } - - MaybeAddThrottle(apps::AppInstallNavigationThrottle::MaybeCreate(handle), - &throttles); -#endif // BUILDFLAG(IS_CHROMEOS) - -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) - if (profile && profile->IsIncognitoProfile() && profile->IsOffTheRecord()) { - MaybeAddThrottle(enterprise_incognito::IncognitoNavigationThrottle:: - MaybeCreateThrottleFor(handle), - &throttles); - } -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) - -#if !BUILDFLAG(IS_ANDROID) - MaybeAddThrottle(PreviewNavigationThrottle::MaybeCreateThrottleFor(handle), - &throttles); -#endif // !BUILDFLAG(IS_ANDROID) - - MaybeAddThrottle(MaybeCreateVisitedLinkNavigationThrottleFor(handle), - &throttles); - - MaybeAddThrottle( - data_sharing::DataSharingNavigationThrottle::MaybeCreateThrottleFor( - handle), - &throttles); - -#if !BUILDFLAG(IS_ANDROID) - MaybeAddThrottle( - web_app::IsolatedWebAppThrottle::MaybeCreateThrottleFor(handle), - &throttles); -#endif // !BUILDFLAG(IS_ANDROID) - - return throttles; +void ChromeContentBrowserClient::CreateThrottlesForNavigation( + content::NavigationThrottleRegistry& registry) { + CreateAndAddChromeThrottlesForNavigation(registry); } std::vector> @@ -5917,16 +5460,18 @@ void ChromeContentBrowserClient::InitOnUIThread() { DCHECK(!cache_dir.empty()); // On some platforms, the cache is a child of the user_data_dir so only // return the one path. - if (!user_data_dir.IsParent(cache_dir)) + if (!user_data_dir.IsParent(cache_dir)) { network_contexts_parent_directory_.push_back(cache_dir); + } // If the cache location has been overridden by a switch or preference, // include that as well. if (auto* local_state = g_browser_process->local_state()) { base::FilePath pref_cache_dir = local_state->GetFilePath(prefs::kDiskCacheDir); - if (!pref_cache_dir.empty() && !user_data_dir.IsParent(cache_dir)) + if (!pref_cache_dir.empty() && !user_data_dir.IsParent(cache_dir)) { network_contexts_parent_directory_.push_back(pref_cache_dir); + } } } @@ -6231,8 +5776,9 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles( auto signin_throttle = signin::URLLoaderThrottle::MaybeCreate(std::move(delegate), wc_getter); - if (signin_throttle) + if (signin_throttle) { result.push_back(std::move(signin_throttle)); + } return result; } @@ -6296,8 +5842,9 @@ ChromeContentBrowserClient::CreateNonNetworkNavigationURLLoaderFactory( Profile* profile = Profile::FromBrowserContext(browser_context); // KeyedServices could be disabled based on the profile type, e.g. System // Profile doesn't construct services by default. - if (AreKeyedServicesDisabledForProfileByDefault(profile)) + if (AreKeyedServicesDisabledForProfileByDefault(profile)) { return {}; + } #if BUILDFLAG(IS_CHROMEOS) if (scheme == content::kExternalFileScheme) { @@ -6441,6 +5988,16 @@ class SpecialAccessFileURLLoaderFactory int child_id_; }; +bool IsDisabledInternalWebUI(const GURL& url) { + if (!content::IsInternalWebUI(url)) { + return false; + } + + PrefService* local_state = g_browser_process->local_state(); + DCHECK(local_state); + return !local_state->GetBoolean(chrome_urls::kInternalOnlyUisEnabled); +} + #if BUILDFLAG(IS_CHROMEOS) bool IsSystemFeatureDisabled(policy::SystemFeature system_feature) { return policy::SystemFeaturesDisableListPolicyHandler:: @@ -6559,8 +6116,9 @@ void AddChromeSchemeFactories( // There is nothing to do if no ExtensionWebContentsObserver is attached // to the |web_contents| or no enabled extension exists. - if (!web_observer || !extension) + if (!web_observer || !extension) { return; + } std::vector allowed_webui_hosts; // Support for chrome:// scheme if appropriate. @@ -6714,8 +6272,9 @@ void ChromeContentBrowserClient::WillCreateURLLoaderFactory( browser_context, frame, render_process_id, type, std::move(navigation_id), ukm_source_id, factory_builder, header_client, navigation_response_task_runner, request_initiator); - if (bypass_redirect_checks) + if (bypass_redirect_checks) { *bypass_redirect_checks = use_proxy_for_web_request; + } } #endif @@ -6737,10 +6296,9 @@ void ChromeContentBrowserClient::WillCreateURLLoaderFactory( // WARNING: This must be the last interceptor in the chain as the proxying // URLLoaderFactory installed by this needs to be the one actually sending // packets over the network (to effectively target `bound_network`). - MaybeProxyNetworkBoundRequest(browser_context, - GetBoundNetworkFromRenderFrameHost(frame), - factory_builder, factory_override, - isolation_info); + MaybeProxyNetworkBoundRequest( + browser_context, GetBoundNetworkFromRenderFrameHost(frame), + factory_builder, factory_override, isolation_info); } std::vector> @@ -6763,8 +6321,9 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( std::unique_ptr pdf_interceptor = pdf::PdfURLLoaderRequestInterceptor::MaybeCreateInterceptor( frame_tree_node_id, std::make_unique()); - if (pdf_interceptor) + if (pdf_interceptor) { interceptors.push_back(std::move(pdf_interceptor)); + } } #endif @@ -6806,8 +6365,9 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( // NOTE: Some unit test environments do not initialize // BrowserContextKeyedAPI factories for e.g. WebRequest. - if (!web_request_api) + if (!web_request_api) { return false; + } return (web_request_api->MayHaveProxies() || web_request_api->IsAvailableToWebViewEmbedderFrame(frame)); @@ -6914,8 +6474,9 @@ void ChromeContentBrowserClient::OnNetworkServiceCreated( // to set up global NetworkService state before anything else uses it and this // is the first opportunity to initialize SystemNetworkContextManager with the // NetworkService. - if (!SystemNetworkContextManager::HasInstance()) + if (!SystemNetworkContextManager::HasInstance()) { SystemNetworkContextManager::CreateInstance(local_state); + } SystemNetworkContextManager::GetInstance()->OnNetworkServiceCreated( network_service); @@ -6964,8 +6525,9 @@ bool ChromeContentBrowserClient::AllowRenderingMhtmlOverHttp( // It is OK to load the saved offline copy, in MHTML format. ChromeNavigationUIData* chrome_navigation_ui_data = static_cast(navigation_ui_data); - if (!chrome_navigation_ui_data) + if (!chrome_navigation_ui_data) { return false; + } offline_pages::OfflinePageNavigationUIData* offline_page_data = chrome_navigation_ui_data->GetOfflinePageNavigationUIData(); return offline_page_data && offline_page_data->is_offline_page(); @@ -7015,8 +6577,9 @@ content::BluetoothDelegate* ChromeContentBrowserClient::GetBluetoothDelegate() { } content::UsbDelegate* ChromeContentBrowserClient::GetUsbDelegate() { - if (!usb_delegate_) + if (!usb_delegate_) { usb_delegate_ = std::make_unique(); + } return usb_delegate_.get(); } @@ -7099,8 +6662,9 @@ void ChromeContentBrowserClient::CreateManagedConfigurationService( } content::HidDelegate* ChromeContentBrowserClient::GetHidDelegate() { - if (!hid_delegate_) + if (!hid_delegate_) { hid_delegate_ = std::make_unique(); + } return hid_delegate_.get(); } @@ -7218,8 +6782,9 @@ bool ChromeContentBrowserClient::HandleExternalProtocol( #if BUILDFLAG(IS_ANDROID) // Main frame external protocols are handled by // InterceptNavigationResourceThrottle. - if (is_primary_main_frame) + if (is_primary_main_frame) { return false; + } #endif // defined(ANDROID) auto weak_initiator_document = initiator_document @@ -7263,8 +6828,9 @@ void ChromeContentBrowserClient::RegisterRendererPreferenceWatcher( content::BrowserContext* browser_context, mojo::PendingRemote watcher) { Profile* profile = Profile::FromBrowserContext(browser_context); - if (PrefWatcher* pref_watcher = PrefWatcher::Get(profile)) + if (PrefWatcher* pref_watcher = PrefWatcher::Get(profile)) { pref_watcher->RegisterRendererPreferenceWatcher(std::move(watcher)); + } } // Static; handles rewriting Web UI URLs. @@ -7306,6 +6872,14 @@ bool ChromeContentBrowserClient::HandleWebUI( } #endif + if (IsDisabledInternalWebUI(*url)) { + GURL::Replacements replacements; + std::string query("host=" + url->host()); + replacements.SetQueryStr(query); + *url = GURL(chrome::kChromeUIInternalDebugPagesDisabledURL) + .ReplaceComponents(replacements); + } + if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( browser_context, *url) && !content::WebUIConfigMap::GetInstance().GetConfig(browser_context, @@ -7401,8 +6975,9 @@ ChromeContentBrowserClient::GetSafeBrowsingUrlCheckerDelegate( // Should not bypass safe browsing check if the check is for enterprise // lookup. - if (!safe_browsing_enabled_for_profile && !should_check_on_sb_disabled) + if (!safe_browsing_enabled_for_profile && !should_check_on_sb_disabled) { return nullptr; + } #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) // |safe_browsing_service_| may be unavailable in tests. @@ -7528,8 +7103,9 @@ void ChromeContentBrowserClient::OnNetworkServiceDataUseUpdate( base::FilePath ChromeContentBrowserClient::GetSandboxedStorageServiceDataDirectory() { - if (!g_browser_process || !g_browser_process->profile_manager()) + if (!g_browser_process || !g_browser_process->profile_manager()) { return base::FilePath(); + } return g_browser_process->profile_manager()->user_data_dir(); } @@ -7672,8 +7248,9 @@ ChromeContentBrowserClient::GetPluginMimeTypesWithExternalHandlers( base::flat_set mime_types; #if BUILDFLAG(ENABLE_PLUGINS) auto map = PluginUtils::GetMimeTypeToExtensionIdMap(browser_context); - for (const auto& pair : map) + for (const auto& pair : map) { mime_types.insert(pair.first); + } #endif #if BUILDFLAG(ENABLE_PDF) mime_types.insert(pdf::kInternalPluginMimeType); @@ -7711,8 +7288,9 @@ bool ChromeContentBrowserClient::HandleTopicsWebApi( content::WebContents::FromRenderFrameHost(main_frame) ->GetBrowserContext())); - if (!browsing_topics_service) + if (!browsing_topics_service) { return {}; + } bool allowed = browsing_topics_service->HandleTopicsWebApi( context_origin, main_frame, caller_source, get_topics, observe, topics); @@ -7786,11 +7364,12 @@ void ChromeContentBrowserClient::GetMediaDeviceIDSalt( privacy_sandbox::TrackingProtectionSettings* tracking_protection = TrackingProtectionSettingsFactory::GetForProfile( Profile::FromBrowserContext(browser_context)); - bool allowed = cookie_settings->IsFullCookieAccessAllowed( - url, site_for_cookies, top_frame_origin, - cookie_settings->SettingOverridesForStorage()) || - (tracking_protection->IsTrackingProtection3pcdEnabled() && - !tracking_protection->AreAllThirdPartyCookiesBlocked()); + bool allowed = + cookie_settings->IsFullCookieAccessAllowed( + url, site_for_cookies, top_frame_origin, + net::CookieSettingOverrides(), storage_key.ToCookiePartitionKey()) || + (tracking_protection->IsTrackingProtection3pcdEnabled() && + !tracking_protection->AreAllThirdPartyCookiesBlocked()); ChromeBrowsingDataModelDelegate::BrowsingDataAccessed( rfh, storage_key, ChromeBrowsingDataModelDelegate::StorageType::kMediaDeviceSalt, !allowed); @@ -7840,8 +7419,9 @@ bool ChromeContentBrowserClient::IsClipboardPasteAllowed( CreatePermissionDescriptorForPermissionType( blink::PermissionType::CLIPBOARD_READ_WRITE), render_frame_host); - if (status == blink::mojom::PermissionStatus::GRANTED) + if (status == blink::mojom::PermissionStatus::GRANTED) { return true; + } #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) // (3) origination directly from a Chrome extension, ... @@ -7931,9 +7511,10 @@ void ChromeContentBrowserClient::IsClipboardCopyAllowedByPolicy( #if BUILDFLAG(ENABLE_VR) content::XrIntegrationClient* ChromeContentBrowserClient::GetXrIntegrationClient() { - if (!xr_integration_client_) + if (!xr_integration_client_) { xr_integration_client_ = std::make_unique( base::PassKey()); + } return xr_integration_client_.get(); } #endif // BUILDFLAG(ENABLE_VR) @@ -7977,17 +7558,6 @@ content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride ChromeContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy( content::BrowserContext* browser_context, const url::Origin& origin) { - // The host content settings map might no be null for some irregular profiles, - // e.g. the System Profile. - if (HostContentSettingsMap* service = - HostContentSettingsMapFactory::GetForProfile(browser_context)) { - if (content_settings::ShouldAllowInsecurePrivateNetworkRequests(service, - origin)) { - return content::ContentBrowserClient:: - PrivateNetworkRequestPolicyOverride::kForceAllow; - } - } - #if BUILDFLAG(IS_ANDROID) if (base::android::BuildInfo::GetInstance()->is_automotive()) { return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: @@ -7995,12 +7565,15 @@ ChromeContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy( } #endif +// TODO(crbug.com/400455013): Add LNA support on Android +#if !BUILDFLAG(IS_ANDROID) Profile* profile = Profile::FromBrowserContext(browser_context); if (profile->GetPrefs()->GetBoolean( - prefs::kManagedPrivateNetworkAccessRestrictionsEnabled)) { + prefs::kManagedLocalNetworkAccessRestrictionsEnabled)) { return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: kBlockInsteadOfWarn; } +#endif return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride:: kDefault; @@ -8018,8 +7591,9 @@ bool ChromeContentBrowserClient::IsJitDisabledForSite( } // Only disable JIT for web schemes. - if (!site_url.SchemeIsHTTPOrHTTPS()) + if (!site_url.SchemeIsHTTPOrHTTPS()) { return false; + } return (map && map->GetContentSetting(site_url, site_url, ContentSettingsType::JAVASCRIPT_JIT) == @@ -8430,8 +8004,9 @@ bool ChromeContentBrowserClient::IsFileSystemURLNavigationAllowed( #if BUILDFLAG(ENABLE_PLATFORM_APPS) // filesystem: URLs for Chrome Apps are in the following format: // `filesystem:chrome-extension:///...` - if (!url.SchemeIsFileSystem()) + if (!url.SchemeIsFileSystem()) { return false; + } // Once converted into an origin, we expect the following: // scheme() is chrome-extension: (filesystem: is automatically discarded) // host() is the extension-id @@ -8491,23 +8066,44 @@ bool ChromeContentBrowserClient:: return true; } + net::SchemefulSite top_frame_site(top_frame_origin); + std::optional cookie_partition_key = + net::CookiePartitionKey::FromStorageKeyComponents( + top_frame_site, + net::CookiePartitionKey::BoolToAncestorChainBit( + !site_for_cookies.IsFirstParty(url)), + /*nonce=*/std::nullopt); + // Cookie settings overrides are not relevant for this check. net::CookieSettingOverrides empty_overrides; return cookie_settings->IsFullCookieAccessAllowed( - url, site_for_cookies, top_frame_origin, empty_overrides); + url, site_for_cookies, top_frame_origin, empty_overrides, + cookie_partition_key); } bool ChromeContentBrowserClient::AreDeprecatedAutomaticBeaconCredentialsAllowed( content::BrowserContext* browser_context, const GURL& destination_url, const url::Origin& top_frame_origin) { + // With what is available here, we can create a cookie_partition_key for the + // given top_frame_origin and we can assume the ancestor chain bit is + // cross_site since the `IsFullCookieAccessAllowed` call below uses a null + // `SiteForCookies`, which means that we will always be in a cross site + // context. + net::SchemefulSite top_frame_site(top_frame_origin); + std::optional cookie_partition_key = + net::CookiePartitionKey::FromStorageKeyComponents( + top_frame_site, + net::CookiePartitionKey::BoolToAncestorChainBit(/*cross_site=*/true), + /*nonce=*/std::nullopt); + scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile( Profile::FromBrowserContext(browser_context)); return cookie_settings->IsFullCookieAccessAllowed( destination_url, net::SiteForCookies(), top_frame_origin, - cookie_settings->SettingOverridesForStorage()); + net::CookieSettingOverrides(), cookie_partition_key); } bool ChromeContentBrowserClient:: @@ -8573,14 +8169,15 @@ bool ChromeContentBrowserClient::CanBackForwardCachedPageReceiveCookieChanges( content::BrowserContext& browser_context, const GURL& url, const net::SiteForCookies& site_for_cookies, - const std::optional& top_frame_origin, - const net::CookieSettingOverrides overrides) { + const url::Origin& top_frame_origin, + const net::CookieSettingOverrides overrides, + base::optional_ref cookie_partition_key) { scoped_refptr cookie_settings = CookieSettingsFactory::GetForProfile( Profile::FromBrowserContext(&browser_context)); CHECK(cookie_settings); return cookie_settings->IsFullCookieAccessAllowed( - url, site_for_cookies, top_frame_origin, overrides); + url, site_for_cookies, top_frame_origin, overrides, cookie_partition_key); } void ChromeContentBrowserClient::GetCloudIdentifiers( @@ -8653,6 +8250,23 @@ bool ChromeContentBrowserClient::ShouldReduceAcceptLanguage( return true; } +// TODO(crbug.com/40133611): ladan@ - Remove this method and its refrencesonce +// ClearWindowNameForNewBrowsingContextGroup policy is removed. +bool ChromeContentBrowserClient:: + IsClearWindowNameForNewBrowsingContextGroupAllowed( + content::BrowserContext* browser_context) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + const PrefService::Preference* pref = + Profile::FromBrowserContext(browser_context) + ->GetPrefs() + ->FindPreference(prefs::kClearWindowNameForNewBrowsingContextGroup); + + if (pref != nullptr && pref->IsManaged() && pref->GetValue()->is_bool()) { + return pref->GetValue()->GetBool(); + } + return true; +} + void ChromeContentBrowserClient::SetIsMinimalMode(bool minimal) { is_minimal_mode_ = minimal; } @@ -8807,7 +8421,8 @@ void ChromeContentBrowserClient::BindAIManager( if (!context_user_data->GetUserData(kAIManagerUserDataKey)) { context_user_data->SetUserData( kAIManagerUserDataKey, - std::make_unique(browser_context, rfh)); + std::make_unique( + browser_context, g_browser_process->component_updater(), rfh)); } AIManager* ai_manager = static_cast( @@ -9046,23 +8661,6 @@ void ChromeContentBrowserClient::OnTracingServiceStopped() { } #endif // BUILDFLAG(IS_WIN) -std::unique_ptr -ChromeContentBrowserClient::OverrideForInternalWebUI(content::WebUI* web_ui, - const GURL& url) { - if (!base::FeatureList::IsEnabled(chrome_urls::kInternalOnlyUisPref)) { - return nullptr; - } - - PrefService* local_state = g_browser_process->local_state(); - DCHECK(local_state); - DCHECK(local_state->FindPreference(chrome_urls::kInternalOnlyUisEnabled)); - if (local_state->GetBoolean(chrome_urls::kInternalOnlyUisEnabled)) { - return nullptr; - } - - return std::make_unique(web_ui, url.host()); -} - bool ChromeContentBrowserClient::ShouldEnableSubframeZoom() { #if BUILDFLAG(ENABLE_PDF) return chrome_pdf::features::IsOopifPdfEnabled(); diff --git a/tools/under-control/src/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/tools/under-control/src/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index b05ea82f..059e2832 100755 --- a/tools/under-control/src/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/tools/under-control/src/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java @@ -25,8 +25,9 @@ import java.util.Map; /** * A list of feature flags exposed to Java. * - *

This class lists flags exposed to Java as String constants. They should match - * |kFeaturesExposedToJava| in chrome/browser/flags/android/chrome_feature_list.cc. + *

This class lists flags exposed to Java as String constants. The String value of each feature + * name must exactly match the corresponding C++ feature name string |kFeaturesExposedToJava| in + * chrome/browser/flags/android/chrome_feature_list.cc. * *

This class also provides convenience methods to access values of flags and their field trial * parameters through {@link ChromeFeatureMap}. @@ -153,12 +154,14 @@ public abstract class ChromeFeatureList { // Feature names. /* Alphabetical: */ - public static final String ACT_USER_BYPASS_UX = "ActUserBypassUx"; + public static final String ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS = + "AccountForSuppressedKeyboardInsets"; public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2 = "AdaptiveButtonInTopToolbarCustomizationV2"; public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_PAGE_SUMMARY = "AdaptiveButtonInTopToolbarPageSummary"; - public static final String ALLOW_NEW_INCOGNITO_TAB_INTENTS = "AllowNewIncognitoTabIntents"; + public static final String ALLOW_TAB_CLOSING_UPON_MINIMIZATION = + "AllowTabClosingUponMinimization"; public static final String ALWAYS_BLOCK_3PCS_INCOGNITO = "AlwaysBlock3pcsIncognito"; public static final String ANDROID_APPEARANCE_SETTINGS = "AndroidAppearanceSettings"; public static final String ANDROID_APP_INTEGRATION = "AndroidAppIntegration"; @@ -184,16 +187,22 @@ public abstract class ChromeFeatureList { "AndroidOmniboxFocusedNewTabPage"; public static final String ANDROID_OPEN_PDF_INLINE_BACKPORT = "AndroidOpenPdfInlineBackport"; public static final String ANDROID_PDF_ASSIST_CONTENT = "AndroidPdfAssistContent"; + public static final String ANDROID_PROGRESS_BAR_VISUAL_UPDATE = + "AndroidProgressBarVisualUpdate"; public static final String ANDROID_SURFACE_COLOR_UPDATE = "AndroidSurfaceColorUpdate"; - public static final String ANDROID_TAB_DECLUTTER = "AndroidTabDeclutter"; public static final String ANDROID_TAB_DECLUTTER_ARCHIVE_ALL_BUT_ACTIVE = "AndroidTabDeclutterArchiveAllButActiveTab"; public static final String ANDROID_TAB_DECLUTTER_ARCHIVE_DUPLICATE_TABS = "AndroidTabDeclutterArchiveDuplicateTabs"; public static final String ANDROID_TAB_DECLUTTER_ARCHIVE_TAB_GROUPS = "AndroidTabDeclutterArchiveTabGroups"; + public static final String ANDROID_TAB_DECLUTTER_AUTO_DELETE = "AndroidTabDeclutterAutoDelete"; + public static final String ANDROID_TAB_DECLUTTER_AUTO_DELETE_KILL_SWITCH = + "AndroidTabDeclutterAutoDeleteKillSwitch"; public static final String ANDROID_TAB_DECLUTTER_DEDUPE_TAB_IDS_KILL_SWITCH = "AndroidTabDeclutterDedupeTabIdsKillSwitch"; + public static final String ANDROID_TAB_DECLUTTER_PERFORMANCE_IMPROVEMENTS = + "AndroidTabDeclutterPerformanceImprovements"; public static final String ANDROID_TAB_DECLUTTER_RESCUE_KILLSWITCH = "AndroidTabDeclutterRescueKillswitch"; public static final String ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH = @@ -245,12 +254,14 @@ public abstract class ChromeFeatureList { public static final String BACKGROUND_THREAD_POOL = "BackgroundThreadPool"; public static final String BACK_FORWARD_CACHE = "BackForwardCache"; public static final String BACK_FORWARD_TRANSITIONS = "BackForwardTransitions"; + public static final String BATCH_TAB_RESTORE = "BatchTabRestore"; public static final String BCIV_BOTTOM_CONTROLS = "AndroidBcivBottomControls"; public static final String BIOMETRIC_AUTH_IDENTITY_CHECK = "BiometricAuthIdentityCheck"; public static final String BLOCK_INTENTS_WHILE_LOCKED = "BlockIntentsWhileLocked"; public static final String BOARDING_PASS_DETECTOR = "BoardingPassDetector"; public static final String BOOKMARK_PANE_ANDROID = "BookmarkPaneAndroid"; public static final String BOTTOM_BROWSER_CONTROLS_REFACTOR = "BottomBrowserControlsRefactor"; + public static final String BROWSER_CONTROLS_DEBUGGING = "BrowserControlsDebugging"; public static final String BROWSER_CONTROLS_EARLY_RESIZE = "BrowserControlsEarlyResize"; public static final String BROWSER_CONTROLS_IN_VIZ = "AndroidBrowserControlsInViz"; public static final String BROWSING_DATA_MODEL = "BrowsingDataModel"; @@ -300,6 +311,7 @@ public abstract class ChromeFeatureList { public static final String CCT_TOOLBAR_REFACTOR = "CCTToolbarRefactor"; public static final String CHANGE_UNFOCUSED_PRIORITY = "ChangeUnfocusedPriority"; public static final String CHROME_SURVEY_NEXT_ANDROID = "ChromeSurveyNextAndroid"; + public static final String CLAMP_AUTOMOTIVE_SCALING = "ClampAutomotiveScaling"; public static final String CLANK_STARTUP_LATENCY_INJECTION = "ClankStartupLatencyInjection"; public static final String CLANK_WHATS_NEW = "ClankWhatsNew"; public static final String CLEAR_BROWSING_DATA_ANDROID_SURVEY = @@ -325,6 +337,7 @@ public abstract class ChromeFeatureList { public static final String CONTROLS_VISIBILITY_FROM_NAVIGATIONS = "ControlsVisibilityFromNavigations"; public static final String CORMORANT = "Cormorant"; + public static final String CPA_SPEC_UPDATE = "CpaSpecUpdate"; public static final String CROSS_DEVICE_TAB_PANE_ANDROID = "CrossDeviceTabPaneAndroid"; public static final String DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING = "DarkenWebsitesCheckboxInThemesSetting"; @@ -335,7 +348,6 @@ public abstract class ChromeFeatureList { public static final String DEFAULT_BROWSER_PROMO_ANDROID2 = "DefaultBrowserPromoAndroid2"; public static final String DETAILED_LANGUAGE_SETTINGS = "DetailedLanguageSettings"; public static final String DEVICE_AUTHENTICATOR_ANDROIDX = "DeviceAuthenticatorAndroidx"; - public static final String DISABLE_COMPOSITED_PROGRESS_BAR = "DisableCompositedProgressBar"; public static final String DISABLE_INSTANCE_LIMIT = "DisableInstanceLimit"; public static final String DISABLE_LIST_TAB_SWITCHER = "DisableListTabSwitcher"; public static final String DISCO_FEED_ENDPOINT = "DiscoFeedEndpoint"; @@ -346,15 +358,18 @@ public abstract class ChromeFeatureList { public static final String DRAW_KEY_NATIVE_EDGE_TO_EDGE = "DrawKeyNativeEdgeToEdge"; public static final String DYNAMIC_SAFE_AREA_INSETS = "DynamicSafeAreaInsets"; public static final String EDGE_TO_EDGE_BOTTOM_CHIN = "EdgeToEdgeBottomChin"; + public static final String EDGE_TO_EDGE_DEBUGGING = "EdgeToEdgeDebugging"; + public static final String EDGE_TO_EDGE_MONITOR_CONFIGURATIONS = + "EdgeToEdgeMonitorConfigurations"; public static final String EDGE_TO_EDGE_EVERYWHERE = "EdgeToEdgeEverywhere"; public static final String EDGE_TO_EDGE_SAFE_AREA_CONSTRAINT = "EdgeToEdgeSafeAreaConstraint"; + public static final String EDGE_TO_EDGE_TABLET = "EdgeToEdgeTablet"; public static final String EDGE_TO_EDGE_WEB_OPT_IN = "EdgeToEdgeWebOptIn"; public static final String EDUCATIONAL_TIP_DEFAULT_BROWSER_PROMO_CARD = "EducationalTipDefaultBrowserPromoCard"; public static final String EDUCATIONAL_TIP_MODULE = "EducationalTipModule"; public static final String EMPTY_TAB_LIST_ANIMATION_KILL_SWITCH = "EmptyTabListAnimationKillSwitch"; - public static final String ENABLE_BATCH_UPLOAD_FROM_SETTINGS = "EnableBatchUploadFromSettings"; public static final String ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD = "EnableSavePackageForOffTheRecord"; public static final String ENABLE_CLIPBOARD_DATA_CONTROLS_ANDROID = @@ -373,8 +388,6 @@ public abstract class ChromeFeatureList { public static final String FLOATING_SNACKBAR = "FloatingSnackbar"; public static final String FORCE_BROWSER_CONTROLS_UPON_EXITING_FULLSCREEN = "ForceBrowserControlsUponExitingFullscreen"; - public static final String FORCE_DISABLE_EXTENDED_SYNC_PROMOS = - "ForceDisableExtendedSyncPromos"; public static final String FORCE_LIST_TAB_SWITCHER = "ForceListTabSwitcher"; public static final String FORCE_STARTUP_SIGNIN_PROMO = "ForceStartupSigninPromo"; public static final String FORCE_TRANSLUCENT_NOTIFICATION_TRAMPOLINE = @@ -395,10 +408,13 @@ public abstract class ChromeFeatureList { "HideTabletToolbarDownloadButton"; public static final String HISTORY_JOURNEYS = "Journeys"; public static final String HISTORY_PANE_ANDROID = "HistoryPaneAndroid"; + public static final String HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_ANDROID = + "HomepageIsNewTabPagePolicyAndroid"; public static final String HTTPS_FIRST_BALANCED_MODE = "HttpsFirstBalancedMode"; public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot"; + public static final String INSTANCE_SWITCHER_V2 = "InstanceSwitcherV2"; public static final String IP_PROTECTION_UX = "IpProtectionUx"; - public static final String KEYBOARD_ESC_BACK_NAVIGAION = "KeyboardEscBackNavigation"; + public static final String KEYBOARD_ESC_BACK_NAVIGATION = "KeyboardEscBackNavigation"; public static final String LEGACY_TAB_STATE_DEPRECATION = "LegacyTabStateDeprecation"; public static final String LENS_ON_QUICK_ACTION_SEARCH_WIDGET = "LensOnQuickActionSearchWidget"; public static final String LINKED_SERVICES_SETTING = "LinkedServicesSetting"; @@ -416,16 +432,17 @@ public abstract class ChromeFeatureList { public static final String MOST_VISITED_TILES_RESELECT = "MostVisitedTilesReselect"; public static final String MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP = "MultiInstanceApplicationStatusCleanup"; + public static final String MVC_UPDATE_VIEW_WHEN_MODEL_CHANGED = "MvcUpdateViewWhenModelChanged"; public static final String NATIVE_PAGE_TRANSITION_HARDWARE_CAPTURE = "NativePageTransitionHardwareCapture"; - public static final String NAVIGATION_CAPTURE_REFACTOR = "NavigationCaptureRefactorAndroid"; public static final String NAV_BAR_COLOR_ANIMATION = "NavBarColorAnimation"; public static final String NAV_BAR_COLOR_MATCHES_TAB_BACKGROUND = "NavBarColorMatchesTabBackground"; public static final String NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2 = "NewTabPageAndroidTriggerForPrerender2"; public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization"; - public static final String NEW_TAB_SEARCH_ENGINE_URL_ANDROID = "NewTabSearchEngineUrlAndroid"; + public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON = + "NewTabPageCustomizationToolbarButton"; public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; @@ -443,7 +460,6 @@ public abstract class ChromeFeatureList { public static final String PARTNER_CUSTOMIZATIONS_UMA = "PartnerCustomizationsUma"; public static final String PASSWORD_FORM_GROUPED_AFFILIATIONS = "PasswordFormGroupedAffiliations"; - public static final String PASSWORD_LEAK_TOGGLE_MOVE = "PasswordLeakToggleMove"; public static final String PERMISSION_DEDICATED_CPSS_SETTING_ANDROID = "PermissionDedicatedCpssSettingAndroid"; public static final String PERMISSION_SITE_SETTING_RADIO_BUTTON = @@ -470,8 +486,6 @@ public abstract class ChromeFeatureList { "PrivacySandboxAdTopicsContentParity"; public static final String PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY = "PrivacySandboxCctAdsNoticeSurvey"; - public static final String PRIVACY_SANDBOX_NOTICE_ACTION_DEBOUNCING_ANDROID = - "PrivacySandboxNoticeActionDebouncingAndroid"; public static final String PRIVACY_SANDBOX_RELATED_WEBSITE_SETS_UI = "PrivacySandboxRelatedWebsiteSetsUi"; public static final String PRIVACY_SANDBOX_SENTIMENT_SURVEY = "PrivacySandboxSentimentSurvey"; @@ -486,6 +500,8 @@ public abstract class ChromeFeatureList { public static final String QUIET_NOTIFICATION_PROMPTS = "QuietNotificationPrompts"; public static final String READALOUD = "ReadAloud"; public static final String READALOUD_AUDIO_OVERVIEWS = "ReadAloudAudioOverviews"; + public static final String READALOUD_AUDIO_OVERVIEWS_FEEDBACK = + "ReadAloudAudioOverviewsFeedback"; public static final String READALOUD_BACKGROUND_PLAYBACK = "ReadAloudBackgroundPlayback"; public static final String READALOUD_IN_MULTI_WINDOW = "ReadAloudInMultiWindow"; public static final String READALOUD_IN_OVERFLOW_MENU_IN_CCT = "ReadAloudInOverflowMenuInCCT"; @@ -500,6 +516,8 @@ public abstract class ChromeFeatureList { public static final String REMOVE_TAB_FOCUS_ON_SHOWING_AND_SELECT = "RemoveTabFocusOnShowingAndSelect"; public static final String RENAME_JOURNEYS = "RenameJourneys"; + public static final String REPORT_NOTIFICATION_CONTENT_DETECTION_DATA = + "ReportNotificationContentDetectionData"; public static final String RIGHT_EDGE_GOES_FORWARD_GESTURE_NAV = "RightEdgeGoesForwardGestureNav"; public static final String SAFETY_HUB = "SafetyHub"; @@ -534,6 +552,7 @@ public abstract class ChromeFeatureList { "SensitiveContentWhileSwitchingTabs"; public static final String SETTINGS_SINGLE_ACTIVITY = "SettingsSingleActivity"; public static final String SHARE_CUSTOM_ACTIONS_IN_CCT = "ShareCustomActionsInCCT"; + public static final String SHOW_HOME_BUTTON_POLICY_ANDROID = "ShowHomeButtonPolicyAndroid"; public static final String SHOW_NEW_TAB_ANIMATIONS = "ShowNewTabAnimations"; public static final String SHOW_WARNINGS_FOR_SUSPICIOUS_NOTIFICATIONS = "ShowWarningsForSuspiciousNotifications"; @@ -559,9 +578,11 @@ public abstract class ChromeFeatureList { public static final String TAB_GROUP_SYNC_ANDROID = "TabGroupSyncAndroid"; public static final String TAB_GROUP_SYNC_AUTO_OPEN_KILL_SWITCH = "TabGroupSyncAutoOpenKillSwitch"; + public static final String TABLET_TAB_STRIP_ANIMATION = "TabletTabStripAnimation"; public static final String TAB_RESUMPTION_MODULE_ANDROID = "TabResumptionModuleAndroid"; public static final String TAB_STATE_FLAT_BUFFER = "TabStateFlatBuffer"; public static final String TAB_STRIP_CONTEXT_MENU = "TabStripContextMenuAndroid"; + public static final String TAB_STRIP_DENSITY_CHANGE_ANDROID = "TabStripDensityChangeAndroid"; public static final String TAB_STRIP_GROUP_DRAG_DROP_ANDROID = "TabStripGroupDragDropAndroid"; public static final String TAB_STRIP_GROUP_REORDER = "TabStripGroupReorderAndroid"; public static final String TAB_STRIP_INCOGNITO_MIGRATION = "TabStripIncognitoMigration"; @@ -579,24 +600,23 @@ public abstract class ChromeFeatureList { public static final String TILE_CONTEXT_MENU_REFACTOR = "TileContextMenuRefactor"; public static final String TINKER_TANK_BOTTOM_SHEET = "TinkerTankBottomSheet"; public static final String TOOLBAR_SCROLL_ABLATION = "AndroidToolbarScrollAblation"; + public static final String TOP_CONTROLS_REFACTOR = "TopControlsRefactor"; public static final String TRACE_BINDER_IPC = "TraceBinderIpc"; public static final String TRACKING_PROTECTION_3PCD = "TrackingProtection3pcd"; - public static final String TRACKING_PROTECTION_CONTENT_SETTING_UB_CONTROL = - "TrackingProtectionContentSettingUbControl"; public static final String TRACKING_PROTECTION_USER_BYPASS_PWA = "TrackingProtectionUserBypassPwa"; public static final String TRACKING_PROTECTION_USER_BYPASS_PWA_TRIGGER = "TrackingProtectionUserBypassPwaTrigger"; public static final String TRANSLATE_MESSAGE_UI = "TranslateMessageUI"; public static final String TRANSLATE_TFLITE = "TFLiteLanguageDetectionEnabled"; - public static final String UNIFIED_PASSWORD_MANAGER_LOCAL_PWD_MIGRATION_WARNING = - "UnifiedPasswordManagerLocalPasswordsMigrationWarning"; public static final String UNO_PHASE_2_FOLLOW_UP = "UnoPhase2FollowUp"; public static final String UPDATE_COMPOSTIROR_FOR_SURFACE_CONTROL = "UpdateCompositorForSurfaceControl"; public static final String USE_ALTERNATE_HISTORY_SYNC_ILLUSTRATION = "UseAlternateHistorySyncIllustration"; public static final String USE_CHIME_ANDROID_SDK = "UseChimeAndroidSdk"; + public static final String USE_ACTIVITY_MANAGER_FOR_TAB_ACTIVATION = + "UseActivityManagerForTabActivation"; public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService"; @@ -611,12 +631,16 @@ public abstract class ChromeFeatureList { public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting"; /* Alphabetical: */ + public static final CachedFlag sAccountForSuppressedKeyboardInsets = + newCachedFlag(ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS, /* defaultValue= */ true); + public static final CachedFlag sAllowTabClosingUponMinimization = + newCachedFlag(ALLOW_TAB_CLOSING_UPON_MINIMIZATION, false); public static final CachedFlag sAndroidAppIntegration = newCachedFlag(ANDROID_APP_INTEGRATION, true); public static final CachedFlag sAndroidAppIntegrationModule = newCachedFlag(ANDROID_APP_INTEGRATION_MODULE, true); public static final CachedFlag sAndroidAppIntegrationMultiDataSource = - newCachedFlag(ANDROID_APP_INTEGRATION_MULTI_DATA_SOURCE, false); + newCachedFlag(ANDROID_APP_INTEGRATION_MULTI_DATA_SOURCE, false, true); public static final CachedFlag sAndroidAppIntegrationV2 = newCachedFlag(ANDROID_APP_INTEGRATION_V2, true); public static final CachedFlag sAndroidAppIntegrationWithFavicon = @@ -626,16 +650,22 @@ public abstract class ChromeFeatureList { public static final CachedFlag sAndroidElegantTextHeight = newCachedFlag(ANDROID_ELEGANT_TEXT_HEIGHT, true); public static final CachedFlag sAndroidMinimalUiLargeScreen = - newCachedFlag(ANDROID_MINIMAL_UI_LARGE_SCREEN, false); + newCachedFlag(ANDROID_MINIMAL_UI_LARGE_SCREEN, false, true); + public static final CachedFlag sAndroidProgressBarVisualUpdate = + newCachedFlag(ANDROID_PROGRESS_BAR_VISUAL_UPDATE, false); public static final CachedFlag sAndroidSurfaceColorUpdate = - newCachedFlag(ANDROID_SURFACE_COLOR_UPDATE, /* defaultValue= */ false); + newCachedFlag( + ANDROID_SURFACE_COLOR_UPDATE, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sAndroidTabDeclutterDedupeTabIdsKillSwitch = newCachedFlag(ANDROID_TAB_DECLUTTER_DEDUPE_TAB_IDS_KILL_SWITCH, true); public static final CachedFlag sAndroidTabSkipSaveTabsKillswitch = newCachedFlag(ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH, true, true); - public static final CachedFlag sAndroidThemeModule = newCachedFlag(ANDROID_THEME_MODULE, false); + public static final CachedFlag sAndroidThemeModule = + newCachedFlag(ANDROID_THEME_MODULE, false, /* defaultValueInTests= */ true); public static final CachedFlag sAndroidWebAppLaunchHandler = - newCachedFlag(ANDROID_WEB_APP_LAUNCH_HANDLER, false); + newCachedFlag(ANDROID_WEB_APP_LAUNCH_HANDLER, false, true); public static final CachedFlag sAndroidWindowPopupLargeScreen = newCachedFlag(ANDROID_WINDOW_POPUP_LARGE_SCREEN, false); public static final CachedFlag sAppSpecificHistory = newCachedFlag(APP_SPECIFIC_HISTORY, true); @@ -643,15 +673,17 @@ public abstract class ChromeFeatureList { newCachedFlag(ASYNC_NOTIFICATION_MANAGER, false, true); public static final CachedFlag sAsyncNotificationManagerForDownload = newCachedFlag(ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD, false, true); + public static final CachedFlag sBatchTabRestore = + newCachedFlag( + BATCH_TAB_RESTORE, /* defaultValue= */ false, /* defaultValueInTests= */ true); public static final CachedFlag sBlockIntentsWhileLocked = newCachedFlag(BLOCK_INTENTS_WHILE_LOCKED, false); public static final CachedFlag sBookmarkPaneAndroid = newCachedFlag(BOOKMARK_PANE_ANDROID, false); + public static final CachedFlag sBrowserControlsDebugging = + newCachedFlag(BROWSER_CONTROLS_DEBUGGING, false); public static final CachedFlag sCacheIsMultiInstanceApi31Enabled = - newCachedFlag( - CACHE_IS_MULTI_INSTANCE_API_31_ENABLED, - /* defaultValue= */ false, - /* defaultValueInTests= */ true); + newCachedFlag(CACHE_IS_MULTI_INSTANCE_API_31_ENABLED, true); public static final CachedFlag sCctAdaptiveButton = newCachedFlag(CCT_ADAPTIVE_BUTTON, false); public static final CachedFlag sCctAuthTab = newCachedFlag(CCT_AUTH_TAB, true); public static final CachedFlag sCctAuthTabDisableAllExternalIntents = @@ -688,7 +720,10 @@ public abstract class ChromeFeatureList { public static final CachedFlag sCctNestedSecurityIcon = newCachedFlag(CCT_NESTED_SECURITY_ICON, true); public static final CachedFlag sCctPredictiveBackGesture = - newCachedFlag(CCT_PREDICTIVE_BACK_GESTURE, false); + newCachedFlag( + CCT_PREDICTIVE_BACK_GESTURE, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sCctOpenInBrowserButtonIfAllowedByEmbedder = newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ALLOWED_BY_EMBEDDER, false); public static final CachedFlag sCctOpenInBrowserButtonIfEnabledByEmbedder = @@ -699,6 +734,8 @@ public abstract class ChromeFeatureList { newCachedFlag(CCT_REVAMPED_BRANDING, true); public static final CachedFlag sCctTabModalDialog = newCachedFlag(CCT_TAB_MODAL_DIALOG, true); public static final CachedFlag sCctToolbarRefactor = newCachedFlag(CCT_TOOLBAR_REFACTOR, false); + public static final CachedFlag sClampAutomotiveScaling = + newCachedFlag(CLAMP_AUTOMOTIVE_SCALING, true); public static final CachedFlag sClankStartupLatencyInjection = newCachedFlag(CLANK_STARTUP_LATENCY_INJECTION, false); public static final CachedFlag sCollectAndroidFrameTimelineMetrics = @@ -708,6 +745,7 @@ public abstract class ChromeFeatureList { /* defaultValueInTests= */ true); public static final CachedFlag sCommandLineOnNonRooted = newCachedFlag(COMMAND_LINE_ON_NON_ROOTED, false); + public static final CachedFlag sCpaSpecUpdate = newCachedFlag(CPA_SPEC_UPDATE, false); public static final CachedFlag sCrossDeviceTabPaneAndroid = newCachedFlag(CROSS_DEVICE_TAB_PANE_ANDROID, false); public static final CachedFlag sDisableInstanceLimit = @@ -724,11 +762,19 @@ public abstract class ChromeFeatureList { newCachedFlag(DRAW_KEY_NATIVE_EDGE_TO_EDGE, true); public static final CachedFlag sEdgeToEdgeBottomChin = newCachedFlag(EDGE_TO_EDGE_BOTTOM_CHIN, /* defaultValue= */ true); + public static final CachedFlag sEdgeToEdgeDebugging = + newCachedFlag( + EDGE_TO_EDGE_DEBUGGING, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); + public static final CachedFlag sEdgeToEdgeMonitorConfigurations = + newCachedFlag(EDGE_TO_EDGE_MONITOR_CONFIGURATIONS, /* defaultValue= */ true); public static final CachedFlag sEdgeToEdgeEverywhere = newCachedFlag( EDGE_TO_EDGE_EVERYWHERE, /* defaultValue= */ false, /* defaultValueInTests= */ true); + public static final CachedFlag sEdgeToEdgeTablet = newCachedFlag(EDGE_TO_EDGE_TABLET, false); public static final CachedFlag sEdgeToEdgeWebOptIn = newCachedFlag(EDGE_TO_EDGE_WEB_OPT_IN, true); public static final CachedFlag sEducationalTipDefaultBrowserPromoCard = @@ -749,14 +795,19 @@ public abstract class ChromeFeatureList { public static final CachedFlag sFullscreenInsetsApiMigrationOnAutomotive = newCachedFlag(FULLSCREEN_INSETS_API_MIGRATION_ON_AUTOMOTIVE, true); public static final CachedFlag sGridTabSwitcherSurfaceColorUpdate = - newCachedFlag(GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE, /* defaultValue= */ false); + newCachedFlag( + GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sGridTabSwitcherUpdate = - newCachedFlag(GRID_TAB_SWITCHER_UPDATE, false); + newCachedFlag(GRID_TAB_SWITCHER_UPDATE, false, /* defaultValueInTests= */ true); public static final CachedFlag sHideTabletToolbarDownloadButton = newCachedFlag(HIDE_TABLET_TOOLBAR_DOWNLOAD_BUTTON, true); public static final CachedFlag sHistoryPaneAndroid = newCachedFlag(HISTORY_PANE_ANDROID, false); + public static final CachedFlag sHomepageIsNewTabPagePolicyAndroid = + newCachedFlag(HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_ANDROID, false); public static final CachedFlag sKeyboardEscBackNavigation = - newCachedFlag(KEYBOARD_ESC_BACK_NAVIGAION, false); + newCachedFlag(KEYBOARD_ESC_BACK_NAVIGATION, true); public static final CachedFlag sLegacyTabStateDeprecation = newCachedFlag( LEGACY_TAB_STATE_DEPRECATION, @@ -765,13 +816,18 @@ public abstract class ChromeFeatureList { public static final CachedFlag sLockBackPressHandlerAtStart = newCachedFlag(LOCK_BACK_PRESS_HANDLER_AT_START, true); public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true); - public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, false); + public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, false, true); public static final CachedFlag sMostVisitedTilesCustomization = newCachedFlag(MOST_VISITED_TILES_CUSTOMIZATION, false); public static final CachedFlag sMostVisitedTilesReselect = newCachedFlag(MOST_VISITED_TILES_RESELECT, false); public static final CachedFlag sMultiInstanceApplicationStatusCleanup = newCachedFlag(MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP, false); + public static final CachedFlag sMvcUpdateViewWhenModelChanged = + newCachedFlag( + MVC_UPDATE_VIEW_WHEN_MODEL_CHANGED, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sNavBarColorAnimation = newCachedFlag(NAV_BAR_COLOR_ANIMATION, false); public static final CachedFlag sNavBarColorMatchesTabBackground = @@ -779,7 +835,9 @@ public abstract class ChromeFeatureList { public static final CachedFlag sNewTabPageAndroidTriggerForPrerender2 = newCachedFlag(NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2, true); public static final CachedFlag sNewTabPageCustomization = - newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION, false); + newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION, false, true); + public static final CachedFlag sNewTabPageCustomizationToolbarButton = + newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON, false); public static final CachedFlag sNotificationTrampoline = newCachedFlag(NOTIFICATION_TRAMPOLINE, false); public static final CachedFlag sOptimizationGuidePushNotifications = @@ -795,6 +853,11 @@ public abstract class ChromeFeatureList { public static final CachedFlag sPrefetchBrowserInitiatedTriggers = newCachedFlag(PREFETCH_BROWSER_INITIATED_TRIGGERS, true); public static final CachedFlag sPriceChangeModule = newCachedFlag(PRICE_CHANGE_MODULE, true); + public static final CachedFlag sReportNotificationContentDetectionData = + newCachedFlag( + REPORT_NOTIFICATION_CONTENT_DETECTION_DATA, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sRightEdgeGoesForwardGestureNav = newCachedFlag(RIGHT_EDGE_GOES_FORWARD_GESTURE_NAV, false); public static final CachedFlag sSafetyHubMagicStack = @@ -808,6 +871,8 @@ public abstract class ChromeFeatureList { newCachedFlag(SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING, false); public static final CachedFlag sSettingsSingleActivity = newCachedFlag(SETTINGS_SINGLE_ACTIVITY, false); + public static final CachedFlag sShowHomeButtonPolicyAndroid = + newCachedFlag(SHOW_HOME_BUTTON_POLICY_ANDROID, false); public static final CachedFlag sSkipIsolatedSplitPreload = newCachedFlag( SKIP_ISOLATED_SPLIT_PRELOAD, @@ -819,16 +884,20 @@ public abstract class ChromeFeatureList { newCachedFlag(START_SURFACE_RETURN_TIME, true); public static final CachedFlag sTabClosureMethodRefactor = newCachedFlag(TAB_CLOSURE_METHOD_REFACTOR, false); + public static final CachedFlag sTabletTabStripAnimation = + newCachedFlag(TABLET_TAB_STRIP_ANIMATION, false); public static final CachedFlag sTabStateFlatBuffer = newCachedFlag( TAB_STATE_FLAT_BUFFER, /* defaultValue= */ true, /* defaultValueInTests= */ true); + public static final CachedFlag sTabStripDensityChangeAndroid = + newCachedFlag(TAB_STRIP_DENSITY_CHANGE_ANDROID, false); public static final CachedFlag sTabStripIncognitoMigration = newCachedFlag( TAB_STRIP_INCOGNITO_MIGRATION, /* defaultValue= */ false, - /* defaultValueInTests= */ true); + /* defaultValueInTests= */ false); public static final CachedFlag sTabStripLayoutOptimization = newCachedFlag( TAB_STRIP_LAYOUT_OPTIMIZATION, @@ -839,9 +908,16 @@ public abstract class ChromeFeatureList { public static final CachedFlag sTestDefaultDisabled = newCachedFlag(TEST_DEFAULT_DISABLED, false); public static final CachedFlag sTestDefaultEnabled = newCachedFlag(TEST_DEFAULT_ENABLED, true); + public static final CachedFlag sTopControlsRefactor = + newCachedFlag( + TOP_CONTROLS_REFACTOR, + /* defaultValue= */ false, + /* defaultValueInTests= */ true); public static final CachedFlag sTraceBinderIpc = newCachedFlag(TRACE_BINDER_IPC, false); public static final CachedFlag sUseChimeAndroidSdk = newCachedFlag(USE_CHIME_ANDROID_SDK, false); + public static final CachedFlag sUseActivityManagerForTabActivation = + newCachedFlag(USE_ACTIVITY_MANAGER_FOR_TAB_ACTIVATION, true); public static final CachedFlag sUseLibunwindstackNativeUnwinderAndroid = newCachedFlag(USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID, true); public static final CachedFlag sWebApkMinShellApkVersion = @@ -849,6 +925,8 @@ public abstract class ChromeFeatureList { public static final List sFlagsCachedFullBrowser = List.of( + sAccountForSuppressedKeyboardInsets, + sAllowTabClosingUponMinimization, sAndroidAppIntegration, sAndroidAppIntegrationModule, sAndroidAppIntegrationMultiDataSource, @@ -857,6 +935,7 @@ public abstract class ChromeFeatureList { sAndroidBottomToolbar, sAndroidElegantTextHeight, sAndroidMinimalUiLargeScreen, + sAndroidProgressBarVisualUpdate, sAndroidSurfaceColorUpdate, sAndroidTabDeclutterDedupeTabIdsKillSwitch, sAndroidTabSkipSaveTabsKillswitch, @@ -865,8 +944,10 @@ public abstract class ChromeFeatureList { sAndroidWindowPopupLargeScreen, sAppSpecificHistory, sAsyncNotificationManager, + sBatchTabRestore, sBlockIntentsWhileLocked, sBookmarkPaneAndroid, + sBrowserControlsDebugging, sCacheIsMultiInstanceApi31Enabled, sCctAdaptiveButton, sCctAuthTab, @@ -891,15 +972,20 @@ public abstract class ChromeFeatureList { sCctRevampedBranding, sCctTabModalDialog, sCctToolbarRefactor, + sClampAutomotiveScaling, sClankStartupLatencyInjection, sCollectAndroidFrameTimelineMetrics, sCommandLineOnNonRooted, + sCpaSpecUpdate, sCrossDeviceTabPaneAndroid, sDisableInstanceLimit, sDisableListTabSwitcher, sDrawKeyNativeEdgeToEdge, sEdgeToEdgeBottomChin, + sEdgeToEdgeDebugging, sEdgeToEdgeEverywhere, + sEdgeToEdgeMonitorConfigurations, + sEdgeToEdgeTablet, sEdgeToEdgeWebOptIn, sEducationalTipDefaultBrowserPromoCard, sEducationalTipModule, @@ -914,6 +1000,7 @@ public abstract class ChromeFeatureList { sGridTabSwitcherUpdate, sHideTabletToolbarDownloadButton, sHistoryPaneAndroid, + sHomepageIsNewTabPagePolicyAndroid, sKeyboardEscBackNavigation, sLegacyTabStateDeprecation, sLockBackPressHandlerAtStart, @@ -922,10 +1009,12 @@ public abstract class ChromeFeatureList { sMostVisitedTilesCustomization, sMostVisitedTilesReselect, sMultiInstanceApplicationStatusCleanup, + sMvcUpdateViewWhenModelChanged, sNavBarColorAnimation, sNavBarColorMatchesTabBackground, sNewTabPageAndroidTriggerForPrerender2, sNewTabPageCustomization, + sNewTabPageCustomizationToolbarButton, sNotificationTrampoline, sOptimizationGuidePushNotifications, sPaintPreviewDemo, @@ -933,22 +1022,28 @@ public abstract class ChromeFeatureList { sPowerSavingModeBroadcastReceiverInBackground, sPrefetchBrowserInitiatedTriggers, sPriceChangeModule, + sReportNotificationContentDetectionData, sRightEdgeGoesForwardGestureNav, sSafetyHubMagicStack, sSafetyHubWeakAndReusedPasswords, sSearchInCCT, sSearchInCCTAlternateTapHandling, sSettingsSingleActivity, + sShowHomeButtonPolicyAndroid, sSkipIsolatedSplitPreload, sSmallerTabStripTitleLimit, sStartSurfaceReturnTime, sTabClosureMethodRefactor, + sTabletTabStripAnimation, sTabStateFlatBuffer, + sTabStripDensityChangeAndroid, sTabStripIncognitoMigration, sTabStripLayoutOptimization, sTabWindowManagerReportIndicesMismatch, + sTopControlsRefactor, sTraceBinderIpc, sUseChimeAndroidSdk, + sUseActivityManagerForTabActivation, sUseLibunwindstackNativeUnwinderAndroid, sWebApkMinShellApkVersion); @@ -975,18 +1070,22 @@ public abstract class ChromeFeatureList { newMutableFlagWithSafeDefault(ANDROID_DUMP_ON_SCROLL_WITHOUT_RESOURCE, false); public static final MutableFlagWithSafeDefault sAndroidNativePagesInNewTab = newMutableFlagWithSafeDefault(ANDROID_NATIVE_PAGES_IN_NEW_TAB, false); - public static final MutableFlagWithSafeDefault sAndroidTabDeclutter = - newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER, true); public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveAllButActiveTab = newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_ARCHIVE_ALL_BUT_ACTIVE, false); public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveDuplicateTabs = newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_ARCHIVE_DUPLICATE_TABS, true); public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveTabGroups = newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_ARCHIVE_TAB_GROUPS, false); + public static final MutableFlagWithSafeDefault sAndroidTabDeclutterAutoDelete = + newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_AUTO_DELETE, false); + public static final MutableFlagWithSafeDefault sAndroidTabDeclutterAutoDeleteKillSwitch = + newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_AUTO_DELETE_KILL_SWITCH, true); + public static final MutableFlagWithSafeDefault sAndroidTabDeclutterPerformanceImprovements = + newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_PERFORMANCE_IMPROVEMENTS, false); public static final MutableFlagWithSafeDefault sAndroidTabDeclutterRescueKillSwitch = newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_RESCUE_KILLSWITCH, true); public static final MutableFlagWithSafeDefault sBcivBottomControls = - newMutableFlagWithSafeDefault(BCIV_BOTTOM_CONTROLS, false); + newMutableFlagWithSafeDefault(BCIV_BOTTOM_CONTROLS, true); public static final MutableFlagWithSafeDefault sBottomBrowserControlsRefactor = newMutableFlagWithSafeDefault(BOTTOM_BROWSER_CONTROLS_REFACTOR, true); public static final MutableFlagWithSafeDefault sBrowserControlsEarlyResize = @@ -1090,10 +1189,12 @@ public abstract class ChromeFeatureList { newBooleanCachedFeatureParam( ANDROID_APP_INTEGRATION_WITH_FAVICON, "skip_schema_check", false); - public static final BooleanCachedFeatureParam sAndroidAppIntegrationMultiDataSourceUseSchemaV1 = - newBooleanCachedFeatureParam( - ANDROID_APP_INTEGRATION_MULTI_DATA_SOURCE, "use_schema_v1", false); - + public static final BooleanCachedFeatureParam + sAndroidAppIntegrationMultiDataSourceSkipSchemaCheck = + newBooleanCachedFeatureParam( + ANDROID_APP_INTEGRATION_MULTI_DATA_SOURCE, + "multi_data_source_skip_schema_check", + false); public static final BooleanCachedFeatureParam sAndroidAppIntegrationMultiDataSourceSkipDeviceCheck = newBooleanCachedFeatureParam( @@ -1104,9 +1205,15 @@ public abstract class ChromeFeatureList { public static final BooleanCachedFeatureParam sAndroidBottomToolbarDefaultToTop = newBooleanCachedFeatureParam(ANDROID_BOTTOM_TOOLBAR, "default_to_top", true); + public static final IntCachedFeatureParam sBatchTabRestoreBatchSize = + newIntCachedFeatureParam(BATCH_TAB_RESTORE, "batch_tab_restore_batch_size", 5); + public static final IntCachedFeatureParam sCctAuthTabEnableHttpsRedirectsVerificationTimeoutMs = newIntCachedFeatureParam( CCT_AUTH_TAB_ENABLE_HTTPS_REDIRECTS, "verification_timeout_ms", 10_000); + public static final IntCachedFeatureParam sClampAutomotiveScalingMaxScalingPercentage = + newIntCachedFeatureParam( + CLAMP_AUTOMOTIVE_SCALING, "max_automotive_scaling_percentage", 150); /** * Parameter that lists a pipe ("|") separated list of package names from which the {@link @@ -1322,8 +1429,6 @@ public abstract class ChromeFeatureList { sNavBarColorMatchesTabBackgroundColorAnimationDisabled = newBooleanCachedFeatureParam( NAV_BAR_COLOR_MATCHES_TAB_BACKGROUND, "color_animation_disabled", true); - public static final BooleanCachedFeatureParam sNewTabSearchEngineUrlAndroidSwapOutNtp = - newBooleanCachedFeatureParam(NEW_TAB_SEARCH_ENGINE_URL_ANDROID, "swap_out_ntp", false); public static final IntCachedFeatureParam sNotificationTrampolineLongJobDurationMs = newIntCachedFeatureParam(NOTIFICATION_TRAMPOLINE, "long_job_duration_millis", 8 * 1000); public static final IntCachedFeatureParam sNotificationTrampolineNormalJobDurationMs = @@ -1367,6 +1472,24 @@ public abstract class ChromeFeatureList { 14400); // 4 hours public static final BooleanCachedFeatureParam sTabStateFlatBufferMigrateStaleTabs = newBooleanCachedFeatureParam(TAB_STATE_FLAT_BUFFER, "migrate_stale_tabs", true); + + public static final StringCachedFeatureParam sTabStripLayoutOptimizationOemAllowlist = + newStringCachedFeatureParam( + TAB_STRIP_LAYOUT_OPTIMIZATION, "custom_headers_oem_allowlist", ""); + + public static final StringCachedFeatureParam sTabStripLayoutOptimizationOemDenylist = + newStringCachedFeatureParam( + TAB_STRIP_LAYOUT_OPTIMIZATION, "custom_headers_oem_denylist", ""); + + public static final BooleanCachedFeatureParam sTabStripLayoutOptimizationOnExternalDisplay = + newBooleanCachedFeatureParam( + TAB_STRIP_LAYOUT_OPTIMIZATION, "enable_on_external_display", true); + + public static final StringCachedFeatureParam + sTabStripLayoutOptimizationOnExternalDisplayOemDenylist = + newStringCachedFeatureParam( + TAB_STRIP_LAYOUT_OPTIMIZATION, "external_display_oem_denylist", ""); + public static final IntCachedFeatureParam sTabWindowManagerReportIndicesMismatchTimeDiffThresholdMs = newIntCachedFeatureParam( @@ -1387,8 +1510,8 @@ public abstract class ChromeFeatureList { sAndroidAppIntegrationModuleForceCardShow, sAndroidAppIntegrationModuleShowThirdPartyCard, sAndroidAppIntegrationMultiDataSourceHistoryContentTtlHours, + sAndroidAppIntegrationMultiDataSourceSkipSchemaCheck, sAndroidAppIntegrationMultiDataSourceSkipDeviceCheck, - sAndroidAppIntegrationMultiDataSourceUseSchemaV1, sAndroidAppIntegrationV2ContentTtlHours, sAndroidAppIntegrationWithFaviconScheduleDelayTimeMs, sAndroidAppIntegrationWithFaviconSkipDeviceCheck, @@ -1397,9 +1520,11 @@ public abstract class ChromeFeatureList { sAndroidAppIntegrationWithFaviconZeroStateFaviconNumber, sAndroidBottomToolbarDefaultToTop, sAndroidThemeModuleForceDependencies, + sBatchTabRestoreBatchSize, sCctAdaptiveButtonEnableOpenInBrowser, sCctAdaptiveButtonEnableVoice, sCctAuthTabEnableHttpsRedirectsVerificationTimeoutMs, + sClampAutomotiveScalingMaxScalingPercentage, sCctAutoTranslateAllowAllFirstParties, sCctAutoTranslatePackageNamesAllowlist, sCctGoogleBottomBarButtonList, @@ -1435,7 +1560,6 @@ public abstract class ChromeFeatureList { sNavBarColorAnimationDisableBottomChinColorAnimation, sNavBarColorAnimationDisableEdgeToEdgeLayoutColorAnimation, sNavBarColorMatchesTabBackgroundColorAnimationDisabled, - sNewTabSearchEngineUrlAndroidSwapOutNtp, sNotificationTrampolineImmediateJobDurationMs, sNotificationTrampolineLongJobDurationMs, sNotificationTrampolineNormalJobDurationMs, @@ -1448,6 +1572,10 @@ public abstract class ChromeFeatureList { sStartSurfaceReturnTimeTabletSecs, sTabGroupListContainment, sTabStateFlatBufferMigrateStaleTabs, + sTabStripLayoutOptimizationOemAllowlist, + sTabStripLayoutOptimizationOemDenylist, + sTabStripLayoutOptimizationOnExternalDisplay, + sTabStripLayoutOptimizationOnExternalDisplayOemDenylist, sTabWindowManagerReportIndicesMismatchTimeDiffThresholdMs, sUseChimeAndroidSdkAlwaysRegister, sWebApkMinShellApkVersionValue); @@ -1462,28 +1590,18 @@ public abstract class ChromeFeatureList { sAndroidNativePagesInNewTabDownloadsEnabled = sAndroidNativePagesInNewTab.newBooleanParam( "android_native_pages_in_new_tab_downloads_enabled", true); - public static final MutableBooleanParamWithSafeDefault sAndroidTabDeclutterArchiveEnabled = - sAndroidTabDeclutter.newBooleanParam("android_tab_declutter_archive_enabled", true); - public static final MutableIntParamWithSafeDefault sAndroidTabDeclutterArchiveTimeDeltaHours = - sAndroidTabDeclutter.newIntParam( - "android_tab_declutter_archive_time_delta_hours", 21 * 24); - public static final MutableBooleanParamWithSafeDefault sAndroidTabDeclutterAutoDeleteEnabled = - sAndroidTabDeclutter.newBooleanParam( - "android_tab_declutter_auto_delete_enabled", false); + public static final MutableBooleanParamWithSafeDefault + sAndroidNativePagesInNewTabHistoryEnabled = + sAndroidNativePagesInNewTab.newBooleanParam( + "android_native_pages_in_new_tab_history_enabled", true); + public static final MutableBooleanParamWithSafeDefault + sAndroidNativePagesInNewTabRecentTabsEnabled = + sAndroidNativePagesInNewTab.newBooleanParam( + "android_native_pages_in_new_tab_recent_tabs_enabled", true); public static final MutableIntParamWithSafeDefault sAndroidTabDeclutterAutoDeleteTimeDeltaHours = - sAndroidTabDeclutter.newIntParam( - "android_tab_declutter_auto_delete_time_delta_hours", 60 * 24); - public static final MutableIntParamWithSafeDefault sAndroidTabDeclutterIntervalTimeDeltaHours = - sAndroidTabDeclutter.newIntParam( - "android_tab_declutter_interval_time_delta_hours", 7 * 24); - public static final MutableIntParamWithSafeDefault sAndroidTabDeclutterMaxSimultaneousArchives = - sAndroidTabDeclutter.newIntParam( - "android_tab_declutter_max_simultaneous_archives", 100); - public static final MutableIntParamWithSafeDefault - sAndroidTabDeclutterIphMessageDismissThreshold = - sAndroidTabDeclutter.newIntParam( - "android_tab_declutter_iph_message_dismiss_threshold", 3); + sAndroidTabDeclutterAutoDelete.newIntParam( + "android_tab_declutter_auto_delete_time_delta_hours", 90 * 24); public static final MutableBooleanParamWithSafeDefault sDisableBottomControlsStackerYOffsetDispatching = sBottomBrowserControlsRefactor.newBooleanParam( diff --git a/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc b/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc index 9a004008..bab4996a 100755 --- a/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc +++ b/tools/under-control/src/chrome/browser/prefs/browser_prefs.cc @@ -42,6 +42,7 @@ #include "chrome/browser/media/webrtc/permission_bubble_media_access_handler.h" #include "chrome/browser/memory/enterprise_memory_limit_pref_observer.h" #include "chrome/browser/metrics/chrome_metrics_service_client.h" +#include "chrome/browser/metrics/tab_stats/tab_stats_tracker.h" #include "chrome/browser/net/net_error_tab_helper.h" #include "chrome/browser/net/profile_network_context_service.h" #include "chrome/browser/net/secure_dns_util.h" @@ -71,6 +72,7 @@ #include "chrome/browser/search/search.h" #include "chrome/browser/serial/serial_policy_allowed_ports.h" #include "chrome/browser/sharing_hub/sharing_hub_features.h" +#include "chrome/browser/signin/chrome_signin_client.h" #include "chrome/browser/ssl/ssl_config_service_manager.h" #include "chrome/browser/tracing/chrome_tracing_delegate.h" #include "chrome/browser/ui/browser_ui_prefs.h" @@ -207,6 +209,7 @@ #endif #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#include "chrome/browser/extensions/activity_log/activity_log.h" #include "chrome/browser/extensions/commands/command_service.h" #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/extension_web_ui.h" @@ -220,7 +223,6 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/accessibility/animation_policy_prefs.h" #include "chrome/browser/apps/platform_apps/shortcut_manager.h" -#include "chrome/browser/extensions/activity_log/activity_log.h" #include "chrome/browser/extensions/api/tabs/tabs_api.h" #include "chrome/browser/extensions/preinstalled_apps.h" #include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h" @@ -279,7 +281,6 @@ #include "chrome/browser/hid/hid_policy_allowed_devices.h" #include "chrome/browser/intranet_redirect_detector.h" #include "chrome/browser/media/unified_autoplay_config.h" -#include "chrome/browser/metrics/tab_stats/tab_stats_tracker.h" #include "chrome/browser/nearby_sharing/common/nearby_share_prefs.h" #include "chrome/browser/new_tab_page/modules/file_suggestion/drive_service.h" #include "chrome/browser/new_tab_page/modules/file_suggestion/microsoft_files_page_handler.h" @@ -410,7 +411,6 @@ #include "chrome/browser/ash/printing/enterprise/enterprise_printers_provider.h" #include "chrome/browser/ash/release_notes/release_notes_storage.h" #include "chrome/browser/ash/scanning/chrome_scanning_app_delegate.h" -#include "chrome/browser/ash/settings/device_settings_cache.h" #include "chrome/browser/ash/system/automatic_reboot_manager.h" #include "chrome/browser/ash/system/input_device_settings.h" #include "chrome/browser/ash/system_web_apps/apps/help_app/help_app_notification_controller.h" @@ -429,7 +429,6 @@ #include "chrome/browser/memory/oom_kills_monitor.h" #include "chrome/browser/metrics/chromeos_metrics_provider.h" #include "chrome/browser/policy/annotations/blocklist_handler.h" -#include "chrome/browser/policy/system_features_disable_list_policy_handler.h" #include "chrome/browser/ui/ash/shelf/chrome_shelf_prefs.h" #include "chrome/browser/ui/webui/ash/login/enable_debugging_screen_handler.h" #include "chrome/browser/ui/webui/ash/settings/os_settings_ui.h" @@ -448,9 +447,11 @@ #include "chromeos/ash/components/network/network_metadata_store.h" #include "chromeos/ash/components/network/proxy/proxy_config_handler.h" #include "chromeos/ash/components/policy/restriction_schedule/device_restriction_schedule_controller.h" +#include "chromeos/ash/components/policy/system_features_disable_list/system_features_disable_list_policy_utils.h" #include "chromeos/ash/components/quickoffice/quickoffice_prefs.h" #include "chromeos/ash/components/report/report_controller.h" #include "chromeos/ash/components/scheduler_config/scheduler_configuration_manager.h" +#include "chromeos/ash/components/settings/device_settings_cache.h" #include "chromeos/ash/components/timezone/timezone_resolver.h" #include "chromeos/ash/experiences/arc/arc_prefs.h" #include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h" @@ -557,12 +558,6 @@ constexpr char kOsCryptAppBoundFixedData3PrefName[] = "os_crypt.app_bound_fixed_data3"; #endif // BUILDFLAG(IS_WIN) -#if BUILDFLAG(IS_CHROMEOS) -// Deprecated 04/2024 -constexpr char kLastUploadedEuiccStatusPrefLegacy[] = - "esim.last_upload_euicc_status"; -#endif // BUILDFLAG(IS_CHROMEOS) - #if BUILDFLAG(IS_CHROMEOS) // Deprecated 05/2024. // A preference to keep track of the device registered time. @@ -1096,8 +1091,30 @@ inline constexpr char kManagedAccessToGetAllScreensMediaAllowedForUrls[] = // Deprecated 04/2025. constexpr char kObsoleteUserAcknowledgedLocalPasswordsMigrationWarning[] = "user_acknowledged_local_passwords_migration_warning"; + +// Deprecated 04/2025. +constexpr char kObsoleteLocalPasswordMigrationWarningPrefsVersion[] = + "local_passwords_migration_warning_reset_count"; #endif +// Deprecated 04/2025. +inline constexpr char kSuggestionGroupVisibility[] = + "omnibox.suggestionGroupVisibility"; + +#if BUILDFLAG(IS_ANDROID) +// Deprecated 05/2025. +inline constexpr char kWipedWebAPkDataForMigration[] = + "sync.wiped_web_apk_data_for_migration"; +#endif // BUILDFLAG(IS_ANDROID) + +// Deprecated 05/2025. +inline constexpr char kSyncCacheGuid[] = "sync.cache_guid"; +inline constexpr char kSyncBirthday[] = "sync.birthday"; +inline constexpr char kSyncBagOfChips[] = "sync.bag_of_chips"; +inline constexpr char kSyncLastSyncedTime[] = "sync.last_synced_time"; +inline constexpr char kSyncLastPollTime[] = "sync.last_poll_time"; +inline constexpr char kSyncPollInterval[] = "sync.short_poll_interval"; + // Register local state used only for migration (clearing or moving to a new // key). void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { @@ -1111,9 +1128,6 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) { // Deprecated 05/2024. registry->RegisterTimePref(kDeviceRegisteredTime, base::Time()); registry->RegisterDictionaryPref(kArcKioskDictionaryName); - - // Deprecated 04/2024. - registry->RegisterDictionaryPref(kLastUploadedEuiccStatusPrefLegacy); #endif // BUILDFLAG(IS_CHROMEOS) #if !BUILDFLAG(IS_ANDROID) @@ -1541,7 +1555,27 @@ void RegisterProfilePrefsForMigration( // Deprecated 04/2025. registry->RegisterBooleanPref( kObsoleteUserAcknowledgedLocalPasswordsMigrationWarning, false); + + // Deprecated 04/2025. + registry->RegisterIntegerPref( + kObsoleteLocalPasswordMigrationWarningPrefsVersion, 0); #endif + + // Deprecated 04/2025. + registry->RegisterDictionaryPref(kSuggestionGroupVisibility); + + // Deprecated 05/2025. +#if BUILDFLAG(IS_ANDROID) + registry->RegisterBooleanPref(kWipedWebAPkDataForMigration, false); +#endif // BUILDFLAG(IS_ANDROID) + + // Deprecated 05/2025. + registry->RegisterStringPref(kSyncCacheGuid, std::string()); + registry->RegisterStringPref(kSyncBirthday, std::string()); + registry->RegisterStringPref(kSyncBagOfChips, std::string()); + registry->RegisterTimePref(kSyncLastSyncedTime, base::Time()); + registry->RegisterTimePref(kSyncLastPollTime, base::Time()); + registry->RegisterTimeDeltaPref(kSyncPollInterval, base::TimeDelta()); } } // namespace @@ -1572,6 +1606,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { chrome_labs_prefs::RegisterLocalStatePrefs(registry); chrome_urls::RegisterPrefs(registry); ChromeMetricsServiceClient::RegisterPrefs(registry); + ChromeSigninClient::RegisterLocalStatePrefs(registry); enterprise_connectors::RegisterLocalStatePrefs(registry); enterprise_util::RegisterLocalStatePrefs(registry); component_updater::RegisterPrefs(registry); @@ -1589,6 +1624,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { language::UlpLanguageCodeLocator::RegisterLocalStatePrefs(registry); memory::EnterpriseMemoryLimitPrefObserver::RegisterPrefs(registry); metrics::RegisterDemographicsLocalStatePrefs(registry); + metrics::TabStatsTracker::RegisterPrefs(registry); network_time::NetworkTimeTracker::RegisterPrefs(registry); optimization_guide::prefs::RegisterLocalStatePrefs(registry); optimization_guide::model_execution::prefs::RegisterLocalStatePrefs(registry); @@ -1664,7 +1700,6 @@ void RegisterLocalState(PrefRegistrySimple* registry) { headless::RegisterPrefs(registry); IntranetRedirectDetector::RegisterPrefs(registry); media_router::RegisterLocalStatePrefs(registry); - metrics::TabStatsTracker::RegisterPrefs(registry); performance_manager::user_tuning::prefs::RegisterLocalStatePrefs(registry); PerformanceInterventionMetricsReporter::RegisterLocalStatePrefs(registry); RegisterBrowserPrefs(registry); @@ -1762,7 +1797,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { RegisterNearbySharingLocalPrefs(registry); chromeos::echo_offer::RegisterPrefs(registry); memory::OOMKillsMonitor::RegisterPrefs(registry); - policy::SystemFeaturesDisableListPolicyHandler::RegisterPrefs(registry); + policy::RegisterDisabledSystemFeaturesPrefs(registry); policy::DlpRulesManagerImpl::RegisterPrefs(registry); #endif // BUILDFLAG(IS_CHROMEOS) @@ -1981,6 +2016,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #endif #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) + extensions::ActivityLog::RegisterProfilePrefs(registry); extensions::PermissionsManager::RegisterProfilePrefs(registry); extensions::ExtensionPrefs::RegisterProfilePrefs(registry); extensions::RuntimeAPI::RegisterPrefs(registry); @@ -1993,7 +2029,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(ENABLE_EXTENSIONS) RegisterAnimationPolicyPrefs(registry); - extensions::ActivityLog::RegisterProfilePrefs(registry); extensions::AudioAPI::RegisterUserPrefs(registry); // TODO(devlin): This would be more inline with the other calls here if it // were nested in either a class or separate namespace with a simple @@ -2085,7 +2120,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, extensions::login_api::RegisterProfilePrefs(registry); extensions::platform_keys::EnterprisePlatformKeysRegisterProfilePrefs( registry); - certificate_manager::CertificatesHandler::RegisterProfilePrefs(registry); + certificate_manager::RegisterProfilePrefs(registry); chromeos::cloud_storage::RegisterProfilePrefs(registry); chromeos::cloud_upload::RegisterProfilePrefs(registry); policy::NetworkAnnotationBlocklistHandler::RegisterPrefs(registry); @@ -2265,16 +2300,17 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry->RegisterBooleanPref( prefs::kAccessibilityMainNodeAnnotationsEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); -#endif + + // TODO(crbug.com/400455013): Add LNA support on Android + registry->RegisterBooleanPref( + prefs::kManagedLocalNetworkAccessRestrictionsEnabled, false); +#endif // !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, false); #endif - registry->RegisterBooleanPref( - prefs::kManagedPrivateNetworkAccessRestrictionsEnabled, false); - #if BUILDFLAG(ENTERPRISE_DATA_CONTROLS) data_controls::RegisterProfilePrefs(registry); #endif // BUILDFLAG(ENTERPRISE_DATA_CONTROLS) @@ -2295,6 +2331,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, registry->RegisterIntegerPref(prefs::kLensOverlayStartCount, 0); registry->RegisterDictionaryPref(prefs::kReportingEndpoints); + + registry->RegisterBooleanPref(prefs::kViewSourceLineWrappingEnabled, false); } void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { @@ -2353,9 +2391,6 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) { // Added 05/2024. local_state->ClearPref(kDeviceRegisteredTime); local_state->ClearPref(kArcKioskDictionaryName); - - // Added 04/2024. - local_state->ClearPref(kLastUploadedEuiccStatusPrefLegacy); #endif // BUILDFLAG(IS_CHROMEOS) #if !BUILDFLAG(IS_ANDROID) @@ -2831,8 +2866,27 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, // Added 04/2025 profile_prefs->ClearPref( kObsoleteUserAcknowledgedLocalPasswordsMigrationWarning); + + // Added 04/2025. + profile_prefs->ClearPref(kObsoleteLocalPasswordMigrationWarningPrefsVersion); #endif + // Added 04/2025. + profile_prefs->ClearPref(kSuggestionGroupVisibility); + +#if BUILDFLAG(IS_ANDROID) + // Added 05/2025. + profile_prefs->ClearPref(kWipedWebAPkDataForMigration); +#endif // BUILDFLAG(IS_ANDROID) + + // Added 05/2025. + profile_prefs->ClearPref(kSyncCacheGuid); + profile_prefs->ClearPref(kSyncBirthday); + profile_prefs->ClearPref(kSyncBagOfChips); + profile_prefs->ClearPref(kSyncLastSyncedTime); + profile_prefs->ClearPref(kSyncLastPollTime); + profile_prefs->ClearPref(kSyncPollInterval); + // Please don't delete the following line. It is used by PRESUBMIT.py. // END_MIGRATE_OBSOLETE_PROFILE_PREFS diff --git a/tools/under-control/src/chrome/browser/ui/tab_helpers.cc b/tools/under-control/src/chrome/browser/ui/tab_helpers.cc index 8a12e9d7..8b3b888e 100755 --- a/tools/under-control/src/chrome/browser/ui/tab_helpers.cc +++ b/tools/under-control/src/chrome/browser/ui/tab_helpers.cc @@ -86,8 +86,6 @@ #include "chrome/browser/ui/find_bar/find_bar_state.h" #include "chrome/browser/ui/focus_tab_after_navigation_helper.h" #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" -#include "chrome/browser/ui/performance_controls/memory_saver_chip_tab_helper.h" -#include "chrome/browser/ui/performance_controls/tab_resource_usage_tab_helper.h" #include "chrome/browser/ui/prefs/prefs_tab_helper.h" #include "chrome/browser/ui/privacy_sandbox/privacy_sandbox_prompt_helper.h" #include "chrome/browser/ui/recently_audible_helper.h" @@ -96,7 +94,6 @@ #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" #include "chrome/browser/ui/tab_contents/core_tab_helper.h" #include "chrome/browser/ui/tab_dialogs.h" -#include "chrome/browser/ui/tab_ui_helper.h" #include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h" #include "chrome/browser/v8_compile_hints/v8_compile_hints_tab_helper.h" #include "chrome/browser/vr/vr_tab_helper.h" @@ -131,6 +128,7 @@ #include "components/metrics_services_manager/metrics_services_manager.h" #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" #include "components/offline_pages/buildflags/buildflags.h" +#include "components/omnibox/common/omnibox_feature_configs.h" #include "components/optimization_guide/core/optimization_guide_features.h" #include "components/page_info/core/features.h" #include "components/password_manager/core/browser/password_manager.h" @@ -238,8 +236,8 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" +#include "chrome/browser/extensions/app_tab_helper.h" #include "chrome/browser/extensions/navigation_extension_enabler.h" -#include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/ui/extensions/extension_side_panel_utils.h" #include "chrome/browser/web_applications/policy/pre_redirection_url_observer.h" #include "chrome/browser/web_applications/web_app_utils.h" @@ -248,6 +246,10 @@ #include "extensions/common/mojom/view_type.mojom.h" #endif +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) +#include "chrome/browser/extensions/tab_helper.h" +#endif + #if BUILDFLAG(ENABLE_OFFLINE_PAGES) #include "chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.h" #include "chrome/browser/offline_pages/offline_page_tab_helper.h" @@ -333,7 +335,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { Profile::FromBrowserContext(web_contents->GetBrowserContext()); // --- Section 1: Common tab helpers --- - if (page_info::IsAboutThisSiteAsyncFetchingEnabled()) { + if (page_info::IsAboutThisSiteFeatureEnabled()) { if (auto* optimization_guide_decider = OptimizationGuideKeyedServiceFactory::GetForProfile(profile)) { AboutThisSiteTabHelper::CreateForWebContents(web_contents, @@ -566,7 +568,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { } #endif HttpErrorTabHelper::CreateForWebContents(web_contents); - TabUIHelper::CreateForWebContents(web_contents); tasks::TaskTabHelper::CreateForWebContents(web_contents); tpcd::metadata::TpcdMetadataDevtoolsObserver::CreateForWebContents( web_contents); @@ -666,15 +667,15 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { SadTabHelper::CreateForWebContents(web_contents); SearchTabHelper::CreateForWebContents(web_contents); TabDialogs::CreateForWebContents(web_contents); - MemorySaverChipTabHelper::CreateForWebContents(web_contents); - TabResourceUsageTabHelper::CreateForWebContents(web_contents); if (base::FeatureList::IsEnabled(features::kTabHoverCardImages) || base::FeatureList::IsEnabled(features::kWebUITabStrip)) { ThumbnailTabHelper::CreateForWebContents(web_contents); } UMABrowsingActivityObserver::TabHelper::CreateForWebContents(web_contents); web_modal::WebContentsModalDialogManager::CreateForWebContents(web_contents); - if (OmniboxFieldTrial::IsZeroSuggestPrefetchingEnabled()) { + if (OmniboxFieldTrial::IsZeroSuggestPrefetchingEnabled() || + omnibox_feature_configs::ContextualSearch::Get() + .IsEnabledWithPrefetch()) { ZeroSuggestPrefetchTabHelper::CreateForWebContents(web_contents); } #endif // BUILDFLAG(IS_ANDROID) @@ -750,13 +751,16 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { extensions::SetViewType(web_contents, extensions::mojom::ViewType::kTabContents); } - - extensions::TabHelper::CreateForWebContents(web_contents); + extensions::AppTabHelper::CreateForWebContents(web_contents); extensions::NavigationExtensionEnabler::CreateForWebContents(web_contents); - extensions::WebNavigationTabObserver::CreateForWebContents(web_contents); #endif +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) + // extensions::TabHelper is used on Win/Mac/Linux and desktop Android. + extensions::TabHelper::CreateForWebContents(web_contents); +#endif + #if BUILDFLAG(ENABLE_OFFLINE_PAGES) offline_pages::OfflinePageTabHelper::CreateForWebContents(web_contents); offline_pages::RecentTabHelper::CreateForWebContents(web_contents); diff --git a/tools/under-control/src/chrome/common/extensions/api/autofill_private.idl b/tools/under-control/src/chrome/common/extensions/api/autofill_private.idl index a71b1235..19e93ff1 100755 --- a/tools/under-control/src/chrome/common/extensions/api/autofill_private.idl +++ b/tools/under-control/src/chrome/common/extensions/api/autofill_private.idl @@ -146,6 +146,7 @@ namespace autofillPrivate { DRIVERS_LICENSE_ISSUE_DATE, VEHICLE_YEAR, VEHICLE_PLATE_STATE, + EMAIL_OR_LOYALTY_MEMBERSHIP_ID, MAX_VALID_FIELD_TYPE }; @@ -156,7 +157,9 @@ namespace autofillPrivate { LOCAL_OR_SYNCABLE, // The address is stored in a third party service that is tied // to user's account. - ACCOUNT + ACCOUNT, + ACCOUNT_HOME, + ACCOUNT_WORK }; // The type of data that can be stored for an attribute type. diff --git a/tools/under-control/src/chrome/common/extensions/api/enterprise_reporting_private.idl b/tools/under-control/src/chrome/common/extensions/api/enterprise_reporting_private.idl index 2ea2c527..6d580d20 100755 --- a/tools/under-control/src/chrome/common/extensions/api/enterprise_reporting_private.idl +++ b/tools/under-control/src/chrome/common/extensions/api/enterprise_reporting_private.idl @@ -80,7 +80,6 @@ namespace enterprise.reportingPrivate { boolean builtInDnsClientEnabled; PasswordProtectionTrigger passwordProtectionWarningTrigger; boolean chromeRemoteDesktopAppBlocked; - boolean? thirdPartyBlockingEnabled; SettingValue osFirewall; DOMString[] systemDnsServers; DOMString? enterpriseProfileId; diff --git a/tools/under-control/src/chrome/common/extensions/api/experimental_actor.idl b/tools/under-control/src/chrome/common/extensions/api/experimental_actor.idl index 1e42bc97..629ea273 100755 --- a/tools/under-control/src/chrome/common/extensions/api/experimental_actor.idl +++ b/tools/under-control/src/chrome/common/extensions/api/experimental_actor.idl @@ -9,8 +9,10 @@ namespace experimentalActor { callback ClosureCallback = void(); interface Functions { - // Creates and starts a new task. By default, opens a new tab to - // about:blank that is ready for actions. + // Creates and starts a new task. By default, opens a new tab to + // about:blank that is ready for actions. The startTaskProto can + // optionally specify a tab_id to use an existing tab instead of creating + // a new one. // startTaskProto: encoded optimization_guide.proto.BrowserStartTask // startTaskcallback: // encoded optimization_guide.proto.BrowserStartTaskResult 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 c79f9feb..a051c685 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 @@ -354,19 +354,6 @@ std::unique_ptr CreateV8Unwinder(v8::Isolate* isolate) { return std::make_unique(isolate); } -// Web Share is conditionally enabled here in chrome/, to avoid it being -// made available in other clients of content/ that do not have a Web Share -// Mojo implementation (e.g. WebView). -void MaybeEnableWebShare() { -#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) - if (base::FeatureList::IsEnabled(features::kWebShare)) -#endif -#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || \ - BUILDFLAG(IS_ANDROID) - blink::WebRuntimeFeatures::EnableWebShare(true); -#endif -} - #if BUILDFLAG(ENABLE_NACL) && BUILDFLAG(ENABLE_EXTENSIONS) && \ BUILDFLAG(IS_CHROMEOS) bool IsTerminalSystemWebAppNaClPage(GURL url) { @@ -1701,7 +1688,12 @@ void ChromeContentRendererClient:: // embedder only. blink::WebRuntimeFeatures::EnablePerformanceManagerInstrumentation(true); - MaybeEnableWebShare(); +// Web Share is conditionally enabled here in chrome/, to avoid it +// being made available in WebView or Linux. +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || \ + BUILDFLAG(IS_MAC) + blink::WebRuntimeFeatures::EnableWebShare(true); +#endif if (base::FeatureList::IsEnabled( autofill::features::kAutofillSharedAutofill)) { @@ -1712,11 +1704,17 @@ void ChromeContentRendererClient:: blink::WebRuntimeFeatures::EnableAdTagging(true); if (IsStandaloneContentExtensionProcess()) { - // These Web APIs are only exposed to workers in extensions. + // These Web API features are exposed in extensions. blink::WebRuntimeFeatures::EnableWebUSBOnServiceWorkers(true); #if !BUILDFLAG(IS_ANDROID) blink::WebRuntimeFeatures::EnableWebHIDOnServiceWorkers(true); #endif // !BUILDFLAG(IS_ANDROID) + if (blink::WebRuntimeFeatures::IsAIPromptAPIForExtensionEnabled() && + base::FeatureList::IsEnabled( + blink::features::kAIPromptAPIForExtension)) { + blink::WebRuntimeFeatures::EnableAIPromptAPI(true); + } + blink::WebRuntimeFeatures::EnableAIPromptAPIForWorkers(true); blink::WebRuntimeFeatures::EnableAIRewriterAPIForWorkers(true); blink::WebRuntimeFeatures::EnableAISummarizationAPIForWorkers(true); blink::WebRuntimeFeatures::EnableAIWriterAPIForWorkers(true); 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 0a51219b..a9400a04 100755 --- a/tools/under-control/src/components/policy/resources/templates/policies.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policies.yaml @@ -1358,7 +1358,14 @@ policies: 1357: BuiltInAIAPIsEnabled 1358: TabGroupSharingSettings 1359: NTPFooterManagementNoticeEnabled - 1360: NTPFooterThemeAttributionEnabled + 1360: NTPFooterExtensionAttributionEnabled + 1361: ClearWindowNameForNewBrowsingContextGroup + 1362: PasswordManagerBlocklist + 1363: TLS13EarlyDataEnabled + 1364: LocalNetworkAccessRestrictionsEnabled + 1365: PrefetchWithServiceWorkerEnabled + 1366: AIModeSearchSuggestSettings + 1367: AIModeSettings atomic_groups: 1: Homepage diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Arc/ArcEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Arc/ArcEnabled.yaml index d329122e..e9321424 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Arc/ArcEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Arc/ArcEnabled.yaml @@ -4,8 +4,6 @@ default_for_enterprise_users: false desc: Unless Ephemeral mode or multiple sign-in is on during the user's session, setting ArcEnabled to True turns ARC on for the user. Setting the policy to False or leaving it unset means enterprise users can't use ARC. - - This policy only controls ArcVM on $2Google ChromeOS. For Google ChromeOS Flex, please see the DeviceFlexArcPreloadEnabled policy for more details. example_value: false features: dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ClearWindowNameForNewBrowsingContextGroup.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ClearWindowNameForNewBrowsingContextGroup.yaml new file mode 100755 index 00000000..31688cbb --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/ClearWindowNameForNewBrowsingContextGroup.yaml @@ -0,0 +1,58 @@ +caption: Choose whether to allow clearing window.name for cross-site top-level + navigations resulting in a new browsing context group. + +default: true + +desc: |- + This policy controls whether window.name can be cleared for cross-site + top-level navigations which result in a new browsing context group being + created when the ClearCrossSiteCrossBrowsingContextGroupWindowName variation is + enabled. + + The ClearCrossSiteCrossBrowsingContextGroupWindowName variation controls whether + window.name will be cleared for cross-site top-level navigations. Examples of + such navigations include a user navigating to a new site via the omnibox or + clicking on a link to a new site when the link uses "target='_blank' + rel='noopener'". Clearing window.name in these cases prevents information from + potentially leaking between sites via the window.name property, improving user + privacy. ClearWindowNameForNewBrowsingContextGroup policy is in place to + restore the previous behavior. When the + ClearCrossSiteCrossBrowsingContextGroupWindowName variation is enabled + window.name will be cleared for qualifying navigations if this policy is set + to Enabled or not set. If it is disabled, window.name will not be cleared. + + If you must use the policy to disable window.name clearing on qualifying + navigations, please file a bug on + $1https://crbug.com/new?component=1456652&template=1937639&cc=ladan@chromium.org,miketaylr@chromium.org&noWizard=true + explaining your use case. The policy is scheduled to + be offered through $2Google Chrome + version 142. + +example_value: false + +features: + dynamic_refresh: true + per_profile: true + +future_on: + - chrome.* + - chrome_os + - android + +items: +- caption: Clear window.name when the navigation is top-level, cross-site and swaps BrowsingContextGroup. + value: true +- caption: Do not clear window.name when the navigation is top-level, cross-site and swaps BrowsingContextGroup. + value: false + +owners: +- ladan@chromium.org +- potassium-katabolism@google.com + +schema: + type: boolean + +tags: [] + +type: main + diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/PartitionedBlobUrlUsage.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/PartitionedBlobUrlUsage.yaml index 67a90df2..26184f89 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/PartitionedBlobUrlUsage.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/ContentSettings/PartitionedBlobUrlUsage.yaml @@ -12,15 +12,17 @@ desc: |- or DefaultThirdPartyStoragePartitioningSetting, then Blob URLs will also not be partitioned. - If you must use the policy, please file a bug on crbug.com explaining your - use case and CC {janiceliu, awillia}@chromium.org. The policy is scheduled to - be offered through $1Google Chrome - version 140, after which the old implementation will be removed. + If you must use the policy, please file a bug at + $1https://crbug.com/new?component=1779870&cc=awillia@chromium.org&priority=p1&type=bug&noWizard=true + explaining your use case. The policy is scheduled to be offered through + $1Google Chrome version 143, after which + the old implementation will be removed. NOTE: Only newly-started renderer processes will reflect changes to this policy while the browser is running. - For detailed information on third-party storage partitioning, please see https://developers.google.com/privacy-sandbox/cookies/storage-partitioning. + For detailed information on third-party storage partitioning, please see + https://developers.google.com/privacy-sandbox/cookies/storage-partitioning. example_value: false @@ -36,7 +38,6 @@ items: owners: - awillia@chromium.org -- janiceliu@chromium.org - potassium-katabolism@google.com schema: diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Crostini/CrostiniAnsiblePlaybook.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Crostini/CrostiniAnsiblePlaybook.yaml index dac8d7eb..bed7af8c 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Crostini/CrostiniAnsiblePlaybook.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Crostini/CrostiniAnsiblePlaybook.yaml @@ -28,7 +28,8 @@ schema: description: The URL from which the Ansible playbook can be downloaded. type: string type: object +deprecated: true supported_on: -- chrome_os:80- +- chrome_os:80-122 tags: [] type: external diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/MandatoryExtensionsForIncognitoNavigation.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/MandatoryExtensionsForIncognitoNavigation.yaml index 9f0cecc1..8dd7ffd9 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/MandatoryExtensionsForIncognitoNavigation.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Extensions/MandatoryExtensionsForIncognitoNavigation.yaml @@ -13,6 +13,7 @@ features: dynamic_refresh: true per_profile: true future_on: +- android - fuchsia - chrome.* supported_on: @@ -25,4 +26,4 @@ schema: type: string type: array tags: [] -type: list \ No newline at end of file +type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklist.yaml index fa7b3637..2d081418 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklist.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklist.yaml @@ -12,8 +12,8 @@ example_value: features: dynamic_refresh: true per_profile: true -future_on: -- chrome_os +supported_on: +- chrome_os:138- owners: - andreydav@google.com - mpetrisor@chromium.org diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklistExceptions.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklistExceptions.yaml index d2225efd..61f16590 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklistExceptions.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoDomainBlocklistExceptions.yaml @@ -11,8 +11,8 @@ example_value: features: dynamic_refresh: true per_profile: true -future_on: -- chrome_os +supported_on: +- chrome_os:138- owners: - andreydav@google.com - mpetrisor@chromium.org diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoEnabled.yaml index d9c0eebf..efb21474 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/FloatingSso/FloatingSsoEnabled.yaml @@ -12,8 +12,8 @@ example_value: true features: dynamic_refresh: true per_profile: true -future_on: -- chrome_os +supported_on: +- chrome_os:138- items: - caption: Enable Floating SSO and move the user's web service authentications to new device value: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSearchSuggestSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSearchSuggestSettings.yaml new file mode 100755 index 00000000..987a8906 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSearchSuggestSettings.yaml @@ -0,0 +1,40 @@ +caption: Settings for AI Mode Search recommendations in the address bar and new tab page search box + +desc: |- + This policy controls the AI Mode recommendations section in the address bar and the new tab page search box. + + This feature is available to all users with Google as their default search engine, unless it is disabled by this policy. + + If the policy is unset, its behavior is determined by the GenAiDefaultSettings policy. + + When policy is set to 0 - Enabled or not set, the feature will be available to users. When policy is set to 1 - Disabled, the feature will not be available. + + 0 = Allow the feature to be used + 1 = Do not allow the feature. + +default: 0 +example_value: 1 +features: + dynamic_refresh: true + per_profile: true +items: +- caption: Allow AI Mode recommendations. + name: Allowed + value: 0 +- caption: Do not allow AI Mode recommendations. + name: Disabled + value: 1 +owners: +- file://components/omnibox/OWNERS +schema: + enum: + - 0 + - 1 + type: integer +future_on: +- android +- ios +- chrome.* +- chrome_os +tags: [] +type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSettings.yaml new file mode 100755 index 00000000..e8756425 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/GenerativeAI/AIModeSettings.yaml @@ -0,0 +1,38 @@ +caption: Settings for Google's AI Mode integrations in the address bar and New Tab page search box. + +desc: |- + This policy controls Google's AI Mode integrations in the address bar and the New Tab page search box. + + To access this feature, Google must be set as the user's default search engine. + + 0/unset = The feature will be available to users. + + 1 = The feature will not be available to users. + + If the policy is unset, its behavior is determined by the GenAiDefaultSettings policy. +default: 0 +example_value: 1 +features: + dynamic_refresh: true + per_profile: true +items: +- caption: Allow AI Mode integrations. + name: Allowed + value: 0 +- caption: Do not allow AI Mode integrations. + name: Disabled + value: 1 +owners: +- file://components/omnibox/OWNERS +schema: + enum: + - 0 + - 1 + type: integer +supported_on: +- android:138- +- ios:138- +- chrome.*:138- +- chrome_os:138- +tags: [] +type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml index 0af346dd..4f642a8e 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Kiosk/KioskChromeAppsForceAllowed.yaml @@ -7,7 +7,7 @@ desc: |- Leaving this policy unset or setting this policy to False will use the default behavior defined on the device. - Attempting to launch a disabled Chrome App will show the user a message explaining why the app was not lauched and suggesting to contact their IT department. + Attempting to launch a disabled Chrome App will show the user a message explaining why the app was not launched and suggesting to contact their IT department. features: dynamic_refresh: true per_profile: false @@ -21,6 +21,6 @@ items: value: false default: false example_value: false -future_on: -- chrome_os +supported_on: +- chrome_os:138- tags: [] diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AllowDeletingBrowserHistory.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AllowDeletingBrowserHistory.yaml index b2f16657..844ec700 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AllowDeletingBrowserHistory.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/AllowDeletingBrowserHistory.yaml @@ -9,6 +9,7 @@ features: dynamic_refresh: true per_profile: true future_on: +- android - fuchsia items: - caption: Enable deleting browser and download history diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml index 3690bb50..ccfa3e76 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/ChromeDataRegionSetting.yaml @@ -34,10 +34,10 @@ schema: - 0 - 1 - 2 -future_on: -- chrome.* -- chrome_os -- ios -- android +supported_on: +- chrome.*:138- +- chrome_os:138- +- ios:138- +- android:138- tags: [] type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EditBookmarksEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EditBookmarksEnabled.yaml index 11fd0677..8103c077 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EditBookmarksEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EditBookmarksEnabled.yaml @@ -1,8 +1,8 @@ caption: Enable or disable bookmark editing desc: |- - Setting the policy to True or leaving it unset lets users add, remove, or modify bookmarks. + Setting the policy to True or leaving it unset lets users add, remove, modify, or upload bookmarks. - Setting the policy to False means users can't add, remove, or modify bookmarks. They can still use existing bookmarks. + Setting the policy to False means users can't add, remove, modify or upload bookmarks. They can still use existing bookmarks. example_value: false features: dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseRealTimeUrlCheckMode.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseRealTimeUrlCheckMode.yaml index 82a77745..12c8674e 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseRealTimeUrlCheckMode.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseRealTimeUrlCheckMode.yaml @@ -30,11 +30,10 @@ schema: - 0 - 1 type: integer -future_on: -- ios supported_on: - chrome.*:86- - chrome_os:86- - android:136- +- ios:138- tags: [] type: int-enum diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseSearchAggregatorSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseSearchAggregatorSettings.yaml index 938a896f..cf134ac8 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseSearchAggregatorSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/EnterpriseSearchAggregatorSettings.yaml @@ -1,7 +1,5 @@ -caption: Enterprise search aggregator settings (Beta) +caption: Enterprise search aggregator settings desc: |- - This is a beta feature. As this is a feature in development, available to our trusted testers, please be aware that it may undergo changes and updates. - This policy allows administrators to set a designated enterprise search aggregator that will provide search recommendations and results within the address bar when triggered by a specific keyword. Users can initiate a search by typing the keyword specified in the shortcut field with or without the @ prefix (e.g. @work), followed by Space or Tab, in the address bar. The following fields are required: name, shortcut, search_url, suggest_url. diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/FloatingWorkspaceV2Enabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/FloatingWorkspaceV2Enabled.yaml index 24262145..d6d24aeb 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/FloatingWorkspaceV2Enabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/FloatingWorkspaceV2Enabled.yaml @@ -1,7 +1,7 @@ -caption: Enable $1Floating Workspace V2 Service +caption: Enable $1Floating Workspace Service default: false desc: |- - When a user switches between $2Google ChromeOS devices, $1Floating Workspace V2 Service V2 Service will launch browser and app windows from the previous device onto the new device. + When a user switches between $2Google ChromeOS devices, $1Floating Workspace Service will launch browser and app windows from the previous device onto the new device. Setting the policy to Enabled will launch browser and app windows from current user's last used $2Google ChromeOS device automatically upon login. Setting the policy to Disabled or leaving it unset will let full restore settings determine what to be launched upon login. example_value: true @@ -15,11 +15,11 @@ items: login value: false owners: -- ligeng@chromium.org -- yzd@chromium.org +- andreydav@google.com +- slutskii@google.com schema: type: boolean -future_on: -- chrome_os +supported_on: +- chrome_os:138- tags: [] type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterExtensionAttributionEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterExtensionAttributionEnabled.yaml new file mode 100755 index 00000000..8abc0437 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterExtensionAttributionEnabled.yaml @@ -0,0 +1,29 @@ +caption: Control the visibility of the extension attribution on the New Tab page +default: true +desc: |- + This policy determines whether an attribution to the extension modifying the New Tab Page (NTP) is displayed in the NTP's footer. + + By default, if an extension has overridden the standard NTP, a message attributing this change to the specific extension will appear in the footer. This attribution typically includes a link to the relevant extension in the Chrome Web Store. + + If this policy is left unset or set to true, the extension attribution will be visible on the NTP footer when an extension is controlling the NTP. + + If this policy is set to false, the attribution to the extension in the NTP footer will be suppressed. +example_value: true +features: + dynamic_refresh: true + per_profile: true +supported_on: +- chrome.*:138- +- chrome_os:138- +items: +- caption: Enable extension attribution on NTP Footer + value: true +- caption: Disable extension attribution on NTP Footer + value: false +owners: +- file://components/policy/OWNERS +- esalma@google.com +schema: + type: boolean +tags: [] +type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterThemeAttributionEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterThemeAttributionEnabled.yaml deleted file mode 100755 index c02807d5..00000000 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/NTPFooterThemeAttributionEnabled.yaml +++ /dev/null @@ -1,26 +0,0 @@ -caption: Control the visibility of the extension theme attribution on the New Tab Page for managed browsers -default: true -desc: |- - This policy controls the visibility of extension theme attribution within the footer of the New Tab Page (NTP) when the NTP is controlled by an extension. By default, the NTP footer displays information about the extension controlling the NTP. - - If this policy is left unset or set to true, browsers with an extension controlled NTP will show the extension name and a link to it. - - If this policy is set to false, the theme atribution will be hidden. -example_value: true -features: - dynamic_refresh: true - per_profile: true -future_on: -- chrome.* -items: -- caption: Enable extension theme attribution on NTP Footer - value: true -- caption: Disable extension theme attribution on NTP Footer - value: false -owners: -- file://components/policy/OWNERS -- esalma@google.com -schema: - type: boolean -tags: [] -type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PdfAnnotationsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PdfAnnotationsEnabled.yaml index 80de3ee5..246eed39 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PdfAnnotationsEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PdfAnnotationsEnabled.yaml @@ -22,5 +22,6 @@ schema: type: boolean supported_on: - chrome_os:91- +- chrome.*:138- tags: [] type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefetchWithServiceWorkerEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefetchWithServiceWorkerEnabled.yaml new file mode 100755 index 00000000..cf293159 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefetchWithServiceWorkerEnabled.yaml @@ -0,0 +1,37 @@ +caption: Allow SpeculationRules prefetch to ServiceWorker-controlled URLs +desc: |- + SpeculationRules prefetch can be issued to URLs that are controlled by + ServiceWorker. However, legacy code did not allow it and canceled the prefetch + requests. This policy enables to control the behavior. + + Setting this policy to Enabled or not set allows SpeculationRules prefetch to + ServiceWorker-controlled URLs (if the PrefetchServiceWorker feature flag is + enabled). This is the current default behavior and is aligned with the + specifications. + + Setting this policy to Disabled disallows SpeculationRules prefetch to + ServiceWorker-controlled URLs. This is the legacy behavior. + + This policy is intended to be temporary and will be removed in the future. +default: true +example_value: true +features: + dynamic_refresh: false + per_profile: true +items: +- caption: SpeculationRules prefetch can be sent to ServiceWorker-controlled URLs. + value: true +- caption: SpeculationRules prefetch cannot be sent to ServiceWorker-controlled URLs (legacy behavior). + value: false +owners: +- nhiroki@chromium.org +- file://content/browser/preloading/prefetch/OWNERS +schema: + type: boolean +supported_on: +- android:138- +- chrome.*:138- +- chrome_os:138- +- fuchsia:138- +tags: [] +type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SelectParserRelaxationEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SelectParserRelaxationEnabled.yaml index 8f4cd8db..fb66a562 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SelectParserRelaxationEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/SelectParserRelaxationEnabled.yaml @@ -1,6 +1,6 @@ caption: Controls whether the new HTML parser behavior for the <select> element is enabled desc: |2- - The HTML parser is being changed to allow additional HTML tags inside the <select> element. This policy allows the old HTML parser behavior to be used until M136. + The HTML parser is being changed to allow additional HTML tags inside the <select> element. This policy allows the old HTML parser behavior to be used until M138. If this policy is enabled or not set, then the HTML parser will allow additional tags inside the <select> element. @@ -22,11 +22,11 @@ owners: schema: type: boolean supported_on: -- chrome.*:131- -- chrome_os:131- -- android:131- -- webview_android:131- +- chrome.*:131-138 +- chrome_os:131-138 +- android:131-138 +- webview_android:131-138 tags: [] type: main -deprecated: false +deprecated: true device_only: false diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/TLS13EarlyDataEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/TLS13EarlyDataEnabled.yaml new file mode 100755 index 00000000..d2a985b2 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/TLS13EarlyDataEnabled.yaml @@ -0,0 +1,41 @@ +caption: Enable TLS 1.3 Early Data +default: true +desc: |- + TLS 1.3 Early Data is an extension to TLS 1.3 to send an HTTP request simultaneously with the TLS handshake. + + If this policy is not configured, $1Google Chrome will follow the default rollout process for TLS 1.3 Early Data. + + If it is enabled, $1Google Chrome will enable TLS 1.3 Early Data. + + If it is disabled, $1Google Chrome will not enable TLS 1.3 Early Data. + + When the feature is enabled, $1Google Chrome may or may not use TLS 1.3 Early Data depending on server support. + + TLS 1.3 Early Data is an established protocol. Existing TLS servers, middleboxes, and security software are expected to either handle or reject TLS 1.3 Early Data without dropping the connection. + + However, devices that do not correctly implement TLS may malfunction and disconnect when TLS 1.3 Early Data is in use. If this occurs, administrators should contact the vendor for a fix. + + This policy is a temporary measure to control the feature and will be removed afterwards. The policy may be enabled to allow you to test for issues and disabled while issues are being resolved. +example_value: true +features: + dynamic_refresh: true + per_profile: false +future_on: +- fuchsia +items: +- caption: Enable the TLS 1.3 Early Data + value: true +- caption: Disable the TLS 1.3 Early Data + value: false +owners: +- bashi@chromium.org +- blink-network-stack@google.com +schema: + type: boolean +supported_on: +- chrome.*:138- +- chrome_os:138- +- android:138- +tags: +- system-security +type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebXRImmersiveArEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebXRImmersiveArEnabled.yaml index 1039da24..bdf8fa38 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebXRImmersiveArEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Miscellaneous/WebXRImmersiveArEnabled.yaml @@ -21,7 +21,7 @@ items: sessions value: false owners: -- bialpio@chromium.org +- alcooper@chromium.org - xr-dev@chromium.org schema: type: boolean diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/LocalNetworkAccessRestrictionsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/LocalNetworkAccessRestrictionsEnabled.yaml new file mode 100755 index 00000000..b6d25f06 --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Network/LocalNetworkAccessRestrictionsEnabled.yaml @@ -0,0 +1,46 @@ +owners: +- hchao@chromium.org +- cthomp@chromium.org +- chrome-secure-web-and-net@chromium.org + +caption: Specifies whether to apply restrictions to requests to local + network endpoints + +deprecated: true + +desc: |- + When this policy is set to Enabled, any time when a warning is supposed to be + displayed in the DevTools due to Local Network Access checks failing, the + main request will be blocked instead. + + When this policy is set to Disabled or unset, Local Network Access requests will use the + default handling of these requests. + + See https://github.com/explainers-by-googlers/local-network-access for Local Network Access restrictions. + +supported_on: +- chrome.*:138- +- chrome_os:138- + +features: + dynamic_refresh: true + per_profile: true + +type: main + +schema: + type: boolean + +items: +- caption: Apply restrictions to requests to local network endpoints + value: true +- caption: Use default behavior when determining if websites can make requests + to local network endpoints + value: false + +example_value: true + +tags: [] diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/PasswordManagerBlocklist.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/PasswordManagerBlocklist.yaml new file mode 100755 index 00000000..4ca01dac --- /dev/null +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/PasswordManagerBlocklist.yaml @@ -0,0 +1,28 @@ +caption: Configure the list of domains for which the Password Manager (Save and + Fill) will be disabled +desc: |- + Configure the list of domains where $1Google Chrome should disable the Password Manager. This means that Save and Fill workflows will be disabled, ensuring that passwords for those websites can't be saved or auto filled into web forms. + + If a domain is present in the list, the Password Manager will be disabled for it. + + If a domain is not present in the list, the Password Manager will be available for it. + + If the policy is unset, the Password Manager will be available for all domains. +example_value: +- example.com +- login.example.com +features: + dynamic_refresh: true + per_profile: true +owners: +- file://components/password_manager/OWNERS +- kazinova@google.com +schema: + items: + type: string + type: array +supported_on: +- chrome.*:138- +- chrome_os:138- +tags: [] +type: list \ No newline at end of file diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/policy_atomic_groups.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/policy_atomic_groups.yaml index 29f12c97..4deba21b 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/policy_atomic_groups.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PasswordManager/policy_atomic_groups.yaml @@ -7,3 +7,4 @@ PasswordManager: - PasswordSharingEnabled - ThirdPartyPasswordManagersAllowed - PasswordManagerPasskeysEnabled + - PasswordManagerBlocklist 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 bb814870..72d67ae1 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,29 +1,38 @@ caption: Choose whether the Privacy Sandbox IP Protection feature should be enabled. default: null -default_for_enterprise_users: false -desc: |- - A policy to control whether the Privacy Sandbox IP Protection feature should be enabled. +desc: |- # TODO(b/416726104): Move the considerations and other details to a help center article. + A policy to control whether the Privacy Sandbox IP Protection feature should be enabled. - If the policy is set to Disabled, then the IP Protection feature will be disabled and users won't be able to enable the feature via UI settings. - If the policy is set to Enabled, then the IP Protection feature will be enabled and users won't be able to disable the feature via UI settings. - If the policy is not set, users whose browser or device is being managed will have the IP Protection feature disabled and will not be able to enable the feature via UI settings. Users on unmanaged browsers and devices will be able to turn on or turn off the IP Protection feature on their device via UI settings. + 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. + + If the policy is set to Disabled, then IP Protection will be disabled and users won't be able to enable the feature via UI settings. + If the policy is set to Enabled, then IP Protection will be enabled and users won't be able to disable the feature via UI settings. + If the policy is not set, IP Protection will be enabled by default and users will be able to control the feature on their device via UI settings. + + Some considerations regarding whether enterprises should disable IP Protection include: + - DNS lookups won't be performed for requests that are proxied, which may impact DNS-based monitoring or filtering. + - Enterprise applications may experience breakage when used in Incognito mode if they rely on requests to domains (or subdomains of those domains) on the Masked Domain List ($1https://github.com/GoogleChrome/ip-protection/blob/main/Masked-Domain-List.md) and require those requests to come from specific IP address ranges. + - Traffic might not be proxied in Incognito mode under certain conditions, for example when users launch Incognito mode from a Chrome profile they aren't signed in to. In general the feature requires the user to have been signed in to Chrome with a personal Google account when launching Incognito mode. + - The list of domains on the Masked Domain List may change over time, with new versions being pushed to users automatically. For more information on the Masked Domain List, see: $1https://github.com/GoogleChrome/ip-protection/blob/main/README.md#identifying-domains-and-the-masked-domain-list-mdl. + + For more information on IP Protection, see: $1https://github.com/GoogleChrome/ip-protection/blob/main/README.md. + + IP Protection will be launched no sooner than M139. - Note: The behavior of the IP Protection feature for enterprise users may vary over time when the policy is set to Enabled or when the policy is not set and the feature is enabled via UI settings. example_value: false features: dynamic_refresh: true per_profile: true -future_on: - - fuchsia - - chrome.* - - chrome_os - - android +supported_on: +- android:138- +- chrome.*:138- +- chrome_os:138- items: -- caption: Disable the Privacy Sandbox IP Protection feature. +- caption: Disable the IP Protection feature. value: false -- caption: Enable the Privacy Sandbox IP Protection feature. +- caption: Enable the IP Protection feature. value: true -- caption: Allow users to turn on or turn off the Privacy Sandbox IP Protection setting on their device if their browser and device are not being managed. +- caption: Allow users to turn on or turn off the IP Protection setting on their device. The feature will be enabled by default. value: null owners: - awillia@chromium.org diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowed.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowed.yaml index 0ec915b8..61318056 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowed.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowed.yaml @@ -1,5 +1,6 @@ caption: Specifies whether to allow websites to make requests to more-private network endpoints in an insecure manner +deprecated: true desc: |- Controls whether websites are allowed to make requests to more-private network endpoints in an insecure manner. @@ -35,10 +36,10 @@ owners: schema: type: boolean supported_on: -- chrome.*:92- -- chrome_os:92- -- android:92- -- webview_android:92- +- chrome.*:92-137 +- chrome_os:92-137 +- android:92-137 +- webview_android:92-137 tags: - system-security type: main diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowedForUrls.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowedForUrls.yaml index dbb839b3..f42ba8c4 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowedForUrls.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/InsecurePrivateNetworkRequestsAllowedForUrls.yaml @@ -1,5 +1,6 @@ caption: Allow the listed sites to make requests to more-private network endpoints in an insecure manner. +deprecated: true desc: |- List of URL patterns. Requests initiated from websites served by matching origins are not subject to Private Network Access checks. @@ -26,10 +27,10 @@ schema: type: string type: array supported_on: -- chrome.*:92- -- chrome_os:92- -- android:92- -- webview_android:92- +- chrome.*:92-137 +- chrome_os:92-137 +- android:92-137 +- webview_android:92-137 tags: - system-security type: list diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/PrivateNetworkAccessRestrictionsEnabled.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/PrivateNetworkAccessRestrictionsEnabled.yaml index bc6a908a..6a0872bf 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/PrivateNetworkAccessRestrictionsEnabled.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/PrivateNetworkRequestSettings/PrivateNetworkAccessRestrictionsEnabled.yaml @@ -5,6 +5,8 @@ owners: caption: Specifies whether to apply restrictions to requests to more-private network endpoints +deprecated: true + desc: |- When this policy is set to Enabled, any time when a warning is supposed to be displayed in the DevTools due to Private Network Access restrictions. supported_on: -- chrome.*:120- -- chrome_os:120- -- android:120- - -future_on: -- fuchsia +- chrome.*:120-137 +- chrome_os:120-137 +- android:120-137 features: dynamic_refresh: true diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Sharing/TabGroupSharingSettings.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Sharing/TabGroupSharingSettings.yaml index b67ec0b4..484f6ab2 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Sharing/TabGroupSharingSettings.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Sharing/TabGroupSharingSettings.yaml @@ -26,11 +26,11 @@ schema: - 1 type: integer items: -- caption: Use the Shared Tab Group feature. - name: UseSharedTabGroup +- caption: Use the tab group sharing feature. + name: UseTabGroupSharing value: 0 -- caption: Do not use the Shared Tab Group feature. - name: DoNotUseSharedTabGroup +- caption: Do not use the tab group sharing feature. + name: DoNotUseTabGroupSharing value: 1 default: 0 example_value: 0 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 7e64ce2a..be4ac14e 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 @@ -14,6 +14,7 @@ features: dynamic_refresh: true per_profile: true future_on: +- android - fuchsia items: - caption: Use New Tab Page as homepage diff --git a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/ShowHomeButton.yaml b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/ShowHomeButton.yaml index e0b7aef5..98b1c856 100755 --- a/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/ShowHomeButton.yaml +++ b/tools/under-control/src/components/policy/resources/templates/policy_definitions/Startup/ShowHomeButton.yaml @@ -9,6 +9,7 @@ features: dynamic_refresh: true per_profile: true future_on: +- android - fuchsia items: - caption: Show the Home button on the toolbar 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 54483215..f3204a39 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 @@ -127,7 +127,6 @@ #include "content/browser/tpcd_heuristics/opener_heuristic_tab_helper.h" #include "content/browser/tpcd_heuristics/redirect_heuristic_tab_helper.h" #include "content/browser/wake_lock/wake_lock_context_host.h" -#include "content/browser/web_contents/accessibility_mode_policy.h" #include "content/browser/web_contents/java_script_dialog_commit_deferring_condition.h" #include "content/browser/web_contents/partitioned_popins_controller.h" #include "content/browser/web_contents/slow_web_preference_cache.h" @@ -155,6 +154,7 @@ #include "content/public/browser/javascript_dialog_manager.h" #include "content/public/browser/keyboard_event_processing_result.h" #include "content/public/browser/navigation_details.h" +#include "content/public/browser/navigation_throttle_registry.h" #include "content/public/browser/permission_descriptor_util.h" #include "content/public/browser/preload_pipeline_info.h" #include "content/public/browser/preview_cancel_reason.h" @@ -947,6 +947,11 @@ GURL WebContentsImpl::GetPartitionedPopinEmbedderOriginImpl() const { return partitioned_popin_opener_properties_->top_frame_origin.GetURL(); } +WindowOpenDisposition WebContentsImpl::GetOriginalWindowOpenDisposition() + const { + return original_window_open_disposition_; +} + void WebContents::SetScreenOrientationDelegate( ScreenOrientationDelegate* delegate) { ScreenOrientationProvider::SetDelegate(delegate); @@ -1068,48 +1073,104 @@ WebContentsImpl::WebContentsTreeNode::WebContentsTreeNode( WebContentsImpl::WebContentsTreeNode::~WebContentsTreeNode() = default; void WebContentsImpl::WebContentsTreeNode::AttachInnerWebContents( - std::unique_ptr inner_web_contents, - RenderFrameHostImpl* render_frame_host) { + WebContents* inner_web_contents, + RenderFrameHostImpl* render_frame_host, + bool should_take_ownership) { OPTIONAL_TRACE_EVENT0("content", "WebContentsTreeNode::AttachInnerWebContents"); WebContentsImpl* inner_web_contents_impl = - static_cast(inner_web_contents.get()); + static_cast(inner_web_contents); WebContentsTreeNode& inner_web_contents_node = inner_web_contents_impl->node_; inner_web_contents_node.outer_web_contents_ = current_web_contents_; inner_web_contents_node.outer_contents_frame_tree_node_id_ = render_frame_host->frame_tree_node()->frame_tree_node_id(); - if (inner_web_contents) { + if (should_take_ownership) { inner_web_contents->SetOwnerLocationForDebug(FROM_HERE); + owned_inner_web_contents_.push_back(base::WrapUnique(inner_web_contents)); + } else { + unowned_inner_web_contents_.push_back(inner_web_contents); } - inner_web_contents_.push_back(std::move(inner_web_contents)); render_frame_host->frame_tree_node()->AddObserver(&inner_web_contents_node); current_web_contents_->InnerWebContentsAttached(inner_web_contents_impl); } -std::unique_ptr -WebContentsImpl::WebContentsTreeNode::DetachInnerWebContents( - WebContentsImpl* inner_web_contents) { +void WebContentsImpl::WebContentsTreeNode::DetachInnerWebContents( + WebContents* inner_web_contents) { OPTIONAL_TRACE_EVENT0( "content", "WebContentsImpl::WebContentsTreeNode::DetachInnerWebContents"); - std::unique_ptr detached_contents; - for (std::unique_ptr& web_contents : inner_web_contents_) { - if (web_contents.get() == inner_web_contents) { - detached_contents = std::move(web_contents); - std::swap(web_contents, inner_web_contents_.back()); - inner_web_contents_.pop_back(); - current_web_contents_->InnerWebContentsDetached(inner_web_contents); - if (detached_contents) { - detached_contents->SetOwnerLocationForDebug(std::nullopt); - } - return detached_contents; - } + CHECK_EQ(inner_web_contents->GetOuterWebContents(), current_web_contents_); + + auto* inner_web_contents_impl = + static_cast(inner_web_contents); + if (IsUnownedInnerWebContents(inner_web_contents)) { + DetachUnownedInnerWebContents(inner_web_contents_impl); + } else { + DestroyOwnedInnerWebContents(inner_web_contents_impl); + } +} + +bool WebContentsImpl::WebContentsTreeNode::IsUnownedInnerWebContents( + WebContents* inner_web_contents) const { + CHECK_EQ(inner_web_contents->GetOuterWebContents(), current_web_contents_); + return base::Contains(unowned_inner_web_contents_, inner_web_contents); +} + +void WebContentsImpl::WebContentsTreeNode::DetachUnownedInnerWebContents( + WebContentsImpl* inner_web_contents) { + std::erase(unowned_inner_web_contents_, inner_web_contents); + + // Detach WebContents tree node and frame tree node. + bool was_inner_web_contents_focused = + inner_web_contents->ContainsOrIsFocusedWebContents(); + FrameTree* focused_frame_tree = inner_web_contents->GetFocusedFrameTree(); + WebContentsTreeNode& inner_web_contents_node = inner_web_contents->node_; + inner_web_contents_node.outer_web_contents_ = nullptr; + FrameTreeNode* outer_contents_frame_tree_node = + inner_web_contents_node.OuterContentsFrameTreeNode(); + outer_contents_frame_tree_node->RemoveObserver(&inner_web_contents_node); + outer_contents_frame_tree_node->current_frame_host() + ->set_inner_tree_main_frame_tree_node_id(FrameTreeNodeId()); + outer_contents_frame_tree_node->render_manager() + ->set_detach_inner_delegate_complete(); + inner_web_contents_node.outer_contents_frame_tree_node_id_ = + FrameTreeNodeId(); + + // Reset inner WebContents's focused frame tree. + // When attached, only the outermost WebContents retains a focused tree. After + // detaching, the inner WebContents becomes the outermost WebContents from its + // perspective, so its focused frame tree needs to be set. + inner_web_contents_node.SetFocusedFrameTree( + was_inner_web_contents_focused ? + focused_frame_tree : &inner_web_contents->GetPrimaryFrameTree()); + // Reset the outermost WebContents's focused frame tree if the inner + // WebContents was focused before detaching. + if (was_inner_web_contents_focused) { + current_web_contents_->SetAsFocusedWebContentsIfNecessary(); } - NOTREACHED(); + current_web_contents_->InnerWebContentsDetached(inner_web_contents); +} + +void WebContentsImpl::WebContentsTreeNode::DestroyOwnedInnerWebContents( + WebContentsImpl* inner_web_contents) { + std::unique_ptr inner_web_contents_to_delete; + for (std::unique_ptr& web_contents : owned_inner_web_contents_) { + if (web_contents.get() == inner_web_contents) { + // Remove the WebContents from the list of owned WebContents. + inner_web_contents_to_delete = std::move(web_contents); + std::swap(web_contents, owned_inner_web_contents_.back()); + owned_inner_web_contents_.pop_back(); + break; + } + } + CHECK(inner_web_contents_to_delete); + inner_web_contents->SetOwnerLocationForDebug(std::nullopt); + current_web_contents_->InnerWebContentsDetached(inner_web_contents); + inner_web_contents_to_delete.reset(); } FrameTreeNode* @@ -1147,21 +1208,30 @@ WebContentsImpl* WebContentsImpl::WebContentsTreeNode::GetInnerWebContentsInFrame( const FrameTreeNode* frame) { auto ftn_id = frame->frame_tree_node_id(); - for (auto& contents : inner_web_contents_) { + for (auto& contents : owned_inner_web_contents_) { WebContentsImpl* impl = static_cast(contents.get()); if (impl->node_.outer_contents_frame_tree_node_id() == ftn_id) { return impl; } } + for (auto& contents : unowned_inner_web_contents_) { + WebContentsImpl* impl = static_cast(contents); + if (impl->node_.outer_contents_frame_tree_node_id() == ftn_id) { + return impl; + } + } return nullptr; } std::vector WebContentsImpl::WebContentsTreeNode::GetInnerWebContents() const { std::vector inner_web_contents; - for (auto& contents : inner_web_contents_) { + for (auto& contents : owned_inner_web_contents_) { inner_web_contents.push_back(static_cast(contents.get())); } + for (auto& contents : unowned_inner_web_contents_) { + inner_web_contents.push_back(static_cast(contents)); + } return inner_web_contents; } @@ -1364,10 +1434,6 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context) SharedStorageBudgetCharger::CreateForWebContents(this); } - if (input::IsTransferInputToVizSupported()) { - SetupRenderInputRouterDelegateConnection(); - } - if (base::FeatureList::IsEnabled( fingerprinting_protection_interventions::features::kCanvasNoise)) { renderer_preferences_.canvas_noise_token = @@ -1375,22 +1441,6 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context) } } -void WebContentsImpl::SetupRenderInputRouterDelegateConnection() { - // Handles setting up GPU mojo endpoint connections. In general, the number of - // retries for setting up these mojo connections is capped by the maximum - // number of attempts to restart the GPU process, see - // GpuProcessHost::GetFallbackCrashLimit(). - rir_delegate_client_receiver_.reset(); - rir_delegate_remote_.reset(); - GetHostFrameSinkManager()->SetupRenderInputRouterDelegateConnection( - compositor_frame_sink_grouping_id_, - rir_delegate_client_receiver_.BindNewPipeAndPassRemote(), - rir_delegate_remote_.BindNewPipeAndPassReceiver()); - rir_delegate_client_receiver_.set_disconnect_handler( - base::BindOnce(&WebContentsImpl::SetupRenderInputRouterDelegateConnection, - weak_factory_.GetWeakPtr())); -} - WebContentsImpl::~WebContentsImpl() { TRACE_EVENT0("content", "WebContentsImpl::~WebContentsImpl"); WebContentsOfBrowserContext::Detach(*this); @@ -1430,6 +1480,11 @@ WebContentsImpl::~WebContentsImpl() { outermost->SetAsFocusedWebContentsIfNecessary(); } + if (GetOuterWebContents() + && GetOuterWebContents()->node_.IsUnownedInnerWebContents(this)) { + GetOuterWebContents()->DetachUnownedInnerWebContents(this); + } + if (pointer_lock_widget_) { pointer_lock_widget_->RejectPointerLockOrUnlockIfNecessary( blink::mojom::PointerLockResult::kElementDestroyed); @@ -2098,29 +2153,7 @@ ui::ColorProviderKey::ColorMode WebContentsImpl::GetColorMode() const { return source->GetColorMode(); } -void WebContentsImpl::SetAccessibilityMode(ui::AXMode new_ax_mode) { - // Create the policy lazily so that the client is only enrolled into an arm - // of a trial if accessibility is enabled. - if (!accessibility_mode_policy_) { - // Exit early if the first call is a no-op, since creating the policy in - // this case would skew analysis of any trials. - if (new_ax_mode.is_mode_off()) { - return; - } - accessibility_mode_policy_ = AccessibilityModePolicy::Create(*this); - } - // Unretained is safe here because this owns the policy. - accessibility_mode_policy_->SetAccessibilityMode(base::BindRepeating( - [](WebContentsImpl* web_contents, ui::AXMode ax_mode, bool apply) { - if (web_contents) { - web_contents->SetAccessibilityModeImpl(apply ? ax_mode - : ui::AXMode{}); - } - }, - base::Unretained(this), new_ax_mode)); -} - -void WebContentsImpl::SetAccessibilityModeImpl(ui::AXMode mode) { +void WebContentsImpl::SetAccessibilityMode(ui::AXMode mode) { OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::SetAccessibilityMode", "mode", mode.ToString(), "previous_mode", accessibility_mode_.ToString()); @@ -2136,9 +2169,7 @@ void WebContentsImpl::SetAccessibilityModeImpl(ui::AXMode mode) { // Don't allow accessibility to be enabled for WebContents that are never // user-visible, like background pages. - if (IsNeverComposited()) { - return; - } + CHECK(!is_never_composited_); accessibility_mode_ = mode; @@ -2235,6 +2266,11 @@ void WebContentsImpl::RequestAXTreeSnapshot(AXTreeSnapshotCallback callback, AXTreeSnapshotPolicy policy) { OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::RequestAXTreeSnapshot", "mode", ax_mode.ToString()); + + // Inline text boxes are not supported in snapshots, as they are extra noise + // and expensive. If they are needed in the future, remove this line. + ax_mode.set_mode(ui::AXMode::kInlineTextBoxes, false); + // Send a request to each of the frames in parallel. Each one will return // an accessibility tree snapshot, and AXTreeSnapshotCombiner will combine // them into a single tree and call |callback| with that result, then @@ -2495,7 +2531,7 @@ bool WebContentsImpl::IsWebContentsOnlyAccessibilityModeForTesting() { } bool WebContentsImpl::IsFullAccessibilityModeForTesting() { - return accessibility_mode_ == ui::kAXModeComplete; + return accessibility_mode_ == ui::kAXModeDefaultForTests; } #if BUILDFLAG(IS_ANDROID) @@ -2514,6 +2550,13 @@ void WebContentsImpl::SetContextMenuInsets(gfx::Rect safe_area) { } } +void WebContentsImpl::ShowInterestInElement(int nodeID) { + OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::ShowInterestInElement"); + if (auto* rwhv = GetRenderWidgetHostView()) { + rwhv->ShowInterestInElement(nodeID); + } +} + #endif const std::u16string& WebContentsImpl::GetTitle() { @@ -3160,15 +3203,34 @@ void WebContentsImpl::AttachInnerWebContents( std::unique_ptr inner_web_contents, RenderFrameHost* render_frame_host, bool is_full_page) { - // Not reachable with MPArch based guests. + // Not reachable with MPArch based guest view. CHECK(!base::FeatureList::IsEnabled(features::kGuestViewMPArch)); + AttachInnerWebContentsImpl(inner_web_contents.release(), render_frame_host, + is_full_page, + /*should_take_ownership=*/true); +} - OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::AttachInnerWebContents", - "inner_web_contents", - static_cast(inner_web_contents.get()), - "is_full_page", is_full_page); +void WebContentsImpl::AttachUnownedInnerWebContents( + base::PassKey, + WebContents* inner_web_contents, + RenderFrameHost* render_frame_host) { + AttachInnerWebContentsImpl(inner_web_contents, render_frame_host, + /*is_full_page=*/false, + /*should_take_ownership=*/false); +} + +void WebContentsImpl::AttachInnerWebContentsImpl( + WebContents* inner_web_contents, + RenderFrameHost* render_frame_host, + bool is_full_page, + bool should_take_ownership) { + OPTIONAL_TRACE_EVENT("content", "WebContentsImpl::AttachInnerWebContents", + "inner_web_contents", + static_cast(inner_web_contents), "is_full_page", + is_full_page, "should_take_ownership", + should_take_ownership); WebContentsImpl* inner_web_contents_impl = - static_cast(inner_web_contents.get()); + static_cast(inner_web_contents); DCHECK(!inner_web_contents_impl->node_.outer_web_contents()); auto* render_frame_host_impl = static_cast(render_frame_host); @@ -3219,7 +3281,7 @@ void WebContentsImpl::AttachInnerWebContents( // calls below will just early return. inner_render_manager->InitRenderView( inner_main_frame->GetSiteInstance()->group(), inner_render_view_host, - nullptr); + /*proxy=*/nullptr, /*navigation_metrics_token=*/std::nullopt); if (!inner_render_manager->GetRenderWidgetHostView()) { inner_web_contents_impl->CreateRenderWidgetHostViewForRenderManager( inner_render_view_host); @@ -3228,8 +3290,8 @@ void WebContentsImpl::AttachInnerWebContents( inner_web_contents_impl->RecursivelyUnregisterRenderWidgetHostViews(); // Create a link to our outer WebContents. - node_.AttachInnerWebContents(std::move(inner_web_contents), - render_frame_host_impl); + node_.AttachInnerWebContents(inner_web_contents, render_frame_host_impl, + should_take_ownership); // Create a proxy in top-level RenderFrameHostManager, pointing to the // SiteInstanceGroup of the outer WebContents. The proxy will be used to send @@ -3258,7 +3320,7 @@ void WebContentsImpl::AttachInnerWebContents( inner_web_contents_impl->primary_frame_tree_.root(), render_frame_host_impl->GetSiteInstance()->group()); } - outer_render_manager->set_attach_complete(); + outer_render_manager->set_attach_inner_delegate_complete(); // If the inner WebContents is full frame, give it focus. if (is_full_page) { @@ -3276,6 +3338,74 @@ void WebContentsImpl::AttachInnerWebContents( inner_main_frame->PropagateEmbeddingTokenToParentFrame(); } +void WebContentsImpl::DetachUnownedInnerWebContents( + base::PassKey, + WebContents* inner_web_contents) { + DetachUnownedInnerWebContents(inner_web_contents); +} + +void WebContentsImpl::DetachUnownedInnerWebContents( + WebContents* inner_web_contents) { + CHECK(base::FeatureList::IsEnabled(features::kAttachUnownedInnerWebContents)); + CHECK(node_.IsUnownedInnerWebContents(inner_web_contents)); + + WebContentsImpl* inner_web_contents_impl = + static_cast(inner_web_contents); + // Unregister and destroy RenderWidgetHostViewChildFrame. + inner_web_contents_impl->RecursivelyUnregisterRenderWidgetHostViews(); + + // RenderWidgetHostView are of type RenderWidgetHostViewChildFrame and they + // need to be re-created with appropriate platform views. + 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()) { + CHECK( + rvh->GetWidget()->GetView()->IsRenderWidgetHostViewChildFrame()); + rvh->GetWidget()->GetView()->Destroy(); + list_of_rvh_with_rwhv.push_back(rvh); + } + }); + + // Destroy WebContentsViewChildFrame. + inner_web_contents_impl->render_view_host_delegate_view_ = nullptr; + inner_web_contents_impl->view_ = nullptr; + + // Reset proxy. + RenderFrameHostManager* inner_render_manager = + inner_web_contents_impl->GetRenderManager(); + RenderFrameHostImpl* inner_main_frame = + inner_render_manager->current_frame_host(); + RenderFrameProxyHost* proxy = inner_render_manager->GetProxyToOuterDelegate(); + if (proxy) { + inner_main_frame->browsing_context_state()->DeleteRenderFrameProxyHost( + proxy->site_instance_group(), + BrowsingContextState::ProxyAccessMode::kAllowOuterDelegate); + } + + node_.DetachInnerWebContents(inner_web_contents_impl); + + // Recreate WebContentsView. + inner_web_contents_impl->view_ = CreateWebContentsView( + inner_web_contents_impl, + GetContentClient()->browser()->GetWebContentsViewDelegate( + inner_web_contents_impl), + &inner_web_contents_impl->render_view_host_delegate_view_); + inner_web_contents_impl->view_->CreateView(gfx::NativeView()); + + // Recreate and register RenderWidgetHostView. Don't do this if the + // WebContents is being destroyed because it will cause a CHECK failure in + // SendScreenRects(). + if (!inner_web_contents_impl->IsBeingDestroyed()) { + for (RenderViewHostImpl* rvh : list_of_rvh_with_rwhv) { + inner_web_contents_impl->CreateRenderWidgetHostViewForRenderManager(rvh); + } + inner_web_contents_impl->RecursivelyRegisterRenderWidgetHostViews(); + } + + inner_main_frame->UpdateAXTreeData(); +} + void WebContentsImpl::AttachGuestPage( std::unique_ptr guest_page, RenderFrameHost* outer_render_frame_host) { @@ -3333,7 +3463,7 @@ void WebContentsImpl::AttachGuestPage( // call below will just early return. inner_render_manager->InitRenderView( inner_main_frame->GetSiteInstance()->group(), inner_render_view_host, - /*proxy=*/nullptr); + /*proxy=*/nullptr, /*navigation_metrics_token=*/std::nullopt); // If we are reusing the RenderViewHost and it doesn't already have a // RenderWidgetHostView, we need to create one if this is the main frame. @@ -3370,7 +3500,7 @@ void WebContentsImpl::AttachGuestPage( inner_render_manager->SetRWHViewForInnerFrameTree(child_rwhv); child_rwhv->RegisterFrameSinkId(); - outer_render_manager->set_attach_complete(); + outer_render_manager->set_attach_inner_delegate_complete(); inner_main_frame->PropagateEmbeddingTokenToParentFrame(); // TODO(crbug.com/40202416): Determine if anything else is needed here. } @@ -3697,10 +3827,6 @@ void WebContentsImpl::OnWebPreferencesChanged() { } } } - // Notify VizCompositor thread of force_enable_zoom state changes. - if (auto* remote = GetRenderInputRouterDelegateRemote()) { - remote->ForceEnableZoomStateChanged(force_enable_zoom_, frame_sink_ids); - } } #endif @@ -3899,6 +4025,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params, renderer_preferences_.uses_platform_autofill = params.initially_use_platform_autofill; + is_never_composited_ = params.is_never_composited; is_in_preview_mode_ = params.preview_mode; creator_location_ = params.creator_location; #if BUILDFLAG(IS_ANDROID) @@ -3966,9 +4093,10 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params, CHECK(view_.get()); // Set the accessibility mode after the view is created. - SetAccessibilityMode( - BrowserAccessibilityState::GetInstance() - ->GetAccessibilityModeForBrowserContext(GetBrowserContext())); + if (!is_never_composited_) { + BrowserAccessibilityStateImpl::GetInstance()->OnWebContentsInitialized( + this); + } view_->CreateView(params.context); @@ -4004,8 +4132,9 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params, if (params.desired_renderer_state == CreateParams::kInitializeAndWarmupRendererProcess) { if (!GetRenderManager()->current_frame_host()->IsRenderFrameLive()) { - GetRenderManager()->InitRenderView(site_instance->group(), - GetRenderViewHost(), nullptr); + GetRenderManager()->InitRenderView( + site_instance->group(), GetRenderViewHost(), /*proxy=*/nullptr, + /*navigation_metrics_token=*/std::nullopt); } } @@ -4215,6 +4344,19 @@ bool WebContentsImpl::PreHandleMouseEvent(const blink::WebMouseEvent& event) { return delegate_ ? delegate_->PreHandleMouseEvent(this, event) : false; } +void WebContentsImpl::PreHandleDragUpdate(const DropData& drop_data, + const gfx::PointF& client_pt) { + if (delegate_) { + delegate_->PreHandleDragUpdate(drop_data, client_pt); + } +} + +void WebContentsImpl::PreHandleDragExit() { + if (delegate_) { + delegate_->PreHandleDragExit(); + } +} + KeyboardEventProcessingResult WebContentsImpl::PreHandleKeyboardEvent( const input::NativeWebKeyboardEvent& event) { OPTIONAL_TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"), @@ -4641,6 +4783,17 @@ void WebContentsImpl::UpdateVisibilityAndNotifyPageAndView( bool view_is_visible = !IsCrashed() && page_visibility != PageVisibilityState::kHidden; + // True if the instance is being hidden or revealed. + const bool hide_or_reveal = (visibility_ == Visibility::HIDDEN) != + (new_visibility == Visibility::HIDDEN); + + // Send ax modes to renderers before they start painting if they are being + // revealed. + if (!is_never_composited_ && hide_or_reveal && + new_visibility != Visibility::HIDDEN) { + BrowserAccessibilityStateImpl::GetInstance()->OnWebContentsRevealed(this); + } + // Prerendering relies on overriding FrameTree::Delegate::IsHidden, // while for other frame trees FrameTree::Delegate::IsHidden // resolves to WebContents' visibility, so we avoid Prerender RennderViewHosts @@ -4731,6 +4884,11 @@ void WebContentsImpl::UpdateVisibilityAndNotifyPageAndView( } } + if (!is_never_composited_ && hide_or_reveal && + new_visibility == Visibility::HIDDEN) { + BrowserAccessibilityStateImpl::GetInstance()->OnWebContentsHidden(this); + } + // We cannot show a page or capture video unless there is a valid renderer // associated with this web contents. The navigation controller for this page // must be set to active (allowing navigation to complete, a renderer and its @@ -5011,10 +5169,11 @@ FrameTree* WebContentsImpl::CreateNewWindow( } // TODO(crbug.com/40202416): Support a way for MPArch guests to support this. - if (delegate_ && delegate_->IsWebContentsCreationOverridden( - source_site_instance, params.window_container_type, - opener->GetLastCommittedURL(), params.frame_name, - params.target_url)) { + if (delegate_ && + delegate_->IsWebContentsCreationOverridden( + opener, source_site_instance, params.window_container_type, + opener->GetLastCommittedURL(), params.frame_name, + params.target_url)) { auto* web_contents_impl = static_cast(delegate_->CreateCustomWebContents( opener, source_site_instance, is_new_browsing_instance, @@ -5131,6 +5290,9 @@ FrameTree* WebContentsImpl::CreateNewWindow( SetPartitionedPopinOpenerOnNewWindowIfNeeded(new_contents_impl, params, opener); + // Sets the newly created WebContents WindowOpenDisposition. + new_contents_impl->original_window_open_disposition_ = params.disposition; + // If the new frame has a name, make sure any SiteInstances that can find // this named frame have proxies for it. Must be called after // SetSessionStorageNamespace, since this calls CreateRenderView, which uses @@ -7351,62 +7513,6 @@ input::TouchEmulator* WebContentsImpl::GetTouchEmulator( return touch_emulator_.get(); } -void WebContentsImpl::NotifyObserversOfInputEvent( - const viz::FrameSinkId& frame_sink_id, - std::unique_ptr event, - bool dispatched_to_renderer) { - auto iter = created_widgets_.find(frame_sink_id); - // This adds a safeguard against race condition where a RenderWidgetHostImpl - // is being destroyed & removed from |created_widgets_|, but Viz may still - // send a mojo call referencing it. - if (iter == created_widgets_.end()) { - return; - } - iter->second->NotifyObserversOfInputEvent(event->Event(), - dispatched_to_renderer); -} - -void WebContentsImpl::NotifyObserversOfInputEventAcks( - const viz::FrameSinkId& frame_sink_id, - blink::mojom::InputEventResultSource ack_source, - blink::mojom::InputEventResultState ack_result, - std::unique_ptr event) { - auto iter = created_widgets_.find(frame_sink_id); - // This adds a safeguard against race condition where a RenderWidgetHostImpl - // is being destroyed & removed from |created_widgets_|, but Viz may still - // send a mojo call referencing it. - if (iter == created_widgets_.end()) { - return; - } - iter->second->NotifyObserversOfInputEventAcks(ack_source, ack_result, - event->Event()); -} - -void WebContentsImpl::OnInvalidInputEventSource( - const viz::FrameSinkId& frame_sink_id) { - auto iter = created_widgets_.find(frame_sink_id); - // This adds a safeguard against race condition where a RenderWidgetHostImpl - // is being destroyed & removed from |created_widgets_|, but Viz may still - // send a mojo call referencing it. - if (iter == created_widgets_.end()) { - return; - } - iter->second->OnInvalidInputEventSource(); -} - -void WebContentsImpl::StateOnOverscrollTransfer( - const viz::FrameSinkId& frame_sink_id, - blink::mojom::DidOverscrollParamsPtr params) { - auto iter = created_widgets_.find(frame_sink_id); - // This adds a safeguard against race condition where a RenderWidgetHostImpl - // is being destroyed & removed from |created_widgets_|, but Viz may still - // send a mojo call referencing it. - if (iter == created_widgets_.end()) { - return; - } - iter->second->DidOverscroll(std::move(params)); -} - void WebContentsImpl::DidNavigateMainFramePreCommit( NavigationHandle* navigation_handle, bool navigation_is_within_page) { @@ -8935,10 +9041,7 @@ void WebContentsImpl::ClearFocusedElement() { } bool WebContentsImpl::IsNeverComposited() { - if (!delegate_) { - return false; - } - return delegate_->IsNeverComposited(this); + return is_never_composited_; } RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() { @@ -9248,9 +9351,8 @@ void WebContentsImpl::UpdateWindowPreferredSize( } std::vector -WebContentsImpl::GetActiveTopLevelDocumentsInGroup( - RenderFrameHostImpl* render_frame_host, - GroupType group_type) { +WebContentsImpl::GetActiveTopLevelDocumentsInBrowsingContextGroup( + RenderFrameHostImpl* render_frame_host) { std::vector out; for (WebContentsImpl* web_contents : GetAllWebContents()) { RenderFrameHostImpl* other_render_frame_host = @@ -9262,18 +9364,8 @@ WebContentsImpl::GetActiveTopLevelDocumentsInGroup( continue; } - // If we're looking for frames in the same browsing context group, filter - // frames in different browsing context groups. - if (group_type == GroupType::kBrowsingContextGroup && - !render_frame_host->GetSiteInstance()->IsRelatedSiteInstance( - other_render_frame_host->GetSiteInstance())) { - continue; - } - - // If we're looking for frames in the same CoopRelatedGroup, filter frames - // in different CoopRelatedGroups. - if (group_type == GroupType::kCoopRelatedGroup && - !render_frame_host->GetSiteInstance()->IsCoopRelatedSiteInstance( + // Filter frames in different browsing context groups. + if (!render_frame_host->GetSiteInstance()->IsRelatedSiteInstance( other_render_frame_host->GetSiteInstance())) { continue; } @@ -9283,20 +9375,6 @@ WebContentsImpl::GetActiveTopLevelDocumentsInGroup( return out; } -std::vector -WebContentsImpl::GetActiveTopLevelDocumentsInBrowsingContextGroup( - RenderFrameHostImpl* render_frame_host) { - return GetActiveTopLevelDocumentsInGroup(render_frame_host, - GroupType::kBrowsingContextGroup); -} - -std::vector -WebContentsImpl::GetActiveTopLevelDocumentsInCoopRelatedGroup( - RenderFrameHostImpl* render_frame_host) { - return GetActiveTopLevelDocumentsInGroup(render_frame_host, - GroupType::kCoopRelatedGroup); -} - PrerenderHostRegistry* WebContentsImpl::GetPrerenderHostRegistry() { DCHECK(prerender_host_registry_); return prerender_host_registry_.get(); @@ -9522,16 +9600,12 @@ bool WebContentsImpl::IsHidden() { return GetPageVisibilityState() == PageVisibilityState::kHidden; } -std::vector> -WebContentsImpl::CreateThrottlesForNavigation( - NavigationHandle* navigation_handle) { +void WebContentsImpl::CreateThrottlesForNavigation( + NavigationThrottleRegistry& registry) { OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::CreateThrottlesForNavigation", - "navigation", navigation_handle); - auto throttles = GetContentClient()->browser()->CreateThrottlesForNavigation( - navigation_handle); - - return throttles; + "navigation", registry.GetNavigationHandle()); + GetContentClient()->browser()->CreateThrottlesForNavigation(registry); } std::vector> @@ -10333,7 +10407,8 @@ void WebContentsImpl::ReattachOuterDelegateIfNeeded() { bool WebContentsImpl::CreateRenderViewForRenderManager( RenderViewHost* render_view_host, const std::optional& opener_frame_token, - RenderFrameProxyHost* proxy_host) { + RenderFrameProxyHost* proxy_host, + const std::optional& navigation_metrics_token) { TRACE_EVENT1("browser,navigation", "WebContentsImpl::CreateRenderViewForRenderManager", "render_view_host", render_view_host); @@ -10351,7 +10426,8 @@ bool WebContentsImpl::CreateRenderViewForRenderManager( // TODO(crbug.com/40166243): Given MPArch, should we pass // opened_by_another_window_ for non primary FrameTrees? if (!rvh_impl->CreateRenderView(opener_frame_token, proxy_routing_id, - opened_by_another_window_)) { + opened_by_another_window_, + navigation_metrics_token)) { return false; } @@ -11141,10 +11217,6 @@ void WebContentsImpl::MediaStartedPlaying( const WebContentsObserver::MediaPlayerInfo& media_info, const MediaPlayerId& id) { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::MediaStartedPlaying"); - if (media_info.has_video) { - currently_playing_video_count_++; - } - observers_.NotifyObservers(&WebContentsObserver::MediaStartedPlaying, media_info, id); } @@ -11154,14 +11226,17 @@ void WebContentsImpl::MediaStoppedPlaying( const MediaPlayerId& id, WebContentsObserver::MediaStoppedReason reason) { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::MediaStoppedPlaying"); - if (media_info.has_video) { - currently_playing_video_count_--; - } - observers_.NotifyObservers(&WebContentsObserver::MediaStoppedPlaying, media_info, id, reason); } +void WebContentsImpl::MediaMetadataChanged( + const WebContentsObserver::MediaPlayerInfo& media_info, + const MediaPlayerId& id) { + observers_.NotifyObservers(&WebContentsObserver::MediaMetadataChanged, + media_info, id); +} + void WebContentsImpl::MediaResized(const gfx::Size& size, const MediaPlayerId& id) { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::MediaResized"); @@ -11188,8 +11263,8 @@ void WebContentsImpl::MediaSessionCreated(MediaSession* media_session) { media_session); } -int WebContentsImpl::GetCurrentlyPlayingVideoCount() { - return currently_playing_video_count_; +int WebContentsImpl::GetCurrentlyPlayingVideoCount() const { + return media_web_contents_observer_->GetCurrentlyPlayingVideoCount(); } std::optional WebContentsImpl::GetFullscreenVideoSize() { @@ -11893,14 +11968,6 @@ void WebContentsImpl::OnInputIgnored(const blink::WebInputEvent& event) { #endif } -input::mojom::RenderInputRouterDelegate* -WebContentsImpl::GetRenderInputRouterDelegateRemote() { - if (!rir_delegate_remote_) { - return nullptr; - } - return rir_delegate_remote_.get(); -} - #if BUILDFLAG(IS_ANDROID) float WebContentsImpl::GetCurrentTouchSequenceYOffset() { ui::ViewAndroid* view_android = GetNativeView(); diff --git a/tools/under-control/src/content/child/runtime_features.cc b/tools/under-control/src/content/child/runtime_features.cc index ff238af6..873f4a0a 100755 --- a/tools/under-control/src/content/child/runtime_features.cc +++ b/tools/under-control/src/content/child/runtime_features.cc @@ -203,10 +203,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() { {wf::EnableEyeDropperAPI, raw_ref(features::kEyeDropper), kSetOnlyIfOverridden}, {wf::EnableFedCm, raw_ref(features::kFedCm), kSetOnlyIfOverridden}, - {wf::EnableFedCm, raw_ref(features::kFedCmButtonMode), - kSetOnlyIfOverridden}, - {wf::EnableFedCm, raw_ref(features::kFedCmAuthz), - kSetOnlyIfOverridden}, {wf::EnableFedCmAutofill, raw_ref(features::kFedCmAutofill), kDefault}, {wf::EnableFedCmDelegation, raw_ref(features::kFedCmDelegation), @@ -225,8 +221,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() { {wf::EnableFedCmMultipleIdentityProviders, raw_ref(features::kFedCmMultipleIdentityProviders), kSetOnlyIfOverridden}, - {wf::EnableFedCmSelectiveDisclosure, - raw_ref(features::kFedCmSelectiveDisclosure), kDefault}, {wf::EnableFencedFrames, raw_ref(features::kPrivacySandboxAdsAPIsOverride), kSetOnlyIfOverridden}, @@ -242,6 +236,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() { raw_ref(features::kUserMediaScreenCapturing)}, #endif {wf::EnableInstalledApp, raw_ref(features::kInstalledApp)}, + {wf::EnableIntegrityPolicyScript, + raw_ref(network::features::kIntegrityPolicyScript)}, {wf::EnableLazyInitializeMediaControls, raw_ref(features::kLazyInitializeMediaControls)}, #if BUILDFLAG(IS_CHROMEOS) @@ -264,6 +260,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() { #if BUILDFLAG(IS_ANDROID) {wf::EnableSmartZoom, raw_ref(features::kSmartZoom)}, #endif + {wf::EnableTouchDragAndDrop, raw_ref(features::kTouchDragAndDrop)}, {wf::EnableTouchDragAndContextMenu, raw_ref(features::kTouchDragAndContextMenu)}, {wf::EnableWebAuthenticationAmbient, @@ -369,8 +366,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() { kSetOnlyIfOverridden}, {"FledgeBiddingAndAuctionServerAPI", raw_ref(blink::features::kFledgeBiddingAndAuctionServer), kDefault}, - {"FontationsFontBackend", - raw_ref(blink::features::kFontationsFontBackend)}, {"FontSrcLocalMatching", raw_ref(features::kFontSrcLocalMatching)}, {"MachineLearningNeuralNetwork", raw_ref(webnn::mojom::features::kWebMachineLearningNeuralNetwork), @@ -414,7 +409,9 @@ void SetRuntimeFeaturesFromChromiumFeatures() { {"WebAppLaunchQueue", raw_ref(features::kAndroidWebAppLaunchHandler)}, #endif {"WebAuthenticationNewBfCacheHandlingBlink", - raw_ref(device::kWebAuthnNewBfCacheHandling)}}; + raw_ref(device::kWebAuthnNewBfCacheHandling)}, + {"LocalNetworkAccessPermissionPolicy", + raw_ref(network::features::kLocalNetworkAccessChecks)}}; for (const auto& mapping : runtimeFeatureNameToChromiumFeatureMapping) { SetRuntimeFeatureFromChromiumFeature( *mapping.chromium_feature, mapping.option, [&mapping](bool enabled) { 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 9c36ad70..4a377944 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 @@ -62,6 +62,7 @@ #include "media/mojo/mojom/media_service.mojom.h" #include "mojo/public/cpp/bindings/message.h" #include "net/base/isolation_info.h" +#include "net/cookies/cookie_setting_override.h" #include "net/cookies/site_for_cookies.h" #include "net/ssl/client_cert_identity.h" #include "net/ssl/client_cert_store.h" @@ -178,16 +179,25 @@ bool ContentBrowserClient::ShouldUseProcessPerSite( return false; } +bool ContentBrowserClient:: + ShouldReuseExistingProcessForNewMainFrameSiteInstance( + BrowserContext* browser_context, + const GURL& site_instance_original_url) { + DCHECK(browser_context); + return true; +} + bool ContentBrowserClient::ShouldAllowProcessPerSiteForMultipleMainFrames( BrowserContext* context) { return true; } -std::optional -ContentBrowserClient::ShouldUseSpareRenderProcessHost( +bool ContentBrowserClient::ShouldUseSpareRenderProcessHost( BrowserContext* browser_context, - const GURL& site_url) { - return std::nullopt; + const GURL& site_url, + std::optional& refused_reason) { + refused_reason = std::nullopt; + return true; } bool ContentBrowserClient::DoesSiteRequireDedicatedProcess( @@ -451,6 +461,7 @@ AllowServiceWorkerResult ContentBrowserClient::AllowServiceWorker( const GURL& scope, const net::SiteForCookies& site_for_cookies, const std::optional& top_frame_origin, + const blink::StorageKey& storage_key, const GURL& script_url, BrowserContext* context) { return AllowServiceWorkerResult::Yes(); @@ -542,6 +553,7 @@ void ContentBrowserClient::AllowWorkerFileSystem( const GURL& url, BrowserContext* browser_context, const std::vector& render_frames, + const blink::StorageKey& storage_key, base::OnceCallback callback) { std::move(callback).Run(true); } @@ -549,21 +561,24 @@ void ContentBrowserClient::AllowWorkerFileSystem( bool ContentBrowserClient::AllowWorkerIndexedDB( const GURL& url, BrowserContext* browser_context, - const std::vector& render_frames) { + const std::vector& render_frames, + const blink::StorageKey& storage_key) { return true; } bool ContentBrowserClient::AllowWorkerCacheStorage( const GURL& url, BrowserContext* browser_context, - const std::vector& render_frames) { + const std::vector& render_frames, + const blink::StorageKey& storage_key) { return true; } bool ContentBrowserClient::AllowWorkerWebLocks( const GURL& url, BrowserContext* browser_context, - const std::vector& render_frames) { + const std::vector& render_frames, + const blink::StorageKey& storage_key) { return true; } @@ -699,7 +714,13 @@ bool ContentBrowserClient::IsFullCookieAccessAllowed( content::BrowserContext* browser_context, content::WebContents* web_contents, const GURL& url, - const blink::StorageKey& storage_key) { + const blink::StorageKey& storage_key, + net::CookieSettingOverrides overrides) { + return true; +} + +bool ContentBrowserClient::IsPrefetchWithServiceWorkerAllowed( + content::BrowserContext* browser_context) { return true; } @@ -710,6 +731,12 @@ void ContentBrowserClient::GrantCookieAccessDueToHeuristic( base::TimeDelta ttl, bool ignore_schemes) {} +bool ContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed( + content::BrowserContext* browser_context, + content::WebContents* web_contents) { + return true; +} + bool ContentBrowserClient::CanSendSCTAuditingReport( BrowserContext* browser_context) { return false; @@ -990,11 +1017,8 @@ void ContentBrowserClient::OpenURL( std::move(callback).Run(nullptr); } -std::vector> -content::ContentBrowserClient::CreateThrottlesForNavigation( - NavigationHandle* navigation_handle) { - return std::vector>(); -} +void ContentBrowserClient::CreateThrottlesForNavigation( + NavigationThrottleRegistry& registry) {} std::vector> ContentBrowserClient::CreateCommitDeferringConditionsForNavigation( @@ -1758,8 +1782,9 @@ bool ContentBrowserClient::CanBackForwardCachedPageReceiveCookieChanges( content::BrowserContext& browser_context, const GURL& url, const net::SiteForCookies& site_for_cookies, - const std::optional& top_frame_origin, - const net::CookieSettingOverrides overrides) { + const url::Origin& top_frame_origin, + const net::CookieSettingOverrides overrides, + base::optional_ref cookie_partition_key) { return true; } @@ -1793,6 +1818,11 @@ bool ContentBrowserClient::ShouldReduceAcceptLanguage( return true; } +bool ContentBrowserClient::IsClearWindowNameForNewBrowsingContextGroupAllowed( + content::BrowserContext* browser_context) { + return true; +} + bool ContentBrowserClient::UseOutermostMainFrameOrEmbedderForSubCaptureTargets() const { return false; @@ -1943,12 +1973,6 @@ bool ContentBrowserClient::ShouldDispatchPagehideDuringCommit( return true; } -std::unique_ptr ContentBrowserClient::OverrideForInternalWebUI( - WebUI* web_ui, - const GURL& url) { - return nullptr; -} - std::optional ContentBrowserClient::MaybeOverrideLocalURLCrossOriginEmbedderPolicy( content::NavigationHandle* navigation_handle) { @@ -1965,6 +1989,10 @@ bool ContentBrowserClient::ShouldPrioritizeForBackForwardCache( return false; } +bool ContentBrowserClient::IsRendererProcessPriorityEnabled() { + return true; +} + std::unique_ptr ContentBrowserClient::MaybeCreateKeepAliveRequestTracker( const network::ResourceRequest& request, diff --git a/tools/under-control/src/gin/v8_initializer.cc b/tools/under-control/src/gin/v8_initializer.cc index 69ab1ef4..4e4b552a 100755 --- a/tools/under-control/src/gin/v8_initializer.cc +++ b/tools/under-control/src/gin/v8_initializer.cc @@ -390,7 +390,7 @@ void SetFeatureFlags() { features::kV8MemoryReducerGCCount.Get()); } if (base::FeatureList::IsEnabled(features::kV8PreconfigureOldGen)) { - SetV8FlagsFormatted("--initial-old-space-size=%i", + SetV8FlagsFormatted("--preconfigured-old-space-size=%i", features::kV8PreconfigureOldGenSize.Get()); } SetV8FlagsIfOverridden(features::kV8IncrementalMarkingStartUserVisible, diff --git a/tools/under-control/src/services/network/network_context.cc b/tools/under-control/src/services/network/network_context.cc index 616f639c..e9d152aa 100755 --- a/tools/under-control/src/services/network/network_context.cc +++ b/tools/under-control/src/services/network/network_context.cc @@ -29,7 +29,6 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "base/metrics/histogram_functions.h" -#include "base/not_fatal_until.h" #include "base/sequence_checker.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -127,15 +126,14 @@ #include "services/network/proxy_resolving_socket_factory_mojo.h" #include "services/network/public/cpp/cert_verifier/mojo_cert_verifier.h" #include "services/network/public/cpp/content_security_policy/content_security_policy.h" -#include "services/network/public/cpp/features.h" #include "services/network/public/cpp/network_switches.h" #include "services/network/public/cpp/parsed_headers.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/simple_host_resolver.h" #include "services/network/public/mojom/clear_data_filter.mojom.h" +#include "services/network/public/mojom/connection_change_observer_client.mojom-forward.h" #include "services/network/public/mojom/cookie_encryption_provider.mojom.h" #include "services/network/public/mojom/network_context.mojom.h" -#include "services/network/public/mojom/reconnect_event_observer.mojom-forward.h" #include "services/network/public/mojom/reporting_service.mojom.h" #include "services/network/public/mojom/trust_tokens.mojom-forward.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" @@ -147,6 +145,7 @@ #include "services/network/shared_dictionary/shared_dictionary_constants.h" #include "services/network/shared_dictionary/shared_dictionary_manager.h" #include "services/network/shared_dictionary/shared_dictionary_storage.h" +#include "services/network/shared_resource_checker.h" #include "services/network/ssl_config_service_mojo.h" #include "services/network/throttling/network_conditions.h" #include "services/network/throttling/throttling_controller.h" @@ -746,6 +745,9 @@ NetworkContext::NetworkContext( base::BindRepeating(&NetworkContext::OnCookieManagerSettingsChanged, weak_factory_.GetWeakPtr())); + shared_resource_checker_ = std::make_unique( + cookie_manager_->cookie_settings()); + network_service_->RegisterNetworkContext(this); // Only register for destruction if |this| will be wholly lifetime-managed @@ -849,6 +851,10 @@ NetworkContext::NetworkContext( net::handles::kInvalidNetworkHandle)), prefetch_cache_(prefetch_enabled_ ? std::make_unique() : nullptr) { + + shared_resource_checker_ = std::make_unique( + cookie_manager_->cookie_settings()); + // May be nullptr in tests. if (network_service_) { network_service_->RegisterNetworkContext(this); @@ -1059,7 +1065,7 @@ void NetworkContext::OnRCMDisconnect( const network::RestrictedCookieManager* rcm) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto it = restricted_cookie_managers_.find(rcm); - CHECK(it != restricted_cookie_managers_.end(), base::NotFatalUntil::M130); + CHECK(it != restricted_cookie_managers_.end()); restricted_cookie_managers_.erase(it); } @@ -1208,10 +1214,16 @@ void NetworkContext::SetTrackingProtectionContentSetting( void NetworkContext::OnProxyLookupComplete( ProxyLookupRequest* proxy_lookup_request) { auto it = proxy_lookup_requests_.find(proxy_lookup_request); - CHECK(it != proxy_lookup_requests_.end(), base::NotFatalUntil::M130); + CHECK(it != proxy_lookup_requests_.end()); proxy_lookup_requests_.erase(it); } +void NetworkContext::SetTLS13EarlyDataEnabled(bool enabled) { + url_request_context_->http_transaction_factory() + ->GetSession() + ->SetTLS13EarlyDataEnabled(enabled); +} + void NetworkContext::DisableQuic() { url_request_context_->http_transaction_factory()->GetSession()->DisableQuic(); } @@ -1222,7 +1234,7 @@ void NetworkContext::DestroyURLLoaderFactory( return; } auto it = url_loader_factories_.find(url_loader_factory); - CHECK(it != url_loader_factories_.end(), base::NotFatalUntil::M130); + CHECK(it != url_loader_factories_.end()); url_loader_factories_.erase(it); } @@ -1239,7 +1251,7 @@ void NetworkContext::LoaderCreated(uint32_t process_id) { void NetworkContext::LoaderDestroyed(uint32_t process_id) { auto it = loader_count_per_process_.find(process_id); - CHECK(it != loader_count_per_process_.end(), base::NotFatalUntil::M130); + CHECK(it != loader_count_per_process_.end()); it->second -= 1; if (it->second == 0) { loader_count_per_process_.erase(it); @@ -2250,8 +2262,8 @@ void NetworkContext::PreconnectSockets( const net::NetworkAnonymizationKey& network_anonymization_key, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, const std::optional& keepalive_config, - mojo::PendingRemote - reconnect_event_observer) { + mojo::PendingRemote + connection_change_observer_client) { DCHECK(!require_network_anonymization_key_ || !network_anonymization_key.IsEmpty()); @@ -2282,14 +2294,15 @@ void NetworkContext::PreconnectSockets( user_agent); request_info.traffic_annotation = traffic_annotation; - if (keepalive_config.has_value() || reconnect_event_observer.is_valid()) { + if (keepalive_config.has_value() || + connection_change_observer_client.is_valid()) { request_info.connection_management_config = net::ConnectionManagementConfig(); request_info.connection_management_config->keep_alive_config = keepalive_config; - if (reconnect_event_observer.is_valid()) { + if (connection_change_observer_client.is_valid()) { auto change_observer = std::make_unique( - std::move(reconnect_event_observer), this); + std::move(connection_change_observer_client), this); request_info.connection_management_config->connection_change_observer = change_observer.get(); @@ -2892,6 +2905,11 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( } auto quic_context = std::make_unique(); + if (params_->quic_idle_connection_timeout_seconds && + params_->quic_idle_connection_timeout_seconds.value() >= 0) { + quic_context->params()->idle_connection_timeout = + base::Seconds(params_->quic_idle_connection_timeout_seconds.value()); + } network_session_configurator::ParseCommandLineAndFieldTrials( *base::CommandLine::ForCurrentProcess(), is_quic_force_disabled, &session_params, quic_context->params()); @@ -2913,8 +2931,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( if (params_->shared_dictionary_enabled) { builder.set_enable_shared_dictionary(true); - builder.set_enable_shared_zstd( - base::FeatureList::IsEnabled(network::features::kSharedZstd)); + builder.set_enable_shared_zstd(true); } builder.SetWrapHttpNetworkLayerCallback( @@ -3089,7 +3106,7 @@ void NetworkContext::OnHttpCacheCleared(ClearHttpCacheCallback callback, void NetworkContext::OnHostResolverShutdown(HostResolver* resolver) { auto found_resolver = host_resolvers_.find(resolver); - CHECK(found_resolver != host_resolvers_.end(), base::NotFatalUntil::M130); + CHECK(found_resolver != host_resolvers_.end()); host_resolvers_.erase(found_resolver); } @@ -3151,7 +3168,7 @@ GURL NetworkContext::GetHSTSRedirectForPreconnect(const GURL& original_url) { #if BUILDFLAG(IS_P2P_ENABLED) void NetworkContext::DestroySocketManager(P2PSocketManager* socket_manager) { auto iter = socket_managers_.find(socket_manager); - CHECK(iter != socket_managers_.end(), base::NotFatalUntil::M130); + CHECK(iter != socket_managers_.end()); socket_managers_.erase(iter); } #endif // BUILDFLAG(IS_P2P_ENABLED) @@ -3168,7 +3185,7 @@ void NetworkContext::CanUploadDomainReliability( void NetworkContext::OnVerifyCertComplete(uint64_t cert_verify_id, int result) { auto iter = cert_verifier_requests_.find(cert_verify_id); - CHECK(iter != cert_verifier_requests_.end(), base::NotFatalUntil::M130); + CHECK(iter != cert_verifier_requests_.end()); auto pending_cert_verify = std::move(iter->second); cert_verifier_requests_.erase(iter); 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 8bc4f426..274a72c1 100755 --- a/tools/under-control/src/testing/variations/fieldtrial_testing_config.json +++ b/tools/under-control/src/testing/variations/fieldtrial_testing_config.json @@ -107,6 +107,21 @@ ] } ], + "AccessibilityDeprecateJavaNodeCache": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AccessibilityDeprecateJavaNodeCache" + ] + } + ] + } + ], "AccessibilityDeprecateTypeAnnounce": [ { "platforms": [ @@ -167,6 +182,21 @@ ] } ], + "AccessibilityManifestV3SwitchAccess": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AccessibilityManifestV3SwitchAccess" + ] + } + ] + } + ], "AccessibilityPageZoomV2": [ { "platforms": [ @@ -182,6 +212,62 @@ ] } ], + "AccessibilityPerformanceMeasurementExperiment": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Control", + "disable_features": [ + "AccessibilityPerformanceMeasurementExperiment" + ] + }, + { + "name": "EnabledWithAXModeComplete", + "params": { + "accessibility_performance_group_name": "AXModeComplete" + }, + "enable_features": [ + "AccessibilityPerformanceMeasurementExperiment" + ] + }, + { + "name": "EnabledWithWebContentsOnly", + "params": { + "accessibility_performance_group_name": "WebContentsOnly" + }, + "enable_features": [ + "AccessibilityPerformanceMeasurementExperiment" + ] + }, + { + "name": "EnabledWithAXModeCompleteNoInlineTextBoxes", + "params": { + "accessibility_performance_group_name": "AXModeCompleteNoInlineTextBoxes" + }, + "enable_features": [ + "AccessibilityPerformanceMeasurementExperiment" + ] + }, + { + "name": "EnabledWithRendererSerializationOnly", + "params": { + "accessibility_performance_group_name": "RendererSerializationOnly" + }, + "enable_features": [ + "AccessibilityPerformanceMeasurementExperiment" + ] + } + ] + } + ], "AccessibilitySerializationSizeMetrics": [ { "platforms": [ @@ -425,16 +511,25 @@ ] } ], - "AndroidAutofillPrefillRequestsForChangePassword": [ + "AndroidAppIntegrationMultiDataSource": [ { "platforms": [ - "android_webview" + "android" ], "experiments": [ + { + "name": "Enabled_SkipSchemaCheck", + "params": { + "multi_data_source_skip_schema_check": "true" + }, + "enable_features": [ + "AndroidAppIntegrationMultiDataSource" + ] + }, { "name": "Enabled", "enable_features": [ - "AndroidAutofillPrefillRequestsForChangePassword" + "AndroidAppIntegrationMultiDataSource" ] } ] @@ -471,22 +566,6 @@ ] } ], - "AndroidBrowserControlsInViz": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_20240718", - "enable_features": [ - "AndroidBcivBottomControls", - "AndroidBrowserControlsInViz" - ] - } - ] - } - ], "AndroidDumpOnScrollWithoutResource": [ { "platforms": [ @@ -502,6 +581,23 @@ ] } ], + "AndroidGridTabSwitcherUpdate": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidThemeModule", + "GridTabSwitcherSurfaceColorUpdate", + "GridTabSwitcherUpdate" + ] + } + ] + } + ], "AndroidHatsNext": [ { "platforms": [ @@ -577,6 +673,57 @@ ] } ], + "AndroidMinimalUiLargeScreen": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidMinimalUiLargeScreen" + ] + } + ] + } + ], + "AndroidPdfSummarization": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidPdfAssistContent" + ] + } + ] + } + ], + "AndroidReaderModeImprovements": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "always_on_entry_point": "false", + "custom_cpa_timeout": "300", + "custom_cpa_timeout_enabled": "true", + "trigger_on_mobile_friendly_pages": "true" + }, + "enable_features": [ + "ReaderModeImprovements" + ] + } + ] + } + ], "AndroidSandboxRendererProcessPolicy": [ { "platforms": [ @@ -621,12 +768,25 @@ ] } ], + "AndroidSurfaceColorUpdate": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidSurfaceColorUpdate" + ] + } + ] + } + ], "AndroidSystemTracing": [ { "platforms": [ - "android", - "android_weblayer", - "android_webview" + "android" ], "experiments": [ { @@ -684,6 +844,36 @@ ] } ], + "AndroidTabDeclutterAutoDeletePromo": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidTabDeclutterAutoDelete" + ] + } + ] + } + ], + "AndroidTabDeclutterPerformanceImprovements": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidTabDeclutterPerformanceImprovements" + ] + } + ] + } + ], "AndroidUseFrameIntervalDeciderAdaptiveFrameRate": [ { "platforms": [ @@ -699,6 +889,38 @@ ] } ], + "AndroidWebAppLaunchHandler": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidWebAppLaunchHandler" + ] + } + ] + } + ], + "AndroidWindowManagementWebApi": [ + { + "platforms": [ + "android", + "android_weblayer", + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidWindowManagementWebApi" + ] + } + ] + } + ], "AndroidWindowOcclusion": [ { "platforms": [ @@ -797,46 +1019,6 @@ ] } ], - "AppBoundEncryptionKeyV3": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AppBoundEncryptionKeyV3" - ] - } - ] - } - ], - "AppCloseRefreshClankStudy": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Open30", - "enable_features": [ - "FeedCloseRefresh" - ] - }, - { - "name": "Interact30", - "params": { - "delay_minutes": "30", - "require_interaction": "true" - }, - "enable_features": [ - "FeedCloseRefresh" - ] - } - ] - } - ], "AppListLaunchRecorder": [ { "platforms": [ @@ -852,21 +1034,6 @@ ] } ], - "AppStreamingAccessibilityIntegration": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EcheSWAProcessAndroidAccessibilityTree" - ] - } - ] - } - ], "AppsCollectionsFeature": [ { "platforms": [ @@ -967,22 +1134,6 @@ ] } ], - "ArcExtendInputAnrTimeout": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ArcExtendInputAnrTimeout" - ], - "min_os_version": "15915.0.0" - } - ] - } - ], "ArcExtendIntentAnrTimeout": [ { "platforms": [ @@ -1045,36 +1196,6 @@ ] } ], - "ArcVmBroadcastPreAnrHandling": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ArcVmBroadcastPreAnrHandling" - ] - } - ] - } - ], - "ArcVmDalvikMemoryProfile": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ArcUseDalvikMemoryProfile" - ] - } - ] - } - ], "ArcVmGkiOnT": [ { "platforms": [ @@ -1343,48 +1464,6 @@ ] } ], - "AttributionReportDeliveryOnNewNavigation": [ - { - "platforms": [ - "android", - "chromeos", - "chromeos_lacros", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_2m", - "params": { - "navigation_window": "2m" - }, - "enable_features": [ - "AttributionReportDeliveryOnNewNavigation" - ] - }, - { - "name": "Enabled_1m", - "params": { - "navigation_window": "1m" - }, - "enable_features": [ - "AttributionReportDeliveryOnNewNavigation" - ] - }, - { - "name": "Enabled_5m", - "params": { - "navigation_window": "5m" - }, - "enable_features": [ - "AttributionReportDeliveryOnNewNavigation" - ] - } - ] - } - ], "AttributionReportingInBrowserMigration": [ { "platforms": [ @@ -1557,6 +1636,28 @@ ] } ], + "AutocompleteControllerMetricsOptimization": [ + { + "platforms": [ + "android_webview", + "android", + "chromeos_lacros", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutocompleteControllerMetricsOptimization" + ] + } + ] + } + ], "AutocorrectByDefault": [ { "platforms": [ @@ -1632,6 +1733,25 @@ ] } ], + "AutofillAiTeamfoodInternal": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillAiServerModel", + "AutofillAiUploadModelRequestAndResponse" + ] + } + ] + } + ], "AutofillAiTeamfoodV2": [ { "platforms": [ @@ -1645,7 +1765,8 @@ "name": "Enabled", "enable_features": [ "AutofillAiIgnoreGeoIp", - "AutofillAiWithDataSchema" + "AutofillAiWithDataSchema", + "FormsClassificationsMqlsLogging" ] } ] @@ -1735,21 +1856,6 @@ ] } ], - "AutofillDynamicallyLoadsFieldsForAddressInput": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillDynamicallyLoadsFieldsForAddressInput" - ] - } - ] - } - ], "AutofillEnableBuyNowPayLaterDesktop": [ { "platforms": [ @@ -1785,6 +1891,25 @@ ] } ], + "AutofillEnableCardBenefitsForBmo": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableCardBenefitsForBmo" + ] + } + ] + } + ], "AutofillEnableCardBenefitsIph": [ { "platforms": [ @@ -1807,13 +1932,7 @@ "AutofillEnableCardInfoRuntimeRetrieval": [ { "platforms": [ - "android", - "chromeos", - "chromeos_lacros", - "ios", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { @@ -1825,28 +1944,6 @@ ] } ], - "AutofillEnableEmailHeuristicOutsideForms": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "chromeos_lacros", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableEmailHeuristicOutsideForms" - ] - } - ] - } - ], "AutofillEnableExpirationDateImprovements": [ { "platforms": [ @@ -1894,6 +1991,7 @@ { "platforms": [ "android", + "ios", "mac", "windows" ], @@ -1928,28 +2026,6 @@ ] } ], - "AutofillEnableLoadingAndConfirmation": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableSaveCardLoadingAndConfirmation", - "AutofillEnableSaveCardLocalSaveFallback", - "AutofillEnableVcnEnrollLoadingAndConfirmation" - ] - } - ] - } - ], "AutofillEnableLogFormEventsToAllParsedFormTypes": [ { "platforms": [ @@ -1991,25 +2067,6 @@ ] } ], - "AutofillEnableNewSaveCardBubbleUi": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillEnableNewSaveCardBubbleUi" - ] - } - ] - } - ], "AutofillEnableShowSaveCardSecurelyMessage": [ { "platforms": [ @@ -2129,27 +2186,6 @@ ] } ], - "AutofillI18nNLAddressModel": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillUseNLAddressModel" - ] - } - ] - } - ], "AutofillImproveAddressFieldSwapping": [ { "platforms": [ @@ -2319,27 +2355,6 @@ ] } ], - "AutofillParseEmailLabelAndPlaceholder": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillParseEmailLabelAndPlaceholder" - ] - } - ] - } - ], "AutofillPasswordUserPerceptionSurvey": [ { "platforms": [ @@ -2432,27 +2447,6 @@ ] } ], - "AutofillRecordCorrectionOfSelectElements": [ - { - "platforms": [ - "android", - "chromeos", - "chromeos_lacros", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillRecordCorrectionOfSelectElements" - ] - } - ] - } - ], "AutofillRelaxAddressImport": [ { "platforms": [ @@ -2475,6 +2469,21 @@ ] } ], + "AutofillSaveCardBottomSheet": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillSaveCardBottomSheet" + ] + } + ] + } + ], "AutofillSharedStorageServerCardData": [ { "platforms": [ @@ -2697,16 +2706,40 @@ ] } ], - "AvatarsCloudMigration": [ + "AutofillVcnEnrollStrikeExpiryTime": [ { "platforms": [ - "chromeos" + "android", + "chromeos", + "chromeos_lacros", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "autofill_vcn_strike_expiry_time_days": "180" + }, + "enable_features": [ + "AutofillVcnEnrollStrikeExpiryTime" + ] + } + ] + } + ], + "AutofillVirtualViewStructureAndroidPasskeyLongPress": [ + { + "platforms": [ + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "AvatarsCloudMigration" + "AutofillVirtualViewStructureAndroidPasskeyLongPress" ] } ] @@ -2757,26 +2790,6 @@ ] } ], - "AvoidLoadingPredictorPrefetchDuringBrowserStartup": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AvoidLoadingPredictorPrefetchDuringBrowserStartup" - ] - } - ] - } - ], "AvoidUnnecessaryBeforeUnloadCheckSync": [ { "platforms": [ @@ -2791,9 +2804,9 @@ ], "experiments": [ { - "name": "Enabled", + "name": "WithSendBeforeUnload", "params": { - "AvoidUnnecessaryBeforeUnloadCheckSyncMode": "DumpWithoutCrashing" + "AvoidUnnecessaryBeforeUnloadCheckSyncMode": "WithSendBeforeUnload" }, "enable_features": [ "AvoidUnnecessaryBeforeUnloadCheckSync" @@ -3025,12 +3038,13 @@ ], "experiments": [ { - "name": "IPHWithFastEtc1EncoderDelayed", + "name": "IPH", "params": { "availability": "any", "compress-screenshot-when-quiet": "true", "event_trigger": "name:rtl_gesture_iph_trigger;comparator:==0;window:365;storage:365", "event_used": "name:rtl_gesture_iph_show;comparator:==0;window:365;storage:365", + "min-required-physical-ram-mb": "3200", "percentage-of-ram-to-use": "0.5", "screenshot-send-result-delay-ms": "400", "session_rate": "<1", @@ -3041,8 +3055,7 @@ "BackForwardTransitions", "IPH_RtlGestureNavigation", "MirrorBackForwardGesturesInRTL", - "NativePageTransitionHardwareCapture", - "UseNewEtc1Encoder" + "NativePageTransitionHardwareCapture" ] } ] @@ -3074,21 +3087,6 @@ ] } ], - "BackToHomeAnimation": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_20240423", - "enable_features": [ - "BackToHomeAnimation" - ] - } - ] - } - ], "BackgroundNotPerceptibleBinding": [ { "platforms": [ @@ -3125,28 +3123,6 @@ ] } ], - "BackgroundTabLoadingFromPerformanceManager": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "EnabledWithMainFrameState", - "params": { - "min_site_engagement": "15", - "restore_main_frame_state": "true" - }, - "enable_features": [ - "BackgroundTabLoadingFromPerformanceManager" - ] - } - ] - } - ], "BatchNativeEventsInMessagePumpEpoll": [ { "platforms": [ @@ -3182,6 +3158,21 @@ ] } ], + "BatchTabRestore": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BatchTabRestore" + ] + } + ] + } + ], "BatteryBadgeIconEnabled": [ { "platforms": [ @@ -3300,6 +3291,27 @@ ] } ], + "BlinkLifecycleScriptForbidden": [ + { + "platforms": [ + "android", + "android_weblayer", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BlinkLifecycleScriptForbidden" + ] + } + ] + } + ], "BlockAcceptClientHints": [ { "platforms": [ @@ -3627,28 +3639,6 @@ ] } ], - "BufferSizeForFilterSourceStream": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "buffer_size_0032k_20230919", - "params": { - "BufferSizeForFilterSourceStream": "32768" - }, - "enable_features": [ - "BufferSizeForFilterSourceStreamFeature" - ] - } - ] - } - ], "BusyLoopOnMainThread": [ { "platforms": [ @@ -3667,26 +3657,6 @@ ] } ], - "ButterForPrefsAndThemesAndSearchEngines": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnablePreferencesAccountStorage", - "SeparateLocalAndAccountSearchEngines", - "SeparateLocalAndAccountThemes", - "ThemesBatchUpload" - ] - } - ] - } - ], "CCTEarlyNav": [ { "platforms": [ @@ -3762,6 +3732,21 @@ ] } ], + "CCTPredictiveBackGesture": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CCTPredictiveBackGesture" + ] + } + ] + } + ], "CCTPrewarmTab": [ { "platforms": [ @@ -3777,32 +3762,6 @@ ] } ], - "CSSDisplayAnimation": [ - { - "platforms": [ - "android", - "android_weblayer", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CSSDisplayAnimation" - ] - }, - { - "name": "Disabled", - "disable_features": [ - "CSSDisplayAnimation" - ] - } - ] - } - ], "CSSReadingFlow": [ { "platforms": [ @@ -3838,69 +3797,25 @@ ] } ], - "CacheStorageAblation": [ + "CacheSharingForPervasiveScripts": [ { "platforms": [ "android", + "android_webview", "chromeos", - "ios", + "chromeos_lacros", "linux", "mac", "windows" ], "experiments": [ { - "name": "EnabledWithEffectiveSize200Percent", + "name": "Enabled_20250520", "params": { - "delete_factor": "1.0", - "delete_offset": "0ms", - "has_factor": "1.0", - "has_offset": "0ms", - "keys_factor": "2.0", - "keys_offset": "0ms", - "match_factor": "2.0", - "match_offset": "0ms", - "open_factor": "1.0", - "open_offset": "0ms" + "url_patterns": "https://www.google-analytics.com/analytics.js\nhttps://ssl.google-analytics.com/ga.js\nhttps://www.google-analytics.com/plugins/ua/ec.js\nhttps://pagead2.googlesyndication.com/pagead/managed/js/adsense/*/show_ads_impl_fy2021.js\nhttps://pagead2.googlesyndication.com/pagead/managed/js/activeview/current/ufs_web_display.js\nhttps://pagead2.googlesyndication.com/pagead/managed/js/adsense/*/reactive_library_fy2021.js\nhttps://www.googleadservices.com/pagead/conversion.js\nhttps://www.googleadservices.com/pagead/managed/js/activeview/current/reach_worklet.js\nhttps://securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js\nhttps://securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl_page_level_ads.js\nhttps://tpc.googlesyndication.com/pagead/js/*/client/qs_click_protection_fy2021.js\nhttps://tpc.googlesyndication.com/safeframe/*/js/ext.js\nhttps://ep2.adtrafficquality.google/sodar/sodar2.js" }, "enable_features": [ - "CacheStorageAblation" - ] - }, - { - "name": "EnabledWithEffectiveSize100Percent", - "params": { - "delete_factor": "0.5", - "delete_offset": "0ms", - "has_factor": "0.5", - "has_offset": "0ms", - "keys_factor": "1.0", - "keys_offset": "0ms", - "match_factor": "1.0", - "match_offset": "0ms", - "open_factor": "0.5", - "open_offset": "0ms" - }, - "enable_features": [ - "CacheStorageAblation" - ] - }, - { - "name": "EnabledWithEffectiveSize50Percent", - "params": { - "delete_factor": "0.25", - "delete_offset": "0ms", - "has_factor": "0.25", - "has_offset": "0ms", - "keys_factor": "0.5", - "keys_offset": "0ms", - "match_factor": "0.5", - "match_offset": "0ms", - "open_factor": "0.25", - "open_offset": "0ms" - }, - "enable_features": [ - "CacheStorageAblation" + "CacheSharingForPervasiveScripts" ] } ] @@ -4051,6 +3966,29 @@ ] } ], + "CanvasNoise": [ + { + "platforms": [ + "android_webview", + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "enable_in_regular_mode": "true" + }, + "enable_features": [ + "CanvasNoise" + ] + } + ] + } + ], "CanvasTextNg": [ { "platforms": [ @@ -4071,19 +4009,19 @@ ] } ], - "CastMirroringPlayoutDelayChromeOS": [ + "CastStreamingHardwareHevc": [ { "platforms": [ - "chromeos" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", - "params": { - "cast_mirroring_playout_delay_ms": "200" - }, "enable_features": [ - "CastMirroringPlayoutDelay" + "CastStreamingHardwareHevc" ] } ] @@ -4276,24 +4214,6 @@ ] } ], - "CdmStorageDatabaseDefaultTrial": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "CdmStorageDatabaseMigration" - ] - } - ] - } - ], "CheckHTMLParserBudgetLessOften": [ { "platforms": [ @@ -4314,24 +4234,6 @@ ] } ], - "ChromeCartDomBasedHeuristics": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "enabled_chrome_cart_dom_based_heuristics_20230214", - "enable_features": [ - "ChromeCartDomBasedHeuristics" - ] - } - ] - } - ], "ChromeCompose": [ { "platforms": [ @@ -4350,39 +4252,6 @@ ] } ], - "ChromeLabs": [ - { - "platforms": [ - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_20210128", - "enable_features": [ - "ChromeLabs" - ] - } - ] - } - ], - "ChromeLabsChromeOS": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_20210617", - "enable_features": [ - "ChromeLabs" - ] - } - ] - } - ], "ChromeOSARCVMLmkPerceptibleMinState": [ { "platforms": [ @@ -4421,27 +4290,6 @@ ] } ], - "ChromeOSAmbientModeManagedScreensaver": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Dogfood", - "enable_features": [ - "ChromeOSAmbientModeManagedScreensaver" - ] - }, - { - "name": "Enabled", - "enable_features": [ - "ChromeOSAmbientModeManagedScreensaver" - ] - } - ] - } - ], "ChromeOSBoostUrgentVariables": [ { "platforms": [ @@ -5071,21 +4919,6 @@ ] } ], - "ChromeStartAccessibility": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "StartSurfaceWithAccessibility" - ] - } - ] - } - ], "ChromeWallpaperSearchGlobal": [ { "platforms": [ @@ -5227,35 +5060,6 @@ ] } ], - "ChromnientIPH": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "availability": "any", - "event_trigger": "name:lens_overlay_iph_triggered;comparator:any;window:90;storage:365", - "event_used": "name:lens_overlay_used;comparator:==0;window:90;storage:365", - "session_rate": "==0", - "x_url_allow_filters": "[\"*\"]", - "x_url_block_filters": "[\"chegg.com\",\"brainly.com\",\"coursehero.com\",\"quizlet.com\",\"study.com\",\"tutor.com\",\"wyzant.com\",\"tutoring.k12.com\",\"varsitytutors.com\",\"studypool.com\",\"sylvanlearning.com\",\"skooli.com\",\"socratic.org\",\"schoolhouse.world\",\"google.com\",\"ai\",\"indeedassessments.com\",\"nytimes.com\",\"cnn.com\",\"foxnews.com\",\"people.com\",\"usatoday.com\",\"msn.com\",\"nypost.com\",\"apnews.com\",\"dailymail.co.uk\",\"news.google.com\",\"cnbc.com\",\"newsweek.com\",\"washingtonpost.com\",\"yahoo.com\",\"theguardian.com\",\"bbc.com\",\"wsj.com\",\"reuters.com\",\"breitbart.com\",\"bloomberg.com\",\"huffpost.com\",\"nbcnews.com\",\"businessinsider.com\",\"cbsnews.com\",\"usnews.com\",\"thegatewaypundit.com\",\"axios.com\",\"drudgereport.com\",\"theatlantic.com\",\"forbes.com\",\"npr.org\",\"espn.com\",\"latimes.com\",\"thecooldown.com\",\"zerohedge.com\",\"politico.com\",\"thehill.com\",\"weather.com\",\"marketwatch.com\",\"buzzfeed.com\",\"cbssports.com\",\"tmz.com\",\"slate.com\",\"vice.com\",\"salon.com\",\"theintercept.com\",\"inquirer.com\",\"chicagotribune.com\",\"bostonglobe.com\",\"upworthy.com\",\"geediting.com\",\"popularmechanics.com \",\"hindustantimes.com\",\"independent.co.uk\",\"uniladtech.com\",\"paypal.com\",\"capitalone.com\",\"chase.com\",\"finance.yahoo.com\",\"bankofamerica.com\",\"wellsfargo.com\",\"fidelity.com\",\"citi.com\",\"americanexpress.com\",\"schwab.com\",\"creditkarma.com\",\"experian.com\",\"discover.com\",\"usbank.com\",\"navyfederal.org\",\"pnc.com\",\"truist.com\",\"ally.com\",\"vanguard.com\",\"forbes.com\",\"intuit.com\",\"investopedia.com\",\"cnbc.com\",\"nerdwallet.com\",\"wsj.com\",\"marketwatch.com\",\"bloomberg.com\",\"reuters.com\",\"businessinsider.com\",\"cash.app\",\"venmo.com\",\"equifax.com\",\"transunion.com\",\"etrade.com\",\"robinhood.com\",\"morganstanley.com\",\"ml.com\",\"sofi.com\",\"chime.com\",\"huntington.com\",\"key.com\",\"citizensbank.com\",\"fifththird.com\",\"mtb.com\",\"regions.com\",\"santanderbank.com\",\"td.com\",\"usaa.com\",\"bankrate.com\",\"youtube.com\",\"facebook.com\",\"instagram.com\",\"tiktok.com\",\"x.com\",\"reddit.com\",\"pinterest.com\",\"linkedin.com\",\"whatsapp.com\",\"messenger.com\",\"snapchat.com\",\"twitch.tv\",\"discord.com\",\"telegram.org\",\"quora.com\",\"nextdoor.com\",\"tumblr.com\",\"threads.net\",\"blueskyweb.xyz\",\"mastodon.social\",\"medium.com\",\"vimeo.com\",\"flickr.com\",\"yelp.com\",\"bere.al\",\"kick.com\",\"behance.net\",\"deviantart.com\",\"goodreads.com\",\"clubhouse.com\",\"ello.co\",\"mewe.com\",\"signal.org\",\"glassdoor.com\",\"meetup.com\",\"houzz.com\",\"imgur.com\",\"letterboxd.com\",\"care2.com\",\"ravelry.com\",\"bandcamp.com\",\"soundcloud.com\",\"gaia.com\",\"caringbridge.org\",\"myspace.com\",\"livejournal.com\",\"classmates.com\",\"weheartit.com\",\"unofficialnetworks.com\",\"internalfb.com\",\"allrecipes.com\"]", - "x_url_path_match_allow_patterns": "[\"(?i)assignments\",\"(?i)assignment\",\"(?i)assign\",\"(?i)assessment\",\"(?i)assessments\",\"(?i)homework\",\"(?i)quiz\",\"(?i)quizzes\",\"(?i)question\",\"(?i)questions\",\"(?i)exam\",\"(?i)exams\",\"(?i)task\",\"(?i)tasks\",\"(?i)attempt\",\"(?i)test\",\"(?i)tests\",\"(?i)worksheet\",\"(?i)worksheets\",\"(?i)science\",\"(?i)biology\",\"(?i)chemistry\",\"(?i)physics\",\"(?i)geology\",\"(?i)astronomy\",\"(?i)programming\",\"(?i)robotics\",\"(?i)engineering\",\"(?i)mechanics\",\"(?i)mathematics\",\"(?i)math\",\"(?i)algebra\",\"(?i)calculus\",\"(?i)geometry\",\"(?i)statistics\",\"(?i)sociology\",\"(?i)geography\",\"(?i)psychology\",\"(?i)literature\",\"(?i)archaeology\",\"(?i)economics\",\"(?i)accounting\",\"(?i)course\",\"(?i)courses\"]", - "x_url_path_match_block_patterns": "[\"(?i)tutor\",\"(?i)protest\",\"(?i)latest\",\"(?i)account\",\"(?i)management\",\"(?i)login\",\"(?i)assessment\",\"(?i)apply\",\"(?i)questionnaire\",\"(?i)calendar\",\"(?i)news\",\"(?i)certification\",\"(?i)article\",\"(?i)download\",\"(?i)profile\",\"(?i)policy\",\"(?i)auth\",\"(?i)secure\"]", - "x_wait_time": "60s" - }, - "enable_features": [ - "IPH_LensOverlay" - ] - } - ] - } - ], "ChromnientLatencyOptimizations": [ { "platforms": [ @@ -5298,6 +5102,24 @@ ] } ], + "ChromnientNewFeedback": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "NewFeedbackEnabled", + "enable_features": [ + "LensSearchSidePanelNewFeedback" + ] + } + ] + } + ], "ChromnientPostLaunchTranslate": [ { "platforms": [ @@ -5377,6 +5199,24 @@ ] } ], + "ClampAutoScaling": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "ClampAutoScaling", + "params": { + "max_automotive_scaling_percentage": "150" + }, + "enable_features": [ + "ClampAutomotiveScaling" + ] + } + ] + } + ], "ClankFeedSyntheticCapabilities": [ { "platforms": [ @@ -5458,6 +5298,39 @@ ] } ], + "ClassManagementEnabledMetricsProvider": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ClassManagementEnabledMetricsProvider" + ] + } + ] + } + ], + "ClayBlockingEscapeHatch": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "escape_hatch_block_limit": "5" + }, + "enable_features": [ + "ClayBlocking" + ] + } + ] + } + ], "ClaySnackbarOnAndroid": [ { "platforms": [ @@ -5492,21 +5365,6 @@ ] } ], - "ClearDeviceDataOnSignOutForManagedUsers": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ClearDeviceDataOnSignOutForManagedUsers" - ] - } - ] - } - ], "ClearGrShaderDiskCacheOnInvalidPrefix": [ { "platforms": [ @@ -5646,25 +5504,18 @@ ] } ], - "ClientSideDetectionShowScamVerdictWarning": [ + "ClipboardChangeEvent": [ { "platforms": [ + "chromeos", "linux", - "mac", "windows" ], "experiments": [ { - "name": "EnabledWithWarning", + "name": "Enabled", "enable_features": [ - "ClientSideDetectionBrandAndIntentForScamDetection", - "ClientSideDetectionShowScamVerdictWarning" - ] - }, - { - "name": "EnabledMetricsCollection", - "enable_features": [ - "ClientSideDetectionBrandAndIntentForScamDetection" + "ClipboardChangeEvent" ] } ] @@ -5940,21 +5791,6 @@ ] } ], - "CommerceHintAndroid": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "enabled_commerce_hint_20220623", - "enable_features": [ - "CommerceHintAndroid" - ] - } - ] - } - ], "CommerceLocalPDPDetection": [ { "platforms": [ @@ -6011,8 +5847,8 @@ { "name": "MediumThresholds", "params": { - "CommitAvailableCriticalThresholdMB": "500", - "CommitAvailableModerateThresholdMB": "1000" + "CommitAvailableCriticalThresholdMB": "750", + "CommitAvailableModerateThresholdMB": "1500" }, "enable_features": [ "CommitAvailableMemoryPressureThresholds" @@ -6186,6 +6022,23 @@ ] } ], + "ComposeV3Migration": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ComposeV3Migration" + ] + } + ] + } + ], "CompositeBackgroundColorAnimation": [ { "platforms": [ @@ -6488,6 +6341,21 @@ ] } ], + "CpssUseTfliteSignatureRunnerKillSwitch": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Disabled_CpssUseTfliteSignatureRunner", + "disable_features": [ + "CpssUseTfliteSignatureRunner" + ] + } + ] + } + ], "CrOSAudioSidetoneAndMicIndicator": [ { "platforms": [ @@ -6596,28 +6464,6 @@ ] } ], - "CrOSEventSequenceLogging": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableEventSequenceLogging" - ] - }, - { - "name": "AppDiscoveryLogging", - "enable_features": [ - "AppDiscoveryLogging", - "EnableEventSequenceLogging" - ] - } - ] - } - ], "CrOSFederatedAutocorrectPhh": [ { "platforms": [ @@ -7099,6 +6945,21 @@ ] } ], + "CredentialProviderAutomaticPasskeyUpgrade": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CredentialProviderAutomaticPasskeyUpgrade" + ] + } + ] + } + ], "CreditCardInfobarDisplayLength": [ { "platforms": [ @@ -7136,21 +6997,6 @@ ] } ], - "CrosLazyLoginWebUI": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableLazyLoginWebUILoading" - ] - } - ] - } - ], "CrosSeparateGeoApiKey": [ { "platforms": [ @@ -7181,22 +7027,6 @@ ] } ], - "CrostiniTerminaDlcForceOta": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CrostiniTerminaDlcForceOta" - ], - "min_os_version": "15771.0.0" - } - ] - } - ], "CursiveManagedStylusPreinstall": [ { "platforms": [ @@ -7274,26 +7104,6 @@ ] } ], - "DOMParserIncludeShadowRoots": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "DOMParserIncludeShadowRoots" - ] - } - ] - } - ], "DOMStorageReliabilityEnhancements": [ { "platforms": [ @@ -7365,24 +7175,6 @@ ] } ], - "DataMaskingReportingAPI": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ApiEnterpriseReportingPrivateReportDataMaskingEvent" - ] - } - ] - } - ], "DbscPhase1aStudy": [ { "platforms": [ @@ -7402,29 +7194,6 @@ ] } ], - "DecodedImageWorkingSetBudget": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "budget_default_128M_256M_20230921", - "params": { - "DecodedImageWorkingSetBudgetBytesForAboveThreshold": "268435456", - "DefaultDecodedImageWorkingSetBudgetBytes": "134217728" - }, - "enable_features": [ - "ImageDecodeConfigurableFeature" - ] - } - ] - } - ], "DecommitPooledPages": [ { "platforms": [ @@ -7507,65 +7276,6 @@ ] } ], - "DefaultBrowserPromoIPadStudy": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DefaultBrowserPromoIPadExperimentalString" - ] - } - ] - } - ], - "DefaultGpuDiskCacheSize": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "max_cache_6M_20230913", - "params": { - "GpuDefaultMaxProgramCacheMemoryBytes": "6291456" - }, - "enable_features": [ - "DefaultGpuDiskCacheSize" - ] - } - ] - } - ], - "DefaultOpenSSLBufferSizeFeature": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "ssl_buffer_size_17K_20230920", - "params": { - "DefaultOpenSSLBufferSize": "17408" - }, - "enable_features": [ - "DefaultOpenSSLBufferSizeFeature" - ] - } - ] - } - ], "DefaultPassthroughCommandDecoder": [ { "platforms": [ @@ -7597,8 +7307,7 @@ { "name": "Enabled", "enable_features": [ - "EnterpriseProfileBadgingForAvatar", - "EnterpriseProfileBadgingForMenu" + "EnterpriseProfileBadgingForAvatar" ] } ] @@ -7645,46 +7354,6 @@ ] } ], - "DeferredSparerRendererForTopChromeWebUI": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DeferredSpareRendererForTopChromeWebUI" - ] - } - ] - } - ], - "DelayablePriorityThreshold": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Medium_20230906", - "params": { - "DelayablePriorityThreshold": "medium" - }, - "enable_features": [ - "DelayablePriorityThresholdFeature" - ] - } - ] - } - ], "DelegatedCompositingOnWindows": [ { "platforms": [ @@ -7771,21 +7440,6 @@ ] } ], - "DeskProfiles": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_20240313", - "enable_features": [ - "DeskProfiles" - ] - } - ] - } - ], "DesktopCapturePermissionCheckerPreMacos14_4": [ { "platforms": [ @@ -8140,21 +7794,6 @@ ] } ], - "DeviceIdValidation": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DeviceIdValidation" - ] - } - ] - } - ], "DexFixer": [ { "platforms": [ @@ -8220,6 +7859,21 @@ ] } ], + "DirtyWritebackMaxBytes": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "DirtyWritebackMaxBytes", + "enable_features": [ + "CrOSLateBootDirtyWritebackMaxBytes" + ] + } + ] + } + ], "DisableBlackHoleOnNoNewNetwork": [ { "platforms": [ @@ -8266,21 +7920,6 @@ ] } ], - "DisableCompositedProgressBar": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DisableCompositedProgressBar" - ] - } - ] - } - ], "DisableCompressParkableStrings": [ { "platforms": [ @@ -8348,21 +7987,6 @@ ] } ], - "DisableListTabSwitcher": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DisableListTabSwitcher" - ] - } - ] - } - ], "DisableMemoryReclaimerInBackground": [ { "platforms": [ @@ -8448,23 +8072,6 @@ ] } ], - "DisallowManagedProfileSignout": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DisallowManagedProfileSignout" - ] - } - ] - } - ], "DiscardInputEventsToRecentlyMovedFrames": [ { "platforms": [ @@ -8857,6 +8464,21 @@ ] } ], + "EdgeToEdgeDebugging": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EdgeToEdgeDebugging" + ] + } + ] + } + ], "EdgeToEdgeEverywhere": [ { "platforms": [ @@ -8879,7 +8501,53 @@ ], "experiments": [ { - "name": "Enabled", + "name": "EnabledWithEducationalTipPerDay", + "enable_features": [ + "EducationalTipModule" + ] + }, + { + "name": "EnabledWithOnlyQuickDeletePromo", + "params": { + "names_of_ephemeral_cards_to_show": "QuickDeletePromo" + }, + "enable_features": [ + "EducationalTipModule" + ] + }, + { + "name": "EnabledWithOnlyHistorySyncPromo", + "params": { + "names_of_ephemeral_cards_to_show": "HistorySyncPromo" + }, + "enable_features": [ + "EducationalTipModule" + ] + }, + { + "name": "EnabledWithEducationalTipPerThreeDays", + "params": { + "days_to_show_ephemeral_card_once": "3" + }, + "enable_features": [ + "EducationalTipModule" + ] + }, + { + "name": "EnabledWithEducationalTipPerThreeDaysExceptHistorySyncPromo", + "params": { + "days_to_show_ephemeral_card_once": "3", + "names_of_ephemeral_cards_to_show": "TabGroupPromo,TabGroupSyncPromo,QuickDeletePromo" + }, + "enable_features": [ + "EducationalTipModule" + ] + }, + { + "name": "EnabledWithEducationalTipPerDayExceptHistorySyncPromo", + "params": { + "names_of_ephemeral_cards_to_show": "TabGroupPromo,TabGroupSyncPromo,QuickDeletePromo" + }, "enable_features": [ "EducationalTipModule" ] @@ -8944,6 +8612,9 @@ "experiments": [ { "name": "Enabled", + "params": { + "max_parallel_requests": "15" + }, "enable_features": [ "EnableAsyncUploadAfterVerdict" ] @@ -9071,16 +8742,18 @@ ] } ], - "EnableExtensibleEnterpriseSSO": [ + "EnableEwalletPayFlow": [ { "platforms": [ - "mac" + "android" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "EnableExtensibleEnterpriseSSO" + "AutofillSyncEwalletAccounts", + "EwalletPayments", + "PaymentLinkDetection" ] } ] @@ -9133,6 +8806,29 @@ ] } ], + "EnableHangWatcher": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "io_thread_log_level": "2", + "ui_thread_log_level": "2", + "utility_process_main_thread_log_level": "2" + }, + "enable_features": [ + "EnableHangWatcher" + ] + } + ] + } + ], "EnableImprovedManagementDisclosure": [ { "platforms": [ @@ -9266,21 +8962,6 @@ ] } ], - "EnableSessionSerializationOptimizations": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableSessionSerializationOptimizations" - ] - } - ] - } - ], "EnableShoppingListIOSM119": [ { "platforms": [ @@ -9316,21 +8997,6 @@ ] } ], - "EnableTcpPortRandomization": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableTcpPortRandomization" - ] - } - ] - } - ], "EnableUserSessionActivityReporting": [ { "platforms": [ @@ -9383,6 +9049,24 @@ ] } ], + "EnterpriseFileSystemAccessDeepScan": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnterpriseFileSystemAccessDeepScan" + ] + } + ] + } + ], "EnterpriseUpdatedProfileCreationScreen": [ { "platforms": [ @@ -9403,6 +9087,7 @@ "EsbAsASyncedSetting": [ { "platforms": [ + "android", "chromeos", "chromeos_lacros", "linux", @@ -9481,26 +9166,6 @@ ] } ], - "ExploreSitesDense": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "WithDenseBottom", - "params": { - "denseVariation": "titleBottom", - "mostLikelyVariation": "groupedIcon", - "variation": "mostLikelyTile" - }, - "enable_features": [ - "ExploreSites" - ] - } - ] - } - ], "ExportFrameTimingAfterFrameDoneExperiment": [ { "platforms": [ @@ -9574,42 +9239,6 @@ ] } ], - "ExtensionsCollapseMainMenu": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ExtensionsCollapseMainMenu" - ] - } - ] - } - ], - "ExtensionsServiceWorkerOptimizedEventDispatch": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ExtensionsServiceWorkerOptimizedEventDispatch" - ] - } - ] - } - ], "ExtensionsToolbarAndMenuRedesign": [ { "platforms": [ @@ -9628,6 +9257,28 @@ ] } ], + "ExtensionsZeroStatePromo": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Variant1", + "params": { + "x_iph-variant": "custom-action-iph" + }, + "enable_features": [ + "ExtensionsCollapseMainMenu", + "IPH_ExtensionsZeroStatePromo" + ] + } + ] + } + ], "ExternalBeginFrameSourceWinUsesRunOrPostTask": [ { "platforms": [ @@ -9771,21 +9422,6 @@ ] } ], - "FastPairKeyboards": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "FastPairKeyboards" - ] - } - ] - } - ], "FastPairPWACompanion": [ { "platforms": [ @@ -9874,21 +9510,6 @@ ] } ], - "FasterSplitScreenSetup": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_Dogfood_20231030", - "enable_features": [ - "FasterSplitScreenSetup" - ] - } - ] - } - ], "FedCmIntrusionMitigation": [ { "platforms": [ @@ -9951,7 +9572,6 @@ "platforms": [ "android", "android_weblayer", - "chromeos", "linux", "mac", "windows" @@ -9960,7 +9580,25 @@ { "name": "SegmentationPlatform", "enable_features": [ - "FedCmSegmentationPlatform" + "SegmentationPlatformFedCmUser" + ] + } + ] + } + ], + "FeedHeaderRemoval": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledWithNoHeader", + "params": { + "treatment": "none" + }, + "enable_features": [ + "FeedHeaderRemoval" ] } ] @@ -9981,6 +9619,48 @@ ] } ], + "FeedPerformanceStudyV3": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "rs4_rr05_al1", + "params": { + "asyncLayout": "true", + "rangeRatio": "0.5", + "rangeSize": "4" + }, + "enable_features": [ + "FeedPerformanceStudy" + ] + }, + { + "name": "rs4_rr10_al1", + "params": { + "asyncLayout": "true", + "rangeRatio": "1", + "rangeSize": "4" + }, + "enable_features": [ + "FeedPerformanceStudy" + ] + }, + { + "name": "rs4_rr05_al0", + "params": { + "asyncLayout": "false", + "rangeRatio": "0.5", + "rangeSize": "4" + }, + "enable_features": [ + "FeedPerformanceStudy" + ] + } + ] + } + ], "FeedSignedOutViewDemotion": [ { "platforms": [ @@ -10153,27 +9833,6 @@ ] } ], - "FindRegistrationImprovements": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "EnableAll_20231004", - "enable_features": [ - "ServiceWorkerMergeFindRegistrationForClientUrl", - "ServiceWorkerRegistrationCache", - "ServiceWorkerScopeCache" - ] - } - ] - } - ], "FingerprintingProtectionFilter": [ { "platforms": [ @@ -10503,33 +10162,6 @@ ] } ], - "GalleryAppPdfEditNotification": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "EnabledEditOrSign_20230127", - "params": { - "text": "Edit or sign" - }, - "enable_features": [ - "GalleryAppPdfEditNotification" - ] - }, - { - "name": "EnabledOpenAndEdit_20230127", - "params": { - "text": "Open and edit" - }, - "enable_features": [ - "GalleryAppPdfEditNotification" - ] - } - ] - } - ], "GamingPerksStudy": [ { "platforms": [ @@ -10580,14 +10212,9 @@ ] } ], - "GenGpuDiskCacheKeyPrefixInGpuService": [ + "GlicContextualCueingDogfood": [ { "platforms": [ - "android", - "chromeos", - "fuchsia", - "ios", - "linux", "mac", "windows" ], @@ -10595,22 +10222,7 @@ { "name": "Enabled", "enable_features": [ - "GenGpuDiskCacheKeyPrefixInGpuService" - ] - } - ] - } - ], - "GifRecording": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "GifRecording" + "ContextualCueing" ] } ] @@ -10624,24 +10236,15 @@ ], "experiments": [ { - "name": "GlicEnabled", - "params": { - "BackoffMultiplierBase": "2.0", - "MinPageCountBetweenNudges": "3", - "NudgeCapCount": "10", - "NudgeCapCountPerDomain": "3", - "NudgeCapTime": "8h", - "NudgeCapTimePerDomain": "8h" - }, + "name": "Enabled", "enable_features": [ - "ContextualCueing", "Glic" ] } ] } ], - "GlicDogfoodSettings": [ + "GlicRolloutDogfood": [ { "platforms": [ "mac", @@ -10649,14 +10252,40 @@ ], "experiments": [ { - "name": "GlicSettingsEnabled", + "name": "Enabled", + "enable_features": [ + "GlicRollout" + ] + } + ] + } + ], + "GlicSettingsDogfood": [ + { + "platforms": [ + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", "params": { - "has_background": "false" + "glic-allowed-origins-override": "https://www.google.com", + "glic-client-responsiveness-check-interval-ms": "5000", + "glic-fre-url": "https://www.google.com/?", + "glic-guest-url": "https://www.google.com/", + "glic-shortcuts-launcher-toggle-learn-more-url": "https://support.google.com/", + "glic-shortcuts-learn-more-url": "https://support.google.com/", + "glic-shortcuts-location-toggle-learn-more-url": "https://support.google.com/", + "glic-shortcuts-tab-access-toggle-learn-more-url": "https://support.google.com/" }, "enable_features": [ - "GlicDevelopmentCookies", + "GlicAppMenuNewBadge", + "GlicCSPConfig", + "GlicClientResponsivenessCheck", "GlicFreURLConfig", "GlicKeyboardShortcutNewBadge", + "GlicPageContextEligibility", "GlicURLConfig", "IPH_GlicPromo" ] @@ -10664,6 +10293,59 @@ ] } ], + "GlicTieredRollout": [ + { + "platforms": [ + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicTieredRollout" + ] + } + ] + } + ], + "GlicUserStatusCheckDogfood": [ + { + "platforms": [ + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "glic-user-status-oauth2-scope": "https://www.googleapis.com/auth/gemini", + "glic-user-status-request-delay": "23h", + "glic-user-status-url": "https://www.example.com/" + }, + "enable_features": [ + "GlicUserStatusCheck" + ] + } + ] + } + ], + "GlicZeroStateSuggestionsDogfood": [ + { + "platforms": [ + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "GlicZeroStateSuggestions" + ] + } + ] + } + ], "GlobalVaapiLock": [ { "platforms": [ @@ -10788,21 +10470,6 @@ ] } ], - "GoogleTtsWithLanguagePacks": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ExperimentalAccessibilityGoogleTtsLanguagePacks" - ] - } - ] - } - ], "GpuYieldRasterization": [ { "platforms": [ @@ -10882,7 +10549,7 @@ ] } ], - "GwpAsanAndroid2024": [ + "GwpAsan2024Android": [ { "platforms": [ "android", @@ -10890,11 +10557,20 @@ ], "experiments": [ { - "name": "TripleBrowserReservation", + "name": "CombinedGreedyArmForVariationsPresubmit", "params": { + "BrowserAllocationSamplingMultiplier": "1500", + "BrowserAllocationSamplingRange": "16", "BrowserMaxAllocations": "210", "BrowserMaxMetadata": "765", - "BrowserTotalPages": "1536" + "BrowserTotalPages": "1536", + "GpuAllocationSamplingMultiplier": "1500", + "GpuAllocationSamplingRange": "16", + "GpuMaxAllocations": "140", + "GpuMaxMetadata": "510", + "GpuTotalPages": "1024", + "RendererAllocationSamplingMultiplier": "1500", + "RendererAllocationSamplingRange": "12" }, "enable_features": [ "GwpAsanMalloc", @@ -10904,20 +10580,59 @@ ] } ], - "GwpAsanDesktop2024": [ + "GwpAsan2024LinuxCros": [ { "platforms": [ "chromeos", - "linux", + "linux" + ], + "experiments": [ + { + "name": "CombinedGreedyArmForVariationsPresubmit", + "params": { + "BrowserAllocationSamplingMultiplier": "1200", + "BrowserAllocationSamplingRange": "10", + "BrowserMaxAllocations": "150", + "BrowserMaxMetadata": "630", + "BrowserTotalPages": "6144", + "GpuAllocationSamplingMultiplier": "1200", + "GpuAllocationSamplingRange": "10", + "GpuMaxAllocations": "100", + "GpuMaxMetadata": "420", + "GpuTotalPages": "4096", + "RendererAllocationSamplingMultiplier": "800", + "RendererAllocationSamplingRange": "10" + }, + "enable_features": [ + "GwpAsanMalloc", + "GwpAsanPartitionAlloc" + ] + } + ] + } + ], + "GwpAsan2024WinMac": [ + { + "platforms": [ + "windows", "mac" ], "experiments": [ { - "name": "TripleBrowserReservation", + "name": "CombinedGreedyArmForVariationsPresubmit", "params": { + "BrowserAllocationSamplingMultiplier": "800", + "BrowserAllocationSamplingRange": "10", "BrowserMaxAllocations": "210", "BrowserMaxMetadata": "765", - "BrowserTotalPages": "6144" + "BrowserTotalPages": "6144", + "GpuAllocationSamplingMultiplier": "800", + "GpuAllocationSamplingRange": "10", + "GpuMaxAllocations": "140", + "GpuMaxMetadata": "510", + "GpuTotalPages": "4096", + "RendererAllocationSamplingMultiplier": "600", + "RendererAllocationSamplingRange": "10" }, "enable_features": [ "GwpAsanMalloc", @@ -10951,6 +10666,24 @@ ] } ], + "HTMLParserYieldByUserTiming": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnableWithTimeout5ms", + "params": { + "timeout_ms": "5" + }, + "enable_features": [ + "SearchAboveFoldBytesReceived" + ] + } + ] + } + ], "HTTP2": [ { "platforms": [ @@ -11447,48 +11180,6 @@ ] } ], - "HatsSmartUnlock": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "prob": "0.05", - "survey_cycle_length": "7", - "survey_start_date_ms": "1627801200000", - "trigger_id": "4oPHNnPJy0jBnuKU19R0T1NSmNes" - }, - "enable_features": [ - "HappinessTrackingSmartLock" - ] - } - ] - } - ], - "HatsUnlock": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "prob": "0.001", - "survey_cycle_length": "7", - "survey_start_date_ms": "1627801200000", - "trigger_id": "qqZi3hpfx0jBnuKU19R0UA7zE7e4" - }, - "enable_features": [ - "HappinessTrackingUnlock" - ] - } - ] - } - ], "HeadlessTabModel": [ { "platforms": [ @@ -11504,16 +11195,25 @@ ] } ], - "HeapProfilerExcludeChromeOSRenderers": [ + "HeapProfilingLoadFactor": [ { "platforms": [ - "chromeos" + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" ], "experiments": [ { "name": "Enabled", "params": { - "renderer-prob-pct": "0" + "browser-hash-set-load-factor": "0.7", + "gpu-hash-set-load-factor": "0.7", + "network-hash-set-load-factor": "0.7", + "renderer-hash-set-load-factor": "0.7", + "utility-hash-set-load-factor": "0.7" }, "enable_features": [ "HeapProfilerReporting" @@ -11676,22 +11376,6 @@ ] } ], - "HoldbackRemoveMobileViewportDoubleTap": [ - { - "platforms": [ - "android", - "android_weblayer" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "RemoveMobileViewportDoubleTap" - ] - } - ] - } - ], "Hotspot": [ { "platforms": [ @@ -11750,13 +11434,15 @@ "name": "Enabled_NVS_Omnibox_Prefetch", "enable_features": [ "HttpCacheNoVarySearch", + "LogDuplicateRequests", "SearchPrefetchWithNoVarySearchDiskCache" ] }, { "name": "Enabled_NVS_HttpCache_Only", "enable_features": [ - "HttpCacheNoVarySearch" + "HttpCacheNoVarySearch", + "LogDuplicateRequests" ] } ] @@ -11848,36 +11534,6 @@ ] } ], - "IOSAutofillCorrectUserEditedBitInParsedField": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillCorrectUserEditedBitInParsedField" - ] - } - ] - } - ], - "IOSAutofillFixPostFillingPaymentSheet": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AutofillFixPostFillingPaymentSheet" - ] - } - ] - } - ], "IOSAutofillInIsolatedWorld": [ { "platforms": [ @@ -11893,6 +11549,21 @@ ] } ], + "IOSAutofillRefillForForms": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillRefillForFormsIos" + ] + } + ] + } + ], "IOSAutofillThrottleDocumentFormScan": [ { "platforms": [ @@ -11993,21 +11664,6 @@ ] } ], - "IOSChromnientDenseText": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LensVsintParamEnabled" - ] - } - ] - } - ], "IOSChromnientEscapeHatch": [ { "platforms": [ @@ -12040,21 +11696,6 @@ ] } ], - "IOSCleanupHangingPasswordFormExtractionRequests": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IosCleanupHangingPasswordFormExtractionRequests" - ] - } - ] - } - ], "IOSContainedTabGroup": [ { "platforms": [ @@ -12100,21 +11741,6 @@ ] } ], - "IOSDeleteAllSavedCredentials": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSEnableDeleteAllSavedCredentials" - ] - } - ] - } - ], "IOSDeprecateFeedHeader": [ { "platforms": [ @@ -12238,6 +11864,21 @@ ] } ], + "IOSEnterpriseRealtimeUrlFiltering": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IOSEnterpriseRealtimeUrlFiltering" + ] + } + ] + } + ], "IOSExplicitUITraitRegistration": [ { "platforms": [ @@ -12298,21 +11939,6 @@ ] } ], - "IOSFollowUIUpdate": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableFollowUIUpdate" - ] - } - ] - } - ], "IOSFullscreenImprovement": [ { "platforms": [ @@ -12385,21 +12011,6 @@ ] } ], - "IOSHomeCustomization": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "HomeCustomization" - ] - } - ] - } - ], "IOSHomeMemoryImprovements": [ { "platforms": [ @@ -12415,21 +12026,6 @@ ] } ], - "IOSImprovePasswordFieldDetectionForFilling": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSImprovePasswordFieldDetectionForFilling" - ] - } - ] - } - ], "IOSIncognitoSoftLock": [ { "platforms": [ @@ -12445,21 +12041,6 @@ ] } ], - "IOSInternalAdditionalFeaturesSwitch": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "InternalAdditionalFeaturesSwitch" - ] - } - ] - } - ], "IOSKeepsRenderProcessAlive": [ { "platforms": [ @@ -12490,6 +12071,27 @@ ] } ], + "IOSLensUnification": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "LensFilterAblationMode": "1", + "LensTranslateToggleMode": "1" + }, + "enable_features": [ + "EnableLensViewFinderUnifiedExperience", + "LensFiltersAblationModeEnabled", + "LensTranslateToggleModeEnabled" + ] + } + ] + } + ], "IOSLogApplicationStorageSizeMetrics": [ { "platforms": [ @@ -12535,21 +12137,6 @@ ] } ], - "IOSNewFeedPositioningStudy": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSNewFeedPositioning" - ] - } - ] - } - ], "IOSOmahaResyncTimerOnForeground": [ { "platforms": [ @@ -12580,36 +12167,6 @@ ] } ], - "IOSOverflowMenuCustomization": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_CanaryDev", - "enable_features": [ - "OverflowMenuCustomization" - ] - } - ] - } - ], - "IOSParcelTrackingCarrierNumberDetection": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnableNewParcelTrackingNumberDetection" - ] - } - ] - } - ], "IOSPartitionAllocBackupRefPtr": [ { "platforms": [ @@ -12637,6 +12194,21 @@ ] } ], + "IOSPartitionAllocMemoryReclaimer": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "PartitionAllocMemoryReclaimer" + ] + } + ] + } + ], "IOSPasskeysM2": [ { "platforms": [ @@ -12652,21 +12224,6 @@ ] } ], - "IOSPasswordBottomSheetV2": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSPasswordBottomSheetV2" - ] - } - ] - } - ], "IOSProactivePasswordGenerationBottomSheet": [ { "platforms": [ @@ -12801,21 +12358,6 @@ ] } ], - "IOSSignInUff": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IOSPasswordSignInUff" - ] - } - ] - } - ], "IOSSkipCookieCaching": [ { "platforms": [ @@ -12895,7 +12437,9 @@ { "name": "Enabled", "enable_features": [ - "StatelessFormSuggestionController" + "IOSStatelessFillDataFlow", + "StatelessFormSuggestionController", + "StatelessFormSuggestionControllerWithRequestDeduping" ] } ] @@ -12999,21 +12543,6 @@ ] } ], - "IOSWebChannels": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "EnabledWebChannels", - "enable_features": [ - "EnableWebChannels" - ] - } - ] - } - ], "IOSiPadGhostCards": [ { "platforms": [ @@ -13080,50 +12609,6 @@ ] } ], - "IdbExpediteBackendProcessingForForegroundClients": [ - { - "platforms": [ - "windows", - "mac", - "chromeos", - "chromeos_lacros", - "fuchsia", - "linux", - "ios", - "android", - "android_weblayer", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IdbExpediteBackendProcessingForForegroundClients" - ] - } - ] - } - ], - "IdbInSessionDbCleanup": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "IdbInSessionDbCleanup" - ] - } - ] - } - ], "IdbPrioritizeForegroundClients": [ { "platforms": [ @@ -13163,6 +12648,21 @@ ] } ], + "IdentityInAuthError": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableIdentityInAuthError" + ] + } + ] + } + ], "IgnoreDiscardAttemptMarker": [ { "platforms": [ @@ -13181,45 +12681,7 @@ ] } ], - "IgnoreDuplicateNavs": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "IgnoreDuplicateNavs" - ] - }, - { - "name": "Enabled_2ms", - "params": { - "duplicate_nav_threshold": "2000" - }, - "enable_features": [ - "IgnoreDuplicateNavs" - ] - }, - { - "name": "Enabled_1ms", - "params": { - "duplicate_nav_threshold": "1000" - }, - "enable_features": [ - "IgnoreDuplicateNavs" - ] - } - ] - } - ], - "ImageDescriptionsAlternativeRouting": [ + "ImageDescriptionsAlternateRouting": [ { "platforms": [ "android", @@ -13232,7 +12694,7 @@ { "name": "Enabled", "enable_features": [ - "ImageDescriptionsAlternativeRouting" + "ImageDescriptionsAlternateRouting" ] } ] @@ -13253,8 +12715,7 @@ "name": "Enabled", "enable_features": [ "FailedLoginDetectionBasedOnFormClearEvent", - "FailedLoginDetectionBasedOnResourceLoadingErrors", - "PostponeOnLoginSuccessful" + "FailedLoginDetectionBasedOnResourceLoadingErrors" ] } ] @@ -13386,22 +12847,6 @@ ] } ], - "InstallAmbientBadgeEngagement": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_Message_Visit", - "enable_features": [ - "AmbientBadgeSuppressFirstVisit", - "InstallableAmbientBadgeMessage" - ] - } - ] - } - ], "InstallAndroidUnwindDfm": [ { "platforms": [ @@ -13435,77 +12880,6 @@ ] } ], - "InvalidationWithDirectMessagesCbcm": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CbcmPolicyInvalidationWithDirectMessagesEnabled", - "CbcmRemoteCommandsInvalidationWithDirectMessagesEnabled" - ] - } - ] - } - ], - "InvalidationWithDirectMessagesChromeOs": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DeviceCertProvisioningInvalidationWithDirectMessagesEnabled", - "DeviceLocalAccountPolicyInvalidationWithDirectMessagesEnabled", - "DevicePolicyInvalidationWithDirectMessagesEnabled", - "DeviceRemoteCommandsInvalidationWithDirectMessagesEnabled", - "UserCertProvisioningInvalidationWithDirectMessagesEnabled" - ] - } - ] - } - ], - "InvalidationWithDirectMessagesUserPolicy": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UserPolicyInvalidationWithDirectMessagesEnabled" - ] - } - ] - } - ], - "InvalidationWithDirectMessagesUserRemoteCommands": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UserRemoteCommandsInvalidationWithDirectMessagesEnabled" - ] - } - ] - } - ], "IpadZpsSuggestionsLimitIncrease": [ { "platforms": [ @@ -13574,29 +12948,6 @@ ] } ], - "JourneysOnDeviceClusteringContentClustering": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "AllVisitsContentClusteringPairwiseMerge_20230714", - "params": { - "collections_blocklist": "/collection/it_glossary,/collection/periodicals,/collection/software,/collection/tv_networks,/collection/websites", - "search_visits_only": "false", - "use_pairwise_merge": "true" - }, - "enable_features": [ - "JourneysOnDeviceClusteringContentClustering" - ] - } - ] - } - ], "JumpStartOmnibox": [ { "platforms": [ @@ -14055,25 +13406,6 @@ ] } ], - "LauncherGameSearchStudy": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "enabled_override": "true" - }, - "enable_features": [ - "AppProvisioningStatic", - "LauncherGameSearch" - ] - } - ] - } - ], "LayoutNGShapeCacheWebview": [ { "platforms": [ @@ -14128,22 +13460,19 @@ ] } ], - "LeakSkiaEventTracerAtExit": [ + "LegacyKeyRepeatSynthesis": [ { "platforms": [ - "android", - "chromeos", - "fuchsia", - "ios", - "linux", + "windows", "mac", - "windows" + "linux", + "chromeos" ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "LeakSkiaEventTracerAtExit" + "name": "Disabled", + "disable_features": [ + "LegacyKeyRepeatSynthesis" ] } ] @@ -14173,30 +13502,19 @@ ] } ], - "LightweightUAFDetector": [ + "LensSearchSidePanelScrollToAPI": [ { "platforms": [ + "chromeos", + "linux", + "mac", "windows" ], "experiments": [ { - "name": "Enabled_20240130", - "params": { - "AllocationSamplingMultiplier": "100", - "EvictionTaskIntervalMs": "5000", - "MaxAllocations": "1400", - "MaxMetadata": "5100", - "MaxTotalSize": "131072", - "Mode": "Random", - "TotalSizeHighWaterMark": "104857", - "TotalSizeLowWaterMark": "91750" - }, + "name": "LensSearchSidePanelScrollToAPIEnabled", "enable_features": [ - "LightweightUafDetector" - ], - "disable_features": [ - "GwpAsanMalloc", - "GwpAsanPartitionAlloc" + "LensSearchSidePanelScrollToAPI" ] } ] @@ -14430,6 +13748,45 @@ ] } ], + "LocalIpAddressInEvents": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "LocalIpAddressInEvents" + ] + } + ] + } + ], + "LocalNetworkAccessChecks": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "EnabledWarning", + "params": { + "LocalNetworkAccessChecksWarn": "true" + }, + "enable_features": [ + "LocalNetworkAccessChecks" + ] + } + ] + } + ], "LocalWebApprovalsIos": [ { "platforms": [ @@ -14621,7 +13978,7 @@ ] } ], - "MacPermanentThinController": [ + "MacICloudKeychainRecoveryFactor": [ { "platforms": [ "mac" @@ -14630,22 +13987,22 @@ { "name": "Enabled", "enable_features": [ - "FullscreenPermanentThinController" + "EnableICloudKeychainRecoveryFactor" ] } ] } ], - "MagicStackGradientView": [ + "MacKeychainApiMigration": [ { "platforms": [ - "ios" + "mac" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "MagicStackRemoveGradientView" + "AppleKeychainUseSecItem" ] } ] @@ -14702,21 +14059,6 @@ ] } ], - "MainThreadCompositingPriority": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled_20230817", - "enable_features": [ - "MainThreadCompositingPriority" - ] - } - ] - } - ], "MaliciousApkDownloadCheck": [ { "platforms": [ @@ -14761,28 +14103,6 @@ ] } ], - "MaxNumDelayableRequestsPerHostPerClient": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "MaxRequests_6_20230906", - "params": { - "MaxNumDelayableRequestsPerHostPerClient": "6" - }, - "enable_features": [ - "MaxNumDelayableRequestsPerHostPerClientFeature" - ] - } - ] - } - ], "MediaCodecLinearBlock": [ { "platforms": [ @@ -15073,6 +14393,66 @@ ] } ], + "MessagesAccessibilityEventInvestigations": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledBaseline", + "params": { + "messages_accessibility_events_investigations_param": "1" + }, + "enable_features": [ + "MessagesAccessibilityEventInvestigations" + ] + }, + { + "name": "EnabledWithAccessibilityState", + "params": { + "messages_accessibility_events_investigations_param": "2" + }, + "enable_features": [ + "MessagesAccessibilityEventInvestigations" + ] + }, + { + "name": "EnabledWithRestrictiveServiceCheck", + "params": { + "messages_accessibility_events_investigations_param": "3" + }, + "enable_features": [ + "MessagesAccessibilityEventInvestigations" + ] + }, + { + "name": "EnabledWithMaskCheck", + "params": { + "messages_accessibility_events_investigations_param": "4" + }, + "enable_features": [ + "MessagesAccessibilityEventInvestigations" + ] + }, + { + "name": "EnabledWithDirectQuery", + "params": { + "messages_accessibility_events_investigations_param": "5" + }, + "enable_features": [ + "MessagesAccessibilityEventInvestigations" + ] + }, + { + "name": "Control", + "disable_features": [ + "MessagesAccessibilityEventInvestigations" + ] + } + ] + } + ], "MessagesPreinstall": [ { "platforms": [ @@ -15194,6 +14574,21 @@ ] } ], + "MiniOriginBar": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MiniOriginBar" + ] + } + ] + } + ], "MojoChannelAssociatedSendUsesRunOrPostTask": [ { "platforms": [ @@ -15236,28 +14631,6 @@ ] } ], - "MojoLargerDataPipeAllocationSize": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "data_pipe_2048k_20230922", - "params": { - "LargerDataPipeAllocationSize": "2097152" - }, - "enable_features": [ - "LargerDataPipeAllocationSizeFeature" - ] - } - ] - } - ], "MojoPredictiveAllocation": [ { "platforms": [ @@ -15383,6 +14756,21 @@ ] } ], + "MvcUpdateViewWhenModelChanged": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MvcUpdateViewWhenModelChanged" + ] + } + ] + } + ], "NearbyBleV2": [ { "platforms": [ @@ -15458,21 +14846,6 @@ ] } ], - "NearbySharingSelfShare": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NearbySharingSelfShare" - ] - } - ] - } - ], "NearbySharingWifiDirect": [ { "platforms": [ @@ -15488,28 +14861,6 @@ ] } ], - "NetAdapterMaxBufSize": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "max_buf_size_064k_20230922", - "params": { - "NetAdapterMaxBufSize": "65536" - }, - "enable_features": [ - "NetAdapterMaxBufSizeFeature" - ] - } - ] - } - ], "NetworkQualityEstimatorParameterTuning": [ { "platforms": [ @@ -15603,6 +14954,36 @@ ] } ], + "NewTabPageCustomization": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "NewTabPageCustomization" + ] + } + ] + } + ], + "NimbleCollisionAvoidanceV1": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "NotificationCollisionManagement" + ] + } + ] + } + ], "NoPasswordSuggestionFiltering": [ { "platforms": [ @@ -15678,20 +15059,16 @@ ] } ], - "NonAndroidUseFrameIntervalDecider": [ + "NonModalSignInPromo": [ { "platforms": [ - "chromeos", - "ios", - "linux", - "mac", - "windows" + "ios" ], "experiments": [ { "name": "Enabled", "enable_features": [ - "UseFrameIntervalDecider" + "NonModalSignInPromo" ] } ] @@ -15718,28 +15095,6 @@ ] } ], - "NormalMaxItemsInCacheForSoftware": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "ImageCache_1000_20230914", - "params": { - "NormalMaxItemsInCacheForSoftware": "1000" - }, - "enable_features": [ - "NormalMaxItemsInCacheForSoftwareFeature" - ] - } - ] - } - ], "NotificationLimit": [ { "platforms": [ @@ -15820,6 +15175,36 @@ ] } ], + "NtpMicrosoftFilesCard": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled_NonInsights", + "params": { + "NtpSharepointModuleDataParam": "non-insights" + }, + "enable_features": [ + "NtpSharepointModule" + ] + }, + { + "name": "Enabled_Combination", + "params": { + "NtpSharepointModuleDataParam": "combined" + }, + "enable_features": [ + "NtpSharepointModule" + ] + } + ] + } + ], "OcclusionCullingQuadSplitLimit": [ { "platforms": [ @@ -15952,21 +15337,6 @@ ] } ], - "OmniboxActionsInSuggestIOS": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OmniboxIOSActionsInSuggest" - ] - } - ] - } - ], "OmniboxAnswerActions": [ { "platforms": [ @@ -16051,33 +15421,6 @@ ] } ], - "OmniboxCr23M113Desktop": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "enabled", - "enable_features": [ - "OmniboxExpandedLayout", - "OmniboxExpandedStateColors", - "OmniboxExpandedStateHeight", - "OmniboxExpandedStateShape", - "OmniboxExpandedStateSuggestIcons", - "OmniboxSteadyStateBackgroundColor", - "OmniboxSteadyStateHeight", - "OmniboxSteadyStateTextColor", - "OmniboxSuggestionHoverFillShape", - "kOmniboxCR23SteadyStateIcons" - ] - } - ] - } - ], "OmniboxDefaultTypedNavigationsToHttps": [ { "platforms": [ @@ -16132,31 +15475,6 @@ ] } ], - "OmniboxFeaturedEnterpriseSiteSearch": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_IPH", - "enable_features": [ - "ShowFeaturedEnterpriseSiteSearch", - "ShowFeaturedEnterpriseSiteSearchIPH" - ] - }, - { - "name": "Enabled", - "enable_features": [ - "ShowFeaturedEnterpriseSiteSearch" - ] - } - ] - } - ], "OmniboxInspireMePhase2": [ { "platforms": [ @@ -16178,21 +15496,6 @@ ] } ], - "OmniboxIpadPopout": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "EnablePopoutOmniboxIpad" - ] - } - ] - } - ], "OmniboxLogURLScoringSignals": [ { "platforms": [ @@ -16248,16 +15551,19 @@ ] } ], - "OmniboxOnClobberFocusTypeOnContent": [ + "OmniboxMobileParityUpdate": [ { "platforms": [ "android" ], "experiments": [ { - "name": "Enabled_V2", + "name": "Enabled", + "params": { + "enable_feed_for_google_only": "true" + }, "enable_features": [ - "OmniboxOnClobberFocusTypeOnContent" + "OmniboxMobileParityUpdate" ] } ] @@ -16306,7 +15612,7 @@ ] } ], - "OmniboxOnFocusZPS": [ + "OmniboxOnFocusZPSV1": [ { "platforms": [ "chromeos", @@ -16334,77 +15640,6 @@ ] } ], - "OmniboxPrerender": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledPrerenderDSE_20230315", - "params": { - "implementation_type": "use_prefetch" - }, - "enable_features": [ - "SupportSearchSuggestionForPrerender2" - ] - }, - { - "name": "Control_20230315", - "disable_features": [ - "SupportSearchSuggestionForPrerender2" - ] - }, - { - "name": "HoldbackPrerenderDSE_20230315", - "params": { - "implementation_type": "use_prefetch" - }, - "enable_features": [ - "Prerender2Holdback", - "SupportSearchSuggestionForPrerender2" - ] - }, - { - "name": "HoldbackDisabled_20230131", - "enable_features": [ - "Prerender2Holdback" - ], - "disable_features": [ - "OmniboxTriggerForNoStatePrefetch", - "SupportSearchSuggestionForPrerender2" - ] - }, - { - "name": "HoldbackEnabled_20230131", - "enable_features": [ - "OmniboxTriggerForPrerender2" - ], - "disable_features": [ - "OmniboxTriggerForNoStatePrefetch", - "Prerender2Holdback", - "SupportSearchSuggestionForPrerender2" - ] - } - ] - } - ], - "OmniboxRTLImprovements": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OmniboxPopupRowContentConfiguration", - "OmniboxSuggestionsRTLImprovements" - ] - } - ] - } - ], "OmniboxStarterPackIPH": [ { "platforms": [ @@ -16439,25 +15674,6 @@ ] } ], - "OneCopyLegacyMPVideoFrameUploadViaSI": [ - { - "platforms": [ - "mac", - "windows", - "chromeos", - "linux", - "fuchsia" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OneCopyLegacyMPVideoFrameUploadViaSI" - ] - } - ] - } - ], "OneGroupPerRenderer": [ { "platforms": [ @@ -16549,6 +15765,29 @@ ] } ], + "OptimizeHTMLElementUrls": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "cache_size": "100" + }, + "enable_features": [ + "OptimizeHTMLElementUrls" + ] + } + ] + } + ], "OrcaEnabled": [ { "platforms": [ @@ -16693,26 +15932,6 @@ ] } ], - "PMProcessPriorityPolicy": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MacAllowBackgroundingRenderProcesses", - "PMProcessPriorityPolicy", - "PriorityOverridePendingViews" - ] - } - ] - } - ], "PWAIconAndTitleInNativeNotificationsWin": [ { "platforms": [ @@ -16728,6 +15947,26 @@ ] } ], + "PWANavigationCapturingAndroidDesktopWindowing": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledDesktopWindowingNavigations", + "params": { + "auxiliary_navigation_stays_in_browser": "desktop_wm" + }, + "enable_features": [ + "AuxiliaryNavigationStaysInBrowser", + "ReparentAuxiliaryNavigationFromPWA", + "ReparentTopLevelNavigationFromPWA" + ] + } + ] + } + ], "PWANavigationCapturingV2ChromeOS": [ { "platforms": [ @@ -16784,6 +16023,30 @@ ] } ], + "PageActionsMigration": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "lens_overlay": "true", + "memory_saver": "true", + "offer_notification": "true", + "translate": "true" + }, + "enable_features": [ + "PageActionsMigration" + ] + } + ] + } + ], "PageAllocatorRetryOnCommitFailure": [ { "platforms": [ @@ -16856,23 +16119,6 @@ ] } ], - "PaintHoldingCrossOrigin": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview" - ], - "experiments": [ - { - "name": "Enabled_20211028", - "enable_features": [ - "PaintHoldingCrossOrigin" - ] - } - ] - } - ], "PaintHoldingOOPIF": [ { "platforms": [ @@ -17257,12 +16503,15 @@ { "name": "Enabled", "params": { - "PartitionAllocSchedulerLoopQuarantineBranchCapacity": "262144" + "PartitionAllocSchedulerLoopQuarantineBrowserUICapacity": "1048576", + "enabled-processes": "browser-only" }, "enable_features": [ "PartitionAllocSchedulerLoopQuarantine", + "PartitionAllocWithAdvancedChecks", "PartitionAllocZappingByFreeFlags" - ] + ], + "disable_benchmarking": "true" } ] } @@ -17388,24 +16637,6 @@ ] } ], - "PasswordManualFallbackAvailable": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PasswordManualFallbackAvailable" - ] - } - ] - } - ], "PasswordlessSetup": [ { "platforms": [ @@ -17458,6 +16689,34 @@ ] } ], + "PdfInfoBar": [ + { + "platforms": [ + "mac", + "windows" + ], + "experiments": [ + { + "name": "EnabledPdfLoad", + "params": { + "trigger": "pdf-load" + }, + "enable_features": [ + "PdfInfoBar" + ] + }, + { + "name": "EnabledStartup", + "params": { + "trigger": "startup" + }, + "enable_features": [ + "PdfInfoBar" + ] + } + ] + } + ], "PdfInkSignatures": [ { "platforms": [ @@ -17705,6 +16964,76 @@ ] } ], + "PerformanceControlsPPMSurvey": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled_Uniform_20250526", + "params": { + "en_site_id": "N5wFxEDQr0ugnJ3q1cK0SNopqcEc", + "hats_histogram_name": "Feedback.HappinessTrackingSurvey.PerformanceControlsPPMSurvey", + "hats_survey_ukm_id": "1027171324", + "ppm_survey_segment_name1": "ChromeOS", + "ppm_survey_uniform_sample": "true", + "probability": "1.0", + "survey": "performance-ppm" + }, + "enable_features": [ + "PerformanceControlsPPMSurvey" + ] + } + ] + }, + { + "platforms": [ + "linux" + ], + "experiments": [ + { + "name": "Enabled_Uniform_20250526", + "params": { + "en_site_id": "N5wFxEDQr0ugnJ3q1cK0SNopqcEc", + "hats_histogram_name": "Feedback.HappinessTrackingSurvey.PerformanceControlsPPMSurvey", + "hats_survey_ukm_id": "1027171324", + "ppm_survey_segment_name1": "Linux", + "ppm_survey_uniform_sample": "true", + "probability": "1.0", + "survey": "performance-ppm" + }, + "enable_features": [ + "PerformanceControlsPPMSurvey" + ] + } + ] + }, + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Enabled_Uniform_20250526", + "params": { + "en_site_id": "N5wFxEDQr0ugnJ3q1cK0SNopqcEc", + "hats_histogram_name": "Feedback.HappinessTrackingSurvey.PerformanceControlsPPMSurvey", + "hats_survey_ukm_id": "1027171324", + "ppm_survey_segment_max_memory_gb1": "8", + "ppm_survey_segment_name1": "Mac, up to 8 GB", + "ppm_survey_segment_name2": "Mac, over 8 GB", + "ppm_survey_uniform_sample": "true", + "probability": "0.252", + "survey": "performance-ppm" + }, + "enable_features": [ + "PerformanceControlsPPMSurvey" + ] + } + ] + } + ], "PerformanceInterventionAlgorithm": [ { "platforms": [ @@ -17715,7 +17044,7 @@ ], "experiments": [ { - "name": "EnabledLessAggressive_20250423", + "name": "EnabledLessAggressive_20250428", "params": { "availability": "any", "event_trigger": "name:performance_intervention_dialog_trigger;comparator:<3;window:1;storage:360", @@ -17734,7 +17063,7 @@ ] }, { - "name": "EnabledMediumAggressive_20250423", + "name": "EnabledMediumAggressive_20250428", "params": { "availability": "any", "event_trigger": "name:performance_intervention_dialog_trigger;comparator:<10;window:1;storage:360", @@ -17753,7 +17082,7 @@ ] }, { - "name": "EnabledMoreAggressive_20250423", + "name": "EnabledMoreAggressive_20250428", "params": { "availability": "any", "event_trigger": "name:performance_intervention_dialog_trigger;comparator:<24;window:1;storage:360", @@ -17849,6 +17178,24 @@ ] } ], + "PermissionsAIv3Geolocation": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PermissionsAIv3Geolocation" + ] + } + ] + } + ], "PickerUI": [ { "platforms": [ @@ -18247,44 +17594,6 @@ ] } ], - "PreOpenPreloadDatabase": [ - { - "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "fuchsia", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PreOpenPreloadDatabase" - ] - } - ] - } - ], - "PreReadDllBrowserProcess": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PrefetchVirtualMemoryPolicy" - ] - } - ] - } - ], "PreconnectCreateNewTab": [ { "platforms": [ @@ -18355,28 +17664,6 @@ ] } ], - "PrefetchDocumentManagerEarlyCookieCopySkipped": [ - { - "platforms": [ - "android", - "android_webview", - "android_weblayer", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PrefetchDocumentManagerEarlyCookieCopySkipped" - ] - } - ] - } - ], "PrefetchManagerUseNetworkContextPrefetch": [ { "platforms": [ @@ -18450,6 +17737,9 @@ "experiments": [ { "name": "Enabled", + "params": { + "kPrefetchSchedulerProgressSyncBestEffort": "true" + }, "enable_features": [ "PrefetchScheduler" ] @@ -18518,25 +17808,19 @@ ] } ], - "PreloadTopChromeWebUI": [ + "PreloadTopChromeWebUILessNavigations": [ { "platforms": [ + "chromeos", "linux", "mac", - "windows", - "chromeos" + "windows" ], "experiments": [ { - "name": "preload-on-warmup-delay", - "params": { - "delay-preload": "true", - "exclude-origins": "chrome://bookmarks-side-panel.top-chrome", - "preload-mode": "preload-on-warmup", - "smart-preload": "true" - }, + "name": "Enabled", "enable_features": [ - "PreloadTopChromeWebUI" + "PreloadTopChromeWebUILessNavigations" ] } ] @@ -18605,6 +17889,27 @@ ] } ], + "PreloadingNoSamePageFragmentAnchorTracking": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PreloadingNoSamePageFragmentAnchorTracking" + ] + } + ] + } + ], "Prerender2BookmarkBarTriggerV2": [ { "platforms": [ @@ -18733,24 +18038,6 @@ ] } ], - "PriceTrackingIconColors": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PriceTrackingIconColors" - ] - } - ] - } - ], "PriceTrackingPageActionIconLabelFeatureIPH": [ { "platforms": [ @@ -18840,21 +18127,6 @@ ] } ], - "PrivacyIndicators": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PrivacyIndicators" - ] - } - ] - } - ], "PrivacySandboxActivityTypeStorage": [ { "platforms": [ @@ -19072,24 +18344,6 @@ ] } ], - "PrivacySandboxNoticeActionDebouncingAndroid": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "debouncing-delay-ms": "200" - }, - "enable_features": [ - "PrivacySandboxNoticeActionDebouncingAndroid" - ] - } - ] - } - ], "PrivacySandboxNoticeQueue": [ { "platforms": [ @@ -19404,9 +18658,37 @@ ] } ], + "ProgrammaticScrollAnimationOverride": [ + { + "platforms": [ + "chromeos", + "mac", + "windows", + "linux" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "cubic_bezier_x1": "0.4", + "cubic_bezier_x2": "0.0", + "cubic_bezier_y1": "0.0", + "cubic_bezier_y2": "1.0", + "max_animation_duration": "1.5s" + }, + "enable_features": [ + "ProgrammaticScrollAnimationOverride" + ] + } + ] + } + ], "ProgressiveAccessibility": [ { "platforms": [ + "android", + "android_webview", + "chromeos", "linux", "mac", "windows" @@ -19421,7 +18703,7 @@ { "name": "EnabledWithHide", "params": { - "mode": "disable_on_hide" + "progressive_accessibility_mode": "disable_on_hide" }, "enable_features": [ "ProgressiveAccessibility" @@ -19752,25 +19034,6 @@ ] } ], - "ProtectedAudienceUseNonTransientNIKForSeller": [ - { - "platforms": [ - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "FledgeUseNonTransientNIKForSeller" - ] - } - ] - } - ], "ProtectedAudiencesEnableBandAKAnonEnforcement": [ { "platforms": [ @@ -20121,7 +19384,8 @@ { "name": "Enabled_Dogfood", "enable_features": [ - "ReadAloudAudioOverviews" + "ReadAloudAudioOverviews", + "ReadAloudAudioOverviewsFeedback" ] } ] @@ -20205,24 +19469,6 @@ ] } ], - "ReadAnythingLocalSidePanelRollout": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ReadAnythingLocalSidePanel" - ] - } - ] - } - ], "ReadAnythingPermanentAccessibility": [ { "platforms": [ @@ -20461,6 +19707,21 @@ ] } ], + "ReduceUserAgentDataLinuxPlatformVersion": [ + { + "platforms": [ + "linux" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ReduceUserAgentDataLinuxPlatformVersion" + ] + } + ] + } + ], "RefreshTokenV3Feature": [ { "platforms": [ @@ -20507,6 +19768,21 @@ ] } ], + "ReloadTabUiResourcesIfChanged": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ReloadTabUiResourcesIfChanged" + ] + } + ] + } + ], "RemotePageMetadataAndroid": [ { "platforms": [ @@ -20622,21 +19898,6 @@ ] } ], - "RemoveOldWebStateRestoration": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "RemoveOldWebStateRestoration" - ] - } - ] - } - ], "RemoveRendererProcessLimit": [ { "platforms": [ @@ -20811,6 +20072,24 @@ ] } ], + "RendererProcessLimitOnAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "count": "42" + }, + "enable_features": [ + "RendererProcessLimitOnAndroid" + ] + } + ] + } + ], "RendererSideContentDecoding": [ { "platforms": [ @@ -20831,22 +20110,60 @@ ] } ], - "ReportCertificateErrors": [ + "RenderingOptimizationsHoldback": [ { "platforms": [ "android", "chromeos", - "fuchsia", "linux", "mac", "windows" ], "experiments": [ { - "name": "ShowAndPossiblySend", + "name": "Enabled", + "enable_features": [ + "DOMInsertionFaster", + "FastClearNeedsRepaint", + "HarfBuzzBufferPool", + "IsolatedSVGDocumentOptimization", + "LineBreakEarlyReturn", + "PaintLayerUpdateOptimizations", + "ScrollableAreaOptimization" + ] + } + ] + } + ], + "ReportNotificationContentDetectionDataAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", "params": { - "sendingThreshold": "1.0" - } + "ReportNotificationContentDetectionDataRate": "100" + }, + "enable_features": [ + "ReportNotificationContentDetectionData" + ] + } + ] + } + ], + "ReportingEventsForAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnterpriseSecurityEventReportingOnAndroid" + ] } ] } @@ -20941,8 +20258,8 @@ { "name": "RestrictAbusePorts", "params": { - "monitor_ports": "30986", - "restrict_ports": "30987,30988,30989" + "monitor_ports": "30987,30988,30989", + "restrict_ports": "30985,30986,30987" }, "enable_features": [ "RestrictAbusePorts" @@ -21119,40 +20436,6 @@ ] } ], - "SafeBrowsingGooglePlayProtectPrompt": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "SafeBrowsingGooglePlayProtectPrompt", - "enable_features": [ - "SafeBrowsingGooglePlayProtectPrompt" - ] - } - ] - } - ], - "SafeBrowsingNestedArchives": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SafeBrowsingArchiveImprovements", - "SafeBrowsingStrictDownloadtimeout" - ] - } - ] - } - ], "SafeBrowsingRemoveCookiesInAuthRequests": [ { "platforms": [ @@ -21345,25 +20628,6 @@ ] } ], - "SafetyHubServicesOnStartUp": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SafetyHubServicesOnStartUp" - ] - } - ] - } - ], "SavedTabGroupUrlRestriction": [ { "platforms": [ @@ -22488,6 +21752,21 @@ ] } ], + "SchoolToolsSpotlightRobotRequester": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BocaSpotlightRobotRequester" + ] + } + ] + } + ], "ScreenCaptureKitMacScreen": [ { "platforms": [ @@ -22584,22 +21863,6 @@ ] } ], - "SeaPen": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "FeatureManagementSeaPen", - "SeaPen" - ] - } - ] - } - ], "SeaPenQueryRewrite": [ { "platforms": [ @@ -22686,6 +21949,32 @@ ] } ], + "SearchEnginePreconnect2": [ + { + "platforms": [ + "android", + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "EnabledWithbase_60_30_30_30__20250507", + "params": { + "IdleTimeoutInSeconds": "60", + "MaxPreconnectRetryInterval": "30", + "MaxShortSessionThreshold": "30", + "PingIntervalInSeconds": "30" + }, + "enable_features": [ + "SearchEnginePreconnect2" + ] + } + ] + } + ], "SearchEnginePreconnectInterval": [ { "platforms": [ @@ -22777,40 +22066,6 @@ ] } ], - "SearchReadyOmniboxAllowQueryEdit": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SearchReadyOmniboxAllowQueryEdit" - ] - } - ] - } - ], - "SearchWebInSidePanel": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SearchWebInSidePanel" - ] - } - ] - } - ], "SecurityPageHats": [ { "platforms": [ @@ -22970,21 +22225,6 @@ ] } ], - "SendTabToSelfV2": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SendTabToSelfV2" - ] - } - ] - } - ], "SensitiveContent": [ { "platforms": [ @@ -23039,33 +22279,6 @@ ] } ], - "SerializeAccessibilityPostLifecycle": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Baseline", - "enable_features": [ - "SerializeAccessibilityPostLifecycle" - ] - }, - { - "name": "HoldBack", - "disable_features": [ - "SerializeAccessibilityPostLifecycle" - ] - } - ] - } - ], "ServerBasedTranscriptionForScreencast": [ { "platforms": [ @@ -23106,6 +22319,42 @@ ] } ], + "ServiceWorkerBackgroundUpdateForRegisteredStorageKeys": [ + { + "platforms": [ + "android", + "chromeos", + "chromeos_lacros", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "ServiceWorkerBackgroundUpdateForRegisteredStorageKeys", + "enable_features": [ + "ServiceWorkerBackgroundUpdateForRegisteredStorageKeys" + ] + } + ] + } + ], + "ServiceWorkerBackgroundUpdateForRegisteredStorageKeysForWebView": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "ServiceWorkerBackgroundUpdateForRegisteredStorageKeysForWebView", + "enable_features": [ + "ServiceWorkerBackgroundUpdateForRegisteredStorageKeysFieldTrialControlled" + ] + } + ] + } + ], "ServiceWorkerStaticRouterRaceNetworkRequestPerformanceImprovement": [ { "platforms": [ @@ -23180,6 +22429,30 @@ ] } ], + "SharedDictionaryCache": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled2_20250520", + "params": { + "cache_size": "2" + }, + "enable_features": [ + "SharedDictionaryCache" + ] + } + ] + } + ], "SharedHighlightingAmp": [ { "platforms": [ @@ -23363,21 +22636,6 @@ ] } ], - "ShelfStackedHotseat": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ShelfStackedHotseat" - ] - } - ] - } - ], "ShopCardIOS": [ { "platforms": [ @@ -23390,7 +22648,8 @@ "ShopCardVariant": "arm_3" }, "enable_features": [ - "ShopCard" + "ShopCard", + "ShopCardImpressionLimits" ] } ] @@ -23411,6 +22670,21 @@ ] } ], + "ShowNewTabAnimationsAndroid": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ShowNewTabAnimations" + ] + } + ] + } + ], "ShowSuggestionsOnAutofocus": [ { "platforms": [ @@ -23430,35 +22704,6 @@ ] } ], - "ShowWarningsForSuspiciousNotifications": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "EnabledWithDefaultButtonPlacement", - "params": { - "ShowWarningsForSuspiciousNotificationsScoreThreshold": "90", - "ShowWarningsForSuspiciousNotificationsShouldSwapButtons": "false" - }, - "enable_features": [ - "ShowWarningsForSuspiciousNotifications" - ] - }, - { - "name": "EnabledWithButtonSwap", - "params": { - "ShowWarningsForSuspiciousNotificationsScoreThreshold": "90", - "ShowWarningsForSuspiciousNotificationsShouldSwapButtons": "true" - }, - "enable_features": [ - "ShowWarningsForSuspiciousNotifications" - ] - } - ] - } - ], "SidePanelCompanionDesktopM116Plus": [ { "platforms": [ @@ -23488,27 +22733,6 @@ ] } ], - "SidePanelJourneys": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "SidePanelJourneysOpensFromOmnibox": "true" - }, - "enable_features": [ - "SidePanelJourneys" - ] - } - ] - } - ], "SidePanelPinningWithResponsiveToolbar": [ { "platforms": [ @@ -23602,7 +22826,7 @@ ] } ], - "SingleCACertVerificationPhase1": [ + "SingleCaCertVerificationPhase1": [ { "platforms": [ "chromeos" @@ -23611,13 +22835,13 @@ { "name": "Enabled", "enable_features": [ - "SingleCACertVerificationPhase1" + "SingleCaCertVerificationPhase1" ] } ] } ], - "SingleCACertVerificationPhase2": [ + "SingleCaCertVerificationPhase2": [ { "platforms": [ "chromeos" @@ -23626,7 +22850,7 @@ { "name": "Enabled", "enable_features": [ - "SingleCACertVerificationPhase2" + "SingleCaCertVerificationPhase2" ] } ] @@ -23721,21 +22945,6 @@ ] } ], - "SkipGrantAccessToDataPathIfAlreadySet": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SkipGrantAccessToDataPathIfAlreadySet" - ] - } - ] - } - ], "SkipIsolatedSplitPreload": [ { "platforms": [ @@ -23831,36 +23040,6 @@ ] } ], - "SnackbarUseLegacyDismissalBehavior": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SnackbarUseLegacyDismissalBehavior" - ] - } - ] - } - ], - "SnapGroup": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SnapGroup" - ] - } - ] - } - ], "SnapshotInSwift": [ { "platforms": [ @@ -24124,26 +23303,6 @@ ] } ], - "StopExportDFCMetricsExperiment": [ - { - "platforms": [ - "android", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "StopExportDFCMetrics" - ] - } - ] - } - ], "StorageBuckets": [ { "platforms": [ @@ -24277,23 +23436,6 @@ ] } ], - "SyncEnableBookmarksInTransportMode": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SyncEnableBookmarksInTransportMode" - ] - } - ] - } - ], "SyncIncreaseNudgeDelayForSingleClient": [ { "platforms": [ @@ -24339,6 +23481,22 @@ ] } ], + "SysPkJPandVKMv3": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ImeManifestV3", + "SystemJapanesePhysicalTyping" + ] + } + ] + } + ], "SysUiHoldbackStudy": [ { "platforms": [ @@ -24411,21 +23569,6 @@ ] } ], - "SystemInfoAnswerCardsInLauncher": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "LauncherSystemInfoAnswerCards" - ] - } - ] - } - ], "TabAudioMuting": [ { "platforms": [ @@ -24452,26 +23595,25 @@ ] } ], - "TabGroupSuggestionMetricsOnly": [ + "TabCaptureInfobarLinks": [ { "platforms": [ - "android" + "chromeos", + "linux", + "mac", + "windows" ], "experiments": [ { - "name": "Enabled_20250423", - "params": { - "consecutive_computation_delay_sec": "5", - "create_suggestions_promotion_ui": "false" - }, + "name": "Enabled", "enable_features": [ - "GroupSuggestionService" + "TabCaptureInfobarLinks" ] } ] } ], - "TabGroupSyncAutoOpenOffByDefault": [ + "TabGroupParityAndroidV2": [ { "platforms": [ "android" @@ -24479,11 +23621,50 @@ "experiments": [ { "name": "Enabled", + "enable_features": [ + "TabGroupEntryPointsAndroid", + "TabGroupParityBottomSheetAndroid" + ] + } + ] + } + ], + "TabGroupShortcuts": [ + { + "platforms": [ + "chromeos", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "TabGroupShortcuts" + ] + } + ] + } + ], + "TabGroupSuggestionMetricsOnly": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_20250430", "params": { - "auto_open_synced_tab_groups": "false" + "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" }, "enable_features": [ - "TabGroupSyncAndroid" + "GroupSuggestionService" ] } ] @@ -24526,26 +23707,6 @@ ] } ], - "TabGroupsSaveUIUpdateAndSaveV2": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabGroupsSaveUIUpdate", - "TabGroupsSaveV2" - ] - } - ] - } - ], "TabHoverCardImagesMacArm": [ { "platforms": [ @@ -24586,21 +23747,6 @@ ] } ], - "TabStripIncognitoMigration": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TabStripIncognitoMigration" - ] - } - ] - } - ], "TabStripLayoutOptimization": [ { "platforms": [ @@ -24629,9 +23775,10 @@ { "name": "Enabled", "params": { - "has_background": "false" + "tab_search_toolbar_button": "true" }, "enable_features": [ + "IPH_TabSearchToolbarButton", "TabstripComboButton" ] } @@ -24709,26 +23856,19 @@ ] } ], - "TemplateUrlReconciliation": [ + "TcpPortRandomizationWin": [ { "platforms": [ - "android", - "android_weblayer", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", "windows" ], "experiments": [ { - "name": "Enabled", + "name": "Dogfood", "params": { - "reconcile_with_all_known_engines": "true" + "TcpPortRandomizationWinVersionMinimum": "16" }, "enable_features": [ - "TemplateUrlReconciliation" + "TcpPortRandomizationWin" ] } ] @@ -24766,25 +23906,6 @@ ] } ], - "TheoraVideoCodec": [ - { - "platforms": [ - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "TheoraVideoCodec" - ] - } - ] - } - ], "ThreadCacheMinCachedMemoryForPurging": [ { "platforms": [ @@ -24831,30 +23952,6 @@ ] } ], - "ThreadedScrollPreventRenderingStarvation": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "fuchsia", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled_100ms", - "params": { - "threshold_ms": "100" - }, - "enable_features": [ - "ThreadedScrollPreventRenderingStarvation" - ] - } - ] - } - ], "ThrottleMainFrameTo60HzV2": [ { "platforms": [ @@ -24895,7 +23992,8 @@ "TimedHTMLParserBudgetForAndroid": [ { "platforms": [ - "android" + "android", + "android_webview" ], "experiments": [ { @@ -24912,24 +24010,6 @@ ] } ], - "ToastRefinementsStudy": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "EnabledWithRefinements", - "enable_features": [ - "ToastRefinements" - ] - } - ] - } - ], "ToolbarPinning": [ { "platforms": [ @@ -24949,6 +24029,21 @@ ] } ], + "TopControlsRefactor": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "TopControlsRefactor" + ] + } + ] + } + ], "TouchpadFastClickStudy": [ { "platforms": [ @@ -25014,21 +24109,6 @@ ] } ], - "TrackpadGestureSupport": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_20230829", - "enable_features": [ - "ConvertTrackpadEventsToMouse" - ] - } - ] - } - ], "TranslateBubbleOpenSettings": [ { "platforms": [ @@ -25080,26 +24160,6 @@ ] } ], - "TruncateLanguageDetectionSample": [ - { - "platforms": [ - "android", - "chromeos", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TruncateLanguageDetectionSample" - ] - } - ] - } - ], "TrustSafetySentimentSurvey": [ { "platforms": [ @@ -25346,6 +24406,35 @@ ] } ], + "UnimportantFramePolicy": [ + { + "platforms": [ + "android_webview", + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "UnimportantFrame_LowerPriority", + "enable_features": [ + "UnimportantFramesPriority", + "UserVisibleProcessPriority" + ] + }, + { + "name": "UnimportantFrame_LowerPriorityAndFrameRate", + "enable_features": [ + "ThrottleUnimportantFrameRate", + "UnimportantFramesPriority", + "UserVisibleProcessPriority" + ] + } + ] + } + ], "UnlockDatabaseOnClose": [ { "platforms": [ @@ -25369,7 +24458,7 @@ ] } ], - "UnoDesktopM0FollowUpPart2": [ + "UnoDesktopBookmarksAndReadingList": [ { "platforms": [ "linux", @@ -25380,9 +24469,28 @@ { "name": "Enabled", "enable_features": [ - "EnableImprovedGuestProfileMenu", - "EnablePendingModePasswordsPromo", - "EnableSnackbarInSettings" + "ReadingListEnableSyncTransportModeUponSignIn", + "SyncEnableBookmarksInTransportMode" + ] + } + ] + } + ], + "UnoDesktopHistorySyncPillExperiment": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "EnabledWithBrowseAcrossDevices", + "params": { + "history-sync-optin-expansion-pill-option": "browse-across-devices" + }, + "enable_features": [ + "EnableHistorySyncOptinExpansionPill" ] } ] @@ -25405,25 +24513,6 @@ ] } ], - "UnoPwa": [ - { - "platforms": [ - "chromeos", - "chromeos_lacros", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebAppDontAddExistingAppsToSync" - ] - } - ] - } - ], "UploadOfficeToCloud": [ { "platforms": [ @@ -25476,29 +24565,6 @@ ] } ], - "UseClientGmbInterface": [ - { - "platforms": [ - "android", - "android_webview", - "android_weblayer", - "chromeos", - "fuchsia", - "ios", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UseClientGmbInterface" - ] - } - ] - } - ], "UseCompositorClockVSyncInterval": [ { "platforms": [ @@ -25514,30 +24580,12 @@ ] } ], - "UseContextSnapshot": [ - { - "platforms": [ - "android", - "android_webview", - "android_weblayer" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UseContextSnapshot" - ] - } - ] - } - ], "UseDMSAAForTiles": [ { "platforms": [ "android", "android_webview", "android_weblayer", - "chromeos", "fuchsia", "ios", "linux", @@ -25568,16 +24616,26 @@ ] } ], - "UseGMSCoreForBrandingInfo": [ + "UseFreedesktopSecretKeyProvider": [ { "platforms": [ - "android" + "linux" ], "experiments": [ { - "name": "Enabled", + "name": "EnableDecryption", "enable_features": [ - "UseGMSCoreForBrandingInfo" + "UseFreedesktopSecretKeyProvider" + ], + "disable_features": [ + "UseFreedesktopSecretKeyProviderForEncryption" + ] + }, + { + "name": "EnableDecryptionAndEncryption", + "enable_features": [ + "UseFreedesktopSecretKeyProvider", + "UseFreedesktopSecretKeyProviderForEncryption" ] } ] @@ -25598,21 +24656,6 @@ ] } ], - "UseLowQualityInterpolation": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Disabled", - "disable_features": [ - "UseLowQualityInterpolation" - ] - } - ] - } - ], "UseSCContentSharingPicker": [ { "platforms": [ @@ -25628,6 +24671,25 @@ ] } ], + "UseSharedRebindServiceConnection": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledDeferredBindings10", + "params": { + "max-deferred-bindings": "10" + }, + "enable_features": [ + "GroupRebindingForGroupImportance", + "UseSharedRebindServiceConnection" + ] + } + ] + } + ], "UseSmartRefForGPUFenceHandle": [ { "platforms": [ @@ -25668,21 +24730,6 @@ ] } ], - "UseThreadPriorityLowest": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UseThreadPriorityLowest" - ] - } - ] - } - ], "UserBypassUI": [ { "platforms": [ @@ -25979,47 +25026,6 @@ ] } ], - "V8ParallelReclaimUnmodifiedWrappers": [ - { - "platforms": [ - "android", - "android_webview", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "V8Flag_parallel_reclaim_unmodified_wrappers" - ] - } - ] - } - ], - "V8SafepointBumpQoSClass": [ - { - "platforms": [ - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "V8Flag_safepoint_bump_qos_class" - ] - }, - { - "name": "Control", - "disable_features": [ - "V8Flag_safepoint_bump_qos_class" - ] - } - ] - } - ], "V8SideStepTransitions": [ { "platforms": [ @@ -26193,7 +25199,7 @@ { "name": "Enabled_for_all_frames", "params": { - "Target": "AllFrames" + "Target": "Interaction" }, "enable_features": [ "VSyncAlignedPresent" @@ -26223,21 +25229,6 @@ ] } ], - "VaapiVp8TemporalLayerEncoding": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "VaapiVp8TemporalLayerEncoding" - ] - } - ] - } - ], "VerifyDidCommitParams": [ { "platforms": [ @@ -26368,41 +25359,6 @@ ] } ], - "ViewTransitionOnNavigation": [ - { - "platforms": [ - "android_webview", - "android", - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "ViewTransitionOnNavigation" - ] - } - ] - } - ], - "VirtualKeyboardNewHeader": [ - { - "platforms": [ - "chromeos" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "VirtualKeyboardNewHeader" - ] - } - ] - } - ], "VisibilityAwareResourceScheduler": [ { "platforms": [ @@ -26458,6 +25414,29 @@ ] } ], + "WaitForLateScrollEvents": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "DeadlineRatio0_5", + "params": { + "deadline_ratio": "0.5" + }, + "enable_features": [ + "WaitForLateScrollEvents" + ] + } + ] + } + ], "WebApkBackupAndRestore": [ { "platforms": [ @@ -26501,21 +25480,6 @@ ] } ], - "WebApkUniversalInstallDefaultUrl": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "UniversalInstallDefaultUrl" - ] - } - ] - } - ], "WebAudioBypassOutputBuffering": [ { "platforms": [ @@ -26535,24 +25499,6 @@ ] } ], - "WebAuthnUsePasskeyFromAnotherDeviceInContextMenu": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebAuthnUsePasskeyFromAnotherDeviceInContextMenu" - ] - } - ] - } - ], "WebContentsDiscard": [ { "platforms": [ @@ -26571,6 +25517,21 @@ ] } ], + "WebFeedDeprecation": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebFeedKillSwitch" + ] + } + ] + } + ], "WebGPU": [ { "platforms": [ @@ -26613,21 +25574,6 @@ ] } ], - "WebGPUUseDXC2": [ - { - "platforms": [ - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebGPUUseDXC2" - ] - } - ] - } - ], "WebGPUUseTintIR": [ { "platforms": [ @@ -26928,6 +25874,19 @@ ] } ], + "WebRTC-NoSdpMangleUfragRestrictedAddresses": [ + { + "platforms": [ + "android", + "android_webview" + ], + "experiments": [ + { + "name": "127.0.0.1:12345|127.0.0.1:23456|127.0.0.1:34567|127.0.0.1:45678|127.0.0.1:56789" + } + ] + } + ], "WebRTC-SendBufferSizeBytes": [ { "platforms": [ @@ -27291,7 +26250,6 @@ "session_rate": "any" }, "enable_features": [ - "IPH_WebUITabStrip", "WebUITabStrip" ] } @@ -27320,6 +26278,51 @@ ] } ], + "WebViewCacheSizeLimitDerivedFromAppCacheQuota": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "EnabledWithMultiplier5Percent", + "params": { + "WebViewCacheSizeLimitMultiplier": "0.05" + }, + "enable_features": [ + "WebViewCacheSizeLimitDerivedFromAppCacheQuota" + ] + }, + { + "name": "EnabledWithMultiplier10Percent", + "params": { + "WebViewCacheSizeLimitMultiplier": "0.1" + }, + "enable_features": [ + "WebViewCacheSizeLimitDerivedFromAppCacheQuota" + ] + }, + { + "name": "EnabledWithMultiplier25Percent", + "params": { + "WebViewCacheSizeLimitMultiplier": "0.25" + }, + "enable_features": [ + "WebViewCacheSizeLimitDerivedFromAppCacheQuota" + ] + }, + { + "name": "EnabledWithMultiplier50Percent", + "params": { + "WebViewCacheSizeLimitMultiplier": "0.5" + }, + "enable_features": [ + "WebViewCacheSizeLimitDerivedFromAppCacheQuota" + ] + } + ] + } + ], "WebViewDisableCHIPS": [ { "platforms": [ @@ -27335,6 +26338,22 @@ ] } ], + "WebViewFieldSystemTracing": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnablePerfettoSystemBackgroundTracing", + "EnablePerfettoSystemTracing" + ] + } + ] + } + ], "WebViewFileSystemAccessDirectoryIterationBlocklistCheckReenable": [ { "platforms": [ @@ -27380,23 +26399,6 @@ ] } ], - "WebViewPaymentRequest": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "AndroidPaymentIntentsOmitDeprecatedParameters", - "UpdatePaymentDetailsIntentFilterInPaymentApp", - "WebPayments" - ] - } - ] - } - ], "WebViewPrefetchNativeLibrary": [ { "platforms": [ @@ -27415,6 +26417,66 @@ ] } ], + "WebViewQuicConnectionTimeout": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled_100s", + "params": { + "WebViewQuicConnectionTimeoutSeconds": "100" + }, + "enable_features": [ + "WebViewQuicConnectionTimeout" + ] + }, + { + "name": "Enabled_200s", + "params": { + "WebViewQuicConnectionTimeoutSeconds": "200" + }, + "enable_features": [ + "WebViewQuicConnectionTimeout" + ] + }, + { + "name": "Enabled_300s", + "params": { + "WebViewQuicConnectionTimeoutSeconds": "300" + }, + "enable_features": [ + "WebViewQuicConnectionTimeout" + ] + }, + { + "name": "Enabled_400s", + "params": { + "WebViewQuicConnectionTimeoutSeconds": "400" + }, + "enable_features": [ + "WebViewQuicConnectionTimeout" + ] + } + ] + } + ], + "WebViewRecordAppCacheHistograms": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebViewRecordAppCacheHistograms" + ] + } + ] + } + ], "WebViewRecordAppDataDirectorySize": [ { "platforms": [ @@ -27501,8 +26563,7 @@ { "name": "Enabled", "enable_features": [ - "WebViewNewInvalidateHeuristic", - "WebViewSurfaceControl" + "WebViewNewInvalidateHeuristic" ] } ] @@ -27586,7 +26647,6 @@ { "name": "Enabled_20240424", "enable_features": [ - "ConvertTrackpadEventsToMouse", "MouseAndTrackpadDropdownMenu" ] } @@ -27608,6 +26668,21 @@ ] } ], + "WebViewUseStartupTasksLogic": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebViewUseStartupTasksLogic" + ] + } + ] + } + ], "WebViewXRequestedWithHeaderControl": [ { "platforms": [ @@ -27623,21 +26698,6 @@ ] } ], - "WebViewZoomKeyboardShortcuts": [ - { - "platforms": [ - "android_webview" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebViewZoomKeyboardShortcuts" - ] - } - ] - } - ], "WebXrEnableCardboard": [ { "platforms": [ @@ -27725,6 +26785,21 @@ ] } ], + "WidgetsForMultiprofileExperiment": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WidgetsForMultiprofile" + ] + } + ] + } + ], "WinPlatformLocationProvider": [ { "platforms": [ 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 44402b9f..c7bb01b9 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 @@ -3226,7 +3226,7 @@ enum WebFeature { kTapDelayEnabled = 3965, kV8URLPattern_CompareComponent_Method = 3966, kEarlyHintsPreload = 3967, - kClientHintsUAReduced = 3968, //Removed in M116. + kOBSOLETE_ClientHintsUAReduced = 3968, //Removed in M116. kSpeculationRulesPrerender = 3969, kOBSOLETE_ExecCommandWithTrustedTypes = 3970, kOBSOLETE_CSSSelectorPseudoHasInSnapshotProfile = 3971, @@ -3410,7 +3410,7 @@ enum WebFeature { kFrameNameContainsBrace = 4146, kFrameNameContainsNewline = 4147, kAbortSignalThrowIfAborted = 4148, - kClientHintsUAFull = 4149, // Removed in M116. + kOBSOLETE_ClientHintsUAFull = 4149, // Removed in M116. kPrivateNetworkAccessWithinWorker = 4150, kClientHintsUAWoW64 = 4151, kFetchSetCookieInRequestGuardedHeaders = 4152, @@ -4542,6 +4542,7 @@ enum WebFeature { kCanvasTextDirectionSet = 5238, kCanvasTextDirectionSetInherit = 5239, kTopicsAPIImg = 5240, + // The items above roughly this point are available in the M133 branch. kMediaSessionEnterPictureInPicture = 5241, kOBSOLETE_V8AILanguageDetector_Detect_Method = 5242, kCharsetAutoDetection = 5243, @@ -4603,6 +4604,7 @@ enum WebFeature { kHTMLImageElementNaturalSizeDiffersForSvgImage = 5299, kWindowProxyIndexedGetter = 5300, kWindowProxyNamedGetter = 5301, + // The items above roughly this point are available in the M134 branch. kOBSOLETE_V8AILanguageModelFactory_Availability_Method = 5302, kOBSOLETE_V8AILanguageModelFactory_Params_Method = 5303, kOBSOLETE_V8AISummarizerFactory_Availability_Method = 5304, @@ -4637,6 +4639,7 @@ enum WebFeature { kButtonTypeAttrInvalidWithCommandOrCommandfor = 5333, kCSSVarFallbackCycle = 5334, kCSSAttrFallbackCycle = 5335, + // The items above roughly this point are available in the M135 branch. kCSSRainbowGradientPattern = 5336, kWebAppManifestStartUrl = 5337, kWebAppManifestDisplay = 5338, @@ -4765,6 +4768,7 @@ enum WebFeature { kLanguageDetector_ExpectedInputLanguages = 5461, kServiceWorkerPushEventListener = 5462, kServiceWorkerPushSubscriptionChangeEventListener = 5463, + // The items above roughly this point are available in the M136 branch. kMediaPlaybackWhileNotVisiblePermissionPolicy = 5464, kFirstLinePseudoElement = 5465, kFirstLetterPseudoElement = 5466, @@ -4853,6 +4857,48 @@ enum WebFeature { kSelectMultipleShowPopup = 5549, kSharedWorkerExtendedLifetimeFeatureEnabled = 5550, kSharedWorkerExtendedLifetimeIsTrue = 5551, + // The items above roughly this point are available in the M137 branch. + kEditContextTextFormatUpdateAddListener = 5552, + kEditContextTextFormatUpdateFireEvent = 5553, + kEditContextTextFormatUpdateTextFormatThicknessOrStyleNotNone = 5554, + kC2PAManifest = 5555, + kLanguageModel_Append = 5556, + kIntegrityPolicyInServiceWorkerResponse = 5557, + kEditContextTextFormatUnderlineStyle = 5558, + kEditContextTextFormatUnderlineThickness = 5559, + kProofreader_IncludeCorrectionTypes = 5560, + kProofreader_IncludeCorrectionExplanations = 5561, + kProofreader_ExpectedInputLanguages = 5562, + kProofreader_CorrectionExplanationLanguage = 5563, + kProofreader_Destroy = 5564, + kProofreader_Proofread = 5565, + kProofreader_Availability = 5566, + kProofreader_Create = 5567, + kDataUrlDedicatedWorker = 5568, + kDataUrlSharedWorker = 5569, + kV8WebGLRenderingContextWebGPU_GetExtension_Method = 5570, + kV8WebGLRenderingContextWebGPU_GetSupportedExtensions_Method = 5571, + kV8WebGL2RenderingContextWebGPU_GetExtension_Method = 5572, + kV8WebGL2RenderingContextWebGPU_GetSupportedExtensions_Method = 5573, + kCredentialsGetImmediateMediationPasswordSuccess = 5574, + kCredentialsGetImmediateMediationPublicKeySuccess = 5575, + kCredentialsGetImmediateMediationFailure = 5576, + kClearSiteData = 5577, + kScrollIntoViewContainerNearest = 5578, + kPopoverShown = 5579, + kInputParsedParentOptionOrOptgroup = 5580, + kNavigatorUAData_toJSON = 5581, + kEditContextUpdateTextRangePrecedesOrOverlapsSelection = 5582, + kEditContextUpdateTextRangePrecedesCompositionRange = 5583, + kEditContextUpdateTextRangeOverlapsCompositionRange = 5584, + kEditContextUpdateSelectionDuringActiveComposition = 5585, + kClipboardChangeEventAddListener = 5586, + kClipboardChangeEventFired = 5587, + kClipboardChangeEventFiredAfterFocusGain = 5588, + kClipboardChangeEventTypesAttribute = 5589, + kSchedulerYieldNonTrivialInherit = 5590, + kSchedulerYieldNonTrivialInheritCrossFrameIgnored = 5591, + kLocalNetworkAccessPrivateAliasUse = 5592, // 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 ffd46eb5..3d0dcede 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 @@ -141,7 +141,6 @@ struct WebPreferences { // 'Save-Data: on'. bool data_saver_enabled; bool local_storage_enabled; - bool databases_enabled; bool tabs_to_links; bool disable_ipc_flooding_protection; bool hyperlink_auditing_enabled; @@ -195,6 +194,7 @@ struct WebPreferences { bool sync_xhr_in_documents_enabled; bool target_blank_implies_no_opener_enabled_will_be_removed; bool allow_non_empty_navigator_plugins; + bool ignore_permission_for_device_changed_event; int32 number_of_cpu_cores; EditingBehavior editing_behavior; bool supports_multiple_windows; @@ -480,6 +480,11 @@ struct WebPreferences { // default value depends on the platform. bool touch_drag_drop_enabled; + // Whether the end of a drag fires a contextmenu event and possibly shows a + // context-menu (depends on how the event is handled). Follows + // `touch_drag_drop_enabled` in Windows. + bool touch_dragend_context_menu = false; + // Controls whether WebXR's immersive-ar is allowed. bool webxr_immersive_ar_allowed; diff --git a/tools/under-control/src/third_party/blink/renderer/core/css/css_view_transition_rule.idl b/tools/under-control/src/third_party/blink/renderer/core/css/css_view_transition_rule.idl index d04a5fa0..08704cf5 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/css/css_view_transition_rule.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/css/css_view_transition_rule.idl @@ -3,8 +3,7 @@ // found in the LICENSE file. [ - Exposed=Window, - RuntimeEnabled=ViewTransitionOnNavigation + Exposed=Window ] interface CSSViewTransitionRule : CSSRule { [SetterCallWith=ExecutionContext] readonly attribute CSSOMString navigation; [SameObject, SaveSameObject] readonly attribute FrozenArray types; diff --git a/tools/under-control/src/third_party/blink/renderer/core/css/parser/media_query_parser.cc b/tools/under-control/src/third_party/blink/renderer/core/css/parser/media_query_parser.cc index bc49c4ba..252a71fc 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/css/parser/media_query_parser.cc +++ b/tools/under-control/src/third_party/blink/renderer/core/css/parser/media_query_parser.cc @@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/css/parser/media_query_parser.h" +#include "third_party/blink/renderer/core/css/css_unparsed_declaration_value.h" #include "third_party/blink/renderer/core/css/media_feature_names.h" #include "third_party/blink/renderer/core/css/parser/css_parser_context.h" #include "third_party/blink/renderer/core/css/parser/css_tokenizer.h" @@ -34,6 +35,8 @@ bool MediaQueryParser::MediaQueryFeatureSet::IsAllowed( feature == media_feature_names::kStuckMediaFeature || feature == media_feature_names::kSnappedMediaFeature || feature == media_feature_names::kScrollableMediaFeature || + (feature == media_feature_names::kScrollDirectionMediaFeature && + RuntimeEnabledFeatures::CSSScrollDirectionContainerQueriesEnabled()) || CSSVariableParser::IsValidVariableName(feature)) { return false; } @@ -203,6 +206,40 @@ bool IsGtGe(MediaQueryOperator op) { return op == MediaQueryOperator::kGt || op == MediaQueryOperator::kGe; } +// Consume a MediaQueryExpValue without parsing against the feature grammar. +// Only used for container style queries for range syntax. +std::optional ConsumeUnparsed( + CSSParserTokenStream& stream, + const CSSParserContext& context) { + wtf_size_t start = stream.Offset(); + // Skip until the first comparison delimiter. + while (!stream.AtEnd()) { + stream.SkipUntilPeekedTypeIs(); + if (stream.AtEnd()) { + break; + } + if (IsComparisonDelimiter(stream.Peek().Delimiter())) { + break; + } + if (!stream.AtEnd()) { + stream.Consume(); // kDelimiterToken + } + } + wtf_size_t end = stream.Offset(); + String value_string(stream.StringRangeAt(start, end - start).ToString()); + if (value_string.empty()) { + return std::nullopt; + } + + CSSVariableData* data = + CSSVariableData::Create(value_string, /* is_animation_tainted= */ false, + /* is_attr_tainted= */ false, + /*needs_variable_resolution=*/false); + const CSSValue* value = + MakeGarbageCollected(data, &context); + return MediaQueryExpValue(*value); +} + } // namespace MediaQuery::RestrictorType MediaQueryParser::ConsumeRestrictor( @@ -286,6 +323,62 @@ AtomicString MediaQueryParser::ConsumeUnprefixedName( return name; } +// = +// | +// | +// +// Where is a that does not allow +// any of the delimiters accepted by or . +const MediaQueryExpNode* MediaQueryParser::ConsumeStyleFeatureRange( + CSSParserTokenStream& stream) { + CSSParserTokenStream::State start = stream.Save(); + std::optional value1 = + ConsumeUnparsed(stream, fake_context_); + if (!value1.has_value() || stream.AtEnd()) { + stream.Restore(start); + return nullptr; + } + + MediaQueryOperator op1 = ConsumeComparison(stream); + if (op1 == MediaQueryOperator::kNone) { + stream.Restore(start); + return nullptr; + } + + std::optional value2 = + ConsumeUnparsed(stream, fake_context_); + if (!value2.has_value()) { + stream.Restore(start); + return nullptr; + } + + if (stream.AtEnd()) { + MediaQueryExpComparison left(*value1, op1); + MediaQueryExpComparison right; + return MakeGarbageCollected(MediaQueryExp::Create( + value2.value(), MediaQueryExpBounds(left, right))); + } + + MediaQueryOperator op2 = ConsumeComparison(stream); + if (op2 == MediaQueryOperator::kNone || + std::abs(static_cast(op2) - static_cast(op1)) > 1) { + stream.Restore(start); + return nullptr; + } + + std::optional value3 = + ConsumeUnparsed(stream, fake_context_); + if (!value3.has_value() || !stream.AtEnd()) { + stream.Restore(start); + return nullptr; + } + + MediaQueryExpComparison left(*value1, op1); + MediaQueryExpComparison right(*value3, op2); + return MakeGarbageCollected( + MediaQueryExp::Create(value2.value(), MediaQueryExpBounds(left, right))); +} + const MediaQueryExpNode* MediaQueryParser::ConsumeFeature( CSSParserTokenStream& stream, const FeatureSet& feature_set) { @@ -322,6 +415,13 @@ const MediaQueryExpNode* MediaQueryParser::ConsumeFeature( stream.Restore(start); } + if (feature_set.SupportsStyleRange() && + RuntimeEnabledFeatures::CSSContainerStyleQueriesRangeEnabled()) { + // A feature set must either support regular ranges *or* style ranges. + CHECK(!feature_set.SupportsRange()); + return ConsumeStyleFeatureRange(stream); + } + if (!feature_set.SupportsRange()) { return nullptr; } diff --git a/tools/under-control/src/third_party/blink/renderer/core/dom/quota_exceeded_error.idl b/tools/under-control/src/third_party/blink/renderer/core/dom/quota_exceeded_error.idl new file mode 100755 index 00000000..96bfb5e4 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/dom/quota_exceeded_error.idl @@ -0,0 +1,18 @@ +// 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. + +dictionary QuotaExceededErrorOptions { + double quota; + double requested; +}; + +[ + Exposed=*, + Serializable, + RuntimeEnabled=QuotaExceededErrorUpdate +] interface QuotaExceededError : DOMException { + constructor(optional DOMString message = "", optional QuotaExceededErrorOptions options = {}); + readonly attribute double? quota; + readonly attribute double? requested; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl b/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl index ab6f5665..586ff58b 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/editing/ime/text_format.idl @@ -21,6 +21,6 @@ enum UnderlineThickness { "none", "thin", "thick" }; // https://crbug.com/354497121 These should be UnderlineStyle and // UnderlineThickness enumerations but the values returned by the // implementation do not match what the IDL defines. - readonly attribute DOMString underlineStyle; - readonly attribute DOMString underlineThickness; + [MeasureAs=EditContextTextFormatUnderlineStyle] readonly attribute DOMString underlineStyle; + [MeasureAs=EditContextTextFormatUnderlineThickness] readonly attribute DOMString underlineThickness; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 b/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 index a2187f49..43d78551 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 +++ b/tools/under-control/src/third_party/blink/renderer/core/events/event_type_names.json5 @@ -74,6 +74,7 @@ "chargingtimechange", "checking", "click", + "clipboardchange", "close", "closing", "command", diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/promise_rejection_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/promise_rejection_event.idl index 2885d196..693b2e78 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/promise_rejection_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/promise_rejection_event.idl @@ -8,6 +8,6 @@ Exposed=(Window,Worker,ShadowRealm) // TODO(crbug.com/41480387): This should be Exposed=* ] interface PromiseRejectionEvent : Event { [CallWith=ScriptState] constructor(DOMString type, PromiseRejectionEventInit eventInitDict); - [CallWith=ScriptState] readonly attribute Promise promise; + [CallWith=ScriptState] readonly attribute object promise; [CallWith=ScriptState] readonly attribute any reason; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/events/toggle_event.idl b/tools/under-control/src/third_party/blink/renderer/core/events/toggle_event.idl index af6e9770..92086f18 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/events/toggle_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/events/toggle_event.idl @@ -8,4 +8,5 @@ constructor(DOMString type, optional ToggleEventInit eventInitDict = {}); readonly attribute DOMString oldState; readonly attribute DOMString newState; + [RuntimeEnabled=ToggleEventSource] readonly attribute Element source; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/exported/web_view_impl.cc b/tools/under-control/src/third_party/blink/renderer/core/exported/web_view_impl.cc index 1af1fa03..97141017 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/tools/under-control/src/third_party/blink/renderer/core/exported/web_view_impl.cc @@ -56,6 +56,7 @@ #include "third_party/blink/public/common/page/page_zoom.h" #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h" #include "third_party/blink/public/common/switches.h" +#include "third_party/blink/public/common/view_source/rendering_preferences.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" #include "third_party/blink/public/mojom/frame/frame_replication_state.mojom-blink.h" #include "third_party/blink/public/mojom/input/focus_type.mojom-blink.h" @@ -506,7 +507,7 @@ WebView* WebView::Create( scheduler::WebAgentGroupScheduler& agent_group_scheduler, const SessionStorageNamespaceId& session_storage_namespace_id, std::optional page_base_background_color, - const BrowsingContextGroupInfo& browsing_context_group_info, + const base::UnguessableToken& browsing_context_group_token, const ColorProviderColorMaps* color_provider_colors, blink::mojom::PartitionedPopinParamsPtr partitioned_popin_params) { return WebViewImpl::Create( @@ -516,7 +517,7 @@ WebView* WebView::Create( std::move(prerender_param), fenced_frame_mode, compositing_enabled, widgets_never_composited, To(opener), std::move(page_handle), agent_group_scheduler, session_storage_namespace_id, - std::move(page_base_background_color), browsing_context_group_info, + std::move(page_base_background_color), browsing_context_group_token, color_provider_colors, std::move(partitioned_popin_params)); } @@ -533,7 +534,7 @@ WebViewImpl* WebViewImpl::Create( blink::scheduler::WebAgentGroupScheduler& agent_group_scheduler, const SessionStorageNamespaceId& session_storage_namespace_id, std::optional page_base_background_color, - const BrowsingContextGroupInfo& browsing_context_group_info, + const base::UnguessableToken& browsing_context_group_token, const ColorProviderColorMaps* color_provider_colors, blink::mojom::PartitionedPopinParamsPtr partitioned_popin_params) { return new WebViewImpl( @@ -541,7 +542,7 @@ WebViewImpl* WebViewImpl::Create( compositing_enabled, widgets_never_composited, opener, std::move(page_handle), agent_group_scheduler, session_storage_namespace_id, std::move(page_base_background_color), - browsing_context_group_info, color_provider_colors, + browsing_context_group_token, color_provider_colors, std::move(partitioned_popin_params)); } @@ -605,7 +606,7 @@ WebViewImpl::WebViewImpl( blink::scheduler::WebAgentGroupScheduler& agent_group_scheduler, const SessionStorageNamespaceId& session_storage_namespace_id, std::optional page_base_background_color, - const BrowsingContextGroupInfo& browsing_context_group_info, + const base::UnguessableToken& browsing_context_group_token, const ColorProviderColorMaps* color_provider_colors, blink::mojom::PartitionedPopinParamsPtr partitioned_popin_params) : widgets_never_composited_(widgets_never_composited), @@ -638,7 +639,7 @@ WebViewImpl::WebViewImpl( page_ = Page::CreateOrdinary( *chrome_client_, opener ? opener->GetPage() : nullptr, agent_group_scheduler.GetAgentGroupScheduler(), - browsing_context_group_info, color_provider_colors, + browsing_context_group_token, color_provider_colors, std::move(partitioned_popin_params)); CoreInitializer::GetInstance().ProvideModulesToPage( *page_, session_storage_namespace_id_); @@ -1591,6 +1592,8 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, prefs.target_blank_implies_no_opener_enabled_will_be_removed); settings->SetAllowNonEmptyNavigatorPlugins( prefs.allow_non_empty_navigator_plugins); + settings->SetIgnorePermissionForDeviceChangedEvent( + prefs.ignore_permission_for_device_changed_event); settings->SetShouldProtectAgainstIpcFlooding( !prefs.disable_ipc_flooding_protection); settings->SetHyperlinkAuditingEnabled(prefs.hyperlink_auditing_enabled); @@ -2554,19 +2557,6 @@ void WebViewImpl::SetPageLifecycleStateInternal( if (restoring_from_bfcache) { DCHECK(dispatching_pageshow); DCHECK(page_restore_params); - // Increment the navigation counter on the main frame and all nested frames - // in its frame tree. - // Navigation Id increment should happen before a - // BackForwardCacheRestoration instance is created which happens inside the - // DispatchPageshow method. - for (Frame* frame = page->MainFrame(); frame; - frame = frame->Tree().TraverseNext()) { - auto* local_frame = DynamicTo(frame); - if (local_frame && local_frame->View()) { - DCHECK(local_frame->DomWindow()); - local_frame->DomWindow()->GenerateNewNavigationId(); - } - } DispatchPersistedPageshow(page_restore_params->navigation_start); @@ -2718,7 +2708,7 @@ void WebViewImpl::DispatchPersistedPageshow(base::TimeTicks navigation_start) { for (Frame* frame = GetPage()->MainFrame(); frame; frame = frame->Tree().TraverseNext()) { auto* local_frame = DynamicTo(frame); - // Record the metics. + // Record the metrics. if (local_frame && local_frame->View()) { Document* document = local_frame->GetDocument(); if (document) { @@ -2735,9 +2725,20 @@ void WebViewImpl::DispatchPersistedPageshow(base::TimeTicks navigation_start) { auto pageshow_start_time = base::TimeTicks::Now(); LocalDOMWindow* window = frame->DomWindow()->ToLocalDOMWindow(); + // The new navigation ID must be generated before the + // back-forward-cache-restoration performance entry is added to the + // window's performance (see below), but also prior to dispatching the + // pageshow event, in case some of the event listeners want to use the + // new navigation ID to identify the navigation. + if (RuntimeEnabledFeatures:: + BackForwardCacheRestorationPerformanceEntryEnabled(window)) { + window->GenerateNewNavigationId(); + } + window->DispatchPersistedPageshowEvent(navigation_start); - if (RuntimeEnabledFeatures::NavigationIdEnabled(window)) { + if (RuntimeEnabledFeatures:: + BackForwardCacheRestorationPerformanceEntryEnabled(window)) { auto pageshow_end_time = base::TimeTicks::Now(); WindowPerformance* performance = @@ -3568,6 +3569,8 @@ void WebViewImpl::UpdateRendererPreferences( #endif CanvasNoiseToken::Set(renderer_preferences_.canvas_noise_token); + ViewSourceLineWrappingPreference::Set( + renderer_preferences_.view_source_line_wrap_enabled); MaybePreloadSystemFonts(GetPage()); } @@ -4143,6 +4146,7 @@ void WebViewImpl::CreateRemoteMainFrame( mojom::blink::FrameReplicationStatePtr replicated_state, bool is_loading, const base::UnguessableToken& devtools_frame_token, + const std::optional& navigation_metrics_token, mojom::blink::RemoteFrameInterfacesFromBrowserPtr remote_frame_interfaces, mojom::blink::RemoteMainFrameInterfacesPtr remote_main_frame_interfaces) { blink::WebFrame* opener = nullptr; @@ -4168,11 +4172,11 @@ scheduler::WebAgentGroupScheduler& WebViewImpl::GetWebAgentGroupScheduler() { } void WebViewImpl::UpdatePageBrowsingContextGroup( - const BrowsingContextGroupInfo& browsing_context_group_info) { + const base::UnguessableToken& browsing_context_group_token) { Page* page = GetPage(); CHECK(page); - page->UpdateBrowsingContextGroup(browsing_context_group_info); + page->UpdateBrowsingContextGroup(browsing_context_group_token); } void WebViewImpl::SetPageAttributionSupport( diff --git a/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl b/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl index 2212c1af..cbf6c54d 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/fetch/request.idl @@ -36,7 +36,7 @@ enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" }; enum FetchPriority {"low", "auto", "high"}; enum RequestDuplex {"half"}; -enum IPAddressSpace {"local", "private", "public", "unknown"}; +enum IPAddressSpace {"loopback", "local", "private", "public", "unknown"}; // https://w3c.github.io/webappsec-referrer-policy/#referrer-policies @@ -70,7 +70,7 @@ enum ReferrerPolicy { readonly attribute boolean keepalive; readonly attribute AbortSignal signal; readonly attribute RequestDuplex duplex; - [RuntimeEnabled=PrivateNetworkAccessPermissionPrompt] readonly attribute IPAddressSpace targetAddressSpace; + [RuntimeEnabled=LocalNetworkAccessPermissionPolicy] readonly attribute IPAddressSpace targetAddressSpace; [MeasureAs=RequestIsHistoryNavigation] readonly attribute boolean isHistoryNavigation; [RaisesException, CallWith=ScriptState, NewObject] Request clone(); diff --git a/tools/under-control/src/third_party/blink/renderer/core/fetch/request_init.idl b/tools/under-control/src/third_party/blink/renderer/core/fetch/request_init.idl index e9feb3fc..5f729278 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/fetch/request_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/fetch/request_init.idl @@ -27,12 +27,13 @@ dictionary RequestInit { [RuntimeEnabled=SharedStorageAPI, Exposed=Window] boolean sharedStorageWritable; AbortSignal? signal; [RuntimeEnabled=FetchUploadStreaming] RequestDuplex duplex; - [RuntimeEnabled=PrivateNetworkAccessPermissionPrompt] IPAddressSpace targetAddressSpace; + [RuntimeEnabled=LocalNetworkAccessPermissionPolicy] IPAddressSpace targetAddressSpace; // Even though Private Token and Attribution Reporting operations are only // available in secure contexts, this has to be enforced after the fact // because the SecureContext IDL attribute doesn't affect dictionary members. [RuntimeEnabled=PrivateStateTokens] PrivateToken privateToken; [RuntimeEnabled=AttributionReporting] AttributionReportingRequestOptions attributionReporting; + [RuntimeEnabled=FetchRetry] RetryOptions retryOptions; // TODO(domfarolino): add support for RequestInit window member. //any window; // can only be set to null }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/fetch/retry_options.idl b/tools/under-control/src/third_party/blink/renderer/core/fetch/retry_options.idl new file mode 100755 index 00000000..2770904e --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/fetch/retry_options.idl @@ -0,0 +1,43 @@ +// 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. + +// Explainer: https://github.com/explainers-by-googlers/fetch-retry. +// Note: In the final form, we might remove some of these settings if e.g. we +// ended up not having use cases for them / browser-controlled policies are +// enough. We will re-evaluate them after origin trial. +dictionary RetryOptions { + // Required: Maximum number of retry attempts after the initial one fails. + // A value of 0 means no retries beyond the initial attempt. + required unsigned long maxAttempts; + + // Optional: Delay before the first retry attempt in milliseconds. + // Defaults to browser-configured value if not specified. + unsigned long? initialDelay; + + // Optional: Multiplier for increasing delay between retries (e.g., 2.0 for exponential backoff). + // A factor of 1.0 means fixed delay. Defaults to browser-configured value if not specified. + double? backoffFactor; + + // Optional: Maximum total time allowed for all retry attempts in milliseconds, + // measured from when the first attempt fails. If this duration is exceeded, + // no further retries will be made, even if maxAttempts has not been reached. + // Defaults to browser-configured value if not specified. + unsigned long? maxAge; + + // Optional: Controls whether the browser should continue attempting retries + // even after the originating document has been unloaded. + // This requires `keepalive: true` to be set on the Request. + // Defaults to false. + boolean retryAfterUnload = false; + + // Optional: Specifies whether to retry when the HTTP request method is + // non-idempotent (e.g. POST, PUT, DELETE). If this is not set while the HTTP + // request method of the fetch is non-idempotent, no retry will be attempted. + // Defaults to false. + boolean retryNonIdempotent = false; + + // Optional: Specifies whether to retry when the network request is guaranteed + // to have not reach the server yet (e.g. a connection can't be established). + boolean retryOnlyIfServerUnreached = false; +}; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/integrity_violation_report_body.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/integrity_violation_report_body.idl new file mode 100755 index 00000000..e73a4180 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/integrity_violation_report_body.idl @@ -0,0 +1,16 @@ +// 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. + +// https://www.w3.org/TR/CSP3/#cspviolationreportbody + +[ + Exposed=Window, + RuntimeEnabled=IntegrityPolicyScript +] interface IntegrityViolationReportBody : ReportBody { + readonly attribute USVString documentURL; + readonly attribute USVString? blockedURL; + readonly attribute USVString? destination; + readonly attribute boolean reportOnly; + [CallWith=ScriptState] object toJSON(); +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/navigator_ua_data.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/navigator_ua_data.idl index 22a59c6a..3ffb9192 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/navigator_ua_data.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/navigator_ua_data.idl @@ -9,5 +9,5 @@ [HighEntropy=Direct, MeasureAs=NavigatorUAData_Mobile] readonly attribute boolean mobile; [HighEntropy=Direct, MeasureAs=NavigatorUAData_Platform] readonly attribute DOMString platform; [HighEntropy, CallWith=ScriptState, MeasureAs=NavigatorUAData_GetHighEntropyValues] Promise getHighEntropyValues(sequence hints); - [HighEntropy, CallWith=ScriptState] object toJSON(); + [HighEntropy, CallWith=ScriptState, MeasureAs=NavigatorUAData_toJSON] object toJSON(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_into_view_options.idl b/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_into_view_options.idl index 117a7aeb..3ff462c1 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_into_view_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/scroll_into_view_options.idl @@ -1,6 +1,8 @@ enum ScrollLogicalPosition { "start", "center", "end", "nearest" }; +enum ScrollContainer { "all", "nearest" }; dictionary ScrollIntoViewOptions : ScrollOptions { ScrollLogicalPosition block = "start"; [ImplementedAs=inlinePosition] ScrollLogicalPosition inline = "nearest"; -}; \ No newline at end of file + [RuntimeEnabled=ScrollIntoViewNearest] ScrollContainer container = "all"; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 b/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 index f4cdee12..c96100f7 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 +++ b/tools/under-control/src/third_party/blink/renderer/core/frame/settings.json5 @@ -316,6 +316,10 @@ name: "allowNonEmptyNavigatorPlugins", initial: false, }, + { + name: "ignorePermissionForDeviceChangedEvent", + initial: false, + }, { name: "cookieEnabled", initial: true, diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl index 9338f02b..18fc6c02 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl @@ -23,6 +23,6 @@ dictionary CanvasSmpteSt2086Metadata { dictionary CanvasHighDynamicRangeOptions { CanvasHighDynamicRangeMode mode = "default"; - + DOMString? agtm; CanvasSmpteSt2086Metadata smpteSt2086Metadata; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl index 3340aa80..489b1c80 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl @@ -36,6 +36,8 @@ [RaisesException=Setter, CEReactions] attribute unsigned long width; [RaisesException=Setter, CEReactions] attribute unsigned long height; + [RuntimeEnabled=CanvasDrawElement] attribute boolean layoutSubtree; + [HighEntropy, MeasureAs=CanvasToDataURL, RaisesException] DOMString toDataURL(optional DOMString type = "image/png", optional any quality); [HighEntropy, MeasureAs=CanvasToBlob, RaisesException] void toBlob(BlobCallback _callback, optional DOMString type = "image/png", optional any quality); diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_dialog_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_dialog_element.idl index 597b8a54..e1b4adbe 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/html/html_dialog_element.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_dialog_element.idl @@ -34,5 +34,5 @@ [CEReactions, Measure, RaisesException] void show(); [CEReactions, Measure, RaisesException] void showModal(); [CEReactions] void close(optional DOMString returnValue); - [CEReactions,RaisesException] void requestClose(optional DOMString returnValue); + [CEReactions,RaisesException,MeasureAs="WebDXFeature::kRequestclose"] void requestClose(optional DOMString returnValue); }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_bar_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_bar_element.idl new file mode 100755 index 00000000..42fb8ebf --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_bar_element.idl @@ -0,0 +1,9 @@ +// 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. + +[ + Exposed=Window, + HTMLConstructor, + RuntimeEnabled=MenuElements +] interface HTMLMenuBarElement : HTMLElement {}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_item_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_item_element.idl new file mode 100755 index 00000000..8cb2568c --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_item_element.idl @@ -0,0 +1,13 @@ +// 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. + +[ + Exposed=Window, + HTMLConstructor, + RuntimeEnabled=MenuElements +] interface HTMLMenuItemElement : HTMLElement { + [CEReactions, Reflect] attribute boolean disabled; + [CEReactions, Reflect=checked] attribute boolean defaultChecked; + [ImplementedAs=Checked] attribute boolean checked; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_list_element.idl b/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_list_element.idl new file mode 100755 index 00000000..82e118ee --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/html/html_menu_list_element.idl @@ -0,0 +1,9 @@ +// 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. + +[ + Exposed=Window, + HTMLConstructor, + RuntimeEnabled=MenuElements +] interface HTMLMenuListElement : HTMLElement {}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index a2938580..2867bf44 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/tools/under-control/src/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc @@ -528,11 +528,6 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { network::features::kInterestGroupStorage); } - if (trial_name == "SpeculationRulesPrefetchFuture") { - return base::FeatureList::IsEnabled( - features::kSpeculationRulesPrefetchFuture); - } - if (trial_name == "BackForwardCacheSendNotRestoredReasons") { return base::FeatureList::IsEnabled( features::kBackForwardCacheSendNotRestoredReasons); @@ -547,10 +542,6 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { return base::FeatureList::IsEnabled(features::kSoftNavigationDetection); } - if (trial_name == "FoldableAPIs") { - return base::FeatureList::IsEnabled(features::kViewportSegments); - } - if (trial_name == "PermissionElement") { return base::FeatureList::IsEnabled(blink::features::kPermissionElement); } @@ -560,12 +551,16 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { return base::FeatureList::IsEnabled(features::kAISummarizationAPI); } - if (trial_name == "LanguageDetectionAPI") { - return base::FeatureList::IsEnabled(features::kLanguageDetectionAPI); + if (trial_name == "AIRewriterAPI") { + return base::FeatureList::IsEnabled(features::kAIRewriterAPI); } - if (trial_name == "AIPromptAPIForExtension") { - return base::FeatureList::IsEnabled(features::kAIPromptAPIForExtension); + if (trial_name == "AIWriterAPI") { + return base::FeatureList::IsEnabled(features::kAIRewriterAPI); + } + + if (trial_name == "LanguageDetectionAPI") { + return base::FeatureList::IsEnabled(features::kLanguageDetectionAPI); } if (trial_name == "SpeculationRulesTargetHint") { diff --git a/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event.idl b/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event.idl index 4a4db16e..b7f8bcc8 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event.idl @@ -6,6 +6,7 @@ Exposed=Window, RuntimeEnabled=CSSScrollSnapEvents ] interface SnapEvent : Event { + [RuntimeEnabled=CSSScrollSnapEventConstructorExposed] constructor(DOMString type, optional SnapEventInit eventInitDict = {}); readonly attribute Node snapTargetBlock; readonly attribute Node snapTargetInline; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event_init.idl b/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event_init.idl new file mode 100755 index 00000000..11f7b568 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/core/scroll/snap_event_init.idl @@ -0,0 +1,10 @@ +// 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. + +// https://drafts.csswg.org/css-scroll-snap-2/#snapevent-interface + +dictionary SnapEventInit : EventInit { + Node? snapTargetBlock = null; + Node? snapTargetInline = null; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/core/timing/back_forward_cache_restoration.idl b/tools/under-control/src/third_party/blink/renderer/core/timing/back_forward_cache_restoration.idl index 05b714f2..e66d5eca 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/timing/back_forward_cache_restoration.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/timing/back_forward_cache_restoration.idl @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -[RuntimeEnabled=NavigationId,Exposed=Window] +[RuntimeEnabled=BackForwardCacheRestorationPerformanceEntry,Exposed=Window] interface BackForwardCacheRestoration : PerformanceEntry { readonly attribute DOMHighResTimeStamp pageshowEventStart; readonly attribute DOMHighResTimeStamp pageshowEventEnd; diff --git a/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_reveal_event.idl b/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_reveal_event.idl index 97556f43..8f3f8081 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_reveal_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_reveal_event.idl @@ -8,5 +8,5 @@ RuntimeEnabled=PageRevealEvent ] interface PageRevealEvent : Event { constructor(DOMString type, optional PageRevealEventInit eventInitDict = {}); - [RuntimeEnabled=ViewTransitionOnNavigation] readonly attribute ViewTransition? viewTransition; + readonly attribute ViewTransition? viewTransition; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_swap_event.idl b/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_swap_event.idl index 35aeb488..97cac8e9 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_swap_event.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/view_transition/page_swap_event.idl @@ -8,6 +8,6 @@ RuntimeEnabled=PageSwapEvent ] interface PageSwapEvent : Event { constructor(DOMString type, optional PageSwapEventInit eventInitDict = {}); - [RuntimeEnabled=ViewTransitionOnNavigation] readonly attribute ViewTransition? viewTransition; + readonly attribute ViewTransition? viewTransition; readonly attribute NavigationActivation? activation; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/view_transition/view_transition.idl b/tools/under-control/src/third_party/blink/renderer/core/view_transition/view_transition.idl index 6d157baa..18faf5a8 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/view_transition/view_transition.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/view_transition/view_transition.idl @@ -33,4 +33,11 @@ // for this transition. These types are selectable using the // :active-view-transition-type pseudo-class. readonly attribute ViewTransitionTypeSet types; + + // This will return an Element that generated this transition. + // TODO(vmpstr): Note that for document transitions, this is the document + // element. We need to figure out if we need to distinguish between + // document.startViewTransition() and + // document.documentElement.startViewTransition(). + [RuntimeEnabled=ScopedViewTransitions] readonly attribute Element transitionRoot; }; diff --git a/tools/under-control/src/third_party/blink/renderer/core/workers/worker_global_scope.idl b/tools/under-control/src/third_party/blink/renderer/core/workers/worker_global_scope.idl index 6638b03f..f8f33e71 100755 --- a/tools/under-control/src/third_party/blink/renderer/core/workers/worker_global_scope.idl +++ b/tools/under-control/src/third_party/blink/renderer/core/workers/worker_global_scope.idl @@ -40,9 +40,7 @@ // attribute EventHandler ononline; // https://html.spec.whatwg.org/C/#apis-available-to-workers - // Although RaisesException is not specified, importScripts() can actually - // throw exceptions directly to V8. - void importScripts(ScriptURLString... urls); + [RaisesException] void importScripts((USVString or TrustedScriptURL)... urls); readonly attribute WorkerNavigator navigator; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl b/tools/under-control/src/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl index e0717f24..e04e5d79 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl @@ -74,7 +74,7 @@ dictionary AuctionAdConfig { Promise?> perBuyerTimeouts; Promise?> perBuyerCumulativeTimeouts; [RuntimeEnabled=FledgeTrustedSignalsKVv2ContextualData] - record perBuyerTKVSignals; + record> perBuyerTKVSignals; unsigned long long reportingTimeout; @@ -109,6 +109,8 @@ dictionary AuctionAdConfig { AuctionRealTimeReportingConfig sellerRealTimeReportingConfig; [RuntimeEnabled=FledgeRealTimeReporting] record perBuyerRealTimeReportingConfig; + [RuntimeEnabled=FledgeSellerScriptExecutionMode] + DOMString executionMode; sequence componentAuctions; AbortSignal? signal; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/ai.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/ai.idl deleted file mode 100755 index d0247396..00000000 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/ai.idl +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2024 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://github.com/webmachinelearning/prompt-api - -// TODO(crbug.com/381969447): remove this and use AIInterfaceProxy -// for LanguageModel instead. -[ - Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - SecureContext -] -interface AI {}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl index a55cbed3..3bdfcb31 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model.idl @@ -13,8 +13,13 @@ dictionary LanguageModelPromptOptions { AbortSignal signal; }; +dictionary LanguageModelAppendOptions { + AbortSignal signal; +}; + [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), + RuntimeEnabled=AIPromptAPI, SecureContext ] interface LanguageModel : EventTarget { @@ -46,7 +51,7 @@ interface LanguageModel : EventTarget { RaisesException ] Promise prompt( - LanguageModelPromptInput input, + LanguageModelPrompt input, optional LanguageModelPromptOptions options = {} ); [ @@ -55,9 +60,18 @@ interface LanguageModel : EventTarget { RaisesException ] ReadableStream promptStreaming( - LanguageModelPromptInput input, + LanguageModelPrompt input, optional LanguageModelPromptOptions options = {} ); + [ + MeasureAs=LanguageModel_Append, + CallWith=ScriptState, + RaisesException + ] + Promise append( + LanguageModelPrompt input, + optional LanguageModelAppendOptions options = {} + ); [ MeasureAs=LanguageModel_MeasureInputUsage, @@ -65,7 +79,7 @@ interface LanguageModel : EventTarget { RaisesException ] Promise measureInputUsage( - LanguageModelPromptInput input, + LanguageModelPrompt input, optional LanguageModelPromptOptions options = {} ); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_create_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_create_options.idl index dedf2019..462f0b35 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_create_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_create_options.idl @@ -5,24 +5,27 @@ // https://github.com/webmachinelearning/prompt-api // The argument to the prompt() method and others like it -typedef (LanguageModelPrompt or sequence) LanguageModelPromptInput; - -// Prompt lines typedef ( - DOMString // interpreted as { role: "user", type: "text", content: providedValue } - or LanguageModelPromptDict // canonical form + sequence + // Shorthand for `[{ role: "user", content: [{ type: "text", value: providedValue }] }]` + or DOMString ) LanguageModelPrompt; -// Prompt content inside the lines -dictionary LanguageModelPromptDict { - LanguageModelPromptRole role = "user"; - LanguageModelPromptType type = "text"; - required LanguageModelPromptContent content; +dictionary LanguageModelMessage { + required LanguageModelMessageRole role; + + // The DOMString branch is shorthand for `[{ type: "text", value: providedValue }]` + required (DOMString or sequence) content; }; -enum LanguageModelPromptRole { "system", "user", "assistant" }; +dictionary LanguageModelMessageContent { + required LanguageModelMessageType type; + required LanguageModelMessageValue value; +}; -enum LanguageModelPromptType { "text", "image", "audio" }; +enum LanguageModelMessageRole { "system", "user", "assistant" }; + +enum LanguageModelMessageType { "text", "image", "audio" }; typedef ( ImageBitmapSource @@ -30,7 +33,7 @@ typedef ( or HTMLAudioElement or BufferSource or DOMString -) LanguageModelPromptContent; +) LanguageModelMessageValue; dictionary LanguageModelCreateCoreOptions { // Note: these two have custom out-of-range handling behavior, not in the IDL layer. @@ -38,18 +41,23 @@ dictionary LanguageModelCreateCoreOptions { unrestricted double topK; unrestricted double temperature; - // The expected input types and languages for the session. - sequence expectedInputs; + // The expected types and languages for the session. + sequence expectedInputs; + sequence expectedOutputs; }; dictionary LanguageModelCreateOptions : LanguageModelCreateCoreOptions { AbortSignal signal; CreateMonitorCallback monitor; + + sequence initialPrompts; + + // DEPRECATED: Use `initialPrompts: [{role: 'system', content: ... }, ...]`. + // TODO(crbug.com/381974893): Remove this along with the console warning. DOMString systemPrompt; - sequence initialPrompts; }; -dictionary LanguageModelExpectedInput { - required LanguageModelPromptType type; +dictionary LanguageModelExpected { + required LanguageModelMessageType type; sequence languages; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_factory.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_factory.idl deleted file mode 100755 index 64dc38b6..00000000 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_factory.idl +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2025 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://github.com/webmachinelearning/prompt-api - -// The `LanguageModelFactory` is no longer needed from the web platform JS API, -// but we need to keep this IDL for the extension API. - -[ - Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), - SecureContext -] -interface LanguageModelFactory { - [ - MeasureAs=LanguageModel_Create, - CallWith=ScriptState, - RaisesException - ] - Promise create( - optional LanguageModelCreateOptions options = {} - ); - [ - MeasureAs=LanguageModel_Availability, - CallWith=ScriptState, - RaisesException - ] - Promise availability( - optional LanguageModelCreateCoreOptions options = {} - ); - [ - MeasureAs=LanguageModel_Params, - CallWith=ScriptState, - RaisesException - ] - Promise params(); -}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl index 6d0c751a..2ab22dac 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/language_model_params.idl @@ -6,6 +6,7 @@ [ Exposed(Window AIPromptAPI, Worker AIPromptAPIForWorkers), + RuntimeEnabled=AIPromptAPI, SecureContext ] interface LanguageModelParams { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl new file mode 100755 index 00000000..64ce1dfc --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/proofreader.idl @@ -0,0 +1,91 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// https://github.com/explainers-by-googlers/proofreader-api + +enum CorrectionType { + "spelling", // Misspelled words, i.e. typos. + "punctuation", // Incorrect or missing punctuation marks. + "capitalization", // Incorrect upper/lowercase letters. + "preposition", // Errors in the use of prepositions. + "missing-words", // One or more words are absent from a sentence, + // making it grammatically incorrect or altering + // its intended meaning. + "grammar" // Broad and catch-all category, if no more-specific category + // matches. Encompassing sentence errors in structure + // errors, word order, subject-verb agreement, etc. +}; + +dictionary ProofreaderCreateCoreOptions { + boolean includeCorrectionTypes = false; + boolean includeCorrectionExplanations = false; + sequence expectedInputLanguages; + DOMString correctionExplanationLanguage; +}; + +dictionary ProofreaderCreateOptions : ProofreaderCreateCoreOptions { + AbortSignal signal; + CreateMonitorCallback monitor; +}; + +dictionary ProofreadResult { + DOMString correctedInput; + sequence corrections; +}; + +dictionary ProofreadCorrection { + unsigned long long startIndex; + unsigned long long endIndex; + DOMString correction; + CorrectionType type; + DOMString explanation; +}; + +[ + Exposed=(Window,Worker), + RuntimeEnabled=AIProofreadingAPI, + SecureContext +] +interface Proofreader { + [ + MeasureAs=Proofreader_Availability, + CallWith=ScriptState, + RaisesException + ] + static Promise availability( + optional ProofreaderCreateCoreOptions options = {} + ); + + [ + MeasureAs=Proofreader_Create, + CallWith=ScriptState, + RaisesException + ] + static Promise create(optional ProofreaderCreateOptions options = {}); + + [ + MeasureAs=Proofreader_Proofread, + CallWith=ScriptState, + RaisesException + ] + Promise proofread( + DOMString input + ); + + [ + MeasureAs=Proofreader_Destroy, + CallWith=ScriptState, + RaisesException + ] + void destroy(); + + [MeasureAs=Proofreader_IncludeCorrectionTypes] + readonly attribute boolean includeCorrectionTypes; + [MeasureAs=Proofreader_IncludeCorrectionExplanations] + readonly attribute boolean includeCorrectionExplanations; + [MeasureAs=Proofreader_ExpectedInputLanguages] + readonly attribute FrozenArray? expectedInputLanguages; + [MeasureAs=Proofreader_CorrectionExplanationLanguage] + readonly attribute DOMString? correctionExplanationLanguage; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl index b31a1e58..6ce528c4 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ai/summarizer.idl @@ -4,7 +4,7 @@ // https://github.com/WICG/writing-assistance-apis -enum SummarizerType { "tl;dr", "key-points", "teaser", "headline" }; +enum SummarizerType { "tldr", "key-points", "teaser", "headline" }; enum SummarizerFormat { "plain-text", "markdown" }; enum SummarizerLength { "short", "medium", "long" }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ai/window_or_worker_global_scope_ai.idl b/tools/under-control/src/third_party/blink/renderer/modules/ai/window_or_worker_global_scope_ai.idl deleted file mode 100755 index af9a582c..00000000 --- a/tools/under-control/src/third_party/blink/renderer/modules/ai/window_or_worker_global_scope_ai.idl +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// https://github.com/webmachinelearning/prompt-api - -[ - Exposed=(Window,Worker), - ImplementedAs=DOMAI, - RuntimeEnabled=BuiltInAIAPI -] partial interface mixin WindowOrWorkerGlobalScope { - [ - Replaceable, SecureContext - ] - readonly attribute AI ai; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl index e27cc1b3..a618c35b 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl @@ -54,9 +54,12 @@ interface CanvasRenderingContext2D { void drawFocusIfNeeded(Element element); void drawFocusIfNeeded(Path2D path, Element element); - // placeElement: https://github.com/Igalia/explainers/blob/main/canvas-formatted-text/html-in-canvas.md - [RuntimeEnabled=CanvasPlaceElement, RaisesException] void placeElement(Element element, unrestricted double x, - unrestricted double y); + [RuntimeEnabled=CanvasDrawElement, RaisesException] + void drawElement(Element element, unrestricted double x, unrestricted double y); + + [RuntimeEnabled=CanvasDrawElement, RaisesException] + void drawElement(Element element, unrestricted double x, unrestricted double y, + unrestricted double dwidth, unrestricted double dheight); [MeasureAs=GetCanvas2DContextAttributes] CanvasRenderingContext2DSettings getContextAttributes(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module.idl index 70d0c26f..261e9ad4 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module.idl @@ -7,6 +7,8 @@ typedef (CanvasRenderingContext2D or WebGLRenderingContext or WebGL2RenderingContext or + WebGLRenderingContextWebGPU or + WebGL2RenderingContextWebGPU or ImageBitmapRenderingContext or GPUCanvasContext) RenderingContext; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_module.idl b/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_module.idl index f88b06ce..a15d8d67 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_module.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/canvas/offscreencanvas/offscreen_canvas_module.idl @@ -7,6 +7,8 @@ typedef (OffscreenCanvasRenderingContext2D or WebGLRenderingContext or WebGL2RenderingContext or + WebGLRenderingContextWebGPU or + WebGL2RenderingContextWebGPU or ImageBitmapRenderingContext or GPUCanvasContext) OffscreenRenderingContext; enum OffscreenRenderingContextType { "2d", "webgl", "webgl2", "bitmaprenderer", "webgpu" }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard.idl b/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard.idl index 46896974..631a0e14 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard.idl @@ -37,4 +37,6 @@ dictionary ClipboardUnsanitizedFormats { CallWith=ScriptState, RaisesException ] Promise writeText(DOMString data); + + [RuntimeEnabled=ClipboardChangeEvent] attribute EventHandler onclipboardchange; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event.idl b/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event.idl new file mode 100755 index 00000000..af5f515b --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event.idl @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2025 Microsoft Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +[ + Exposed=Window, + SecureContext, + RuntimeEnabled=ClipboardChangeEvent +] interface ClipboardChangeEvent : Event { + constructor(optional ClipboardChangeEventInit eventInitDict = {}); + [MeasureAs=ClipboardChangeEventTypesAttribute] readonly attribute FrozenArray types; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event_init.idl b/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event_init.idl new file mode 100755 index 00000000..c79ecc85 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/clipboard/clipboard_change_event_init.idl @@ -0,0 +1,7 @@ +// 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. + +dictionary ClipboardChangeEventInit : EventInit { + sequence types; +}; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/pressure_record.idl b/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/pressure_record.idl index 9b0d0787..07df6a9a 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/pressure_record.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/pressure_record.idl @@ -18,6 +18,7 @@ enum PressureState { ] interface PressureRecord { readonly attribute PressureSource source; readonly attribute PressureState state; + [RuntimeEnabled=ComputePressureOwnContributionEstimate]readonly attribute double? ownContributionEstimate; readonly attribute DOMHighResTimeStamp time; [CallWith=ScriptState] object toJSON(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/testing/internals_compute_pressure.idl b/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/testing/internals_compute_pressure.idl index e080a103..00588faf 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/testing/internals_compute_pressure.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/compute_pressure/testing/internals_compute_pressure.idl @@ -7,5 +7,5 @@ ] partial interface Internals { [CallWith=ScriptState] Promise createVirtualPressureSource(PressureSource source, CreateVirtualPressureSourceOptions options); [CallWith=ScriptState] Promise removeVirtualPressureSource(PressureSource source); - [CallWith=ScriptState] Promise updateVirtualPressureSource(PressureSource source, PressureState state); + [CallWith=ScriptState] Promise updateVirtualPressureSource(PressureSource source, PressureState state, double own_contribution_estimate); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_browser_bound_signature.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_browser_bound_signature.idl index 11f44609..e2482ac3 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_browser_bound_signature.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_browser_bound_signature.idl @@ -11,6 +11,6 @@ // https://w3c.github.io/webauthn/#sctn-attested-credential-data dictionary AuthenticationExtensionsPaymentBrowserBoundSignature { // Output of the signature algorithm. - ArrayBuffer signature_output; + ArrayBuffer signature; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_outputs.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_outputs.idl index a253eeab..665c21bc 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_outputs.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/authentication_extensions_payment_outputs.idl @@ -6,5 +6,5 @@ dictionary AuthenticationExtensionsPaymentOutputs { // A signature corresponding to the browser bound public key in // clientDataJson. - AuthenticationExtensionsPaymentBrowserBoundSignature browser_bound_signature; + AuthenticationExtensionsPaymentBrowserBoundSignature browserBoundSignature; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_creation_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_creation_options.idl index d9772931..1602c0bb 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_creation_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_creation_options.idl @@ -4,6 +4,10 @@ // TODO(crbug.com/379294636): add link to the specs where the link is avaialble. dictionary DigitalCredentialCreationOptions { - required DOMString protocol; - required object data; + sequence requests; +}; + +dictionary DigitalCredentialCreateRequest { + required DOMString protocol; + required object data; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_request_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_request_options.idl index a0a79e73..b403ef45 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_request_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/digital_credential_request_options.idl @@ -5,7 +5,7 @@ // https://wicg.github.io/digital-identities/#the-digitalcredentialrequestoptions-dictionary dictionary DigitalCredentialRequestOptions { sequence providers; - sequence requests; + sequence requests; }; // https://wicg.github.io/digital-identities/#dom-identityrequestprovider @@ -14,7 +14,7 @@ dictionary IdentityRequestProvider { required (object or DOMString) request; }; -dictionary DigitalCredentialRequest { +dictionary DigitalCredentialGetRequest { required DOMString protocol; required (object or DOMString) data; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_claim_requirement.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_claim_requirement.idl deleted file mode 100755 index f19cedd0..00000000 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_claim_requirement.idl +++ /dev/null @@ -1,21 +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. - -dictionary IdentityClaimRequirement { - // Controls the optionality of the attribute. - // NOTE: "required" is a reserved WebIDL keyword, so we prefix it with - // the _ character to use it. - // https://webidl.spec.whatwg.org/#:~:text=escape%20an%20identifier - boolean _required; - - // TODO(crbug.com/1400878): introduce the other requirement types as needed. - // Requires the attribute to be verified. - // boolean verified; - // Requires the attribute to be over a certain number. - // long over; - // Requires the attribute to be under a certain number. - // long under; - // Requires the attribute to be equal to certain value. - // any value; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl index d0942cdf..56180b39 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl @@ -21,8 +21,6 @@ dictionary IdentityCredentialRequestOptions { IdentityCredentialRequestOptionsContext context = "signin"; // Allows an RP to select between the two modes of operation: active or passive. [MeasureAs=FedCmButtonMode] IdentityCredentialRequestOptionsMode mode = "passive"; - // A querying language that allows an RP to ask what it wants from the IdPs. - [RuntimeEnabled=FedCmSelectiveDisclosure] IdentityStandardClaims claims; // This is a debugging aid string instead of an actual member of this dictionary. // `mediation` could be accidentally set by web developers here and this helps // with showing debugging info to developers when it happens. diff --git a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_standard_claims.idl b/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_standard_claims.idl deleted file mode 100755 index 4eff1f82..00000000 --- a/tools/under-control/src/third_party/blink/renderer/modules/credentialmanagement/identity_standard_claims.idl +++ /dev/null @@ -1,37 +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. - -dictionary IdentityStandardClaims { - // The standard identity claims is derived and kept consistent with the

- // autocomplete spec. - // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fe-autocomplete - // We are starting with the attributes that are currently supported, so many - // of the attributes are left commented out to allow us to introduce them - // incrementally, while still testing if the generalization will hold. - // TODO(crbug.com/1400878): introduce the other attributes as needed. - IdentityClaimRequirement name; - IdentityClaimRequirement givenName; - // IdentityClaimRequirement familyName; - // IdentityClaimRequirement nickname; - // IdentityClaimRequirement username; - IdentityClaimRequirement email; - // IdentityClaimRequirement sex; - // IdentityClaimRequirement bday; - // IdentityClaimRequirement language; - // IdentityClaimRequirement phoneNumber; - // IdentityClaimRequirement streetAddress; - // IdentityClaimRequirement country; - // IdentityClaimRequirement url; - // IdentityClaimRequirement tel; - // Age is neither in the OIDC Standard Claims nor in HTML, but maps better - // than bday (HTML) / birthday (OIDC). - // IdentityClaimRequirement age; - // Picture currently follows the OIDC Standard Claims - // https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims - // Which we take as equivalent to photo from the HTML standard. - // We use both to keep backwards compatibility with the AccountList - // dictionary. - IdentityClaimRequirement picture; - // IdentityClaimRequirement photo; -}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_constraint_set.idl b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_constraint_set.idl index f684315b..9397a31d 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_constraint_set.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_constraint_set.idl @@ -59,6 +59,7 @@ dictionary MediaTrackConstraintSet { // https://w3c.github.io/mediacapture-screen-share/#extensions-to-mediatrackconstraintset ConstrainDOMString displaySurface; ConstrainBoolean suppressLocalAudioPlayback; + [RuntimeEnabled=RestrictOwnAudio] ConstrainBoolean restrictOwnAudio; // The "mandatory" and "_optional" members are retained for conformance // with https://www.w3.org/TR/2013/WD-mediacapture-streams-20130903/ diff --git a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_settings.idl b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_settings.idl index 217d0d72..59aef528 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_settings.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_settings.idl @@ -56,6 +56,7 @@ dictionary MediaTrackSettings { [RuntimeEnabled=GetDisplayMedia] boolean logicalSurface; [RuntimeEnabled=GetDisplayMedia] DOMString cursor; [RuntimeEnabled=GetDisplayMedia] boolean suppressLocalAudioPlayback; + [RuntimeEnabled=GetDisplayMedia] boolean restrictOwnAudio; // Capture Surface Resolution API [RuntimeEnabled=CapturedSurfaceResolution] double screenPixelRatio; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_supported_constraints.idl b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_supported_constraints.idl index 52a9cbbc..1d3240b5 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_supported_constraints.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/mediastream/media_track_supported_constraints.idl @@ -57,4 +57,5 @@ dictionary MediaTrackSupportedConstraints { // https://w3c.github.io/mediacapture-screen-share/#extensions-to-mediatracksupportedconstraints boolean displaySurface = true; boolean suppressLocalAudioPlayback = true; + [RuntimeEnabled=RestrictOwnAudio] boolean restrictOwnAudio = true; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ml/ml_context.idl b/tools/under-control/src/third_party/blink/renderer/modules/ml/ml_context.idl index 8433a5c3..0649d864 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ml/ml_context.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ml/ml_context.idl @@ -299,6 +299,14 @@ typedef record MLNamedTensors; RaisesException ] Promise createTensor(MLTensorDescriptor descriptor); + [ + RuntimeEnabled=MachineLearningNeuralNetwork, + CallWith=ScriptState, + RaisesException + ] Promise createConstantTensor( + MLOperandDescriptor descriptor, + AllowSharedBufferSource sourceData); + [ RuntimeEnabled=MachineLearningNeuralNetwork, CallWith=ScriptState, @@ -331,4 +339,13 @@ typedef record MLNamedTensors; RuntimeEnabled=MachineLearningNeuralNetwork, CallWith=ScriptState ] MLOpSupportLimits opSupportLimits(); + + // TODO(crbug.com/345352987): remove device once MLContext(gpuDevice) is + // implemented. + [ + RuntimeEnabled=MachineLearningNeuralNetwork, + CallWith=ScriptState, + RaisesException + ] Promise exportToGPU( + GPUDevice device, MLTensor tensor); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph.idl b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph.idl index f620c53a..6c5bfc7d 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph.idl @@ -8,5 +8,7 @@ RuntimeEnabled=MachineLearningNeuralNetwork, Exposed=(Window, Worker) ] interface MLGraph { + readonly attribute FrozenArray devices; + void destroy(); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.idl b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.idl index 509880c9..18e0c3dd 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.idl @@ -143,8 +143,7 @@ dictionary MLLstmCellOptions : MLOperatorOptions { enum MLPaddingMode { "constant", "edge", - "reflection", - "symmetric" + "reflection" }; dictionary MLPadOptions : MLOperatorOptions { @@ -241,6 +240,11 @@ dictionary MLTriangularOptions : MLOperatorOptions { RaisesException ] MLOperand constant(MLOperandDescriptor desc, AllowSharedBufferSource buffer); + [ + CallWith=ScriptState, + RaisesException + ] MLOperand constant(MLTensor tensor); + [RaisesException] MLOperand argMin(MLOperand input, [EnforceRange] unsigned long axis, optional MLArgMinMaxOptions options = {}); [RaisesException] MLOperand argMax(MLOperand input, [EnforceRange] unsigned long axis, optional MLArgMinMaxOptions options = {}); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor.idl b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor.idl index fd171bd5..817b8e03 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor.idl @@ -10,9 +10,10 @@ ] interface MLTensor { readonly attribute MLOperandDataType dataType; readonly attribute FrozenArray shape; - readonly attribute boolean importableToWebGPU; + readonly attribute boolean exportableToGPU; readonly attribute boolean readable; readonly attribute boolean writable; + readonly attribute boolean constant; void destroy(); }; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor_descriptor.idl b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor_descriptor.idl index 312847c3..15105fef 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor_descriptor.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/ml/webnn/ml_tensor_descriptor.idl @@ -5,7 +5,7 @@ // https://www.w3.org/TR/webnn/#api-mltensor dictionary MLTensorDescriptor : MLOperandDescriptor { - boolean importableToWebGPU = false; + boolean exportableToGPU = false; boolean readable = false; boolean writable = false; }; \ No newline at end of file diff --git a/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl b/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl index d6d7d789..d9e6a5da 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/payments/secure_payment_confirmation_request.idl @@ -13,6 +13,7 @@ dictionary SecurePaymentConfirmationRequest { USVString payeeName; USVString payeeOrigin; AuthenticationExtensionsClientInputs extensions; + [RuntimeEnabled=SecurePaymentConfirmationBrowserBoundKeys] sequence browserBoundPubKeyCredParams; sequence locale; // Whether or not to show an opt-out flow in the SPC UX. diff --git a/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_metadata.idl b/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_metadata.idl index 16c994d0..ee7eb8de 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_metadata.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_metadata.idl @@ -11,7 +11,6 @@ dictionary RTCEncodedAudioFrameMetadata { octet payloadType; DOMString mimeType; unsigned short? sequenceNumber; - [RuntimeEnabled=RTCEncodedAudioFrameAbsCaptureTime] unsigned long long absCaptureTime; unsigned long rtpTimestamp; [RuntimeEnabled=RTCEncodedFrameTimestamps] DOMHighResTimeStamp receiveTime; [RuntimeEnabled=RTCEncodedFrameTimestamps] DOMHighResTimeStamp captureTime; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webcodecs/video_frame_metadata.idl b/tools/under-control/src/third_party/blink/renderer/modules/webcodecs/video_frame_metadata.idl index 5999a1f6..950edddb 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webcodecs/video_frame_metadata.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webcodecs/video_frame_metadata.idl @@ -8,4 +8,7 @@ dictionary VideoFrameMetadata { // Possible members are recorded in the VideoFrame Metadata Registry. [RuntimeEnabled="VideoFrameMetadataBackgroundBlur"] BackgroundBlur backgroundBlur; + + [RuntimeEnabled="VideoFrameMetadataRtpTimestamp"] + unsigned long rtpTimestamp; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.idl index 2de51bd3..805733d0 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.idl @@ -306,6 +306,7 @@ interface mixin WebGL2RenderingContextBase { void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView srcData, GLintptr srcOffset); + void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset); void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, ImageData data); [CallWith=ScriptState, RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLImageElement image); diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_webgpu.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_webgpu.idl new file mode 100755 index 00000000..899056c2 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_webgpu.idl @@ -0,0 +1,19 @@ +// 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. + +// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7 + +[ + ActiveScriptWrappable, + Exposed=(Window,Worker), + RuntimeEnabled=WebGLOnWebGPU +] interface WebGL2RenderingContextWebGPU { + // TODO(https://issues.chromium.org/413078308): Asynchronous initialization + // is needed because it is not possible to synchronously wait for WebGPU + // requestAdapter/Device in the renderer process. Once this capability is + // added, the initAsync should be removed. + [CallWith=ScriptState] Promise initAsync(); +}; +WebGL2RenderingContextWebGPU includes WebGLRenderingContextBase; +WebGL2RenderingContextWebGPU includes WebGL2RenderingContextBase; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl index dad417ed..eaddade6 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.idl @@ -645,6 +645,10 @@ interface mixin WebGLRenderingContextBase { GLenum target, GLint level, GLint internalformat, GLenum format, GLenum type, VideoFrame frame); + [RuntimeEnabled=CanvasDrawElement, CallWith=ScriptState, RaisesException] + void texElement2D(GLenum target, GLint level, GLint internalformat, + GLenum format, GLenum type, Element element); + void texSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_webgpu.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_webgpu.idl new file mode 100755 index 00000000..88fde368 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgl/webgl_rendering_context_webgpu.idl @@ -0,0 +1,21 @@ +// 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. + +// https://www.khronos.org/registry/webgl/specs/latest/1.0/#WebGLRenderingContext + +[ + ActiveScriptWrappable, + Exposed=(Window,Worker), + RuntimeEnabled=WebGLOnWebGPU +] interface WebGLRenderingContextWebGPU { + + [RuntimeEnabled=WebGLDrawingBufferStorage] const GLenum RGB8 = 0x8051; + [RuntimeEnabled=WebGLDrawingBufferStorage] const GLenum RGBA8 = 0x8058; + // TODO(https://issues.chromium.org/413078308): Asynchronous initialization + // is needed because it is not possible to synchronously wait for WebGPU + // requestAdapter/Device in the renderer process. Once this capability is + // added, the initAsync should be removed. + [CallWith=ScriptState] Promise initAsync(); +}; +WebGLRenderingContextWebGPU includes WebGLRenderingContextBase; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter.idl index 83abb428..0461b44d 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter.idl @@ -11,7 +11,7 @@ [SameObject] readonly attribute GPUSupportedFeatures features; [SameObject] readonly attribute GPUSupportedLimits limits; [SameObject] readonly attribute GPUAdapterInfo info; - [Measure] readonly attribute boolean isFallbackAdapter; + [DeprecateAs=V8GPUAdapter_IsFallbackAdapter_AttributeGetter] readonly attribute boolean isFallbackAdapter; [CallWith=ScriptState] Promise requestDevice(optional GPUDeviceDescriptor descriptor = {}); }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter_info.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter_info.idl index 0e61cf42..4ebd5ff7 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter_info.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_adapter_info.idl @@ -22,4 +22,5 @@ [RuntimeEnabled=WebGPUDeveloperFeatures] readonly attribute unsigned long? d3dShaderModel; [RuntimeEnabled=WebGPUDeveloperFeatures] readonly attribute unsigned long? vkDriverVersion; [RuntimeEnabled=WebGPUDeveloperFeatures] readonly attribute DOMString powerPreference; + [RuntimeEnabled=WebGPUExperimentalFeatures] readonly attribute FrozenArray subgroupMatrixConfigs; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_bind_group_entry.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_bind_group_entry.idl index 75392081..41754ea6 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_bind_group_entry.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_bind_group_entry.idl @@ -4,7 +4,7 @@ // https://gpuweb.github.io/gpuweb/ -typedef (GPUSampler or GPUTextureView or GPUBufferBinding or GPUExternalTexture) GPUBindingResource; +typedef (GPUSampler or GPUTextureView or GPUBuffer or GPUBufferBinding or GPUExternalTexture) GPUBindingResource; dictionary GPUBindGroupEntry { required GPUIndex32 binding; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_subgroup_matrix_config.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_subgroup_matrix_config.idl new file mode 100755 index 00000000..d81c1436 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_subgroup_matrix_config.idl @@ -0,0 +1,26 @@ +// 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. + +// https://gpuweb.github.io/gpuweb/ + +enum GPUSubgroupMatrixComponentType { + "f32", + "f16", + "u32", + "i32", + "u8", + "i8", +}; + +[ + RuntimeEnabled=WebGPUExperimentalFeatures, + Exposed=(Window, Worker), + SecureContext +] interface GPUSubgroupMatrixConfig { + readonly attribute GPUSubgroupMatrixComponentType componentType; + readonly attribute GPUSubgroupMatrixComponentType resultComponentType; + readonly attribute unsigned long long M; + readonly attribute unsigned long long N; + readonly attribute unsigned long long K; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_features.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_features.idl index ba3358fb..e5581418 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_features.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_features.idl @@ -11,6 +11,7 @@ enum GPUFeatureName { "texture-compression-bc-sliced-3d", "texture-compression-etc2", "texture-compression-astc", + "texture-compression-astc-sliced-3d", "timestamp-query", "indirect-first-instance", "shader-f16", @@ -28,6 +29,7 @@ enum GPUFeatureName { "chromium-experimental-multi-draw-indirect", "chromium-experimental-unorm16-texture-formats", "chromium-experimental-snorm16-texture-formats", + "chromium-experimental-subgroup-matrix", }; [ diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_limits.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_limits.idl index dc1c6f49..99cfd07b 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_limits.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_supported_limits.idl @@ -39,8 +39,8 @@ readonly attribute unsigned long maxComputeWorkgroupSizeY; readonly attribute unsigned long maxComputeWorkgroupSizeZ; readonly attribute unsigned long maxComputeWorkgroupsPerDimension; - [RuntimeEnabled=WebGPUExperimentalFeatures] readonly attribute unsigned long maxStorageBuffersInFragmentStage; - [RuntimeEnabled=WebGPUExperimentalFeatures] readonly attribute unsigned long maxStorageTexturesInFragmentStage; - [RuntimeEnabled=WebGPUExperimentalFeatures] readonly attribute unsigned long maxStorageBuffersInVertexStage; - [RuntimeEnabled=WebGPUExperimentalFeatures] readonly attribute unsigned long maxStorageTexturesInVertexStage; + [RuntimeEnabled=WebGPUCompatibilityMode] readonly attribute unsigned long maxStorageBuffersInFragmentStage; + [RuntimeEnabled=WebGPUCompatibilityMode] readonly attribute unsigned long maxStorageTexturesInFragmentStage; + [RuntimeEnabled=WebGPUCompatibilityMode] readonly attribute unsigned long maxStorageBuffersInVertexStage; + [RuntimeEnabled=WebGPUCompatibilityMode] readonly attribute unsigned long maxStorageTexturesInVertexStage; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture_descriptor.idl b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture_descriptor.idl index 4fd221fc..817528a8 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture_descriptor.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/webgpu/gpu_texture_descriptor.idl @@ -12,7 +12,7 @@ dictionary GPUTextureDescriptor : GPUObjectDescriptorBase { required GPUTextureFormat format; required GPUTextureUsageFlags usage; sequence viewFormats = []; - [RuntimeEnabled=WebGPUExperimentalFeatures] GPUTextureViewDimension textureBindingViewDimension; + [RuntimeEnabled=WebGPUCompatibilityMode] GPUTextureViewDimension textureBindingViewDimension; }; enum GPUTextureDimension { diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_information.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_information.idl index d3b011a4..52ea4f1c 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_information.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_information.idl @@ -13,4 +13,12 @@ [SameObject, SaveSameObject] readonly attribute XRRigidTransform normDepthBufferFromNormView; readonly attribute float rawValueToMeters; + + // These properties should be taken from XRViewGeometry + [RuntimeEnabled=WebXRDepthPerformance] readonly attribute Float32Array projectionMatrix; + [SameObject, RuntimeEnabled=WebXRDepthPerformance, ImplementedAs=viewGeometryTransform] readonly attribute XRRigidTransform transform; }; + +// Enable use of the mixin once WebXRDepthPerformance is enabled/cleaned up. +// We cannot use it at the present time, as otherwise it will be stable-exposed. +// XRDepthInformation includes XRViewGeometry; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_state_init.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_state_init.idl index 0f684a25..bdfe1c23 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_state_init.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_depth_state_init.idl @@ -22,4 +22,5 @@ dictionary XRDepthStateInit { required sequence usagePreference; required sequence dataFormatPreference; sequence depthTypeRequest; + boolean matchDepthView; }; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view.idl index 10baa7a6..435ee200 100755 --- a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view.idl +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view.idl @@ -15,8 +15,6 @@ enum XREye { RuntimeEnabled=WebXR ] interface XRView { readonly attribute XREye eye; - readonly attribute Float32Array projectionMatrix; - [SameObject, ImplementedAs=refSpaceFromView] readonly attribute XRRigidTransform transform; readonly attribute double? recommendedViewportScale; // Added by the AR module. @@ -28,3 +26,5 @@ enum XREye { [SameObject] readonly attribute XRCamera? camera; }; + +XRView includes XRViewGeometry; diff --git a/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view_geometry.idl b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view_geometry.idl new file mode 100755 index 00000000..885150f0 --- /dev/null +++ b/tools/under-control/src/third_party/blink/renderer/modules/xr/xr_view_geometry.idl @@ -0,0 +1,14 @@ +// 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. + +// https://immersive-web.github.io/webxr/#xrviewGeometry-mixin +[ + SecureContext, + Exposed=Window, + RuntimeEnabled=WebXR +] +interface mixin XRViewGeometry { + readonly attribute Float32Array projectionMatrix; + [SameObject, ImplementedAs=viewGeometryTransform] readonly attribute XRRigidTransform transform; +}; diff --git a/tools/under-control/src/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/tools/under-control/src/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 9a0b22b1..93c9798d 100755 --- a/tools/under-control/src/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/tools/under-control/src/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -28,11 +28,10 @@ // name: "ExampleFeature", // status: {"Android": "stable", "Win": "experimental"}, // } - // "ExampleFeature" will be stable on Android/WebView/WebLayer, experimental + // "ExampleFeature" will be stable on Android/WebView, experimental // on Windows and not enabled on any other platform. // - // Note that the Android status key implies Chrome for Android, WebView and - // WebLayer. + // Note that the Android status key implies Chrome for Android and WebView. // // "stable" features listed here should be rare, as anything which we've // shipped stable can have its runtime flag removed soon after. @@ -322,50 +321,56 @@ { name: "AIPromptAPI", public: true, - status: "experimental", - implied_by: ["AIPromptAPIForWebPlatform", "AIPromptAPIMultimodalInput"], + status: { + "Win": "experimental", + "Mac": "experimental", + "Linux": "experimental", + "default": "", + }, + implied_by: ["AIPromptAPIMultimodalInput"], }, { + // Extension access to "AIPromptAPI". name: "AIPromptAPIForExtension", public: true, - origin_trial_feature_name: "AIPromptAPIForExtension", - origin_trial_allows_third_party: true, - status: "experimental", - base_feature_status: "enabled", - copied_from_base_feature_if: "overridden", - }, - { - name: "AIPromptAPIForWebPlatform", - public: true, - status: "experimental", + status: { + "Win": "stable", + "Mac": "stable", + "Linux": "stable", + "default": "", + }, }, { name: "AIPromptAPIForWorkers", public: true, - origin_trial_feature_name: "AIPromptAPIForExtension", - origin_trial_allows_third_party: true, - status: "experimental", - base_feature_status: "enabled", - copied_from_base_feature_if: "overridden", }, { name: "AIPromptAPIMultimodalInput", - public: true, - status: "experimental", + status: { + "Win": "experimental", + "Mac": "experimental", + "Linux": "experimental", + "default": "", + }, }, { + // Gates access to the responseConstraint enhancement for "AIPromptAPI". + // This feature alone does not expose any "AIPromptAPI" feature access. name: "AIPromptAPIStructuredOutput", - origin_trial_feature_name: "AIPromptAPIForExtension", - origin_trial_allows_third_party: true, - status: "experimental", - base_feature_status: "enabled", - copied_from_base_feature_if: "overridden", - implied_by: ["AIPromptAPI"], + status: "stable", + }, + { + name: "AIProofreadingAPI", + status: "test", }, { name: "AIRewriterAPI", - public: true, - status: "experimental", + status: { + "Win": "experimental", + "Mac": "experimental", + "Linux": "experimental", + "default": "", + }, origin_trial_feature_name: "AIRewriterAPI", origin_trial_allows_third_party: true, base_feature_status: "enabled", @@ -374,12 +379,15 @@ { name: "AIRewriterAPIForWorkers", public: true, - status: "experimental", }, { name: "AISummarizationAPI", - public: true, - status: "experimental", + status: { + "Win": "stable", + "Mac": "stable", + "Linux": "stable", + "default": "", + }, origin_trial_feature_name: "AISummarizationAPI", origin_trial_allows_third_party: true, base_feature_status: "enabled", @@ -388,12 +396,15 @@ { name: "AISummarizationAPIForWorkers", public: true, - status: "experimental", }, { name: "AIWriterAPI", - public: true, - status: "experimental", + status: { + "Win": "experimental", + "Mac": "experimental", + "Linux": "experimental", + "default": "", + }, origin_trial_feature_name: "AIWriterAPI", origin_trial_allows_third_party: true, base_feature_status: "enabled", @@ -402,7 +413,6 @@ { name: "AIWriterAPIForWorkers", public: true, - status: "experimental", }, { name: "AllowContentInitiatedDataUrlNavigations", @@ -447,6 +457,13 @@ name: "AllowURNsInIframes", base_feature: "none", }, + { + // Kill switch for https://crbug.com/415834974 which changes anchor + // positioning adjustments to occur even in cases where there is no + // scrollable overflow. + name: "AnchorPositionAdjustmentWithoutOverflow", + status: "stable", + }, { name: "AndroidDownloadableFontsMatching", base_feature: "none", @@ -567,6 +584,12 @@ name: "AutoPictureInPictureVideoHeuristics", status: "experimental", }, + { // If the start and end positions are the same in MoveParagraph, + // there is no need to collapse the whitespace between them. + // https://crbug.com/406053617 + name: "AvoidNormalizingVisiblePositionsWhenStartEqualsEnd", + status: "stable", + }, // When enabled, clicking on canvas element will not update the selection. // See crbug.com/40130450. { @@ -597,6 +620,10 @@ base_feature_status: "enabled", copied_from_base_feature_if: "overridden", }, + { + name: "BackForwardCacheRestorationPerformanceEntry", + status: "experimental", + }, { name: "BackForwardCacheUpdateNotRestoredReasonsName", status: "stable", @@ -702,6 +729,7 @@ "AIWriterAPI", "LanguageDetectionAPI", "TranslationAPI", + "AIProofreadingAPI", ] }, { @@ -749,10 +777,9 @@ status: "test", }, { - // https://github.com/WICG/canvas-place-element/blob/main/README.md - name: "CanvasElementDrawImage", - status: "experimental", - implied_by: ["CanvasPlaceElement"], + // https://github.com/WICG/html-in-canvas/blob/main/README.md + name: "CanvasDrawElement", + status: "test", }, { name: "CanvasFloatingPoint", @@ -777,11 +804,6 @@ browser_process_read_write_access: true, base_feature: "none", }, - { - // https://github.com/Igalia/explainers/blob/main/canvas-formatted-text/html-in-canvas.md - name: "CanvasPlaceElement", - status: "experimental", - }, { // https://chromestatus.com/feature/5066778773028864 name: "CanvasTextLang", @@ -861,6 +883,16 @@ name: "CheckVisibilityExtraProperties", status: "stable", }, + // This flag shifts the timing of clearing the popover invoker so that it + // happens after the `beforetoggle` event is fired. This is something of a + // bug fix: see the spec discussion at + // https://github.com/whatwg/html/issues/11246#issuecomment-2860876897. + // This is enabled by default, and is a kill switch. It shipped in M138, + // and can be removed in M140. + { + name: "ClearPopoverInvokerAfterBeforeToggle", + status: "stable", + }, // crbug.com/40851596: Send click to the capture pointer target instead of // the common ancestor of pointerdown and pointerup targets. { @@ -901,6 +933,18 @@ name: "ClipboardItemWithDOMStringSupport", status: "stable", }, + { + // Enables the ability to reset the clipboard snapshot when clipboard write + // operations are performed. This feature ensures that stale clipboard data + // is cleared and a fresh snapshot is created when necessary. + // See crbug.com/388081043 + name: "ClipboardSnapshotResetOnWrite", + status: "stable", + }, + { + name: "ClipPathNestedRasterOptimization", + status: "stable", + }, { // Avoid queuing a task to fire a selectionchange event when there is already a task scheduled // to do that for the target according to the new spec: @@ -975,6 +1019,13 @@ "default": "stable", } }, + { + name: "ComputePressureOwnContributionEstimate", + status: { + "Android": "", + "default": "experimental", + } + }, { name: "ConsiderFullChildNodeContentForListify", status: "stable", @@ -1068,7 +1119,12 @@ { // Enables alignment properties for block and inline out-of-flow elements. name: "CSSAlignBlockAndInlineOutOfFlows", - status: "test", + status: "stable", + }, + { + // Allows using counter() and counters() in alt text (after / in content property). + name: "CSSAltCounter", + status: "experimental", }, { // Remember the scroll offset of the default anchor when initially @@ -1092,11 +1148,6 @@ name: "CSSAnchorScope", status: "stable", }, - { - // Support anchor-size() values in inset and margin properties. - name: "CSSAnchorSizeInsetsMargins", - status: "stable", - }, { // Whether values are allowed as counter style name: "CSSAtRuleCounterStyleImageSymbols", @@ -1129,12 +1180,28 @@ name: "CSSCaretAnimation", status: "experimental", }, + { + // Need a feature entry + name: "CSSCaretShape", + status: "test", + }, { // Support case-sensitive attribute selector modifier // https://drafts.csswg.org/selectors-4/#attribute-case name: "CSSCaseSensitiveSelector", status: "test", }, + { + // In the cases where it is impossible or impractical to determine the + // measure of the “0” glyph, it must be assumed to be 0.5em wide by 1em + // tall. Thus, the ch unit falls back to 0.5em in the general case, and to + // 1em when it would be typeset upright (i.e. writing-mode is vertical-rl or + // vertical-lr and text-orientation is upright). + // https://drafts.csswg.org/css-values-4/#ch + // See crbug.com/416145497 for more details. + name: "CSSChUnitSpecCompliantFallback", + status: "stable", + }, { name: "CSSColorContrast", status: "experimental", @@ -1153,6 +1220,11 @@ name: "CSSContainerProgressNotation", status: "experimental", }, + { + // https://github.com/w3c/csswg-drafts/issues/8376#issuecomment-2751161553 + name: "CSSContainerStyleQueriesRange", + status: "test", + }, { // https://drafts.csswg.org/css-borders-4/#corner-shaping name: "CSSCornerShape", @@ -1164,11 +1236,6 @@ name: "CSSCrossFade", status: "experimental", }, - { - // crbug.com/392927981 - name: "CssDecoratingBoxPseudoFix", - status: "stable", - }, { name: "CSSDynamicRangeLimit", status: "stable", @@ -1177,12 +1244,21 @@ // Include custom properties in CSSComputedStyleDeclaration::item/length. // https://crbug.com/949807 name: "CSSEnumeratedCustomProperties", - status: "test", + status: "stable", }, { name: "CSSExponentialFunctions", status: "stable", }, + { + name: "CSSFallbackContainerQueries", + status: "experimental", + }, + { + // crbug.com/417306102 + name: "CssFitWidthText", + status: "test", + }, { name: "CSSFontSizeAdjust", status: "stable", @@ -1203,6 +1279,11 @@ name: "CSSHexAlphaColor", status: "stable", }, + { + // // https://drafts.csswg.org/css-values-5/#ident + name: "CSSIdentFunction", + status: "test", + }, { // Support making elements inert through the interactivity property. name: "CSSInert", @@ -1246,10 +1327,6 @@ name: "CSSLineClampLineBreakingEllipsis", depends_on: ["CSSLineClamp"], }, - { - name: "CSSLogicalOverflow", - status: "stable", - }, { name: "CSSMarkerNestedPseudoElement", status: "stable", @@ -1288,13 +1365,13 @@ }, { name: "CSSPreferredTextScale", - status: "experimental", + status: "stable", }, // https://drafts.csswg.org/css-values-5/#progress // progress() { name: "CSSProgressNotation", - status: "experimental", + status: "stable", }, { // For ::column pseudo element for fragment styling. @@ -1352,26 +1429,11 @@ status: "stable", depends_on: ["CSSReadingFlow"], }, - { - // https://drafts.csswg.org/css-color-5/#relative-colors - name: "CSSRelativeColor", - status: "stable", - }, { // crbug.com/359616070 name: "CSSRelativeColorLateResolveAlways", status: "stable", }, - { - // crbug.com/365818844 - name: "CSSRelativeColorPreserveNone", - status: "stable", - }, - { - // crbug.com/325309578 - name: "CSSRelativeColorSupportsCurrentcolor", - status: "stable", - }, { // Non-standard 'auto' keyword for the CSS resize property. Used for // selectively enable resize corner for textarea via UA stylesheet, but @@ -1393,8 +1455,8 @@ status: "experimental", }, { - name: "CSSScrollableContainerQueries", - status: "stable", + name: "CSSScrollDirectionContainerQueries", + status: "test", }, { // https://drafts.csswg.org/css-scroll-snap-2#scroll-initial-target @@ -1417,6 +1479,11 @@ name: "CSSScrollSnapChangingEvent", status: "stable", }, + { + // https://drafts.csswg.org/css-scroll-snap-2/#snapevent-interface + name: "CSSScrollSnapEventConstructorExposed", + status: "experimental", + }, { // https://drafts.csswg.org/css-scroll-snap-2/#snap-events name: "CSSScrollSnapEvents", @@ -1428,12 +1495,6 @@ name: "CSSScrollStart", status: "test", }, - { - // Flag for supporting scroll-state() and container-type: scroll-state - // Implied by supporting at least one of the scroll-state query features. - name: "CSSScrollStateContainerQueries", - implied_by: ["CSSStickyContainerQueries", "CSSSnapContainerQueries", "CSSScrollableContainerQueries"], - }, { name: "CSSSelectorFragmentAnchor", status: "experimental", @@ -1449,21 +1510,34 @@ status: "stable", depends_on: ["CSSShapeFunction", "CompositeClipPathAnimation"] }, + { + name: "CSSShapeFunctionDirectionAgnosticArc", + status: "test", + }, { name: "CSSShapeFunctionOffsetPath", status: "stable", }, + { + // Ignore cycles in unused var()/attr() fallbacks. + name: "CSSShortCircuitVarAttr", + status: "experimental", + // The CSSShortCircuitVarAttr branch assumes that fallbacks + // are type-agnostic. + depends_on: ["CSSTypeAgnosticVarFallback"], + }, { // sibling-index() and sibling-count() name: "CSSSiblingFunctions", - status: "experimental", + status: "stable", + }, + { + // Allow sibling-index() and sibling-count() in @container queries + name: "CSSSiblingFunctionsInContainerQueries", + status: "stable", }, { name: "CSSSignRelatedFunctions", - status: "experimental", - }, - { - name: "CSSSnapContainerQueries", status: "stable", }, { @@ -1471,10 +1545,6 @@ name: "CSSSteppedValueFunctions", status: "stable", }, - { - name: "CSSStickyContainerQueries", - status: "stable", - }, { name: "CSSSupportsAtRuleFunction", status: "experimental", @@ -1486,7 +1556,12 @@ { // Allows the CSS "accent-color" property to support the system accent color as the default option. name: "CSSSystemAccentColor", - status: "experimental", + status: { + "ChromeOS": "stable", + "Mac": "stable", + "Win": "stable", + "default": "experimental", + }, }, { // crbug.com/1463890: CSS `text-autospace` property @@ -1530,12 +1605,6 @@ // https://chromestatus.com/feature/4850737974345728 name: "CSSViewTransitionAutoName", status: "experimental", - depends_on: ["CSSViewTransitionMatchElement"], - }, - { - // https://chromestatus.com/feature/5098745710247936 - name: "CSSViewTransitionMatchElement", - status: "stable" }, { // Adds the appearance:base-select CSS value which makes tags before inserting - // tags to match the old parser behavior. This is shipping with the - // initial release of SelectParserRelaxation in order to de-risk it, but - // we could consider disabling this in future releases of we want to - // support authors who want to put s in end tag before inserting + // when parsing inside of a inside + // + // inside and the
. + // For now, this flag also makes close is put directly within an . + name: "InputInSelect", + status: "experimental", + depends_on: ["SelectParserRelaxation"], + }, { name: "InputMultipleFieldsUI", // No plan to support complex UI for date/time INPUT types on Android and @@ -2629,6 +2752,7 @@ { // Improved support for debugging CSSNestedDeclarations. name: "InspectorGhostRules", + status: "stable", }, { name: "InstalledApp", @@ -2640,6 +2764,12 @@ name: "InstallOnDeviceSpeechRecognition", status: "experimental", }, + { + name: "IntegrityPolicyScript", + status: "stable", + base_feature: "none", + public: true, + }, { name: "InterestGroupsInSharedStorageWorklet", public: true, @@ -2671,6 +2801,9 @@ status: "experimental", origin_trial_feature_name: "JavaScriptCompileHintsPerFunctionMagic", }, + { + name: "JavaScriptSourcePhaseImports", + }, { name: "KeyboardAccessibleTooltip", status: "experimental", @@ -2706,7 +2839,13 @@ }, { name: "LanguageDetectionAPI", - status: "experimental", + status: { + "Win": "stable", + "Mac": "stable", + "Linux": "stable", + "ChromeOS": "stable", + "default": "", + }, origin_trial_feature_name: "LanguageDetectionAPI", origin_trial_allows_third_party: true, base_feature_status: "enabled", @@ -2715,20 +2854,28 @@ { name: "LanguageDetectionAPIForWorkers", public: true, - status: "experimental", + }, + { + // LayoutBox::PhysicalLocation() to return a truly visual offset - the + // offset of its first fragment relatively to the first fragment of its + // containing block, also when block-fragmented (used to be in the + // "stitched" flow-thread coordinate space). + name: "LayoutBoxVisualLocation", + status: "stable", }, { name: "LayoutFlexNewRowAlgorithm", status: "stable", }, + { + name: "LayoutFlexNewStretch", + status: "stable", + }, { name: "LayoutIgnoreMarginsForSticky", }, { - name: "LayoutImageRevalidationCheckForSvgImages", - }, - { - name: "LayoutJustifySelfForBlocks", + name: "LayoutIsAnonymousBlockFix", status: "stable", }, { @@ -2741,11 +2888,10 @@ base_feature: "LayoutNGShapeCache", }, { - name: "LayoutStretch", - status: "experimental", + name: "LayoutReplacedReturnExplicitDefaultNaturalSize", }, { - name: "LayoutWebkitBoxTreeFix", + name: "LayoutStretch", status: "stable", }, { @@ -2786,12 +2932,13 @@ name: "ListOwnerMustHaveCSSBox", status: "stable", }, - // Enables Local Network Access Permission Policy. Does nothing without - // also enabling network::features::kLocalNetworkAccessChecks. See - // https://crbug.com/394009026. { name: "LocalNetworkAccessPermissionPolicy", - status: "experimental", + base_feature: "none", + // No status because this blink runtime feature doesn't work by itself. + // It's controlled by network::features::kLocalNetworkAccessChecks which + // needs to be enabled to make the whole feature work (see + // crbug.com/394009026). }, { name: "LockedMode", @@ -2828,6 +2975,10 @@ name: "LongTaskFromLongAnimationFrame", status: "test", }, + { + name: "MacCharacterFallbackCache", + status: "stable", + }, { name: "MachineLearningNeuralNetwork", // Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork. @@ -2947,7 +3098,7 @@ }, { name: "MediaSourceNewAbortAndDuration", - status: "experimental", + status: "stable", }, { name: "MediaStreamTrackTransfer", @@ -2963,6 +3114,10 @@ "default": "experimental", }, }, + { + name: "MenuElements", + status: "test", + }, { name: "MessagePortCloseEvent", status: "test", @@ -2980,6 +3135,11 @@ name: "MiddleClickAutoscroll", status: "test", }, + // Killswitch for crbug.com/40062462 fix. + { + name: "MixedContentAutoupgradesUseIsMixedContentRestrictedInFrame", + status: "stable", + }, { name: "MobileLayoutTheme", }, @@ -3440,6 +3600,16 @@ base_feature_status: "enabled", copied_from_base_feature_if: "overridden", }, + { + // Tracking bug for the implementation: crbug.com/352249547 + // This flag adds having the option to show an icon in the Permission + // element, if developers want to. + // The flag will enable us to land the feature over multiple CLs, and will + // be enabled after the feature has been fully implemented. + name: "PermissionElementIcon", + status: "test", + depends_on: ["PermissionElement"], + }, { name: "Permissions", public: true, @@ -3556,10 +3726,6 @@ name: "PreventUndoIfNotEditable", status: "stable" }, - { - name: "PrevOrNextCandidateIsEditingRootChild", - status: "stable", - }, { // Controls the aggregate error reporting feature, which allows for // contributions to be made conditional on error conditions that can be @@ -3613,6 +3779,12 @@ status: "test", base_feature: "none", }, + { + // Propagate overscroll-behavior from the root element rather than the + // body element. crbug.com/41453796 + name: "PropagateOverscrollBehaviorFromRoot", + status: "experimental" + }, // Protected memory varariant of the sample API for testing integration with // the Origin Trials Framework. This is used only in unit tests. // Do not change this flag to stable, as it exists @@ -3664,6 +3836,11 @@ status: "experimental", base_feature: "none", }, + { + // ChromeStatus: https://chromestatus.com/feature/6194847180128256 + name: "QuotaExceededErrorUpdate", + status: "stable", + }, { // crbug.com/323953913 // Fix looking for next radio button in the form's scope. This was added @@ -3770,10 +3947,10 @@ name: "RemoveDataUrlInSvgUse", status: "stable", }, - // Remove a node if it's selected fully even though it has children. See - // https://crbug.com/331074432 { - name: "RemoveNodeHavingChildrenIfFullySelected", + // This feature was shipped in M138, so this flag can be removed in M140. + // See https://issues.chromium.org/issues/415911524. + name: "RemoveNodeDetermineNodeFullySelected", status: "stable", }, { @@ -3818,7 +3995,7 @@ // composited pixel alignment issues. See // https://crbug.com/40084005 name: "RenderSurfaceFor2DScaleTransform", - status: "experimental", + status: "stable", }, { name: "ReportEventTimingAtVisibilityChange", @@ -3858,6 +4035,14 @@ name: "RestrictGetBoundingClientRectForHiddenSVGElements", status: "stable", }, + { + name: "RestrictOwnAudio", + status: "experimental", + }, + { + name: "RestrictTabFocusForHiddenSVGElements", + status: "stable", + }, { // New behavior when line breaker rewinds floats. crbug.com/1499290 name: "RewindFloats", @@ -3883,10 +4068,6 @@ name: "RTCDataChannelPriority", status: "experimental", }, - { - name: "RTCEncodedAudioFrameAbsCaptureTime", - status: "experimental", - }, { name: "RTCEncodedFrameSetMetadata", status: "experimental", @@ -3973,12 +4154,7 @@ status: "test", }, { - name: "SchedulerYieldCrossOriginFix", - status: "stable", - }, - { - // See crbug.com/41321247 - name: "ScheduleSelectionChangeOnBackspace", + name: "SchedulerYieldDisallowCrossFrameInheritance", status: "stable", }, { @@ -4047,6 +4223,10 @@ name: "ScrollEndEvents", status: "stable", }, + { + name: "ScrollIntoViewNearest", + status: "experimental" + }, // TODO(355460994): Remove after M129. // scroll into root frame didn't take scrollbar and borders into account, // while this is fixed, to avoid any web compat issues we have this killswitch. @@ -4101,6 +4281,7 @@ }, { name: "SecurePaymentConfirmationBrowserBoundKeys", + status: "experimental", }, { name: "SecurePaymentConfirmationDebug", @@ -4118,6 +4299,29 @@ status: "stable", base_feature: "none", }, + { + // Implements new UX for SPC including new output states, payment + // instrument details and payment entities logos. + name: "SecurePaymentConfirmationUxRefresh", + status: "test", + }, + { + // Implements improved accessibility mappings for having an + // inside of a in the a11y tree at + // the same place that its at in the DOM tree, but automatically setting + // up a controls relationship to the menu list popup. + name: "SelectAccessibilityNestedInput", + status: "test", + depends_on: ["CustomizableSelect"], + }, + { + // Implements improved accessibility mappings for having an + // inside of a in the + // accessibility tree to be a sibling of the menu list popup. + name: "SelectAccessibilityReparentInput", + status: "test", + depends_on: ["CustomizableSelect"], + }, { // SelectAudioOutput API // https://chromestatus.com/feature/5164535504437248 @@ -4150,6 +4354,11 @@ name: "SelectionAcrossShadowDOM", status: "stable", }, + { + // See https://crbug.com/417823377 + name: "SelectionDeleteFromDocumentUaShadowFix", + status: "stable", + }, { // See https://crbug.com/395544401 name: "SelectionUpdateToInitialSelectionInListify", @@ -4227,6 +4436,12 @@ status: {"Android": "test", "default": "stable"}, base_feature: "WebSerialAPI", }, + { + // Kill-switch for crbug.com/40791925. + // Added in M138, and it can be removed in M140. + name: "SerializeCdataAsTextInHTMLDocuments", + status: "stable", + }, { name: "SerializeViewTransitionStateInSPA", }, @@ -4341,6 +4556,11 @@ name: "SkipTouchEventFilter", status: "stable", }, + // Fix for crbug.com/41393366 + { + name: "SkipUnselectableContentInSerialization", + status: "stable", + }, { name: "SmartCard", status: {"Android": "", "default": "test"}, @@ -4364,10 +4584,15 @@ name: "SoftNavigationDetection", status: "stable", }, + { + name: "SoftNavigationDetectionAdvancedPaintAttribution", + status: "experimental", + depends_on: ["SoftNavigationDetection"], + }, { name: "SoftNavigationHeuristics", status: "experimental", - depends_on: ["NavigationId","SoftNavigationDetection"], + depends_on: ["NavigationId","SoftNavigationDetectionAdvancedPaintAttribution"], origin_trial_allows_third_party: true, origin_trial_feature_name: "SoftNavigationHeuristics", }, @@ -4393,33 +4618,16 @@ name: "SpeculationRulesPointerHoverHeuristics", base_feature_status: "enabled", }, - // This feature exists solely to be the target of implied_by for features - // that are part of this trial but which may also be enabled another way. - // Otherwise, runtime-enabled features can be added to the origin trial - // with the following: - // origin_trial_feature_name: "SpeculationRulesPrefetchFuture", - // origin_trial_allows_third_party: true, - { - name: "SpeculationRulesPrefetchFuture", - base_feature: "none", - origin_trial_feature_name: "SpeculationRulesPrefetchFuture", - origin_trial_allows_third_party: true, - }, { name: "SpeculationRulesPrefetchWithSubresources", }, - { - name: "SpeculationRulesTag", - status: "stable", - }, { // Enables to run prerendering for new tabs (e.g., target="_blank"). // See https://crbug.com/1350676. name: "SpeculationRulesTargetHint", origin_trial_feature_name: "SpeculationRulesTargetHint", base_feature: "Prerender2InNewTab", - status: "experimental", - base_feature_status: "enabled", + status: "stable", copied_from_base_feature_if: "overridden", }, { @@ -4503,10 +4711,6 @@ name: "SvgExternalResources", status: "stable", }, - { - name: "SvgFilterUserSpaceViewportForNonSvg", - status: "stable", - }, { name: "SvgInlineRootPixelSnappingScaleAdjustment", status: "test", @@ -4597,6 +4801,23 @@ name: "TestFeatureStable", status: "stable", }, + { + // crbug.com/414858401 + name: "TextareaLineEndingsAsBr", + status: "stable", + depends_on: ["EditingFastRichReplace"], + }, + { + // crbug.com/414858401 + name: "TextareaMultipleIfcs", + status: "stable", + depends_on: ["FastSelectionSync", "TextareaLineEndingsAsBr"], + }, + { + // crbug.com/341564372 + name: "TextareaSplitText", + status: "experimental", + }, { // killswitch for fix in M137 name: "TextareaStableResizing", @@ -4658,6 +4879,15 @@ name: "TimeZoneChangeEvent", status: "experimental", }, + { + // Adds an "source" attribute to ToggleEvent which is set to the button + // that invoked the element which the toggle event was fired on, if + // appropriate. + // https://issues.chromium.org/issues/408018828 + // https://github.com/whatwg/html/issues/9111 + name: "ToggleEventSource", + status: "experimental", + }, { name: "TopicsAPI", base_feature: "none", @@ -4703,6 +4933,14 @@ base_feature: "none", public: true, }, + // This feature enables drag and drop using touch input devices. Replaces + // the old "--enable-touch-drag-drop" and "--disable-touch-drag-drop" + // switches. + { + name: "TouchDragAndDrop", + base_feature: "none", + public: true, + }, // This feature makes touch dragging to occur at the short-press gesture, // which occurs right before the long-press gesture. This feature assumes // that TouchDragAndContextMenu is enabled. @@ -4744,22 +4982,20 @@ }, { name: "TranslationAPI", - status: "experimental", + status: { + "Win": "stable", + "Mac": "stable", + "Linux": "stable", + "default": "", + }, origin_trial_feature_name: "TranslationAPI", origin_trial_allows_third_party: true, base_feature_status: "enabled", copied_from_base_feature_if: "overridden", - implied_by: ["TranslationAPIV1"], }, { name: "TranslationAPIForWorkers", public: true, - status: "experimental", - }, - { - name: "TranslationAPIV1", - status: "experimental", - copied_from_base_feature_if: "overridden", }, { // Ensures symbols are treated as word boundaries during traversal. @@ -4908,7 +5144,10 @@ }, { name: "VideoFrameMetadataBackgroundBlur", - public: true, + status: "experimental", + }, + { + name: "VideoFrameMetadataRtpTimestamp", status: "experimental", }, { @@ -4934,31 +5173,12 @@ }, { name: "ViewportSegments", - status: "experimental", - public: true, - base_feature_status: "enabled", - copied_from_base_feature_if: "overridden", - origin_trial_feature_name: "FoldableAPIs", - }, - { - name: "ViewTransitionDisableSnapBrowserControlsOnHidden", status: "stable", }, { name: "ViewTransitionLongCallbackTimeoutForTesting", status: "test", }, - { - // If enabled, ViewTransition API is supported for navigations including - // cross-document transitions. - // See https://drafts.csswg.org/css-view-transitions-1/. - name: "ViewTransitionOnNavigation", - status: "stable", - }, - { - name: "ViewTransitionOnNavigationForIframes", - status: "stable", - }, { name: "ViewTransitionUpdateLifecycleBeforeReady", status: "stable", @@ -5106,7 +5326,7 @@ // Prototyping https://github.com/w3c/webauthn/issues/2228 { name: "WebAuthenticationImmediateGet", - status: "experimental", + origin_trial_feature_name: "WebAuthenticationImmediateGet", base_feature: "none", public: true, }, @@ -5141,7 +5361,7 @@ name: "WebAuthenticationSupplementalPubKeys", status: "experimental", }, - // WebBluetooth is enabled by default on Android, ChromeOS, macOS and + // WebBluetooth is enabled by default on Android, ChromeOS, iOS, macOS and // Windows. { name: "WebBluetooth", @@ -5149,6 +5369,7 @@ status: { "Android": "stable", "ChromeOS": "stable", + "iOS": "stable", "Mac": "stable", "Win": "stable", "default": "experimental", @@ -5181,7 +5402,7 @@ }, { name: "WebCodecsOrientation", - status: "experimental", + status: "stable", }, { name: "WebCodecsVideoEncoderBuffers", @@ -5221,10 +5442,27 @@ base_feature: "none", public: true, }, + { + // Switch WebGL to use an experimental implementation where WebGL calls + // are translated in Blink, via ANGLE, to WebGPU calls. Note that this + // is not marked as "experimental" because it is not an incremental + // addition like other experimental features but a code switch, so we + // don't want to enable it when testing all "experimental Web platform + // features". + name: "WebGLOnWebGPU", + }, { name: "WebGPUAdapterInfoIsFallbackAdapter", status: "stable", }, + { + // Launch feature flag for WebGPU Compatibility Mode + // https://chromestatus.com/feature/6436406437871616 + name: "WebGPUCompatibilityMode", + status: "experimental", + // Also enabled as part of all experimental WebGPU features. + implied_by: ["WebGPUExperimentalFeatures"], + }, { name: "WebGPUCopyBufferToBufferOverload", status: "stable", @@ -5248,8 +5486,9 @@ // https://chromestatus.com/feature/5154347661656064 name: "WebGPUFeatureLevel", status: "experimental", - // Also enabled as part of all experimental WebGPU features. - implied_by: ["WebGPUExperimentalFeatures"], + // Also enabled as part of all experimental WebGPU features and + // as part of Compatibility Mode. + implied_by: ["WebGPUExperimentalFeatures", "WebGPUCompatibilityMode"], }, { name: "WebHID", @@ -5316,12 +5555,14 @@ name: "WebPrinting", status: {"Android": "", "default": "test"}, }, - // WebShare is enabled by default on Android. + // WebShare is enabled by default on Android (non-WebView), Win, ChromeOS, and Mac. + // This is done in chrome/renderer/chrome_content_renderer_client.cc to prevent + // making the API available to Linux and WebView. Ideally we would set the status + // below to "stable" once we can do so without significant test expectation duplication. { name: "WebShare", public: true, status: "test", - base_feature: "none", }, { name: "WebSocketStream", @@ -5494,6 +5735,6 @@ // If enabled, the `getDisplayMedia()` family of APIs will ask for NV12 // frames, which should trigger a zero-copy path in the tab capture code. name: "ZeroCopyTabCapture", - }, + } ], } diff --git a/tools/under-control/src/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/tools/under-control/src/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index 2fa6c563..32cafa31 100755 --- a/tools/under-control/src/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/tools/under-control/src/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt @@ -1292,6 +1292,11 @@ interface CountQueuingStrategy getter highWaterMark getter size method constructor +interface CreateMonitor : EventTarget + attribute @@toStringTag + getter ondownloadprogress + method constructor + setter ondownloadprogress interface Credential attribute @@toStringTag getter id @@ -5229,6 +5234,14 @@ interface InputEvent : UIEvent getter isComposing method constructor method getTargetRanges +interface IntegrityViolationReportBody : ReportBody + attribute @@toStringTag + getter blockedURL + getter destination + getter documentURL + getter reportOnly + method constructor + method toJSON interface IntersectionObserver attribute @@toStringTag getter delay @@ -5301,6 +5314,16 @@ interface KeyframeEffect : AnimationEffect setter composite setter pseudoElement setter target +interface LanguageDetector + static method availability + static method create + attribute @@toStringTag + getter expectedInputLanguages + getter inputQuota + method constructor + method destroy + method detect + method measureInputUsage interface LargestContentfulPaint : PerformanceEntry attribute @@toStringTag getter element @@ -7028,6 +7051,11 @@ interface PushSubscriptionOptions getter applicationServerKey getter userVisibleOnly method constructor +interface QuotaExceededError : DOMException + attribute @@toStringTag + getter quota + getter requested + method constructor interface RTCCertificate attribute @@toStringTag getter expires @@ -7439,7 +7467,6 @@ interface Request getter referrer getter referrerPolicy getter signal - getter targetAddressSpace getter url method arrayBuffer method blob @@ -9138,6 +9165,23 @@ interface SubtleCrypto method unwrapKey method verify method wrapKey +interface Summarizer + static method availability + static method create + attribute @@toStringTag + getter expectedContextLanguages + getter expectedInputLanguages + getter format + getter inputQuota + getter length + getter outputLanguage + getter sharedContext + getter type + method constructor + method destroy + method measureInputUsage + method summarize + method summarizeStreaming interface SuppressedError : Error attribute message attribute name @@ -9352,6 +9396,18 @@ interface TransitionEvent : Event getter propertyName getter pseudoElement method constructor +interface Translator + static method availability + static method create + attribute @@toStringTag + getter inputQuota + getter sourceLanguage + getter targetLanguage + method constructor + method destroy + method measureInputUsage + method translate + method translateStreaming interface TreeWalker attribute @@toStringTag getter currentNode @@ -9658,7 +9714,9 @@ interface VideoFrame getter displayHeight getter displayWidth getter duration + getter flip getter format + getter rotation getter timestamp getter visibleRect method allocationSize @@ -9700,6 +9758,10 @@ interface ViewTransitionTypeSet method has method keys method values +interface Viewport + attribute @@toStringTag + getter segments + method constructor interface VirtualKeyboard : EventTarget attribute @@toStringTag getter boundingRect @@ -12130,6 +12192,7 @@ namespace console getter toolbar getter top getter trustedTypes + getter viewport getter visualViewport getter window method NodeFilter @@ -12344,6 +12407,7 @@ namespace console setter status setter statusbar setter toolbar + setter viewport setter visualViewport PASS successfullyParsed is true